@aerokit/sdk 12.58.0 → 12.60.0
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/cjs/db/database.js
CHANGED
|
@@ -68,6 +68,7 @@ var DatabaseSystem = /* @__PURE__ */ ((DatabaseSystem2) => {
|
|
|
68
68
|
DatabaseSystem2[DatabaseSystem2["MYSQL"] = 7] = "MYSQL";
|
|
69
69
|
DatabaseSystem2[DatabaseSystem2["MONGODB"] = 8] = "MONGODB";
|
|
70
70
|
DatabaseSystem2[DatabaseSystem2["SYBASE"] = 9] = "SYBASE";
|
|
71
|
+
DatabaseSystem2[DatabaseSystem2["MSSQL"] = 10] = "MSSQL";
|
|
71
72
|
return DatabaseSystem2;
|
|
72
73
|
})(DatabaseSystem || {});
|
|
73
74
|
function isHanaDatabase(connection) {
|
|
@@ -786,6 +787,8 @@ class Connection {
|
|
|
786
787
|
return 5 /* HANA */;
|
|
787
788
|
case "SNOWFLAKE":
|
|
788
789
|
return 6 /* SNOWFLAKE */;
|
|
790
|
+
case "MSSQL":
|
|
791
|
+
return 10 /* MSSQL */;
|
|
789
792
|
case "MYSQL":
|
|
790
793
|
return 7 /* MYSQL */;
|
|
791
794
|
case "MONGODB":
|
|
@@ -900,4 +903,4 @@ if (typeof module !== "undefined") {
|
|
|
900
903
|
SQLTypes
|
|
901
904
|
};
|
|
902
905
|
}
|
|
903
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RiL2RhdGFiYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEFQSSBEYXRhYmFzZVxuICpcbiAqL1xuaW1wb3J0IHsgQnl0ZXMgfSBmcm9tIFwiQGFlcm9raXQvc2RrL2lvL2J5dGVzXCI7XG5pbXBvcnQgeyBJbnB1dFN0cmVhbSB9IGZyb20gXCJAYWVyb2tpdC9zZGsvaW8vc3RyZWFtc1wiO1xuXG5jb25zdCBEYXRhYmFzZUZhY2FkZSA9IEphdmEudHlwZShcIm9yZy5lY2xpcHNlLmRpcmlnaWJsZS5jb21wb25lbnRzLmFwaS5kYi5EYXRhYmFzZUZhY2FkZVwiKTtcbmNvbnN0IEpTcWxEYXRlID0gSmF2YS50eXBlKFwiamF2YS5zcWwuRGF0ZVwiKTtcbmNvbnN0IEpTcWxUaW1lc3RhbXAgPSBKYXZhLnR5cGUoXCJqYXZhLnNxbC5UaW1lc3RhbXBcIik7XG5jb25zdCBKU3FsVGltZSA9IEphdmEudHlwZShcImphdmEuc3FsLlRpbWVcIik7XG5jb25zdCBTdHJpbmdXcml0ZXIgPSBKYXZhLnR5cGUoXCJqYXZhLmlvLlN0cmluZ1dyaXRlclwiKTtcbmNvbnN0IFdyaXRlck91dHB1dFN0cmVhbSA9IEphdmEudHlwZShcIm9yZy5hcGFjaGUuY29tbW9ucy5pby5vdXRwdXQuV3JpdGVyT3V0cHV0U3RyZWFtXCIpO1xuY29uc3QgU3RhbmRhcmRDaGFyc2V0cyA9IEphdmEudHlwZShcImphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0c1wiKTtcblxuLyoqXG4gKiBNYXBwaW5nIG9mIFNRTCB0eXBlIG5hbWVzIHRvIHRoZWlyIGphdmEuc3FsLlR5cGVzIGludGVnZXIgY29uc3RhbnRzLlxuICovXG5leHBvcnQgY29uc3QgU1FMVHlwZXMgPSBPYmplY3QuZnJlZXplKHtcblx0XCJCT09MRUFOXCI6IDE2LFxuXHRcIkRBVEVcIjogOTEsXG5cdFwiVElNRVwiOiA5Mixcblx0XCJUSU1FU1RBTVBcIjogOTMsXG5cdFwiRE9VQkxFXCI6IDgsXG5cdFwiRkxPQVRcIjogNixcblx0XCJSRUFMXCI6IDcsXG5cdFwiVElOWUlOVFwiOiAtNixcblx0XCJTTUFMTElOVFwiOiA1LFxuXHRcIklOVEVHRVJcIjogNCxcblx0XCJCSUdJTlRcIjogLTUsXG5cdFwiVkFSQ0hBUlwiOiAxMixcblx0XCJDSEFSXCI6IDEsXG5cdFwiQ0xPQlwiOiAyMDA1LFxuXHRcIkJMT0JcIjogMjAwNCxcblx0XCJWQVJCSU5BUllcIjogLTMsXG5cdFwiREVDSU1BTFwiOiAzLFxuXHRcIkFSUkFZXCI6IDIwMDMsXG5cdFwiTlZBUkNIQVJcIjogLTksXG5cdFwiTkNMT0JcIjogMjAxMSxcblx0XCJCSVRcIjogLTdcbn0pO1xuXG5leHBvcnQgZW51bSBEYXRhYmFzZVN5c3RlbSB7XG5cdFVOS05PV04sIERFUkJZLCBQT1NUR1JFU1FMLCBIMiwgTUFSSUFEQiwgSEFOQSwgU05PV0ZMQUtFLCBNWVNRTCwgTU9OR09EQiwgU1lCQVNFXG59XG5cbi8vIC0tLSBNZXRhZGF0YSBJbnRlcmZhY2VzIC0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlLiAqL1xuXHRyZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cdC8qKiBUaGUgcmVtYXJrcy4gKi9cblx0cmVhZG9ubHkgcmVtYXJrczogc3RyaW5nO1xuXHQvKiogVGhlIGNvbHVtbnMuICovXG5cdHJlYWRvbmx5IGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW107XG5cdC8qKiBUaGUgaW5kaWNlcy4gKi9cblx0cmVhZG9ubHkgaW5kaWNlczogSW5kZXhNZXRhZGF0YVtdO1xuXHQvKiogVGhlIGluZGljZXMuICovXG5cdHJlYWRvbmx5IGZvcmVpZ25LZXlzOiBGb3JlaWduS2V5TWV0YWRhdGFbXTtcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlLiAqL1xuXHRyZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cdC8qKiBUaGUgc2l6ZS4gKi9cblx0cmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuXHQvKiogVGhlIG51bGxhYmxlLiAqL1xuXHRyZWFkb25seSBudWxsYWJsZTogYm9vbGVhbjtcblx0LyoqIFRoZSBrZXkuICovXG5cdHJlYWRvbmx5IGtleTogYm9vbGVhbjtcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG5cdC8qKiBUaGUgc2NhbGUuICovXG5cdHJlYWRvbmx5IHNjYWxlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhNZXRhZGF0YSB7XG5cdC8qKiBUaGUgbmFtZS4gKi9cblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHQvKiogVGhlIHR5cGUuICovXG5cdHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblx0LyoqIFRoZSBjb2x1bW4uICovXG5cdHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXHQvKiogVGhlIG5vbiB1bmlxdWUuICovXG5cdHJlYWRvbmx5IG5vblVuaXF1ZTogYm9vbGVhbjtcblx0LyoqIFRoZSBxdWFsaWZpZXIuICovXG5cdHJlYWRvbmx5IHF1YWxpZmllcjogc3RyaW5nO1xuXHQvKiogVGhlIG9yZGluYWwgcG9zaXRpb24uICovXG5cdHJlYWRvbmx5IG9yZGluYWxQb3NpdGlvbjogc3RyaW5nO1xuXHQvKiogVGhlIHNvcnQgb3JkZXIuICovXG5cdHJlYWRvbmx5IHNvcnRPcmRlcjogc3RyaW5nO1xuXHQvKiogVGhlIGNhcmRpbmFsaXR5LiAqL1xuXHRyZWFkb25seSBjYXJkaW5hbGl0eTogbnVtYmVyO1xuXHQvKiogVGhlIHBhZ2VzLiAqL1xuXHRyZWFkb25seSBwYWdlczogbnVtYmVyO1xuXHQvKiogVGhlIGZpbHRlciBjb25kaXRpb24uICovXG5cdHJlYWRvbmx5IGZpbHRlckNvbmRpdGlvbjogc3RyaW5nO1xuXHQvKiogVGhlIGtpbmQuICovXG5cdHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JlaWduS2V5TWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG5cdC8qKiBUaGUgdGFibGVzLiAqL1xuXHRyZWFkb25seSB0YWJsZXM6IFRhYmxlTWV0YWRhdGFbXTtcblx0LyoqIFRoZSB2aWV3cy4gKi9cblx0cmVhZG9ubHkgdmlld3M6IFRhYmxlTWV0YWRhdGFbXTtcblx0LyoqIFRoZSBwcm9jZWR1cmVzLiAqL1xuXHRyZWFkb25seSBwcm9jZWR1cmVzOiBQcm9jZWR1cmVNZXRhZGF0YVtdO1xuXHQvKiogVGhlIGZ1bmN0aW9ucy4gKi9cblx0cmVhZG9ubHkgZnVuY3Rpb25zOiBGdW5jdGlvbk1ldGFkYXRhW107XG5cdC8qKiBUaGUgZnVuY3Rpb25zLiAqL1xuXHRyZWFkb25seSBzZXF1ZW5jZXM6IFNlcXVlbmNlTWV0YWRhdGFbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZWR1cmVNZXRhZGF0YSB7XG5cdC8qKiBUaGUgbmFtZS4gKi9cblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHQvKiogVGhlIHR5cGUuICovXG5cdHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblx0LyoqIFRoZSByZW1hcmtzLiAqL1xuXHRyZWFkb25seSByZW1hcmtzOiBzdHJpbmc7XG5cdC8qKiBUaGUgY29sdW1ucy4gKi9cblx0cmVhZG9ubHkgY29sdW1uczogUGFyYW1ldGVyQ29sdW1uTWV0YWRhdGFbXTtcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25NZXRhZGF0YSB7XG5cdC8qKiBUaGUgbmFtZS4gKi9cblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHQvKiogVGhlIHR5cGUuICovXG5cdHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblx0LyoqIFRoZSByZW1hcmtzLiAqL1xuXHRyZWFkb25seSByZW1hcmtzOiBzdHJpbmc7XG5cdC8qKiBUaGUgY29sdW1ucy4gKi9cblx0cmVhZG9ubHkgY29sdW1uczogUGFyYW1ldGVyQ29sdW1uTWV0YWRhdGFbXTtcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyQ29sdW1uTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBudW1iZXI7XG5cdC8qKiBUaGUgdHlwZS4gKi9cblx0cmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXHQvKiogVGhlIHByZWNpc2lvbi4gKi9cblx0cmVhZG9ubHkgcHJlY2lzaW9uOiBudW1iZXI7XG5cdC8qKiBUaGUgbGVuZ3RoLiAqL1xuXHRyZWFkb25seSBsZW5ndGg6IG51bWJlcjtcblx0LyoqIFRoZSBzY2FsZS4gKi9cblx0cmVhZG9ubHkgc2NhbGU6IG51bWJlcjtcblx0LyoqIFRoZSByYWRpeC4gKi9cblx0cmVhZG9ubHkgcmFkaXg6IG51bWJlcjtcblx0LyoqIFRoZSBudWxsYWJsZS4gKi9cblx0cmVhZG9ubHkgbnVsbGFibGU6IGJvb2xlYW47XG5cdC8qKiBUaGUgcmVtYXJrcy4gKi9cblx0cmVhZG9ubHkgcmVtYXJrczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcXVlbmNlTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VNZXRhZGF0YSB7XG5cdHJlYWRvbmx5IGFsbFByb2NlZHVyZXNBcmVDYWxsYWJsZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgYWxsVGFibGVzQXJlU2VsZWN0YWJsZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgdXJsOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHVzZXJOYW1lOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGlzUmVhZE9ubHk6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG51bGxzQXJlU29ydGVkSGlnaDogYm9vbGVhbjtcblx0cmVhZG9ubHkgbnVsbHNBcmVTb3J0ZWRMb3c6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG51bGxzQXJlU29ydGVkQXRTdGFydDogYm9vbGVhbjtcblx0cmVhZG9ubHkgbnVsbHNBcmVTb3J0ZWRBdEVuZDogYm9vbGVhbjtcblx0cmVhZG9ubHkgZGF0YWJhc2VQcm9kdWN0TmFtZTogc3RyaW5nO1xuXHRyZWFkb25seSBkYXRhYmFzZVByb2R1Y3RWZXJzaW9uOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGRyaXZlck5hbWU6IHN0cmluZztcblx0cmVhZG9ubHkgZHJpdmVyVmVyc2lvbjogc3RyaW5nO1xuXHRyZWFkb25seSBkcml2ZXJNYWpvclZlcnNpb246IG51bWJlcjtcblx0cmVhZG9ubHkgZHJpdmVyTWlub3JWZXJzaW9uOiBudW1iZXI7XG5cdHJlYWRvbmx5IHVzZXNMb2NhbEZpbGVzOiBib29sZWFuO1xuXHRyZWFkb25seSB1c2VzTG9jYWxGaWxlUGVyVGFibGU6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTWl4ZWRDYXNlSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN0b3Jlc1VwcGVyQ2FzZUlkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdG9yZXNMb3dlckNhc2VJZGVudGlmaWVyczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3RvcmVzTWl4ZWRDYXNlSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTWl4ZWRDYXNlUXVvdGVkSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN0b3Jlc1VwcGVyQ2FzZVF1b3RlZElkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdG9yZXNMb3dlckNhc2VRdW90ZWRJZGVudGlmaWVyczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3RvcmVzTWl4ZWRDYXNlUXVvdGVkSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGlkZW50aWZpZXJRdW90ZVN0cmluZzogc3RyaW5nO1xuXHRyZWFkb25seSBzcWxLZXl3b3Jkczogc3RyaW5nO1xuXHRyZWFkb25seSBudW1lcmljRnVuY3Rpb25zOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHN0cmluZ0Z1bmN0aW9uczogc3RyaW5nO1xuXHRyZWFkb25seSBzeXN0ZW1GdW5jdGlvbnM6IHN0cmluZztcblx0cmVhZG9ubHkgdGltZURhdGVGdW5jdGlvbnM6IHN0cmluZztcblx0cmVhZG9ubHkgc2VhcmNoU3RyaW5nRXNjYXBlOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGV4dHJhTmFtZUNoYXJhY3RlcnM6IHN0cmluZztcblx0cmVhZG9ubHkgc3VwcG9ydHNBbHRlclRhYmxlV2l0aEFkZENvbHVtbjogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNBbHRlclRhYmxlV2l0aERyb3BDb2x1bW46IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ29sdW1uQWxpYXNpbmc6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG51bGxQbHVzTm9uTnVsbElzTnVsbDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDb252ZXJ0OiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1RhYmxlQ29ycmVsYXRpb25OYW1lczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNEaWZmZXJlbnRUYWJsZUNvcnJlbGF0aW9uTmFtZXM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzRXhwcmVzc2lvbnNJbk9yZGVyQnk6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3JkZXJCeVVucmVsYXRlZDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNHcm91cEJ5OiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0dyb3VwQnlVbnJlbGF0ZWQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzR3JvdXBCeUJleW9uZFNlbGVjdDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNMaWtlRXNjYXBlQ2xhdXNlOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c011bHRpcGxlUmVzdWx0U2V0czogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNNdWx0aXBsZVRyYW5zYWN0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNOb25OdWxsYWJsZUNvbHVtbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTWluaW11bVNRTEdyYW1tYXI6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ29yZVNRTEdyYW1tYXI6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzRXh0ZW5kZWRTUUxHcmFtbWFyOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0FOU0k5MkVudHJ5TGV2ZWxTUUw6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQU5TSTkySW50ZXJtZWRpYXRlU1FMOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0FOU0k5MkZ1bGxTUUw6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzSW50ZWdyaXR5RW5oYW5jZW1lbnRGYWNpbGl0eTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNPdXRlckpvaW5zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0Z1bGxPdXRlckpvaW5zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0xpbWl0ZWRPdXRlckpvaW5zOiBib29sZWFuO1xuXHRyZWFkb25seSBzY2hlbWFUZXJtOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHByb2NlZHVyZVRlcm06IHN0cmluZztcblx0cmVhZG9ubHkgY2F0YWxvZ1Rlcm06IHN0cmluZztcblx0cmVhZG9ubHkgaXNDYXRhbG9nQXRTdGFydDogYm9vbGVhbjtcblx0cmVhZG9ubHkgY2F0YWxvZ1NlcGFyYXRvcjogc3RyaW5nO1xuXHRyZWFkb25seSBzdXBwb3J0c1NjaGVtYXNJbkRhdGFNYW5pcHVsYXRpb246IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU2NoZW1hc0luUHJvY2VkdXJlQ2FsbHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU2NoZW1hc0luVGFibGVEZWZpbml0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTY2hlbWFzSW5JbmRleERlZmluaXRpb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1NjaGVtYXNJblByaXZpbGVnZURlZmluaXRpb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0NhdGFsb2dzSW5EYXRhTWFuaXB1bGF0aW9uOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0NhdGFsb2dzSW5Qcm9jZWR1cmVDYWxsczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDYXRhbG9nc0luVGFibGVEZWZpbml0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDYXRhbG9nc0luSW5kZXhEZWZpbml0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDYXRhbG9nc0luUHJpdmlsZWdlRGVmaW5pdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzUG9zaXRpb25lZERlbGV0ZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNQb3NpdGlvbmVkVXBkYXRlOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1NlbGVjdEZvclVwZGF0ZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdG9yZWRQcm9jZWR1cmVzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1N1YnF1ZXJpZXNJbkNvbXBhcmlzb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1N1YnF1ZXJpZXNJbkV4aXN0czogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdWJxdWVyaWVzSW5JbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU3VicXVlcmllc0luUXVhbnRpZmllZHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ29ycmVsYXRlZFN1YnF1ZXJpZXM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzVW5pb246IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzVW5pb25BbGw6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3BlbkN1cnNvcnNBY3Jvc3NDb21taXQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3BlbkN1cnNvcnNBY3Jvc3NSb2xsYmFjazogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNPcGVuU3RhdGVtZW50c0Fjcm9zc0NvbW1pdDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNPcGVuU3RhdGVtZW50c0Fjcm9zc1JvbGxiYWNrOiBib29sZWFuO1xuXHRyZWFkb25seSBtYXhCaW5hcnlMaXRlcmFsTGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heENoYXJMaXRlcmFsTGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heENvbHVtbk5hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q29sdW1uc0luR3JvdXBCeTogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb2x1bW5zSW5JbmRleDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb2x1bW5zSW5PcmRlckJ5OiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heENvbHVtbnNJblNlbGVjdDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb2x1bW5zSW5UYWJsZTogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb25uZWN0aW9uczogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDdXJzb3JOYW1lTGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heEluZGV4TGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heFNjaGVtYU5hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4UHJvY2VkdXJlTmFtZUxlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDYXRhbG9nTmFtZUxlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhSb3dTaXplOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heFJvd1NpemVJbmNsdWRlQmxvYnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG1heFN0YXRlbWVudExlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhTdGF0ZW1lbnRzOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heFRhYmxlTmFtZUxlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhUYWJsZXNJblNlbGVjdDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhVc2VyTmFtZUxlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBkZWZhdWx0VHJhbnNhY3Rpb25Jc29sYXRpb246IG51bWJlcjtcblx0cmVhZG9ubHkgc3VwcG9ydHNUcmFuc2FjdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzRGF0YURlZmluaXRpb25BbmREYXRhTWFuaXB1bGF0aW9uVHJhbnNhY3Rpb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0RhdGFNYW5pcHVsYXRpb25UcmFuc2FjdGlvbnNPbmx5OiBib29sZWFuO1xuXHRyZWFkb25seSBkYXRhRGVmaW5pdGlvbkNhdXNlc1RyYW5zYWN0aW9uQ29tbWl0OiBib29sZWFuO1xuXHRyZWFkb25seSBkYXRhRGVmaW5pdGlvbklnbm9yZWRJblRyYW5zYWN0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNCYXRjaFVwZGF0ZXM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU2F2ZXBvaW50czogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNOYW1lZFBhcmFtZXRlcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTXVsdGlwbGVPcGVuUmVzdWx0czogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNHZXRHZW5lcmF0ZWRLZXlzOiBib29sZWFuO1xuXHRyZWFkb25seSByZXN1bHRTZXRIb2xkYWJpbGl0eTogbnVtYmVyO1xuXHRyZWFkb25seSBkYXRhYmFzZU1ham9yVmVyc2lvbjogbnVtYmVyO1xuXHRyZWFkb25seSBkYXRhYmFzZU1pbm9yVmVyc2lvbjogbnVtYmVyO1xuXHRyZWFkb25seSBqZGJjTWFqb3JWZXJzaW9uOiBudW1iZXI7XG5cdHJlYWRvbmx5IGpkYmNNaW5vclZlcnNpb246IG51bWJlcjtcblx0cmVhZG9ubHkgc3FsU3RhdGVUeXBlOiBudW1iZXI7XG5cdHJlYWRvbmx5IGxvY2F0b3JzVXBkYXRlQ29weTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdGF0ZW1lbnRQb29saW5nOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1N0b3JlZEZ1bmN0aW9uc1VzaW5nQ2FsbFN5bnRheDogYm9vbGVhbjtcblx0cmVhZG9ubHkgYXV0b0NvbW1pdEZhaWx1cmVDbG9zZXNBbGxSZXN1bHRTZXRzOiBib29sZWFuO1xuXHRyZWFkb25seSBnZW5lcmF0ZWRLZXlBbHdheXNSZXR1cm5lZDogYm9vbGVhbjtcblx0cmVhZG9ubHkgbWF4TG9naWNhbExvYlNpemU6IG51bWJlcjtcblx0cmVhZG9ubHkgc3VwcG9ydHNSZWZDdXJzb3JzOiBib29sZWFuO1xuXHRyZWFkb25seSBzY2hlbWFzOiBTY2hlbWFNZXRhZGF0YVtdO1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbi8vIC0tLSBIZWxwZXIgRnVuY3Rpb25zIC0tLVxuXG5mdW5jdGlvbiBpc0hhbmFEYXRhYmFzZShjb25uZWN0aW9uOiBhbnkpOiBib29sZWFuIHtcblx0bGV0IGlzSGFuYURhdGFiYXNlID0gZmFsc2U7XG5cdGxldCBtZXRhZGF0YSA9IGNvbm5lY3Rpb24uZ2V0TWV0YURhdGEoKTtcblx0aWYgKG1ldGFkYXRhICE9PSBudWxsICYmIG1ldGFkYXRhICE9PSB1bmRlZmluZWQpIHtcblx0XHRpc0hhbmFEYXRhYmFzZSA9IG1ldGFkYXRhLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKSA9PT0gXCJIREJcIjtcblx0fVxuXHRyZXR1cm4gaXNIYW5hRGF0YWJhc2U7XG59XG5cbmZ1bmN0aW9uIHJlYWRDbG9iVmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB8IGFueSB7XG5cdHJldHVybiB2YWx1ZSA/IHZhbHVlLmdldFN1YlN0cmluZygxLCB2YWx1ZS5sZW5ndGgoKSkgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2xvYlZhbHVlKG5hdGl2ZTogYW55LCB2YWx1ZTogYW55KTogYW55IHtcblx0dHJ5IHtcblx0XHRsZXQgY29ubmVjdGlvbiA9IG5hdGl2ZS5nZXRDb25uZWN0aW9uKCk7IC8vIGludGVudGlvbmFsbHkgbm90IGNsb3NlZFxuXHRcdGlmIChjb25uZWN0aW9uID09PSBudWxsIHx8IGNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgY3JlYXRlIG5ldyAnQ2xvYicgdmFsdWUgYXMgdGhlIGNvbm5lY3Rpb24gaXMgbnVsbFwiKTtcblx0XHR9XG5cdFx0bGV0IGNsb2IgPSBudWxsO1xuXHRcdGlmIChpc0hhbmFEYXRhYmFzZShjb25uZWN0aW9uKSkge1xuXHRcdFx0bGV0IHBzID0gbnVsbDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHBzID0gY29ubmVjdGlvbi5wcmVwYXJlU3RhdGVtZW50KFwiU0VMRUNUIFRPX0NMT0IgKD8pIEZST00gRFVNTVk7XCIpO1xuXHRcdFx0XHRwcy5zZXRTdHJpbmcoMSwgdmFsdWUpO1xuXHRcdFx0XHRsZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTtcblx0XHRcdFx0aWYgKHJzLm5leHQoKSkge1xuXHRcdFx0XHRcdGNsb2IgPSBycy5nZXRDbG9iKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAocHMgIT09IG51bGwgJiYgcHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHBzLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2xvYiA9IGNvbm5lY3Rpb24uY3JlYXRlQ2xvYigpO1xuXHRcdFx0Y2xvYi5zZXRTdHJpbmcoMSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2xvYjtcblx0fSBjYXRjaCAoZTogYW55KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cmVkIGR1cmluZyBjcmVhdGlvbiBvZiAnQ2xvYicgdmFsdWU6ICR7ZS5tZXNzYWdlfWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWROQ2xvYlZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBhbnkge1xuXHRyZXR1cm4gdmFsdWUgPyB2YWx1ZS5nZXRTdWJTdHJpbmcoMSwgdmFsdWUubGVuZ3RoKCkpIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5DbG9iVmFsdWUobmF0aXZlOiBhbnksIHZhbHVlOiBhbnkpOiBhbnkge1xuXHR0cnkge1xuXHRcdGxldCBjb25uZWN0aW9uID0gbmF0aXZlLmdldENvbm5lY3Rpb24oKTsgLy8gaW50ZW50aW9uYWxseSBub3QgY2xvc2VkXG5cdFx0aWYgKGNvbm5lY3Rpb24gPT09IG51bGwgfHwgY29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBjcmVhdGUgbmV3ICdOQ2xvYicgdmFsdWUgYXMgdGhlIGNvbm5lY3Rpb24gaXMgbnVsbFwiKTtcblx0XHR9XG5cdFx0bGV0IG5jbG9iID0gbnVsbDtcblx0XHRpZiAoaXNIYW5hRGF0YWJhc2UoY29ubmVjdGlvbikpIHtcblx0XHRcdGxldCBwcyA9IG51bGw7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwcyA9IGNvbm5lY3Rpb24ucHJlcGFyZVN0YXRlbWVudChcIlNFTEVDVCBUT19OQ0xPQiAoPykgRlJPTSBEVU1NWTtcIik7XG5cdFx0XHRcdHBzLnNldFN0cmluZygxLCB2YWx1ZSk7XG5cdFx0XHRcdGxldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpO1xuXHRcdFx0XHRpZiAocnMubmV4dCgpKSB7XG5cdFx0XHRcdFx0bmNsb2IgPSBycy5nZXROQ2xvYigxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKHBzICE9PSBudWxsICYmIHBzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwcy5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5jbG9iID0gY29ubmVjdGlvbi5jcmVhdGVOQ2xvYigpO1xuXHRcdFx0bmNsb2Iuc2V0U3RyaW5nKDEsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5jbG9iO1xuXHR9IGNhdGNoIChlOiBhbnkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VyZWQgZHVyaW5nIGNyZWF0aW9uIG9mICdOQ2xvYicgdmFsdWU6ICR7ZS5tZXNzYWdlfWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJsb2JWYWx1ZShuYXRpdmU6IGFueSwgdmFsdWU6IGFueSk6IGFueSB7XG5cdHRyeSB7XG5cdFx0bGV0IGNvbm5lY3Rpb24gPSBuYXRpdmUuZ2V0Q29ubmVjdGlvbigpOyAvLyBpbnRlbnRpb25hbGx5IG5vdCBjbG9zZWRcblx0XHRpZiAoY29ubmVjdGlvbiA9PT0gbnVsbCB8fCBjb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNhbid0IGNyZWF0ZSBuZXcgJ0Jsb2InIHZhbHVlIGFzIHRoZSBjb25uZWN0aW9uIGlzIG51bGxcIik7XG5cdFx0fVxuXHRcdGxldCBibG9iID0gbnVsbDtcblx0XHRpZiAoaXNIYW5hRGF0YWJhc2UoY29ubmVjdGlvbikpIHtcblx0XHRcdGxldCBwcyA9IG51bGw7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwcyA9IGNvbm5lY3Rpb24ucHJlcGFyZVN0YXRlbWVudChcIlNFTEVDVCBUT19CTE9CICg/KSBGUk9NIERVTU1ZO1wiKTtcblx0XHRcdFx0cHMuc2V0Qnl0ZXMoMSwgdmFsdWUpO1xuXHRcdFx0XHRsZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTtcblx0XHRcdFx0aWYgKHJzLm5leHQoKSkge1xuXHRcdFx0XHRcdGJsb2IgPSBycy5nZXRCbG9iKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAocHMgIT09IG51bGwgJiYgcHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHBzLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YmxvYiA9IGNvbm5lY3Rpb24uY3JlYXRlQmxvYigpO1xuXHRcdFx0YmxvYi5zZXRCeXRlcygxLCB2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBibG9iO1xuXHR9IGNhdGNoIChlOiBhbnkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VyZWQgZHVyaW5nIGNyZWF0aW9uIG9mICdDbG9iJyB2YWx1ZTogJHtlLm1lc3NhZ2V9YCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBEYXRlKTogRGF0ZSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLy8gLS0tIFN0YXRlbWVudCBDbGFzc2VzIC0tLVxuXG4vKipcbiAqIFN0YXRlbWVudCBvYmplY3RcbiAqL1xuZXhwb3J0IGNsYXNzIFByZXBhcmVkU3RhdGVtZW50IHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuY2xvc2UoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRSZXN1bHRTZXQoKTogUmVzdWx0U2V0IHtcblx0XHRyZXR1cm4gbmV3IFJlc3VsdFNldCh0aGlzLm5hdGl2ZS5nZXRSZXN1bHRTZXQoKSk7XG5cdH1cblxuXHRwdWJsaWMgZXhlY3V0ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIGV4ZWN1dGVRdWVyeSgpOiBSZXN1bHRTZXQge1xuXHRcdHJldHVybiBuZXcgUmVzdWx0U2V0KHRoaXMubmF0aXZlLmV4ZWN1dGVRdWVyeSgpKTtcblx0fVxuXG5cdHB1YmxpYyBleGVjdXRlVXBkYXRlKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmV4ZWN1dGVVcGRhdGUoKTtcblx0fVxuXG5cdHB1YmxpYyBzZXROdWxsKGluZGV4OiBudW1iZXIsIHNxbFR5cGU6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldE51bGwoaW5kZXgsIHNxbFR5cGUpO1xuXHR9XG5cblx0cHVibGljIHNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCBpbnB1dFN0cmVhbTogSW5wdXRTdHJlYW0sIGxlbmd0aD86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmIChsZW5ndGgpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0sIGxlbmd0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCb29sZWFuKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCb29sZWFuKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuQk9PTEVBTik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJ5dGUoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnkgLyo6IEJ5dGUqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCeXRlKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuVElOWUlOVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJsb2IoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnkgLyoqOiBCbG9iKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IGJsb2IgPSBjcmVhdGVCbG9iVmFsdWUodGhpcy5uYXRpdmUsIHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJsb2IoaW5kZXgsIGJsb2IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkJMT0IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRDbG9iKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55IC8qOiBDbG9iKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IGNsb2IgPSBjcmVhdGVDbG9iVmFsdWUodGhpcy5uYXRpdmUsIHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldENsb2IoaW5kZXgsIGNsb2IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkNMT0IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXROQ2xvYihpbmRleDogbnVtYmVyLCB2YWx1ZT86IGFueSAvKjogTkNsb2IqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRsZXQgbmNsb2IgPSBjcmVhdGVOQ2xvYlZhbHVlKHRoaXMubmF0aXZlLCB2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXROQ2xvYihpbmRleCwgbmNsb2IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLk5DTE9CKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Qnl0ZXNOYXRpdmUoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnlbXSAvKmJ5dGVbXSovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJ5dGVzKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuVkFSQklOQVJZKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Qnl0ZXMoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnlbXSAvKmJ5dGVbXSovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhciBkYXRhID0gQnl0ZXMudG9KYXZhQnl0ZXModmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qnl0ZXMoaW5kZXgsIGRhdGEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlZBUkJJTkFSWSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldERhdGUoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcgfCBEYXRlKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSBnZXREYXRlVmFsdWUodmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RGF0ZShpbmRleCwgbmV3IEpTcWxEYXRlKGRhdGUuZ2V0VGltZSgpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuREFURSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldERvdWJsZShpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXREb3VibGUoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5ET1VCTEUpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRGbG9hdChpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRGbG9hdChpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkZMT0FUKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0SW50KGluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEludChpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLklOVEVHRVIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRMb25nKGluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldExvbmcoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5CSUdJTlQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRTaG9ydChpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRTaG9ydChpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlNNQUxMSU5UKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0U3RyaW5nKGluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldFN0cmluZyhpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlZBUkNIQVIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRUaW1lKGluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nIHwgRGF0ZSk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkYXRlID0gZ2V0RGF0ZVZhbHVlKHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldFRpbWUoaW5kZXgsIG5ldyBKU3FsVGltZShkYXRlLmdldFRpbWUoKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlRJTUUpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRUaW1lc3RhbXAoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcgfCBEYXRlKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSBnZXREYXRlVmFsdWUodmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0VGltZXN0YW1wKGluZGV4LCBuZXcgSlNxbFRpbWVzdGFtcChkYXRlLmdldFRpbWUoKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlRJTUVTVEFNUCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJpZ0RlY2ltYWwoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIgLyo6IEJpZ0RlY2ltYWwqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCaWdEZWNpbWFsKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuREVDSU1BTCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldE5TdHJpbmcoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0TlN0cmluZyhpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLk5WQVJDSEFSKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgYWRkQmF0Y2goKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuYWRkQmF0Y2goKTtcblx0fVxuXG5cdHB1YmxpYyBleGVjdXRlQmF0Y2goKTogbnVtYmVyW10ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5leGVjdXRlQmF0Y2goKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNZXRhRGF0YSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRNZXRhRGF0YSgpO1xuXHR9XG5cblx0cHVibGljIGdldE1vcmVSZXN1bHRzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRNb3JlUmVzdWx0cygpO1xuXHR9XG5cblx0cHVibGljIGdldFBhcmFtZXRlck1ldGFEYXRhKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhcmFtZXRlck1ldGFEYXRhKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U1FMV2FybmluZygpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRXYXJuaW5ncygpO1xuXHR9XG5cblx0cHVibGljIGlzQ2xvc2VkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0Nsb3NlZCgpO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBDYWxsYWJsZVN0YXRlbWVudCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRSZXN1bHRTZXQoKTogUmVzdWx0U2V0IHtcblx0XHRyZXR1cm4gbmV3IFJlc3VsdFNldCh0aGlzLm5hdGl2ZS5nZXRSZXN1bHRTZXQoKSk7XG5cdH1cblxuXHRwdWJsaWMgZXhlY3V0ZVF1ZXJ5KCk6IFJlc3VsdFNldCB7XG5cdFx0cmV0dXJuIG5ldyBSZXN1bHRTZXQodGhpcy5uYXRpdmUuZXhlY3V0ZVF1ZXJ5KCkpO1xuXHR9XG5cblx0cHVibGljIGV4ZWN1dGVVcGRhdGUoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZXhlY3V0ZVVwZGF0ZSgpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyT3V0UGFyYW1ldGVyKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHNxbFR5cGU6IGtleW9mIHR5cGVvZiBTUUxUeXBlcyB8IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnJlZ2lzdGVyT3V0UGFyYW1ldGVyKHBhcmFtZXRlckluZGV4LCBzcWxUeXBlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck91dFBhcmFtZXRlckJ5U2NhbGUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgc3FsVHlwZToga2V5b2YgdHlwZW9mIFNRTFR5cGVzIHwgbnVtYmVyLCBzY2FsZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUucmVnaXN0ZXJPdXRQYXJhbWV0ZXIocGFyYW1ldGVySW5kZXgsIHNxbFR5cGUsIHNjYWxlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck91dFBhcmFtZXRlckJ5VHlwZU5hbWUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgc3FsVHlwZToga2V5b2YgdHlwZW9mIFNRTFR5cGVzIHwgbnVtYmVyLCB0eXBlTmFtZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUucmVnaXN0ZXJPdXRQYXJhbWV0ZXIocGFyYW1ldGVySW5kZXgsIHNxbFR5cGUsIHR5cGVOYW1lKTtcblx0fVxuXG5cdHB1YmxpYyB3YXNOdWxsKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS53YXNOdWxsKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U3RyaW5nKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTdHJpbmcocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEJvb2xlYW4ocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCb29sZWFuKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRCeXRlKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkgLyo6IGJ5dGUqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEJ5dGUocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldFNob3J0KHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTaG9ydChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0SW50KHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJbnQocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldExvbmcocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldExvbmcocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEZsb2F0KHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRGbG9hdChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RG91YmxlKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXREb3VibGUocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldERhdGUocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IERhdGUge1xuXHRcdGNvbnN0IGRhdGVJbnN0YW5jZSA9IHRoaXMubmF0aXZlLmdldERhdGUocGFyYW1ldGVySW5kZXgpO1xuXHRcdHJldHVybiBkYXRlSW5zdGFuY2UgIT09IG51bGwgJiYgZGF0ZUluc3RhbmNlICE9PSB1bmRlZmluZWQgPyBuZXcgRGF0ZShkYXRlSW5zdGFuY2UuZ2V0VGltZSgpKSA6IGRhdGVJbnN0YW5jZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRUaW1lKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBEYXRlIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRUaW1lKHBhcmFtZXRlckluZGV4KTtcblx0XHRyZXR1cm4gZGF0ZUluc3RhbmNlICE9PSBudWxsICYmIGRhdGVJbnN0YW5jZSAhPT0gdW5kZWZpbmVkID8gbmV3IERhdGUoZGF0ZUluc3RhbmNlLmdldFRpbWUoKSkgOiBkYXRlSW5zdGFuY2U7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VGltZXN0YW1wKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBEYXRlIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRUaW1lc3RhbXAocGFyYW1ldGVySW5kZXgpO1xuXHRcdHJldHVybiBkYXRlSW5zdGFuY2UgIT09IG51bGwgJiYgZGF0ZUluc3RhbmNlICE9PSB1bmRlZmluZWQgPyBuZXcgRGF0ZShkYXRlSW5zdGFuY2UuZ2V0VGltZSgpKSA6IGRhdGVJbnN0YW5jZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRPYmplY3QocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE9iamVjdChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmlnRGVjaW1hbChwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogbnVtYmVyIC8qOiBzcWwuQmlnRGVjaW1hbCovIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0QmlnRGVjaW1hbChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UmVmKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkgLyo6IHNxbC5SZWYqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFJlZihwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qnl0ZXMocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IGFueVtdIC8qOiBieXRlW10qLyB7XG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMubmF0aXZlLmdldEJ5dGVzKHBhcmFtZXRlckluZGV4KTtcblx0XHRyZXR1cm4gQnl0ZXMudG9KYXZhU2NyaXB0Qnl0ZXMoZGF0YSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qnl0ZXNOYXRpdmUocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IGFueVtdIC8qOiBieXRlW10qLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEJ5dGVzKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRCbG9iKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkgLyo6IHNxbC5CbG9iKi8ge1xuXHRcdGNvbnN0IGRhdGEgPSBEYXRhYmFzZUZhY2FkZS5yZWFkQmxvYlZhbHVlKHRoaXMubmF0aXZlLCBwYXJhbWV0ZXJJbmRleCk7XG5cdFx0cmV0dXJuIEJ5dGVzLnRvSmF2YVNjcmlwdEJ5dGVzKGRhdGEpO1xuXHR9XG5cblx0cHVibGljIGdldEJsb2JOYXRpdmUocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IGFueSAvKjogc3FsLkJsb2IqLyB7XG5cdFx0cmV0dXJuIERhdGFiYXNlRmFjYWRlLnJlYWRCbG9iVmFsdWUodGhpcy5uYXRpdmUsIHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDbG9iKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkgLyo6IHNxbC5DbG9iKi8ge1xuXHRcdHJldHVybiByZWFkQ2xvYlZhbHVlKHRoaXMubmF0aXZlLmdldENsb2IocGFyYW1ldGVySW5kZXgpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXROQ2xvYihwYXJhbWV0ZXJJbmRleDogc3RyaW5nIHwgbnVtYmVyKTogYW55IC8qOiBzcWwuTkNsb2IqLyB7XG5cdFx0cmV0dXJuIHJlYWROQ2xvYlZhbHVlKHRoaXMubmF0aXZlLmdldE5DbG9iKHBhcmFtZXRlckluZGV4KSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TlN0cmluZyhwYXJhbWV0ZXJJbmRleDogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TlN0cmluZyhwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QXJyYXkocGFyYW1ldGVySW5kZXg6IHN0cmluZyB8IG51bWJlcik6IGFueVtdIC8qOiBzcWwuQXJyYXkqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEFycmF5KHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRVUkwocGFyYW1ldGVySW5kZXg6IHN0cmluZyB8IG51bWJlcik6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFVSTChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Um93SWQocGFyYW1ldGVySW5kZXg6IHN0cmluZyB8IG51bWJlcik6IGFueSAvKjogc3FsLlJvd0lkKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRSb3dJZChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U1FMWE1MKHBhcmFtZXRlckluZGV4OiBzdHJpbmcgfCBudW1iZXIpOiBhbnkgLyo6IHNxbC5TUUxYTUwqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFNRTFhNTChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0VVJMKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXRVUkwocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBzZXROdWxsKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHNxbFR5cGVTdHI6IGtleW9mIHR5cGVvZiBTUUxUeXBlcyB8IG51bWJlciwgdHlwZU5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBzcWxUeXBlOiBudW1iZXIgPSBOdW1iZXIuaXNJbnRlZ2VyKHNxbFR5cGVTdHIgYXMgbnVtYmVyKSA/IHNxbFR5cGVTdHIgYXMgbnVtYmVyIDogU1FMVHlwZXNbc3FsVHlwZVN0ciBhcyBrZXlvZiB0eXBlb2YgU1FMVHlwZXNdO1xuXHRcdGlmICh0eXBlTmFtZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVOYW1lICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBzcWxUeXBlLCB0eXBlTmFtZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldE51bGwocGFyYW1ldGVySW5kZXgsIHNxbFR5cGUpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCb29sZWFuKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCb29sZWFuKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuQk9PTEVBTik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJ5dGUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnkgLyo6IGJ5dGUqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCeXRlKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuQklUKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0U2hvcnQocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0U2hvcnQocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5TTUFMTElOVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEludChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRJbnQocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5JTlRFR0VSKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0TG9uZyhwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRMb25nKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuQklHSU5UKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0RmxvYXQocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RmxvYXQocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5GTE9BVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldERvdWJsZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXREb3VibGUocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5ET1VCTEUpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCaWdEZWNpbWFsKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyIC8qOiBCaWdEZWNpbWFsKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0QmlnRGVjaW1hbChwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkRFQ0lNQUwpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRTdHJpbmcocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0U3RyaW5nKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuVkFSQ0hBUik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJ5dGVzKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55W10gLypieXRlW10qLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCeXRlcyhwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkFSUkFZKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0RGF0ZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IHN0cmluZyB8IERhdGUpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgZGF0ZSA9IGdldERhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXREYXRlKHBhcmFtZXRlckluZGV4LCBuZXcgSlNxbERhdGUoZGF0ZS5nZXRUaW1lKCkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5EQVRFKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0VGltZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IHN0cmluZyB8IERhdGUpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgZGF0ZSA9IGdldERhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRUaW1lKHBhcmFtZXRlckluZGV4LCBuZXcgSlNxbFRpbWUoZGF0ZS5nZXRUaW1lKCkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5USU1FKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0VGltZXN0YW1wKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nIHwgRGF0ZSk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRsZXQgZGF0ZSA9IGdldERhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRUaW1lc3RhbXAocGFyYW1ldGVySW5kZXgsIG5ldyBKU3FsVGltZXN0YW1wKGRhdGUuZ2V0VGltZSgpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuVElNRVNUQU1QKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0QXNjaWlTdHJlYW0ocGFyYW1ldGVySW5kZXg6IG51bWJlciwgaW5wdXRTdHJlYW06IElucHV0U3RyZWFtLCBsZW5ndGg/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAobGVuZ3RoKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRBc2NpaVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0sIGxlbmd0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEFzY2lpU3RyZWFtKHBhcmFtZXRlckluZGV4LCBpbnB1dFN0cmVhbSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCBpbnB1dFN0cmVhbTogSW5wdXRTdHJlYW0sIGxlbmd0aD86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmIChsZW5ndGgpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0sIGxlbmd0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRPYmplY3QocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSwgdGFyZ2V0U3FsVHlwZT86IG51bWJlciwgc2NhbGU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAoc2NhbGUgIT09IHVuZGVmaW5lZCAmJiBzY2FsZSAhPT0gbnVsbCAmJiB0YXJnZXRTcWxUeXBlICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0U3FsVHlwZSAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0T2JqZWN0KHBhcmFtZXRlckluZGV4LCB2YWx1ZSwgdGFyZ2V0U3FsVHlwZSwgc2NhbGUpO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0U3FsVHlwZSAhPT0gdW5kZWZpbmVkICYmIHRhcmdldFNxbFR5cGUgIT09IG51bGwpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldE9iamVjdChwYXJhbWV0ZXJJbmRleCwgdmFsdWUsIHRhcmdldFNxbFR5cGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRPYmplY3QocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Um93SWQocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlciAvKjogUm93SWQqLyk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldFJvd0lkKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0TlN0cmluZyhwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldE5TdHJpbmcocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5OVkFSQ0hBUik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFNRTFhNTChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZTogYW55IC8qOiBTUUxYTUwqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRTUUxYTUwocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTnVsbGFibGUgU1FMWE1MIHR5cGUgbm90IHN1cHBvcnRlZC5cIik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJsb2IocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSAvKkJsb2IgKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgYmxvYiA9IGNyZWF0ZUJsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgdmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0QmxvYihwYXJhbWV0ZXJJbmRleCwgYmxvYik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuQkxPQik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldENsb2IocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSAvKjogQ2xvYiovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGNsb2IgPSBjcmVhdGVDbG9iVmFsdWUodGhpcy5uYXRpdmUsIHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldENsb2IocGFyYW1ldGVySW5kZXgsIGNsb2IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkNMT0IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXROQ2xvYihwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZTogYW55IC8qOiBOQ2xvYiovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IG5jbG9iID0gY3JlYXRlTkNsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgdmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0TkNsb2IocGFyYW1ldGVySW5kZXgsIG5jbG9iKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5OQ0xPQik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGV4ZWN1dGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNb3JlUmVzdWx0cygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TW9yZVJlc3VsdHMoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRQYXJhbWV0ZXJNZXRhRGF0YSgpOiBhbnkgLyo6IFBhcmFtZXRlck1ldGFEYXRhKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRQYXJhbWV0ZXJNZXRhRGF0YSgpO1xuXHR9XG5cblx0cHVibGljIGlzQ2xvc2VkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0Nsb3NlZCgpO1xuXHR9XG5cblx0cHVibGljIGNsb3NlKCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmNsb3NlKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXN1bHRTZXQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjbGFzcyBSZXN1bHRTZXQge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyB0aGUgUmVzdWx0U2V0IGludG8gYSBKU09OIGFycmF5IG9mIG9iamVjdHMuXG5cdCAqIEBwYXJhbSBsaW1pdGVkIFdoZXRoZXIgdG8gdXNlIGxpbWl0ZWQgSlNPTiBjb252ZXJzaW9uIChvcHRpbWl6ZWQpLlxuXHQgKiBAcGFyYW0gc3RyaW5naWZ5IFdoZXRoZXIgdG8gcmV0dXJuIHRoZSBKU09OIGFzIGEgc3RyaW5nIG9yIGEgcGFyc2VkIGFycmF5LlxuXHQgKiBAcmV0dXJucyBBIEphdmFTY3JpcHQgYXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBzZXQsIG9yIGEgc3RyaW5nIGlmIHN0cmluZ2lmeSBpcyB0cnVlLlxuXHQgKi9cblx0cHVibGljIHRvSnNvbihsaW1pdGVkID0gZmFsc2UsIHN0cmluZ2lmeSA9IGZhbHNlKTogYW55W10ge1xuXHRcdGNvbnN0IHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpO1xuXHRcdGNvbnN0IG91dHB1dCA9IFdyaXRlck91dHB1dFN0cmVhbVxuXHRcdFx0LmJ1aWxkZXIoKVxuXHRcdFx0LnNldFdyaXRlcihzdylcblx0XHRcdC5zZXRDaGFyc2V0KFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpXG5cdFx0XHQuZ2V0KCk7XG5cdFx0RGF0YWJhc2VGYWNhZGUudG9Kc29uKHRoaXMubmF0aXZlLCBsaW1pdGVkLCBzdHJpbmdpZnksIG91dHB1dCk7XG5cdFx0Y29uc3QganNvblN0cmluZyA9IHN3LnRvU3RyaW5nKCk7XG5cdFx0cmV0dXJuIHN0cmluZ2lmeSA/IGpzb25TdHJpbmcgOiBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuXHR9XG5cblx0cHVibGljIGNsb3NlKCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmNsb3NlKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmlnRGVjaW1hbChpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnkgLyo6IEJpZ0RlY2ltYWwqLyAge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCaWdEZWNpbWFsKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldEJvb2xlYW4oaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEJvb2xlYW4oaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qnl0ZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnkgLyo6IGJ5dGUqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEJ5dGUoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qnl0ZXMoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55W10gLyo6IGJ5dGVbXSovIHtcblx0XHRjb25zdCBkYXRhID0gdGhpcy5uYXRpdmUuZ2V0Qnl0ZXMoaWRlbnRpZmllcik7XG5cdFx0cmV0dXJuIEJ5dGVzLnRvSmF2YVNjcmlwdEJ5dGVzKGRhdGEpO1xuXHR9O1xuXG5cdHB1YmxpYyBnZXRCeXRlc05hdGl2ZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnlbXSAvKjogYnl0ZVtdKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCeXRlcyhpZGVudGlmaWVyKTtcblx0fTtcblxuXHRwdWJsaWMgZ2V0QmxvYihpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnkgLyo6IHNxbC5CbG9iKi8ge1xuXHRcdGNvbnN0IGRhdGEgPSBEYXRhYmFzZUZhY2FkZS5yZWFkQmxvYlZhbHVlKHRoaXMubmF0aXZlLCBpZGVudGlmaWVyKTtcblx0XHRyZXR1cm4gQnl0ZXMudG9KYXZhU2NyaXB0Qnl0ZXMoZGF0YSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmxvYk5hdGl2ZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnkgLyo6IHNxbC5CbG9iKi8ge1xuXHRcdHJldHVybiBEYXRhYmFzZUZhY2FkZS5yZWFkQmxvYlZhbHVlKHRoaXMubmF0aXZlLCBpZGVudGlmaWVyKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDbG9iKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IGFueSAvKjogc3FsLkNsb2IqLyB7XG5cdFx0cmV0dXJuIHJlYWRDbG9iVmFsdWUodGhpcy5uYXRpdmUuZ2V0Q2xvYihpZGVudGlmaWVyKSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TkNsb2IoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55IC8qOiBzcWwuTkNsb2IqLyB7XG5cdFx0cmV0dXJuIHJlYWROQ2xvYlZhbHVlKHRoaXMubmF0aXZlLmdldE5DbG9iKGlkZW50aWZpZXIpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXREYXRlKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IERhdGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRhdGVJbnN0YW5jZSA9IHRoaXMubmF0aXZlLmdldERhdGUoaWRlbnRpZmllcik7XG5cdFx0cmV0dXJuIGRhdGVJbnN0YW5jZSAhPT0gbnVsbCAmJiBkYXRlSW5zdGFuY2UgIT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKGRhdGVJbnN0YW5jZS5nZXRUaW1lKCkpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0cHVibGljIGdldERvdWJsZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXREb3VibGUoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RmxvYXQoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0RmxvYXQoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0SW50KGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEludChpZGVudGlmaWVyKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb25nKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldExvbmcoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U2hvcnQoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0U2hvcnQoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U3RyaW5nKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFN0cmluZyhpZGVudGlmaWVyKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRUaW1lKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IERhdGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRhdGVJbnN0YW5jZSA9IHRoaXMubmF0aXZlLmdldFRpbWUoaWRlbnRpZmllcik7XG5cdFx0cmV0dXJuIGRhdGVJbnN0YW5jZSAhPT0gbnVsbCAmJiBkYXRlSW5zdGFuY2UgIT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKGRhdGVJbnN0YW5jZS5nZXRUaW1lKCkpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0cHVibGljIGdldFRpbWVzdGFtcChpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRUaW1lc3RhbXAoaWRlbnRpZmllcik7XG5cdFx0cmV0dXJuIGRhdGVJbnN0YW5jZSAhPT0gbnVsbCAmJiBkYXRlSW5zdGFuY2UgIT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKGRhdGVJbnN0YW5jZS5nZXRUaW1lKCkpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0cHVibGljIGlzQWZ0ZXJMYXN0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0FmdGVyTGFzdCgpO1xuXHR9XG5cblx0cHVibGljIGlzQmVmb3JlRmlyc3QoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmlzQmVmb3JlRmlyc3QoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Nsb3NlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNDbG9zZWQoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0ZpcnN0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0ZpcnN0KCk7XG5cdH1cblxuXHRwdWJsaWMgaXNMYXN0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0xhc3QoKTtcblx0fVxuXG5cdHB1YmxpYyBuZXh0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5uZXh0KCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWV0YURhdGEoKTogYW55IC8qOiBSZXN1bHRTZXRNZXRhRGF0YSovIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TWV0YURhdGEoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXROU3RyaW5nKGNvbHVtbkluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXROU3RyaW5nKGNvbHVtbkluZGV4KTtcblx0fVxufVxuXG4vLyAtLS0gQ29ubmVjdGlvbiBDbGFzcyAtLS1cblxuLyoqXG4gKiBDb25uZWN0aW9uIG9iamVjdCB3cmFwcGVyIGFyb3VuZCBhIG5hdGl2ZSBKYXZhIGBDb25uZWN0aW9uYC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb24ge1xuXG5cdHB1YmxpYyByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihkYXRhc291cmNlTmFtZT86IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlID0gRGF0YWJhc2VGYWNhZGUuZ2V0Q29ubmVjdGlvbihkYXRhc291cmNlTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBjb25uZWN0aW9uIGlzIGZvciBhIHNwZWNpZmljIGRhdGFiYXNlIHN5c3RlbS5cblx0ICovXG5cdHB1YmxpYyBpc09mVHlwZShkYXRhYmFzZVN5c3RlbTogRGF0YWJhc2VTeXN0ZW0pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXREYXRhYmFzZVN5c3RlbSgpID09PSBkYXRhYmFzZVN5c3RlbTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGFiYXNlIHN5c3RlbSBhcyBhIHtAbGluayBEYXRhYmFzZVN5c3RlbX0gZW51bS5cblx0ICovXG5cdHB1YmxpYyBnZXREYXRhYmFzZVN5c3RlbSgpOiBEYXRhYmFzZVN5c3RlbSB7XG5cdFx0Y29uc3QgZGJTeXN0ZW06IHN0cmluZyA9IHRoaXMubmF0aXZlLmdldERhdGFiYXNlU3lzdGVtKCkubmFtZSgpO1xuXHRcdHN3aXRjaCAoZGJTeXN0ZW0pIHtcblx0XHRcdGNhc2UgXCJERVJCWVwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uREVSQlk7XG5cdFx0XHRjYXNlIFwiUE9TVEdSRVNRTFwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uUE9TVEdSRVNRTDtcblx0XHRcdGNhc2UgXCJIMlwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uSDI7XG5cdFx0XHRjYXNlIFwiTUFSSUFEQlwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uTUFSSUFEQjtcblx0XHRcdGNhc2UgXCJIQU5BXCI6XG5cdFx0XHRcdHJldHVybiBEYXRhYmFzZVN5c3RlbS5IQU5BO1xuXHRcdFx0Y2FzZSBcIlNOT1dGTEFLRVwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uU05PV0ZMQUtFO1xuXHRcdFx0Y2FzZSBcIk1ZU1FMXCI6XG5cdFx0XHRcdHJldHVybiBEYXRhYmFzZVN5c3RlbS5NWVNRTDtcblx0XHRcdGNhc2UgXCJNT05HT0RCXCI6XG5cdFx0XHRcdHJldHVybiBEYXRhYmFzZVN5c3RlbS5NT05HT0RCO1xuXHRcdFx0Y2FzZSBcIlNZQkFTRVwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uU1lCQVNFO1xuXHRcdFx0Y2FzZSBcIlVOS05PV05cIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLlVOS05PV047XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgbWFwcGluZyBmb3IgZGF0YWJhc2Ugc3lzdGVtIHR5cGUgJHtkYlN5c3RlbX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgUHJlcGFyZWRTdGF0ZW1lbnR9IG9iamVjdCBmb3Igc2VuZGluZyBwYXJhbWV0ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIHRoZSBkYXRhYmFzZS5cblx0ICovXG5cdHB1YmxpYyBwcmVwYXJlU3RhdGVtZW50KHNxbDogc3RyaW5nKTogUHJlcGFyZWRTdGF0ZW1lbnQge1xuXHRcdHJldHVybiBuZXcgUHJlcGFyZWRTdGF0ZW1lbnQodGhpcy5uYXRpdmUucHJlcGFyZVN0YXRlbWVudChzcWwpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEge0BsaW5rIENhbGxhYmxlU3RhdGVtZW50fSBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2Ugc3RvcmVkIHByb2NlZHVyZXMgb3IgZnVuY3Rpb25zLlxuXHQgKi9cblx0cHVibGljIHByZXBhcmVDYWxsKHNxbDogc3RyaW5nKTogQ2FsbGFibGVTdGF0ZW1lbnQge1xuXHRcdHJldHVybiBuZXcgQ2FsbGFibGVTdGF0ZW1lbnQodGhpcy5uYXRpdmUucHJlcGFyZUNhbGwoc3FsKSk7XG5cdH1cblxuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmlzQ2xvc2VkKCkpIHtcblx0XHRcdHRoaXMubmF0aXZlLmNsb3NlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGNvbW1pdCgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5jb21taXQoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRBdXRvQ29tbWl0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRBdXRvQ29tbWl0KCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q2F0YWxvZygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRDYXRhbG9nKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U2NoZW1hKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFNjaGVtYSgpO1xuXHR9XG5cblx0cHVibGljIGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7XG5cdH1cblxuXHRwdWJsaWMgaXNDbG9zZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmlzQ2xvc2VkKCk7XG5cdH1cblxuXHRwdWJsaWMgaXNSZWFkT25seSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNSZWFkT25seSgpO1xuXHR9XG5cblx0cHVibGljIGlzVmFsaWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmlzVmFsaWQoKTtcblx0fVxuXG5cdHB1YmxpYyByb2xsYmFjaygpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5yb2xsYmFjaygpO1xuXHR9XG5cblx0cHVibGljIHNldEF1dG9Db21taXQoYXV0b0NvbW1pdDogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0Q2F0YWxvZyhjYXRhbG9nOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXRDYXRhbG9nKGNhdGFsb2cpO1xuXHR9XG5cblx0cHVibGljIHNldFJlYWRPbmx5KHJlYWRPbmx5OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuc2V0UmVhZE9ubHkocmVhZE9ubHkpO1xuXHR9XG5cblx0cHVibGljIHNldFNjaGVtYShzY2hlbWE6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldFNjaGVtYShzY2hlbWEpO1xuXHR9XG5cblx0cHVibGljIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5zYWN0aW9uSXNvbGF0aW9uOiBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuc2FjdGlvbklzb2xhdGlvbik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWV0YURhdGEoKTogYW55IC8qOiBEYXRhYmFzZU1ldGFEYXRhKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRNZXRhRGF0YSgpO1xuXHR9XG59XG5cbi8vIC0tLSBEYXRhYmFzZSBDbGFzcyAtLS1cblxuZXhwb3J0IGNsYXNzIERhdGFiYXNlIHtcblxuXHQvKipcblx0ICogUmV0dXJucyBhIGxpc3Qgb2YgYXZhaWxhYmxlIGRhdGEgc291cmNlIG5hbWVzLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXREYXRhU291cmNlcygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgZGF0YXNvdXJjZXMgPSBEYXRhYmFzZUZhY2FkZS5nZXREYXRhU291cmNlcygpO1xuXHRcdHJldHVybiBkYXRhc291cmNlcyA/IEpTT04ucGFyc2UoZGF0YXNvdXJjZXMpIDogW107XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBkYXRhYmFzZSBtZXRhZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZ2V0TWV0YWRhdGEoZGF0YXNvdXJjZU5hbWU/OiBzdHJpbmcpOiBEYXRhYmFzZU1ldGFkYXRhIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IERhdGFiYXNlRmFjYWRlLmdldE1ldGFkYXRhKGRhdGFzb3VyY2VOYW1lKTtcblx0XHRyZXR1cm4gbWV0YWRhdGEgPyBKU09OLnBhcnNlKG1ldGFkYXRhKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgZGF0YWJhc2Ugc3lzdGVtLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRQcm9kdWN0TmFtZShkYXRhc291cmNlTmFtZT86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIERhdGFiYXNlRmFjYWRlLmdldFByb2R1Y3ROYW1lKGRhdGFzb3VyY2VOYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGEgbmV3IGRhdGFiYXNlIGNvbm5lY3Rpb24gb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRDb25uZWN0aW9uKGRhdGFzb3VyY2VOYW1lPzogc3RyaW5nKTogQ29ubmVjdGlvbiB7XG5cdFx0cmV0dXJuIG5ldyBDb25uZWN0aW9uKGRhdGFzb3VyY2VOYW1lKTtcblx0fVxufVxuXG4vLyBAdHMtaWdub3JlXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0XHREYXRhYmFzZSxcblx0XHRDb25uZWN0aW9uLFxuXHRcdFByZXBhcmVkU3RhdGVtZW50LFxuXHRcdENhbGxhYmxlU3RhdGVtZW50LFxuXHRcdFJlc3VsdFNldCxcblx0XHREYXRhYmFzZVN5c3RlbSxcblx0XHRTUUxUeXBlc1xuXHR9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFB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O0FBQUEsRUFLQSxPQUFjLFlBQVksZ0JBQXVEO0FBQ2hGLFVBQU0sV0FBVyxlQUFlLFlBQVksY0FBYztBQUMxRCxXQUFPLFdBQVcsS0FBSyxNQUFNLFFBQVEsSUFBSTtBQUFBLEVBQzFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxPQUFjLGVBQWUsZ0JBQWlDO0FBQzdELFdBQU8sZUFBZSxlQUFlLGNBQWM7QUFBQSxFQUNwRDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBYyxjQUFjLGdCQUFxQztBQUNoRSxXQUFPLElBQUksV0FBVyxjQUFjO0FBQUEsRUFDckM7QUFDRDtBQUdBLElBQUksT0FBTyxXQUFXLGFBQWE7QUFFbEMsU0FBTyxVQUFVO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNEO0FBQ0Q7IiwKICAibmFtZXMiOiBbIkRhdGFiYXNlU3lzdGVtIiwgImlzSGFuYURhdGFiYXNlIl0KfQo=
|
|
906
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RiL2RhdGFiYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEFQSSBEYXRhYmFzZVxuICpcbiAqL1xuaW1wb3J0IHsgQnl0ZXMgfSBmcm9tIFwiQGFlcm9raXQvc2RrL2lvL2J5dGVzXCI7XG5pbXBvcnQgeyBJbnB1dFN0cmVhbSB9IGZyb20gXCJAYWVyb2tpdC9zZGsvaW8vc3RyZWFtc1wiO1xuXG5jb25zdCBEYXRhYmFzZUZhY2FkZSA9IEphdmEudHlwZShcIm9yZy5lY2xpcHNlLmRpcmlnaWJsZS5jb21wb25lbnRzLmFwaS5kYi5EYXRhYmFzZUZhY2FkZVwiKTtcbmNvbnN0IEpTcWxEYXRlID0gSmF2YS50eXBlKFwiamF2YS5zcWwuRGF0ZVwiKTtcbmNvbnN0IEpTcWxUaW1lc3RhbXAgPSBKYXZhLnR5cGUoXCJqYXZhLnNxbC5UaW1lc3RhbXBcIik7XG5jb25zdCBKU3FsVGltZSA9IEphdmEudHlwZShcImphdmEuc3FsLlRpbWVcIik7XG5jb25zdCBTdHJpbmdXcml0ZXIgPSBKYXZhLnR5cGUoXCJqYXZhLmlvLlN0cmluZ1dyaXRlclwiKTtcbmNvbnN0IFdyaXRlck91dHB1dFN0cmVhbSA9IEphdmEudHlwZShcIm9yZy5hcGFjaGUuY29tbW9ucy5pby5vdXRwdXQuV3JpdGVyT3V0cHV0U3RyZWFtXCIpO1xuY29uc3QgU3RhbmRhcmRDaGFyc2V0cyA9IEphdmEudHlwZShcImphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0c1wiKTtcblxuLyoqXG4gKiBNYXBwaW5nIG9mIFNRTCB0eXBlIG5hbWVzIHRvIHRoZWlyIGphdmEuc3FsLlR5cGVzIGludGVnZXIgY29uc3RhbnRzLlxuICovXG5leHBvcnQgY29uc3QgU1FMVHlwZXMgPSBPYmplY3QuZnJlZXplKHtcblx0XCJCT09MRUFOXCI6IDE2LFxuXHRcIkRBVEVcIjogOTEsXG5cdFwiVElNRVwiOiA5Mixcblx0XCJUSU1FU1RBTVBcIjogOTMsXG5cdFwiRE9VQkxFXCI6IDgsXG5cdFwiRkxPQVRcIjogNixcblx0XCJSRUFMXCI6IDcsXG5cdFwiVElOWUlOVFwiOiAtNixcblx0XCJTTUFMTElOVFwiOiA1LFxuXHRcIklOVEVHRVJcIjogNCxcblx0XCJCSUdJTlRcIjogLTUsXG5cdFwiVkFSQ0hBUlwiOiAxMixcblx0XCJDSEFSXCI6IDEsXG5cdFwiQ0xPQlwiOiAyMDA1LFxuXHRcIkJMT0JcIjogMjAwNCxcblx0XCJWQVJCSU5BUllcIjogLTMsXG5cdFwiREVDSU1BTFwiOiAzLFxuXHRcIkFSUkFZXCI6IDIwMDMsXG5cdFwiTlZBUkNIQVJcIjogLTksXG5cdFwiTkNMT0JcIjogMjAxMSxcblx0XCJCSVRcIjogLTdcbn0pO1xuXG5leHBvcnQgZW51bSBEYXRhYmFzZVN5c3RlbSB7XG5cdFVOS05PV04sIERFUkJZLCBQT1NUR1JFU1FMLCBIMiwgTUFSSUFEQiwgSEFOQSwgU05PV0ZMQUtFLCBNWVNRTCwgTU9OR09EQiwgU1lCQVNFLCBNU1NRTFxufVxuXG4vLyAtLS0gTWV0YWRhdGEgSW50ZXJmYWNlcyAtLS1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZU1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUgdHlwZS4gKi9cblx0cmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXHQvKiogVGhlIHJlbWFya3MuICovXG5cdHJlYWRvbmx5IHJlbWFya3M6IHN0cmluZztcblx0LyoqIFRoZSBjb2x1bW5zLiAqL1xuXHRyZWFkb25seSBjb2x1bW5zOiBDb2x1bW5NZXRhZGF0YVtdO1xuXHQvKiogVGhlIGluZGljZXMuICovXG5cdHJlYWRvbmx5IGluZGljZXM6IEluZGV4TWV0YWRhdGFbXTtcblx0LyoqIFRoZSBpbmRpY2VzLiAqL1xuXHRyZWFkb25seSBmb3JlaWduS2V5czogRm9yZWlnbktleU1ldGFkYXRhW107XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbk1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUgdHlwZS4gKi9cblx0cmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXHQvKiogVGhlIHNpemUuICovXG5cdHJlYWRvbmx5IHNpemU6IG51bWJlcjtcblx0LyoqIFRoZSBudWxsYWJsZS4gKi9cblx0cmVhZG9ubHkgbnVsbGFibGU6IGJvb2xlYW47XG5cdC8qKiBUaGUga2V5LiAqL1xuXHRyZWFkb25seSBrZXk6IGJvb2xlYW47XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xuXHQvKiogVGhlIHNjYWxlLiAqL1xuXHRyZWFkb25seSBzY2FsZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4TWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlLiAqL1xuXHRyZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cdC8qKiBUaGUgY29sdW1uLiAqL1xuXHRyZWFkb25seSBjb2x1bW46IHN0cmluZztcblx0LyoqIFRoZSBub24gdW5pcXVlLiAqL1xuXHRyZWFkb25seSBub25VbmlxdWU6IGJvb2xlYW47XG5cdC8qKiBUaGUgcXVhbGlmaWVyLiAqL1xuXHRyZWFkb25seSBxdWFsaWZpZXI6IHN0cmluZztcblx0LyoqIFRoZSBvcmRpbmFsIHBvc2l0aW9uLiAqL1xuXHRyZWFkb25seSBvcmRpbmFsUG9zaXRpb246IHN0cmluZztcblx0LyoqIFRoZSBzb3J0IG9yZGVyLiAqL1xuXHRyZWFkb25seSBzb3J0T3JkZXI6IHN0cmluZztcblx0LyoqIFRoZSBjYXJkaW5hbGl0eS4gKi9cblx0cmVhZG9ubHkgY2FyZGluYWxpdHk6IG51bWJlcjtcblx0LyoqIFRoZSBwYWdlcy4gKi9cblx0cmVhZG9ubHkgcGFnZXM6IG51bWJlcjtcblx0LyoqIFRoZSBmaWx0ZXIgY29uZGl0aW9uLiAqL1xuXHRyZWFkb25seSBmaWx0ZXJDb25kaXRpb246IHN0cmluZztcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZWlnbktleU1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYU1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xuXHQvKiogVGhlIHRhYmxlcy4gKi9cblx0cmVhZG9ubHkgdGFibGVzOiBUYWJsZU1ldGFkYXRhW107XG5cdC8qKiBUaGUgdmlld3MuICovXG5cdHJlYWRvbmx5IHZpZXdzOiBUYWJsZU1ldGFkYXRhW107XG5cdC8qKiBUaGUgcHJvY2VkdXJlcy4gKi9cblx0cmVhZG9ubHkgcHJvY2VkdXJlczogUHJvY2VkdXJlTWV0YWRhdGFbXTtcblx0LyoqIFRoZSBmdW5jdGlvbnMuICovXG5cdHJlYWRvbmx5IGZ1bmN0aW9uczogRnVuY3Rpb25NZXRhZGF0YVtdO1xuXHQvKiogVGhlIGZ1bmN0aW9ucy4gKi9cblx0cmVhZG9ubHkgc2VxdWVuY2VzOiBTZXF1ZW5jZU1ldGFkYXRhW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2VkdXJlTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlLiAqL1xuXHRyZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cdC8qKiBUaGUgcmVtYXJrcy4gKi9cblx0cmVhZG9ubHkgcmVtYXJrczogc3RyaW5nO1xuXHQvKiogVGhlIGNvbHVtbnMuICovXG5cdHJlYWRvbmx5IGNvbHVtbnM6IFBhcmFtZXRlckNvbHVtbk1ldGFkYXRhW107XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlLiAqL1xuXHRyZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cdC8qKiBUaGUgcmVtYXJrcy4gKi9cblx0cmVhZG9ubHkgcmVtYXJrczogc3RyaW5nO1xuXHQvKiogVGhlIGNvbHVtbnMuICovXG5cdHJlYWRvbmx5IGNvbHVtbnM6IFBhcmFtZXRlckNvbHVtbk1ldGFkYXRhW107XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlckNvbHVtbk1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogbnVtYmVyO1xuXHQvKiogVGhlIHR5cGUuICovXG5cdHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblx0LyoqIFRoZSBwcmVjaXNpb24uICovXG5cdHJlYWRvbmx5IHByZWNpc2lvbjogbnVtYmVyO1xuXHQvKiogVGhlIGxlbmd0aC4gKi9cblx0cmVhZG9ubHkgbGVuZ3RoOiBudW1iZXI7XG5cdC8qKiBUaGUgc2NhbGUuICovXG5cdHJlYWRvbmx5IHNjYWxlOiBudW1iZXI7XG5cdC8qKiBUaGUgcmFkaXguICovXG5cdHJlYWRvbmx5IHJhZGl4OiBudW1iZXI7XG5cdC8qKiBUaGUgbnVsbGFibGUuICovXG5cdHJlYWRvbmx5IG51bGxhYmxlOiBib29sZWFuO1xuXHQvKiogVGhlIHJlbWFya3MuICovXG5cdHJlYWRvbmx5IHJlbWFya3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXF1ZW5jZU1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlTWV0YWRhdGEge1xuXHRyZWFkb25seSBhbGxQcm9jZWR1cmVzQXJlQ2FsbGFibGU6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGFsbFRhYmxlc0FyZVNlbGVjdGFibGU6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHVybDogc3RyaW5nO1xuXHRyZWFkb25seSB1c2VyTmFtZTogc3RyaW5nO1xuXHRyZWFkb25seSBpc1JlYWRPbmx5OiBib29sZWFuO1xuXHRyZWFkb25seSBudWxsc0FyZVNvcnRlZEhpZ2g6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG51bGxzQXJlU29ydGVkTG93OiBib29sZWFuO1xuXHRyZWFkb25seSBudWxsc0FyZVNvcnRlZEF0U3RhcnQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG51bGxzQXJlU29ydGVkQXRFbmQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGRhdGFiYXNlUHJvZHVjdE5hbWU6IHN0cmluZztcblx0cmVhZG9ubHkgZGF0YWJhc2VQcm9kdWN0VmVyc2lvbjogc3RyaW5nO1xuXHRyZWFkb25seSBkcml2ZXJOYW1lOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGRyaXZlclZlcnNpb246IHN0cmluZztcblx0cmVhZG9ubHkgZHJpdmVyTWFqb3JWZXJzaW9uOiBudW1iZXI7XG5cdHJlYWRvbmx5IGRyaXZlck1pbm9yVmVyc2lvbjogbnVtYmVyO1xuXHRyZWFkb25seSB1c2VzTG9jYWxGaWxlczogYm9vbGVhbjtcblx0cmVhZG9ubHkgdXNlc0xvY2FsRmlsZVBlclRhYmxlOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c01peGVkQ2FzZUlkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdG9yZXNVcHBlckNhc2VJZGVudGlmaWVyczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3RvcmVzTG93ZXJDYXNlSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN0b3Jlc01peGVkQ2FzZUlkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c01peGVkQ2FzZVF1b3RlZElkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdG9yZXNVcHBlckNhc2VRdW90ZWRJZGVudGlmaWVyczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3RvcmVzTG93ZXJDYXNlUXVvdGVkSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN0b3Jlc01peGVkQ2FzZVF1b3RlZElkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBpZGVudGlmaWVyUXVvdGVTdHJpbmc6IHN0cmluZztcblx0cmVhZG9ubHkgc3FsS2V5d29yZHM6IHN0cmluZztcblx0cmVhZG9ubHkgbnVtZXJpY0Z1bmN0aW9uczogc3RyaW5nO1xuXHRyZWFkb25seSBzdHJpbmdGdW5jdGlvbnM6IHN0cmluZztcblx0cmVhZG9ubHkgc3lzdGVtRnVuY3Rpb25zOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHRpbWVEYXRlRnVuY3Rpb25zOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHNlYXJjaFN0cmluZ0VzY2FwZTogc3RyaW5nO1xuXHRyZWFkb25seSBleHRyYU5hbWVDaGFyYWN0ZXJzOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHN1cHBvcnRzQWx0ZXJUYWJsZVdpdGhBZGRDb2x1bW46IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQWx0ZXJUYWJsZVdpdGhEcm9wQ29sdW1uOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0NvbHVtbkFsaWFzaW5nOiBib29sZWFuO1xuXHRyZWFkb25seSBudWxsUGx1c05vbk51bGxJc051bGw6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ29udmVydDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNUYWJsZUNvcnJlbGF0aW9uTmFtZXM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzRGlmZmVyZW50VGFibGVDb3JyZWxhdGlvbk5hbWVzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0V4cHJlc3Npb25zSW5PcmRlckJ5OiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c09yZGVyQnlVbnJlbGF0ZWQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzR3JvdXBCeTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNHcm91cEJ5VW5yZWxhdGVkOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0dyb3VwQnlCZXlvbmRTZWxlY3Q6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTGlrZUVzY2FwZUNsYXVzZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNNdWx0aXBsZVJlc3VsdFNldHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTXVsdGlwbGVUcmFuc2FjdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTm9uTnVsbGFibGVDb2x1bW5zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c01pbmltdW1TUUxHcmFtbWFyOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0NvcmVTUUxHcmFtbWFyOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0V4dGVuZGVkU1FMR3JhbW1hcjogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNBTlNJOTJFbnRyeUxldmVsU1FMOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0FOU0k5MkludGVybWVkaWF0ZVNRTDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNBTlNJOTJGdWxsU1FMOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0ludGVncml0eUVuaGFuY2VtZW50RmFjaWxpdHk6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3V0ZXJKb2luczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNGdWxsT3V0ZXJKb2luczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNMaW1pdGVkT3V0ZXJKb2luczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc2NoZW1hVGVybTogc3RyaW5nO1xuXHRyZWFkb25seSBwcm9jZWR1cmVUZXJtOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGNhdGFsb2dUZXJtOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGlzQ2F0YWxvZ0F0U3RhcnQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGNhdGFsb2dTZXBhcmF0b3I6IHN0cmluZztcblx0cmVhZG9ubHkgc3VwcG9ydHNTY2hlbWFzSW5EYXRhTWFuaXB1bGF0aW9uOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1NjaGVtYXNJblByb2NlZHVyZUNhbGxzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1NjaGVtYXNJblRhYmxlRGVmaW5pdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU2NoZW1hc0luSW5kZXhEZWZpbml0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTY2hlbWFzSW5Qcml2aWxlZ2VEZWZpbml0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDYXRhbG9nc0luRGF0YU1hbmlwdWxhdGlvbjogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDYXRhbG9nc0luUHJvY2VkdXJlQ2FsbHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ2F0YWxvZ3NJblRhYmxlRGVmaW5pdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ2F0YWxvZ3NJbkluZGV4RGVmaW5pdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ2F0YWxvZ3NJblByaXZpbGVnZURlZmluaXRpb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1Bvc2l0aW9uZWREZWxldGU6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzUG9zaXRpb25lZFVwZGF0ZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTZWxlY3RGb3JVcGRhdGU6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU3RvcmVkUHJvY2VkdXJlczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdWJxdWVyaWVzSW5Db21wYXJpc29uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdWJxdWVyaWVzSW5FeGlzdHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU3VicXVlcmllc0luSW5zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1N1YnF1ZXJpZXNJblF1YW50aWZpZWRzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0NvcnJlbGF0ZWRTdWJxdWVyaWVzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1VuaW9uOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1VuaW9uQWxsOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c09wZW5DdXJzb3JzQWNyb3NzQ29tbWl0OiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c09wZW5DdXJzb3JzQWNyb3NzUm9sbGJhY2s6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3BlblN0YXRlbWVudHNBY3Jvc3NDb21taXQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3BlblN0YXRlbWVudHNBY3Jvc3NSb2xsYmFjazogYm9vbGVhbjtcblx0cmVhZG9ubHkgbWF4QmluYXJ5TGl0ZXJhbExlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDaGFyTGl0ZXJhbExlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb2x1bW5OYW1lTGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heENvbHVtbnNJbkdyb3VwQnk6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q29sdW1uc0luSW5kZXg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q29sdW1uc0luT3JkZXJCeTogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb2x1bW5zSW5TZWxlY3Q6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q29sdW1uc0luVGFibGU6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q29ubmVjdGlvbnM6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q3Vyc29yTmFtZUxlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhJbmRleExlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhTY2hlbWFOYW1lTGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heFByb2NlZHVyZU5hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q2F0YWxvZ05hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Um93U2l6ZTogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhSb3dTaXplSW5jbHVkZUJsb2JzOiBib29sZWFuO1xuXHRyZWFkb25seSBtYXhTdGF0ZW1lbnRMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4U3RhdGVtZW50czogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhUYWJsZU5hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4VGFibGVzSW5TZWxlY3Q6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4VXNlck5hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgZGVmYXVsdFRyYW5zYWN0aW9uSXNvbGF0aW9uOiBudW1iZXI7XG5cdHJlYWRvbmx5IHN1cHBvcnRzVHJhbnNhY3Rpb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0RhdGFEZWZpbml0aW9uQW5kRGF0YU1hbmlwdWxhdGlvblRyYW5zYWN0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNEYXRhTWFuaXB1bGF0aW9uVHJhbnNhY3Rpb25zT25seTogYm9vbGVhbjtcblx0cmVhZG9ubHkgZGF0YURlZmluaXRpb25DYXVzZXNUcmFuc2FjdGlvbkNvbW1pdDogYm9vbGVhbjtcblx0cmVhZG9ubHkgZGF0YURlZmluaXRpb25JZ25vcmVkSW5UcmFuc2FjdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQmF0Y2hVcGRhdGVzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1NhdmVwb2ludHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTmFtZWRQYXJhbWV0ZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c011bHRpcGxlT3BlblJlc3VsdHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzR2V0R2VuZXJhdGVkS2V5czogYm9vbGVhbjtcblx0cmVhZG9ubHkgcmVzdWx0U2V0SG9sZGFiaWxpdHk6IG51bWJlcjtcblx0cmVhZG9ubHkgZGF0YWJhc2VNYWpvclZlcnNpb246IG51bWJlcjtcblx0cmVhZG9ubHkgZGF0YWJhc2VNaW5vclZlcnNpb246IG51bWJlcjtcblx0cmVhZG9ubHkgamRiY01ham9yVmVyc2lvbjogbnVtYmVyO1xuXHRyZWFkb25seSBqZGJjTWlub3JWZXJzaW9uOiBudW1iZXI7XG5cdHJlYWRvbmx5IHNxbFN0YXRlVHlwZTogbnVtYmVyO1xuXHRyZWFkb25seSBsb2NhdG9yc1VwZGF0ZUNvcHk6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU3RhdGVtZW50UG9vbGluZzogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdG9yZWRGdW5jdGlvbnNVc2luZ0NhbGxTeW50YXg6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGF1dG9Db21taXRGYWlsdXJlQ2xvc2VzQWxsUmVzdWx0U2V0czogYm9vbGVhbjtcblx0cmVhZG9ubHkgZ2VuZXJhdGVkS2V5QWx3YXlzUmV0dXJuZWQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG1heExvZ2ljYWxMb2JTaXplOiBudW1iZXI7XG5cdHJlYWRvbmx5IHN1cHBvcnRzUmVmQ3Vyc29yczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc2NoZW1hczogU2NoZW1hTWV0YWRhdGFbXTtcblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG4vLyAtLS0gSGVscGVyIEZ1bmN0aW9ucyAtLS1cblxuZnVuY3Rpb24gaXNIYW5hRGF0YWJhc2UoY29ubmVjdGlvbjogYW55KTogYm9vbGVhbiB7XG5cdGxldCBpc0hhbmFEYXRhYmFzZSA9IGZhbHNlO1xuXHRsZXQgbWV0YWRhdGEgPSBjb25uZWN0aW9uLmdldE1ldGFEYXRhKCk7XG5cdGlmIChtZXRhZGF0YSAhPT0gbnVsbCAmJiBtZXRhZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aXNIYW5hRGF0YWJhc2UgPSBtZXRhZGF0YS5nZXREYXRhYmFzZVByb2R1Y3ROYW1lKCkgPT09IFwiSERCXCI7XG5cdH1cblx0cmV0dXJuIGlzSGFuYURhdGFiYXNlO1xufVxuXG5mdW5jdGlvbiByZWFkQ2xvYlZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBhbnkge1xuXHRyZXR1cm4gdmFsdWUgPyB2YWx1ZS5nZXRTdWJTdHJpbmcoMSwgdmFsdWUubGVuZ3RoKCkpIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsb2JWYWx1ZShuYXRpdmU6IGFueSwgdmFsdWU6IGFueSk6IGFueSB7XG5cdHRyeSB7XG5cdFx0bGV0IGNvbm5lY3Rpb24gPSBuYXRpdmUuZ2V0Q29ubmVjdGlvbigpOyAvLyBpbnRlbnRpb25hbGx5IG5vdCBjbG9zZWRcblx0XHRpZiAoY29ubmVjdGlvbiA9PT0gbnVsbCB8fCBjb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNhbid0IGNyZWF0ZSBuZXcgJ0Nsb2InIHZhbHVlIGFzIHRoZSBjb25uZWN0aW9uIGlzIG51bGxcIik7XG5cdFx0fVxuXHRcdGxldCBjbG9iID0gbnVsbDtcblx0XHRpZiAoaXNIYW5hRGF0YWJhc2UoY29ubmVjdGlvbikpIHtcblx0XHRcdGxldCBwcyA9IG51bGw7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwcyA9IGNvbm5lY3Rpb24ucHJlcGFyZVN0YXRlbWVudChcIlNFTEVDVCBUT19DTE9CICg/KSBGUk9NIERVTU1ZO1wiKTtcblx0XHRcdFx0cHMuc2V0U3RyaW5nKDEsIHZhbHVlKTtcblx0XHRcdFx0bGV0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7XG5cdFx0XHRcdGlmIChycy5uZXh0KCkpIHtcblx0XHRcdFx0XHRjbG9iID0gcnMuZ2V0Q2xvYigxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKHBzICE9PSBudWxsICYmIHBzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwcy5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNsb2IgPSBjb25uZWN0aW9uLmNyZWF0ZUNsb2IoKTtcblx0XHRcdGNsb2Iuc2V0U3RyaW5nKDEsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNsb2I7XG5cdH0gY2F0Y2ggKGU6IGFueSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJlZCBkdXJpbmcgY3JlYXRpb24gb2YgJ0Nsb2InIHZhbHVlOiAke2UubWVzc2FnZX1gKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWFkTkNsb2JWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHwgYW55IHtcblx0cmV0dXJuIHZhbHVlID8gdmFsdWUuZ2V0U3ViU3RyaW5nKDEsIHZhbHVlLmxlbmd0aCgpKSA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOQ2xvYlZhbHVlKG5hdGl2ZTogYW55LCB2YWx1ZTogYW55KTogYW55IHtcblx0dHJ5IHtcblx0XHRsZXQgY29ubmVjdGlvbiA9IG5hdGl2ZS5nZXRDb25uZWN0aW9uKCk7IC8vIGludGVudGlvbmFsbHkgbm90IGNsb3NlZFxuXHRcdGlmIChjb25uZWN0aW9uID09PSBudWxsIHx8IGNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgY3JlYXRlIG5ldyAnTkNsb2InIHZhbHVlIGFzIHRoZSBjb25uZWN0aW9uIGlzIG51bGxcIik7XG5cdFx0fVxuXHRcdGxldCBuY2xvYiA9IG51bGw7XG5cdFx0aWYgKGlzSGFuYURhdGFiYXNlKGNvbm5lY3Rpb24pKSB7XG5cdFx0XHRsZXQgcHMgPSBudWxsO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cHMgPSBjb25uZWN0aW9uLnByZXBhcmVTdGF0ZW1lbnQoXCJTRUxFQ1QgVE9fTkNMT0IgKD8pIEZST00gRFVNTVk7XCIpO1xuXHRcdFx0XHRwcy5zZXRTdHJpbmcoMSwgdmFsdWUpO1xuXHRcdFx0XHRsZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTtcblx0XHRcdFx0aWYgKHJzLm5leHQoKSkge1xuXHRcdFx0XHRcdG5jbG9iID0gcnMuZ2V0TkNsb2IoMSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmIChwcyAhPT0gbnVsbCAmJiBwcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cHMuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRuY2xvYiA9IGNvbm5lY3Rpb24uY3JlYXRlTkNsb2IoKTtcblx0XHRcdG5jbG9iLnNldFN0cmluZygxLCB2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBuY2xvYjtcblx0fSBjYXRjaCAoZTogYW55KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cmVkIGR1cmluZyBjcmVhdGlvbiBvZiAnTkNsb2InIHZhbHVlOiAke2UubWVzc2FnZX1gKTtcblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCbG9iVmFsdWUobmF0aXZlOiBhbnksIHZhbHVlOiBhbnkpOiBhbnkge1xuXHR0cnkge1xuXHRcdGxldCBjb25uZWN0aW9uID0gbmF0aXZlLmdldENvbm5lY3Rpb24oKTsgLy8gaW50ZW50aW9uYWxseSBub3QgY2xvc2VkXG5cdFx0aWYgKGNvbm5lY3Rpb24gPT09IG51bGwgfHwgY29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBjcmVhdGUgbmV3ICdCbG9iJyB2YWx1ZSBhcyB0aGUgY29ubmVjdGlvbiBpcyBudWxsXCIpO1xuXHRcdH1cblx0XHRsZXQgYmxvYiA9IG51bGw7XG5cdFx0aWYgKGlzSGFuYURhdGFiYXNlKGNvbm5lY3Rpb24pKSB7XG5cdFx0XHRsZXQgcHMgPSBudWxsO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cHMgPSBjb25uZWN0aW9uLnByZXBhcmVTdGF0ZW1lbnQoXCJTRUxFQ1QgVE9fQkxPQiAoPykgRlJPTSBEVU1NWTtcIik7XG5cdFx0XHRcdHBzLnNldEJ5dGVzKDEsIHZhbHVlKTtcblx0XHRcdFx0bGV0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7XG5cdFx0XHRcdGlmIChycy5uZXh0KCkpIHtcblx0XHRcdFx0XHRibG9iID0gcnMuZ2V0QmxvYigxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKHBzICE9PSBudWxsICYmIHBzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwcy5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJsb2IgPSBjb25uZWN0aW9uLmNyZWF0ZUJsb2IoKTtcblx0XHRcdGJsb2Iuc2V0Qnl0ZXMoMSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYmxvYjtcblx0fSBjYXRjaCAoZTogYW55KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cmVkIGR1cmluZyBjcmVhdGlvbiBvZiAnQ2xvYicgdmFsdWU6ICR7ZS5tZXNzYWdlfWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldERhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSk6IERhdGUge1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8vIC0tLSBTdGF0ZW1lbnQgQ2xhc3NlcyAtLS1cblxuLyoqXG4gKiBTdGF0ZW1lbnQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjbGFzcyBQcmVwYXJlZFN0YXRlbWVudCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0cHVibGljIGNsb3NlKCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmNsb3NlKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UmVzdWx0U2V0KCk6IFJlc3VsdFNldCB7XG5cdFx0cmV0dXJuIG5ldyBSZXN1bHRTZXQodGhpcy5uYXRpdmUuZ2V0UmVzdWx0U2V0KCkpO1xuXHR9XG5cblx0cHVibGljIGV4ZWN1dGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBleGVjdXRlUXVlcnkoKTogUmVzdWx0U2V0IHtcblx0XHRyZXR1cm4gbmV3IFJlc3VsdFNldCh0aGlzLm5hdGl2ZS5leGVjdXRlUXVlcnkoKSk7XG5cdH1cblxuXHRwdWJsaWMgZXhlY3V0ZVVwZGF0ZSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5leGVjdXRlVXBkYXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0TnVsbChpbmRleDogbnVtYmVyLCBzcWxUeXBlOiBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXROdWxsKGluZGV4LCBzcWxUeXBlKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXg6IG51bWJlciwgaW5wdXRTdHJlYW06IElucHV0U3RyZWFtLCBsZW5ndGg/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAobGVuZ3RoKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXgsIGlucHV0U3RyZWFtLCBsZW5ndGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXgsIGlucHV0U3RyZWFtKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Qm9vbGVhbihpbmRleDogbnVtYmVyLCB2YWx1ZT86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qm9vbGVhbihpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkJPT0xFQU4pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCeXRlKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55IC8qOiBCeXRlKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qnl0ZShpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlRJTllJTlQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCbG9iKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55IC8qKjogQmxvYiovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxldCBibG9iID0gY3JlYXRlQmxvYlZhbHVlKHRoaXMubmF0aXZlLCB2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCbG9iKGluZGV4LCBibG9iKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5CTE9CKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Q2xvYihpbmRleDogbnVtYmVyLCB2YWx1ZT86IGFueSAvKjogQ2xvYiovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxldCBjbG9iID0gY3JlYXRlQ2xvYlZhbHVlKHRoaXMubmF0aXZlLCB2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRDbG9iKGluZGV4LCBjbG9iKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5DTE9CKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0TkNsb2IoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnkgLyo6IE5DbG9iKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IG5jbG9iID0gY3JlYXRlTkNsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgdmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0TkNsb2IoaW5kZXgsIG5jbG9iKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5OQ0xPQik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJ5dGVzTmF0aXZlKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55W10gLypieXRlW10qLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCeXRlcyhpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlZBUkJJTkFSWSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJ5dGVzKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55W10gLypieXRlW10qLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YXIgZGF0YSA9IEJ5dGVzLnRvSmF2YUJ5dGVzKHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJ5dGVzKGluZGV4LCBkYXRhKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5WQVJCSU5BUlkpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXREYXRlKGluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nIHwgRGF0ZSk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkYXRlID0gZ2V0RGF0ZVZhbHVlKHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldERhdGUoaW5kZXgsIG5ldyBKU3FsRGF0ZShkYXRlLmdldFRpbWUoKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkRBVEUpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXREb3VibGUoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RG91YmxlKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuRE9VQkxFKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0RmxvYXQoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RmxvYXQoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5GTE9BVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEludChpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRJbnQoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5JTlRFR0VSKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0TG9uZyhpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRMb25nKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuQklHSU5UKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0U2hvcnQoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0U2hvcnQoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5TTUFMTElOVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFN0cmluZyhpbmRleDogbnVtYmVyLCB2YWx1ZT86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRTdHJpbmcoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5WQVJDSEFSKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0VGltZShpbmRleDogbnVtYmVyLCB2YWx1ZT86IHN0cmluZyB8IERhdGUpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgZGF0ZSA9IGdldERhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRUaW1lKGluZGV4LCBuZXcgSlNxbFRpbWUoZGF0ZS5nZXRUaW1lKCkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5USU1FKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0VGltZXN0YW1wKGluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nIHwgRGF0ZSk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkYXRlID0gZ2V0RGF0ZVZhbHVlKHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldFRpbWVzdGFtcChpbmRleCwgbmV3IEpTcWxUaW1lc3RhbXAoZGF0ZS5nZXRUaW1lKCkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5USU1FU1RBTVApO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCaWdEZWNpbWFsKGluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyIC8qOiBCaWdEZWNpbWFsKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0QmlnRGVjaW1hbChpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkRFQ0lNQUwpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXROU3RyaW5nKGluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldE5TdHJpbmcoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5OVkFSQ0hBUik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGFkZEJhdGNoKCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmFkZEJhdGNoKCk7XG5cdH1cblxuXHRwdWJsaWMgZXhlY3V0ZUJhdGNoKCk6IG51bWJlcltdIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZXhlY3V0ZUJhdGNoKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWV0YURhdGEoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TWV0YURhdGEoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNb3JlUmVzdWx0cygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TW9yZVJlc3VsdHMoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRQYXJhbWV0ZXJNZXRhRGF0YSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRQYXJhbWV0ZXJNZXRhRGF0YSgpO1xuXHR9XG5cblx0cHVibGljIGdldFNRTFdhcm5pbmcoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0V2FybmluZ3MoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Nsb3NlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNDbG9zZWQoKTtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgQ2FsbGFibGVTdGF0ZW1lbnQge1xuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UmVzdWx0U2V0KCk6IFJlc3VsdFNldCB7XG5cdFx0cmV0dXJuIG5ldyBSZXN1bHRTZXQodGhpcy5uYXRpdmUuZ2V0UmVzdWx0U2V0KCkpO1xuXHR9XG5cblx0cHVibGljIGV4ZWN1dGVRdWVyeSgpOiBSZXN1bHRTZXQge1xuXHRcdHJldHVybiBuZXcgUmVzdWx0U2V0KHRoaXMubmF0aXZlLmV4ZWN1dGVRdWVyeSgpKTtcblx0fVxuXG5cdHB1YmxpYyBleGVjdXRlVXBkYXRlKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmV4ZWN1dGVVcGRhdGUoKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck91dFBhcmFtZXRlcihwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCBzcWxUeXBlOiBrZXlvZiB0eXBlb2YgU1FMVHlwZXMgfCBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5yZWdpc3Rlck91dFBhcmFtZXRlcihwYXJhbWV0ZXJJbmRleCwgc3FsVHlwZSk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPdXRQYXJhbWV0ZXJCeVNjYWxlKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHNxbFR5cGU6IGtleW9mIHR5cGVvZiBTUUxUeXBlcyB8IG51bWJlciwgc2NhbGU6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnJlZ2lzdGVyT3V0UGFyYW1ldGVyKHBhcmFtZXRlckluZGV4LCBzcWxUeXBlLCBzY2FsZSk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPdXRQYXJhbWV0ZXJCeVR5cGVOYW1lKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHNxbFR5cGU6IGtleW9mIHR5cGVvZiBTUUxUeXBlcyB8IG51bWJlciwgdHlwZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnJlZ2lzdGVyT3V0UGFyYW1ldGVyKHBhcmFtZXRlckluZGV4LCBzcWxUeXBlLCB0eXBlTmFtZSk7XG5cdH1cblxuXHRwdWJsaWMgd2FzTnVsbCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUud2FzTnVsbCgpO1xuXHR9XG5cblx0cHVibGljIGdldFN0cmluZyhwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0U3RyaW5nKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRCb29sZWFuKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0Qm9vbGVhbihwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qnl0ZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogYW55IC8qOiBieXRlKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCeXRlKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRTaG9ydChwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0U2hvcnQocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEludChwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SW50KHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb25nKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRMb25nKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRGbG9hdChwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0RmxvYXQocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldERvdWJsZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0RG91YmxlKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXREYXRlKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBEYXRlIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXREYXRlKHBhcmFtZXRlckluZGV4KTtcblx0XHRyZXR1cm4gZGF0ZUluc3RhbmNlICE9PSBudWxsICYmIGRhdGVJbnN0YW5jZSAhPT0gdW5kZWZpbmVkID8gbmV3IERhdGUoZGF0ZUluc3RhbmNlLmdldFRpbWUoKSkgOiBkYXRlSW5zdGFuY2U7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VGltZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogRGF0ZSB7XG5cdFx0Y29uc3QgZGF0ZUluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0VGltZShwYXJhbWV0ZXJJbmRleCk7XG5cdFx0cmV0dXJuIGRhdGVJbnN0YW5jZSAhPT0gbnVsbCAmJiBkYXRlSW5zdGFuY2UgIT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKGRhdGVJbnN0YW5jZS5nZXRUaW1lKCkpIDogZGF0ZUluc3RhbmNlO1xuXHR9XG5cblx0cHVibGljIGdldFRpbWVzdGFtcChwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogRGF0ZSB7XG5cdFx0Y29uc3QgZGF0ZUluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0VGltZXN0YW1wKHBhcmFtZXRlckluZGV4KTtcblx0XHRyZXR1cm4gZGF0ZUluc3RhbmNlICE9PSBudWxsICYmIGRhdGVJbnN0YW5jZSAhPT0gdW5kZWZpbmVkID8gbmV3IERhdGUoZGF0ZUluc3RhbmNlLmdldFRpbWUoKSkgOiBkYXRlSW5zdGFuY2U7XG5cdH1cblxuXHRwdWJsaWMgZ2V0T2JqZWN0KHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRPYmplY3QocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEJpZ0RlY2ltYWwocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IG51bWJlciAvKjogc3FsLkJpZ0RlY2ltYWwqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEJpZ0RlY2ltYWwocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldFJlZihwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogYW55IC8qOiBzcWwuUmVmKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRSZWYocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEJ5dGVzKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnlbXSAvKjogYnl0ZVtdKi8ge1xuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLm5hdGl2ZS5nZXRCeXRlcyhwYXJhbWV0ZXJJbmRleCk7XG5cdFx0cmV0dXJuIEJ5dGVzLnRvSmF2YVNjcmlwdEJ5dGVzKGRhdGEpO1xuXHR9XG5cblx0cHVibGljIGdldEJ5dGVzTmF0aXZlKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnlbXSAvKjogYnl0ZVtdKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCeXRlcyhwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmxvYihwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogYW55IC8qOiBzcWwuQmxvYiovIHtcblx0XHRjb25zdCBkYXRhID0gRGF0YWJhc2VGYWNhZGUucmVhZEJsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgcGFyYW1ldGVySW5kZXgpO1xuXHRcdHJldHVybiBCeXRlcy50b0phdmFTY3JpcHRCeXRlcyhkYXRhKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRCbG9iTmF0aXZlKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkgLyo6IHNxbC5CbG9iKi8ge1xuXHRcdHJldHVybiBEYXRhYmFzZUZhY2FkZS5yZWFkQmxvYlZhbHVlKHRoaXMubmF0aXZlLCBwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q2xvYihwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogYW55IC8qOiBzcWwuQ2xvYiovIHtcblx0XHRyZXR1cm4gcmVhZENsb2JWYWx1ZSh0aGlzLm5hdGl2ZS5nZXRDbG9iKHBhcmFtZXRlckluZGV4KSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TkNsb2IocGFyYW1ldGVySW5kZXg6IHN0cmluZyB8IG51bWJlcik6IGFueSAvKjogc3FsLk5DbG9iKi8ge1xuXHRcdHJldHVybiByZWFkTkNsb2JWYWx1ZSh0aGlzLm5hdGl2ZS5nZXROQ2xvYihwYXJhbWV0ZXJJbmRleCkpO1xuXHR9XG5cblx0cHVibGljIGdldE5TdHJpbmcocGFyYW1ldGVySW5kZXg6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5TdHJpbmcocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEFycmF5KHBhcmFtZXRlckluZGV4OiBzdHJpbmcgfCBudW1iZXIpOiBhbnlbXSAvKjogc3FsLkFycmF5Ki8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRBcnJheShwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VVJMKHBhcmFtZXRlckluZGV4OiBzdHJpbmcgfCBudW1iZXIpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRVUkwocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldFJvd0lkKHBhcmFtZXRlckluZGV4OiBzdHJpbmcgfCBudW1iZXIpOiBhbnkgLyo6IHNxbC5Sb3dJZCovIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0Um93SWQocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldFNRTFhNTChwYXJhbWV0ZXJJbmRleDogc3RyaW5nIHwgbnVtYmVyKTogYW55IC8qOiBzcWwuU1FMWE1MKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTUUxYTUwocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIHNldFVSTChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuc2V0VVJMKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0TnVsbChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCBzcWxUeXBlU3RyOiBrZXlvZiB0eXBlb2YgU1FMVHlwZXMgfCBudW1iZXIsIHR5cGVOYW1lPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgc3FsVHlwZTogbnVtYmVyID0gTnVtYmVyLmlzSW50ZWdlcihzcWxUeXBlU3RyIGFzIG51bWJlcikgPyBzcWxUeXBlU3RyIGFzIG51bWJlciA6IFNRTFR5cGVzW3NxbFR5cGVTdHIgYXMga2V5b2YgdHlwZW9mIFNRTFR5cGVzXTtcblx0XHRpZiAodHlwZU5hbWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlTmFtZSAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgc3FsVHlwZSwgdHlwZU5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBzcWxUeXBlKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Qm9vbGVhbihwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qm9vbGVhbihwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkJPT0xFQU4pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCeXRlKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55IC8qOiBieXRlKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qnl0ZShwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkJJVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFNob3J0KHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldFNob3J0KHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuU01BTExJTlQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRJbnQocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0SW50KHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuSU5URUdFUik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldExvbmcocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0TG9uZyhwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkJJR0lOVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEZsb2F0KHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEZsb2F0KHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuRkxPQVQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXREb3VibGUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RG91YmxlKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuRE9VQkxFKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0QmlnRGVjaW1hbChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlciAvKjogQmlnRGVjaW1hbCovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJpZ0RlY2ltYWwocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5ERUNJTUFMKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0U3RyaW5nKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldFN0cmluZyhwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLlZBUkNIQVIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCeXRlcyhwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IGFueVtdIC8qYnl0ZVtdKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qnl0ZXMocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5BUlJBWSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldERhdGUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcgfCBEYXRlKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSBnZXREYXRlVmFsdWUodmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RGF0ZShwYXJhbWV0ZXJJbmRleCwgbmV3IEpTcWxEYXRlKGRhdGUuZ2V0VGltZSgpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuREFURSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFRpbWUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcgfCBEYXRlKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSBnZXREYXRlVmFsdWUodmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0VGltZShwYXJhbWV0ZXJJbmRleCwgbmV3IEpTcWxUaW1lKGRhdGUuZ2V0VGltZSgpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuVElNRSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFRpbWVzdGFtcChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IHN0cmluZyB8IERhdGUpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IGRhdGUgPSBnZXREYXRlVmFsdWUodmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0VGltZXN0YW1wKHBhcmFtZXRlckluZGV4LCBuZXcgSlNxbFRpbWVzdGFtcChkYXRlLmdldFRpbWUoKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLlRJTUVTVEFNUCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEFzY2lpU3RyZWFtKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIGlucHV0U3RyZWFtOiBJbnB1dFN0cmVhbSwgbGVuZ3RoPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKGxlbmd0aCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0QXNjaWlTdHJlYW0ocGFyYW1ldGVySW5kZXgsIGlucHV0U3RyZWFtLCBsZW5ndGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRBc2NpaVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXg6IG51bWJlciwgaW5wdXRTdHJlYW06IElucHV0U3RyZWFtLCBsZW5ndGg/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAobGVuZ3RoKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXgsIGlucHV0U3RyZWFtLCBsZW5ndGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXgsIGlucHV0U3RyZWFtKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0T2JqZWN0KHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnksIHRhcmdldFNxbFR5cGU/OiBudW1iZXIsIHNjYWxlPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKHNjYWxlICE9PSB1bmRlZmluZWQgJiYgc2NhbGUgIT09IG51bGwgJiYgdGFyZ2V0U3FsVHlwZSAhPT0gdW5kZWZpbmVkICYmIHRhcmdldFNxbFR5cGUgIT09IG51bGwpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldE9iamVjdChwYXJhbWV0ZXJJbmRleCwgdmFsdWUsIHRhcmdldFNxbFR5cGUsIHNjYWxlKTtcblx0XHR9IGVsc2UgaWYgKHRhcmdldFNxbFR5cGUgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXRTcWxUeXBlICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRPYmplY3QocGFyYW1ldGVySW5kZXgsIHZhbHVlLCB0YXJnZXRTcWxUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0T2JqZWN0KHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFJvd0lkKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIgLyo6IFJvd0lkKi8pOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXRSb3dJZChwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHR9XG5cblx0cHVibGljIHNldE5TdHJpbmcocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXROU3RyaW5nKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuTlZBUkNIQVIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRTUUxYTUwocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSAvKjogU1FMWE1MKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0U1FMWE1MKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIk51bGxhYmxlIFNRTFhNTCB0eXBlIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCbG9iKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnkgLypCbG9iICovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGJsb2IgPSBjcmVhdGVCbG9iVmFsdWUodGhpcy5uYXRpdmUsIHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJsb2IocGFyYW1ldGVySW5kZXgsIGJsb2IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkJMT0IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRDbG9iKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnkgLyo6IENsb2IqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBjbG9iID0gY3JlYXRlQ2xvYlZhbHVlKHRoaXMubmF0aXZlLCB2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRDbG9iKHBhcmFtZXRlckluZGV4LCBjbG9iKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5DTE9CKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0TkNsb2IocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSAvKjogTkNsb2IqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBuY2xvYiA9IGNyZWF0ZU5DbG9iVmFsdWUodGhpcy5uYXRpdmUsIHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldE5DbG9iKHBhcmFtZXRlckluZGV4LCBuY2xvYik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuTkNMT0IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBleGVjdXRlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9yZVJlc3VsdHMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE1vcmVSZXN1bHRzKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGFyYW1ldGVyTWV0YURhdGEoKTogYW55IC8qOiBQYXJhbWV0ZXJNZXRhRGF0YSovIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0UGFyYW1ldGVyTWV0YURhdGEoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Nsb3NlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNDbG9zZWQoKTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5jbG9zZSgpO1xuXHR9XG59XG5cbi8qKlxuICogUmVzdWx0U2V0IG9iamVjdFxuICovXG5leHBvcnQgY2xhc3MgUmVzdWx0U2V0IHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgdGhlIFJlc3VsdFNldCBpbnRvIGEgSlNPTiBhcnJheSBvZiBvYmplY3RzLlxuXHQgKiBAcGFyYW0gbGltaXRlZCBXaGV0aGVyIHRvIHVzZSBsaW1pdGVkIEpTT04gY29udmVyc2lvbiAob3B0aW1pemVkKS5cblx0ICogQHBhcmFtIHN0cmluZ2lmeSBXaGV0aGVyIHRvIHJldHVybiB0aGUgSlNPTiBhcyBhIHN0cmluZyBvciBhIHBhcnNlZCBhcnJheS5cblx0ICogQHJldHVybnMgQSBKYXZhU2NyaXB0IGFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgc2V0LCBvciBhIHN0cmluZyBpZiBzdHJpbmdpZnkgaXMgdHJ1ZS5cblx0ICovXG5cdHB1YmxpYyB0b0pzb24obGltaXRlZCA9IGZhbHNlLCBzdHJpbmdpZnkgPSBmYWxzZSk6IGFueVtdIHtcblx0XHRjb25zdCBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTtcblx0XHRjb25zdCBvdXRwdXQgPSBXcml0ZXJPdXRwdXRTdHJlYW1cblx0XHRcdC5idWlsZGVyKClcblx0XHRcdC5zZXRXcml0ZXIoc3cpXG5cdFx0XHQuc2V0Q2hhcnNldChTdGFuZGFyZENoYXJzZXRzLlVURl84KVxuXHRcdFx0LmdldCgpO1xuXHRcdERhdGFiYXNlRmFjYWRlLnRvSnNvbih0aGlzLm5hdGl2ZSwgbGltaXRlZCwgc3RyaW5naWZ5LCBvdXRwdXQpO1xuXHRcdGNvbnN0IGpzb25TdHJpbmcgPSBzdy50b1N0cmluZygpO1xuXHRcdHJldHVybiBzdHJpbmdpZnkgPyBqc29uU3RyaW5nIDogSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5jbG9zZSgpO1xuXHR9XG5cblx0cHVibGljIGdldEJpZ0RlY2ltYWwoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55IC8qOiBCaWdEZWNpbWFsKi8gIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0QmlnRGVjaW1hbChpZGVudGlmaWVyKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRCb29sZWFuKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCb29sZWFuKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldEJ5dGUoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55IC8qOiBieXRlKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCeXRlKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldEJ5dGVzKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IGFueVtdIC8qOiBieXRlW10qLyB7XG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMubmF0aXZlLmdldEJ5dGVzKGlkZW50aWZpZXIpO1xuXHRcdHJldHVybiBCeXRlcy50b0phdmFTY3JpcHRCeXRlcyhkYXRhKTtcblx0fTtcblxuXHRwdWJsaWMgZ2V0Qnl0ZXNOYXRpdmUoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55W10gLyo6IGJ5dGVbXSovIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0Qnl0ZXMoaWRlbnRpZmllcik7XG5cdH07XG5cblx0cHVibGljIGdldEJsb2IoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55IC8qOiBzcWwuQmxvYiovIHtcblx0XHRjb25zdCBkYXRhID0gRGF0YWJhc2VGYWNhZGUucmVhZEJsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgaWRlbnRpZmllcik7XG5cdFx0cmV0dXJuIEJ5dGVzLnRvSmF2YVNjcmlwdEJ5dGVzKGRhdGEpO1xuXHR9XG5cblx0cHVibGljIGdldEJsb2JOYXRpdmUoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55IC8qOiBzcWwuQmxvYiovIHtcblx0XHRyZXR1cm4gRGF0YWJhc2VGYWNhZGUucmVhZEJsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q2xvYihpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnkgLyo6IHNxbC5DbG9iKi8ge1xuXHRcdHJldHVybiByZWFkQ2xvYlZhbHVlKHRoaXMubmF0aXZlLmdldENsb2IoaWRlbnRpZmllcikpO1xuXHR9XG5cblx0cHVibGljIGdldE5DbG9iKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IGFueSAvKjogc3FsLk5DbG9iKi8ge1xuXHRcdHJldHVybiByZWFkTkNsb2JWYWx1ZSh0aGlzLm5hdGl2ZS5nZXROQ2xvYihpZGVudGlmaWVyKSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGF0ZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXREYXRlKGlkZW50aWZpZXIpO1xuXHRcdHJldHVybiBkYXRlSW5zdGFuY2UgIT09IG51bGwgJiYgZGF0ZUluc3RhbmNlICE9PSB1bmRlZmluZWQgPyBuZXcgRGF0ZShkYXRlSW5zdGFuY2UuZ2V0VGltZSgpKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyBnZXREb3VibGUoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0RG91YmxlKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldEZsb2F0KGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEZsb2F0KGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldEludChpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJbnQoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TG9uZyhpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRMb25nKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldFNob3J0KGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFNob3J0KGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldFN0cmluZyhpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTdHJpbmcoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VGltZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRUaW1lKGlkZW50aWZpZXIpO1xuXHRcdHJldHVybiBkYXRlSW5zdGFuY2UgIT09IG51bGwgJiYgZGF0ZUluc3RhbmNlICE9PSB1bmRlZmluZWQgPyBuZXcgRGF0ZShkYXRlSW5zdGFuY2UuZ2V0VGltZSgpKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyBnZXRUaW1lc3RhbXAoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZGF0ZUluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0VGltZXN0YW1wKGlkZW50aWZpZXIpO1xuXHRcdHJldHVybiBkYXRlSW5zdGFuY2UgIT09IG51bGwgJiYgZGF0ZUluc3RhbmNlICE9PSB1bmRlZmluZWQgPyBuZXcgRGF0ZShkYXRlSW5zdGFuY2UuZ2V0VGltZSgpKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyBpc0FmdGVyTGFzdCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNBZnRlckxhc3QoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0JlZm9yZUZpcnN0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0JlZm9yZUZpcnN0KCk7XG5cdH1cblxuXHRwdWJsaWMgaXNDbG9zZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmlzQ2xvc2VkKCk7XG5cdH1cblxuXHRwdWJsaWMgaXNGaXJzdCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNGaXJzdCgpO1xuXHR9XG5cblx0cHVibGljIGlzTGFzdCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNMYXN0KCk7XG5cdH1cblxuXHRwdWJsaWMgbmV4dCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUubmV4dCgpO1xuXHR9XG5cblx0cHVibGljIGdldE1ldGFEYXRhKCk6IGFueSAvKjogUmVzdWx0U2V0TWV0YURhdGEqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE1ldGFEYXRhKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TlN0cmluZyhjb2x1bW5JbmRleDogbnVtYmVyKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TlN0cmluZyhjb2x1bW5JbmRleCk7XG5cdH1cbn1cblxuLy8gLS0tIENvbm5lY3Rpb24gQ2xhc3MgLS0tXG5cbi8qKlxuICogQ29ubmVjdGlvbiBvYmplY3Qgd3JhcHBlciBhcm91bmQgYSBuYXRpdmUgSmF2YSBgQ29ubmVjdGlvbmAuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uIHtcblxuXHRwdWJsaWMgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IoZGF0YXNvdXJjZU5hbWU/OiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IERhdGFiYXNlRmFjYWRlLmdldENvbm5lY3Rpb24oZGF0YXNvdXJjZU5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgY29ubmVjdGlvbiBpcyBmb3IgYSBzcGVjaWZpYyBkYXRhYmFzZSBzeXN0ZW0uXG5cdCAqL1xuXHRwdWJsaWMgaXNPZlR5cGUoZGF0YWJhc2VTeXN0ZW06IERhdGFiYXNlU3lzdGVtKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RGF0YWJhc2VTeXN0ZW0oKSA9PT0gZGF0YWJhc2VTeXN0ZW07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgdW5kZXJseWluZyBkYXRhYmFzZSBzeXN0ZW0gYXMgYSB7QGxpbmsgRGF0YWJhc2VTeXN0ZW19IGVudW0uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0RGF0YWJhc2VTeXN0ZW0oKTogRGF0YWJhc2VTeXN0ZW0ge1xuXHRcdGNvbnN0IGRiU3lzdGVtOiBzdHJpbmcgPSB0aGlzLm5hdGl2ZS5nZXREYXRhYmFzZVN5c3RlbSgpLm5hbWUoKTtcblx0XHRzd2l0Y2ggKGRiU3lzdGVtKSB7XG5cdFx0XHRjYXNlIFwiREVSQllcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLkRFUkJZO1xuXHRcdFx0Y2FzZSBcIlBPU1RHUkVTUUxcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLlBPU1RHUkVTUUw7XG5cdFx0XHRjYXNlIFwiSDJcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLkgyO1xuXHRcdFx0Y2FzZSBcIk1BUklBREJcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLk1BUklBREI7XG5cdFx0XHRjYXNlIFwiSEFOQVwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uSEFOQTtcblx0XHRcdGNhc2UgXCJTTk9XRkxBS0VcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLlNOT1dGTEFLRTtcblx0XHRcdGNhc2UgXCJNU1NRTFwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uTVNTUUw7XG5cdFx0XHRjYXNlIFwiTVlTUUxcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLk1ZU1FMO1xuXHRcdFx0Y2FzZSBcIk1PTkdPREJcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLk1PTkdPREI7XG5cdFx0XHRjYXNlIFwiU1lCQVNFXCI6XG5cdFx0XHRcdHJldHVybiBEYXRhYmFzZVN5c3RlbS5TWUJBU0U7XG5cdFx0XHRjYXNlIFwiVU5LTk9XTlwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uVU5LTk9XTjtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBtYXBwaW5nIGZvciBkYXRhYmFzZSBzeXN0ZW0gdHlwZSAke2RiU3lzdGVtfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBQcmVwYXJlZFN0YXRlbWVudH0gb2JqZWN0IGZvciBzZW5kaW5nIHBhcmFtZXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gdGhlIGRhdGFiYXNlLlxuXHQgKi9cblx0cHVibGljIHByZXBhcmVTdGF0ZW1lbnQoc3FsOiBzdHJpbmcpOiBQcmVwYXJlZFN0YXRlbWVudCB7XG5cdFx0cmV0dXJuIG5ldyBQcmVwYXJlZFN0YXRlbWVudCh0aGlzLm5hdGl2ZS5wcmVwYXJlU3RhdGVtZW50KHNxbCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB7QGxpbmsgQ2FsbGFibGVTdGF0ZW1lbnR9IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZSBzdG9yZWQgcHJvY2VkdXJlcyBvciBmdW5jdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgcHJlcGFyZUNhbGwoc3FsOiBzdHJpbmcpOiBDYWxsYWJsZVN0YXRlbWVudCB7XG5cdFx0cmV0dXJuIG5ldyBDYWxsYWJsZVN0YXRlbWVudCh0aGlzLm5hdGl2ZS5wcmVwYXJlQ2FsbChzcWwpKTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuaXNDbG9zZWQoKSkge1xuXHRcdFx0dGhpcy5uYXRpdmUuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY29tbWl0KCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmNvbW1pdCgpO1xuXHR9XG5cblx0cHVibGljIGdldEF1dG9Db21taXQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEF1dG9Db21taXQoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDYXRhbG9nKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldENhdGFsb2coKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRTY2hlbWEoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0U2NoZW1hKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Nsb3NlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNDbG9zZWQoKTtcblx0fVxuXG5cdHB1YmxpYyBpc1JlYWRPbmx5KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc1JlYWRPbmx5KCk7XG5cdH1cblxuXHRwdWJsaWMgaXNWYWxpZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNWYWxpZCgpO1xuXHR9XG5cblx0cHVibGljIHJvbGxiYWNrKCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnJvbGxiYWNrKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTtcblx0fVxuXG5cdHB1YmxpYyBzZXRDYXRhbG9nKGNhdGFsb2c6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldENhdGFsb2coY2F0YWxvZyk7XG5cdH1cblxuXHRwdWJsaWMgc2V0UmVhZE9ubHkocmVhZE9ubHk6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXRSZWFkT25seShyZWFkT25seSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0U2NoZW1hKHNjaGVtYTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuc2V0U2NoZW1hKHNjaGVtYSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbnNhY3Rpb25Jc29sYXRpb246IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5zYWN0aW9uSXNvbGF0aW9uKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNZXRhRGF0YSgpOiBhbnkgLyo6IERhdGFiYXNlTWV0YURhdGEqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE1ldGFEYXRhKCk7XG5cdH1cbn1cblxuLy8gLS0tIERhdGFiYXNlIENsYXNzIC0tLVxuXG5leHBvcnQgY2xhc3MgRGF0YWJhc2Uge1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbGlzdCBvZiBhdmFpbGFibGUgZGF0YSBzb3VyY2UgbmFtZXMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldERhdGFTb3VyY2VzKCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBkYXRhc291cmNlcyA9IERhdGFiYXNlRmFjYWRlLmdldERhdGFTb3VyY2VzKCk7XG5cdFx0cmV0dXJuIGRhdGFzb3VyY2VzID8gSlNPTi5wYXJzZShkYXRhc291cmNlcykgOiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGRhdGFiYXNlIG1ldGFkYXRhIGZvciB0aGUgc3BlY2lmaWVkIGRhdGEgc291cmNlLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRNZXRhZGF0YShkYXRhc291cmNlTmFtZT86IHN0cmluZyk6IERhdGFiYXNlTWV0YWRhdGEgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gRGF0YWJhc2VGYWNhZGUuZ2V0TWV0YWRhdGEoZGF0YXNvdXJjZU5hbWUpO1xuXHRcdHJldHVybiBtZXRhZGF0YSA/IEpTT04ucGFyc2UobWV0YWRhdGEpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHByb2R1Y3QgbmFtZSBvZiB0aGUgdW5kZXJseWluZyBkYXRhYmFzZSBzeXN0ZW0uXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldFByb2R1Y3ROYW1lKGRhdGFzb3VyY2VOYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gRGF0YWJhc2VGYWNhZGUuZ2V0UHJvZHVjdE5hbWUoZGF0YXNvdXJjZU5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYSBuZXcgZGF0YWJhc2UgY29ubmVjdGlvbiBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldENvbm5lY3Rpb24oZGF0YXNvdXJjZU5hbWU/OiBzdHJpbmcpOiBDb25uZWN0aW9uIHtcblx0XHRyZXR1cm4gbmV3IENvbm5lY3Rpb24oZGF0YXNvdXJjZU5hbWUpO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHRcdERhdGFiYXNlLFxuXHRcdENvbm5lY3Rpb24sXG5cdFx0UHJlcGFyZWRTdGF0ZW1lbnQsXG5cdFx0Q2FsbGFibGVTdGF0ZW1lbnQsXG5cdFx0UmVzdWx0U2V0LFxuXHRcdERhdGFiYXNlU3lzdGVtLFxuXHRcdFNRTFR5cGVzXG5cdH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7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RUFLckIsT0FBYyxpQkFBMkI7QUFDeEMsVUFBTSxjQUFjLGVBQWUsZUFBZTtBQUNsRCxXQUFPLGNBQWMsS0FBSyxNQUFNLFdBQVcsSUFBSSxDQUFDO0FBQUEsRUFDakQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE9BQWMsWUFBWSxnQkFBdUQ7QUFDaEYsVUFBTSxXQUFXLGVBQWUsWUFBWSxjQUFjO0FBQzFELFdBQU8sV0FBVyxLQUFLLE1BQU0sUUFBUSxJQUFJO0FBQUEsRUFDMUM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE9BQWMsZUFBZSxnQkFBaUM7QUFDN0QsV0FBTyxlQUFlLGVBQWUsY0FBYztBQUFBLEVBQ3BEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxPQUFjLGNBQWMsZ0JBQXFDO0FBQ2hFLFdBQU8sSUFBSSxXQUFXLGNBQWM7QUFBQSxFQUNyQztBQUNEO0FBR0EsSUFBSSxPQUFPLFdBQVcsYUFBYTtBQUVsQyxTQUFPLFVBQVU7QUFBQSxJQUNoQjtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLEVBQ0Q7QUFDRDsiLAogICJuYW1lcyI6IFsiRGF0YWJhc2VTeXN0ZW0iLCAiaXNIYW5hRGF0YWJhc2UiXQp9Cg==
|
package/dist/esm/db/database.mjs
CHANGED
|
@@ -40,6 +40,7 @@ var DatabaseSystem = /* @__PURE__ */ ((DatabaseSystem2) => {
|
|
|
40
40
|
DatabaseSystem2[DatabaseSystem2["MYSQL"] = 7] = "MYSQL";
|
|
41
41
|
DatabaseSystem2[DatabaseSystem2["MONGODB"] = 8] = "MONGODB";
|
|
42
42
|
DatabaseSystem2[DatabaseSystem2["SYBASE"] = 9] = "SYBASE";
|
|
43
|
+
DatabaseSystem2[DatabaseSystem2["MSSQL"] = 10] = "MSSQL";
|
|
43
44
|
return DatabaseSystem2;
|
|
44
45
|
})(DatabaseSystem || {});
|
|
45
46
|
function isHanaDatabase(connection) {
|
|
@@ -758,6 +759,8 @@ class Connection {
|
|
|
758
759
|
return 5 /* HANA */;
|
|
759
760
|
case "SNOWFLAKE":
|
|
760
761
|
return 6 /* SNOWFLAKE */;
|
|
762
|
+
case "MSSQL":
|
|
763
|
+
return 10 /* MSSQL */;
|
|
761
764
|
case "MYSQL":
|
|
762
765
|
return 7 /* MYSQL */;
|
|
763
766
|
case "MONGODB":
|
|
@@ -881,4 +884,4 @@ export {
|
|
|
881
884
|
ResultSet,
|
|
882
885
|
SQLTypes
|
|
883
886
|
};
|
|
884
|
-
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RiL2RhdGFiYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEFQSSBEYXRhYmFzZVxuICpcbiAqL1xuaW1wb3J0IHsgQnl0ZXMgfSBmcm9tIFwiQGFlcm9raXQvc2RrL2lvL2J5dGVzXCI7XG5pbXBvcnQgeyBJbnB1dFN0cmVhbSB9IGZyb20gXCJAYWVyb2tpdC9zZGsvaW8vc3RyZWFtc1wiO1xuXG5jb25zdCBEYXRhYmFzZUZhY2FkZSA9IEphdmEudHlwZShcIm9yZy5lY2xpcHNlLmRpcmlnaWJsZS5jb21wb25lbnRzLmFwaS5kYi5EYXRhYmFzZUZhY2FkZVwiKTtcbmNvbnN0IEpTcWxEYXRlID0gSmF2YS50eXBlKFwiamF2YS5zcWwuRGF0ZVwiKTtcbmNvbnN0IEpTcWxUaW1lc3RhbXAgPSBKYXZhLnR5cGUoXCJqYXZhLnNxbC5UaW1lc3RhbXBcIik7XG5jb25zdCBKU3FsVGltZSA9IEphdmEudHlwZShcImphdmEuc3FsLlRpbWVcIik7XG5jb25zdCBTdHJpbmdXcml0ZXIgPSBKYXZhLnR5cGUoXCJqYXZhLmlvLlN0cmluZ1dyaXRlclwiKTtcbmNvbnN0IFdyaXRlck91dHB1dFN0cmVhbSA9IEphdmEudHlwZShcIm9yZy5hcGFjaGUuY29tbW9ucy5pby5vdXRwdXQuV3JpdGVyT3V0cHV0U3RyZWFtXCIpO1xuY29uc3QgU3RhbmRhcmRDaGFyc2V0cyA9IEphdmEudHlwZShcImphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0c1wiKTtcblxuLyoqXG4gKiBNYXBwaW5nIG9mIFNRTCB0eXBlIG5hbWVzIHRvIHRoZWlyIGphdmEuc3FsLlR5cGVzIGludGVnZXIgY29uc3RhbnRzLlxuICovXG5leHBvcnQgY29uc3QgU1FMVHlwZXMgPSBPYmplY3QuZnJlZXplKHtcblx0XCJCT09MRUFOXCI6IDE2LFxuXHRcIkRBVEVcIjogOTEsXG5cdFwiVElNRVwiOiA5Mixcblx0XCJUSU1FU1RBTVBcIjogOTMsXG5cdFwiRE9VQkxFXCI6IDgsXG5cdFwiRkxPQVRcIjogNixcblx0XCJSRUFMXCI6IDcsXG5cdFwiVElOWUlOVFwiOiAtNixcblx0XCJTTUFMTElOVFwiOiA1LFxuXHRcIklOVEVHRVJcIjogNCxcblx0XCJCSUdJTlRcIjogLTUsXG5cdFwiVkFSQ0hBUlwiOiAxMixcblx0XCJDSEFSXCI6IDEsXG5cdFwiQ0xPQlwiOiAyMDA1LFxuXHRcIkJMT0JcIjogMjAwNCxcblx0XCJWQVJCSU5BUllcIjogLTMsXG5cdFwiREVDSU1BTFwiOiAzLFxuXHRcIkFSUkFZXCI6IDIwMDMsXG5cdFwiTlZBUkNIQVJcIjogLTksXG5cdFwiTkNMT0JcIjogMjAxMSxcblx0XCJCSVRcIjogLTdcbn0pO1xuXG5leHBvcnQgZW51bSBEYXRhYmFzZVN5c3RlbSB7XG5cdFVOS05PV04sIERFUkJZLCBQT1NUR1JFU1FMLCBIMiwgTUFSSUFEQiwgSEFOQSwgU05PV0ZMQUtFLCBNWVNRTCwgTU9OR09EQiwgU1lCQVNFXG59XG5cbi8vIC0tLSBNZXRhZGF0YSBJbnRlcmZhY2VzIC0tLVxuXG5leHBvcnQgaW50ZXJmYWNlIFRhYmxlTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlLiAqL1xuXHRyZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cdC8qKiBUaGUgcmVtYXJrcy4gKi9cblx0cmVhZG9ubHkgcmVtYXJrczogc3RyaW5nO1xuXHQvKiogVGhlIGNvbHVtbnMuICovXG5cdHJlYWRvbmx5IGNvbHVtbnM6IENvbHVtbk1ldGFkYXRhW107XG5cdC8qKiBUaGUgaW5kaWNlcy4gKi9cblx0cmVhZG9ubHkgaW5kaWNlczogSW5kZXhNZXRhZGF0YVtdO1xuXHQvKiogVGhlIGluZGljZXMuICovXG5cdHJlYWRvbmx5IGZvcmVpZ25LZXlzOiBGb3JlaWduS2V5TWV0YWRhdGFbXTtcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlLiAqL1xuXHRyZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cdC8qKiBUaGUgc2l6ZS4gKi9cblx0cmVhZG9ubHkgc2l6ZTogbnVtYmVyO1xuXHQvKiogVGhlIG51bGxhYmxlLiAqL1xuXHRyZWFkb25seSBudWxsYWJsZTogYm9vbGVhbjtcblx0LyoqIFRoZSBrZXkuICovXG5cdHJlYWRvbmx5IGtleTogYm9vbGVhbjtcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG5cdC8qKiBUaGUgc2NhbGUuICovXG5cdHJlYWRvbmx5IHNjYWxlOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhNZXRhZGF0YSB7XG5cdC8qKiBUaGUgbmFtZS4gKi9cblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHQvKiogVGhlIHR5cGUuICovXG5cdHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblx0LyoqIFRoZSBjb2x1bW4uICovXG5cdHJlYWRvbmx5IGNvbHVtbjogc3RyaW5nO1xuXHQvKiogVGhlIG5vbiB1bmlxdWUuICovXG5cdHJlYWRvbmx5IG5vblVuaXF1ZTogYm9vbGVhbjtcblx0LyoqIFRoZSBxdWFsaWZpZXIuICovXG5cdHJlYWRvbmx5IHF1YWxpZmllcjogc3RyaW5nO1xuXHQvKiogVGhlIG9yZGluYWwgcG9zaXRpb24uICovXG5cdHJlYWRvbmx5IG9yZGluYWxQb3NpdGlvbjogc3RyaW5nO1xuXHQvKiogVGhlIHNvcnQgb3JkZXIuICovXG5cdHJlYWRvbmx5IHNvcnRPcmRlcjogc3RyaW5nO1xuXHQvKiogVGhlIGNhcmRpbmFsaXR5LiAqL1xuXHRyZWFkb25seSBjYXJkaW5hbGl0eTogbnVtYmVyO1xuXHQvKiogVGhlIHBhZ2VzLiAqL1xuXHRyZWFkb25seSBwYWdlczogbnVtYmVyO1xuXHQvKiogVGhlIGZpbHRlciBjb25kaXRpb24uICovXG5cdHJlYWRvbmx5IGZpbHRlckNvbmRpdGlvbjogc3RyaW5nO1xuXHQvKiogVGhlIGtpbmQuICovXG5cdHJlYWRvbmx5IGtpbmQ6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBGb3JlaWduS2V5TWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG5cdC8qKiBUaGUgdGFibGVzLiAqL1xuXHRyZWFkb25seSB0YWJsZXM6IFRhYmxlTWV0YWRhdGFbXTtcblx0LyoqIFRoZSB2aWV3cy4gKi9cblx0cmVhZG9ubHkgdmlld3M6IFRhYmxlTWV0YWRhdGFbXTtcblx0LyoqIFRoZSBwcm9jZWR1cmVzLiAqL1xuXHRyZWFkb25seSBwcm9jZWR1cmVzOiBQcm9jZWR1cmVNZXRhZGF0YVtdO1xuXHQvKiogVGhlIGZ1bmN0aW9ucy4gKi9cblx0cmVhZG9ubHkgZnVuY3Rpb25zOiBGdW5jdGlvbk1ldGFkYXRhW107XG5cdC8qKiBUaGUgZnVuY3Rpb25zLiAqL1xuXHRyZWFkb25seSBzZXF1ZW5jZXM6IFNlcXVlbmNlTWV0YWRhdGFbXTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBQcm9jZWR1cmVNZXRhZGF0YSB7XG5cdC8qKiBUaGUgbmFtZS4gKi9cblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHQvKiogVGhlIHR5cGUuICovXG5cdHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblx0LyoqIFRoZSByZW1hcmtzLiAqL1xuXHRyZWFkb25seSByZW1hcmtzOiBzdHJpbmc7XG5cdC8qKiBUaGUgY29sdW1ucy4gKi9cblx0cmVhZG9ubHkgY29sdW1uczogUGFyYW1ldGVyQ29sdW1uTWV0YWRhdGFbXTtcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRnVuY3Rpb25NZXRhZGF0YSB7XG5cdC8qKiBUaGUgbmFtZS4gKi9cblx0cmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuXHQvKiogVGhlIHR5cGUuICovXG5cdHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblx0LyoqIFRoZSByZW1hcmtzLiAqL1xuXHRyZWFkb25seSByZW1hcmtzOiBzdHJpbmc7XG5cdC8qKiBUaGUgY29sdW1ucy4gKi9cblx0cmVhZG9ubHkgY29sdW1uczogUGFyYW1ldGVyQ29sdW1uTWV0YWRhdGFbXTtcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGFyYW1ldGVyQ29sdW1uTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBudW1iZXI7XG5cdC8qKiBUaGUgdHlwZS4gKi9cblx0cmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXHQvKiogVGhlIHByZWNpc2lvbi4gKi9cblx0cmVhZG9ubHkgcHJlY2lzaW9uOiBudW1iZXI7XG5cdC8qKiBUaGUgbGVuZ3RoLiAqL1xuXHRyZWFkb25seSBsZW5ndGg6IG51bWJlcjtcblx0LyoqIFRoZSBzY2FsZS4gKi9cblx0cmVhZG9ubHkgc2NhbGU6IG51bWJlcjtcblx0LyoqIFRoZSByYWRpeC4gKi9cblx0cmVhZG9ubHkgcmFkaXg6IG51bWJlcjtcblx0LyoqIFRoZSBudWxsYWJsZS4gKi9cblx0cmVhZG9ubHkgbnVsbGFibGU6IGJvb2xlYW47XG5cdC8qKiBUaGUgcmVtYXJrcy4gKi9cblx0cmVhZG9ubHkgcmVtYXJrczogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNlcXVlbmNlTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRGF0YWJhc2VNZXRhZGF0YSB7XG5cdHJlYWRvbmx5IGFsbFByb2NlZHVyZXNBcmVDYWxsYWJsZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgYWxsVGFibGVzQXJlU2VsZWN0YWJsZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgdXJsOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHVzZXJOYW1lOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGlzUmVhZE9ubHk6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG51bGxzQXJlU29ydGVkSGlnaDogYm9vbGVhbjtcblx0cmVhZG9ubHkgbnVsbHNBcmVTb3J0ZWRMb3c6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG51bGxzQXJlU29ydGVkQXRTdGFydDogYm9vbGVhbjtcblx0cmVhZG9ubHkgbnVsbHNBcmVTb3J0ZWRBdEVuZDogYm9vbGVhbjtcblx0cmVhZG9ubHkgZGF0YWJhc2VQcm9kdWN0TmFtZTogc3RyaW5nO1xuXHRyZWFkb25seSBkYXRhYmFzZVByb2R1Y3RWZXJzaW9uOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGRyaXZlck5hbWU6IHN0cmluZztcblx0cmVhZG9ubHkgZHJpdmVyVmVyc2lvbjogc3RyaW5nO1xuXHRyZWFkb25seSBkcml2ZXJNYWpvclZlcnNpb246IG51bWJlcjtcblx0cmVhZG9ubHkgZHJpdmVyTWlub3JWZXJzaW9uOiBudW1iZXI7XG5cdHJlYWRvbmx5IHVzZXNMb2NhbEZpbGVzOiBib29sZWFuO1xuXHRyZWFkb25seSB1c2VzTG9jYWxGaWxlUGVyVGFibGU6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTWl4ZWRDYXNlSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN0b3Jlc1VwcGVyQ2FzZUlkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdG9yZXNMb3dlckNhc2VJZGVudGlmaWVyczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3RvcmVzTWl4ZWRDYXNlSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTWl4ZWRDYXNlUXVvdGVkSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN0b3Jlc1VwcGVyQ2FzZVF1b3RlZElkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdG9yZXNMb3dlckNhc2VRdW90ZWRJZGVudGlmaWVyczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3RvcmVzTWl4ZWRDYXNlUXVvdGVkSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGlkZW50aWZpZXJRdW90ZVN0cmluZzogc3RyaW5nO1xuXHRyZWFkb25seSBzcWxLZXl3b3Jkczogc3RyaW5nO1xuXHRyZWFkb25seSBudW1lcmljRnVuY3Rpb25zOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHN0cmluZ0Z1bmN0aW9uczogc3RyaW5nO1xuXHRyZWFkb25seSBzeXN0ZW1GdW5jdGlvbnM6IHN0cmluZztcblx0cmVhZG9ubHkgdGltZURhdGVGdW5jdGlvbnM6IHN0cmluZztcblx0cmVhZG9ubHkgc2VhcmNoU3RyaW5nRXNjYXBlOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGV4dHJhTmFtZUNoYXJhY3RlcnM6IHN0cmluZztcblx0cmVhZG9ubHkgc3VwcG9ydHNBbHRlclRhYmxlV2l0aEFkZENvbHVtbjogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNBbHRlclRhYmxlV2l0aERyb3BDb2x1bW46IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ29sdW1uQWxpYXNpbmc6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG51bGxQbHVzTm9uTnVsbElzTnVsbDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDb252ZXJ0OiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1RhYmxlQ29ycmVsYXRpb25OYW1lczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNEaWZmZXJlbnRUYWJsZUNvcnJlbGF0aW9uTmFtZXM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzRXhwcmVzc2lvbnNJbk9yZGVyQnk6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3JkZXJCeVVucmVsYXRlZDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNHcm91cEJ5OiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0dyb3VwQnlVbnJlbGF0ZWQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzR3JvdXBCeUJleW9uZFNlbGVjdDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNMaWtlRXNjYXBlQ2xhdXNlOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c011bHRpcGxlUmVzdWx0U2V0czogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNNdWx0aXBsZVRyYW5zYWN0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNOb25OdWxsYWJsZUNvbHVtbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTWluaW11bVNRTEdyYW1tYXI6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ29yZVNRTEdyYW1tYXI6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzRXh0ZW5kZWRTUUxHcmFtbWFyOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0FOU0k5MkVudHJ5TGV2ZWxTUUw6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQU5TSTkySW50ZXJtZWRpYXRlU1FMOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0FOU0k5MkZ1bGxTUUw6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzSW50ZWdyaXR5RW5oYW5jZW1lbnRGYWNpbGl0eTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNPdXRlckpvaW5zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0Z1bGxPdXRlckpvaW5zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0xpbWl0ZWRPdXRlckpvaW5zOiBib29sZWFuO1xuXHRyZWFkb25seSBzY2hlbWFUZXJtOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHByb2NlZHVyZVRlcm06IHN0cmluZztcblx0cmVhZG9ubHkgY2F0YWxvZ1Rlcm06IHN0cmluZztcblx0cmVhZG9ubHkgaXNDYXRhbG9nQXRTdGFydDogYm9vbGVhbjtcblx0cmVhZG9ubHkgY2F0YWxvZ1NlcGFyYXRvcjogc3RyaW5nO1xuXHRyZWFkb25seSBzdXBwb3J0c1NjaGVtYXNJbkRhdGFNYW5pcHVsYXRpb246IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU2NoZW1hc0luUHJvY2VkdXJlQ2FsbHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU2NoZW1hc0luVGFibGVEZWZpbml0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTY2hlbWFzSW5JbmRleERlZmluaXRpb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1NjaGVtYXNJblByaXZpbGVnZURlZmluaXRpb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0NhdGFsb2dzSW5EYXRhTWFuaXB1bGF0aW9uOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0NhdGFsb2dzSW5Qcm9jZWR1cmVDYWxsczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDYXRhbG9nc0luVGFibGVEZWZpbml0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDYXRhbG9nc0luSW5kZXhEZWZpbml0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDYXRhbG9nc0luUHJpdmlsZWdlRGVmaW5pdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzUG9zaXRpb25lZERlbGV0ZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNQb3NpdGlvbmVkVXBkYXRlOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1NlbGVjdEZvclVwZGF0ZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdG9yZWRQcm9jZWR1cmVzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1N1YnF1ZXJpZXNJbkNvbXBhcmlzb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1N1YnF1ZXJpZXNJbkV4aXN0czogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdWJxdWVyaWVzSW5JbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU3VicXVlcmllc0luUXVhbnRpZmllZHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ29ycmVsYXRlZFN1YnF1ZXJpZXM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzVW5pb246IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzVW5pb25BbGw6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3BlbkN1cnNvcnNBY3Jvc3NDb21taXQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3BlbkN1cnNvcnNBY3Jvc3NSb2xsYmFjazogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNPcGVuU3RhdGVtZW50c0Fjcm9zc0NvbW1pdDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNPcGVuU3RhdGVtZW50c0Fjcm9zc1JvbGxiYWNrOiBib29sZWFuO1xuXHRyZWFkb25seSBtYXhCaW5hcnlMaXRlcmFsTGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heENoYXJMaXRlcmFsTGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heENvbHVtbk5hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q29sdW1uc0luR3JvdXBCeTogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb2x1bW5zSW5JbmRleDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb2x1bW5zSW5PcmRlckJ5OiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heENvbHVtbnNJblNlbGVjdDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb2x1bW5zSW5UYWJsZTogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb25uZWN0aW9uczogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDdXJzb3JOYW1lTGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heEluZGV4TGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heFNjaGVtYU5hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4UHJvY2VkdXJlTmFtZUxlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDYXRhbG9nTmFtZUxlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhSb3dTaXplOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heFJvd1NpemVJbmNsdWRlQmxvYnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG1heFN0YXRlbWVudExlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhTdGF0ZW1lbnRzOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heFRhYmxlTmFtZUxlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhUYWJsZXNJblNlbGVjdDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhVc2VyTmFtZUxlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBkZWZhdWx0VHJhbnNhY3Rpb25Jc29sYXRpb246IG51bWJlcjtcblx0cmVhZG9ubHkgc3VwcG9ydHNUcmFuc2FjdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzRGF0YURlZmluaXRpb25BbmREYXRhTWFuaXB1bGF0aW9uVHJhbnNhY3Rpb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0RhdGFNYW5pcHVsYXRpb25UcmFuc2FjdGlvbnNPbmx5OiBib29sZWFuO1xuXHRyZWFkb25seSBkYXRhRGVmaW5pdGlvbkNhdXNlc1RyYW5zYWN0aW9uQ29tbWl0OiBib29sZWFuO1xuXHRyZWFkb25seSBkYXRhRGVmaW5pdGlvbklnbm9yZWRJblRyYW5zYWN0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNCYXRjaFVwZGF0ZXM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU2F2ZXBvaW50czogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNOYW1lZFBhcmFtZXRlcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTXVsdGlwbGVPcGVuUmVzdWx0czogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNHZXRHZW5lcmF0ZWRLZXlzOiBib29sZWFuO1xuXHRyZWFkb25seSByZXN1bHRTZXRIb2xkYWJpbGl0eTogbnVtYmVyO1xuXHRyZWFkb25seSBkYXRhYmFzZU1ham9yVmVyc2lvbjogbnVtYmVyO1xuXHRyZWFkb25seSBkYXRhYmFzZU1pbm9yVmVyc2lvbjogbnVtYmVyO1xuXHRyZWFkb25seSBqZGJjTWFqb3JWZXJzaW9uOiBudW1iZXI7XG5cdHJlYWRvbmx5IGpkYmNNaW5vclZlcnNpb246IG51bWJlcjtcblx0cmVhZG9ubHkgc3FsU3RhdGVUeXBlOiBudW1iZXI7XG5cdHJlYWRvbmx5IGxvY2F0b3JzVXBkYXRlQ29weTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdGF0ZW1lbnRQb29saW5nOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1N0b3JlZEZ1bmN0aW9uc1VzaW5nQ2FsbFN5bnRheDogYm9vbGVhbjtcblx0cmVhZG9ubHkgYXV0b0NvbW1pdEZhaWx1cmVDbG9zZXNBbGxSZXN1bHRTZXRzOiBib29sZWFuO1xuXHRyZWFkb25seSBnZW5lcmF0ZWRLZXlBbHdheXNSZXR1cm5lZDogYm9vbGVhbjtcblx0cmVhZG9ubHkgbWF4TG9naWNhbExvYlNpemU6IG51bWJlcjtcblx0cmVhZG9ubHkgc3VwcG9ydHNSZWZDdXJzb3JzOiBib29sZWFuO1xuXHRyZWFkb25seSBzY2hlbWFzOiBTY2hlbWFNZXRhZGF0YVtdO1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbi8vIC0tLSBIZWxwZXIgRnVuY3Rpb25zIC0tLVxuXG5mdW5jdGlvbiBpc0hhbmFEYXRhYmFzZShjb25uZWN0aW9uOiBhbnkpOiBib29sZWFuIHtcblx0bGV0IGlzSGFuYURhdGFiYXNlID0gZmFsc2U7XG5cdGxldCBtZXRhZGF0YSA9IGNvbm5lY3Rpb24uZ2V0TWV0YURhdGEoKTtcblx0aWYgKG1ldGFkYXRhICE9PSBudWxsICYmIG1ldGFkYXRhICE9PSB1bmRlZmluZWQpIHtcblx0XHRpc0hhbmFEYXRhYmFzZSA9IG1ldGFkYXRhLmdldERhdGFiYXNlUHJvZHVjdE5hbWUoKSA9PT0gXCJIREJcIjtcblx0fVxuXHRyZXR1cm4gaXNIYW5hRGF0YWJhc2U7XG59XG5cbmZ1bmN0aW9uIHJlYWRDbG9iVmFsdWUodmFsdWU6IGFueSk6IHN0cmluZyB8IGFueSB7XG5cdHJldHVybiB2YWx1ZSA/IHZhbHVlLmdldFN1YlN0cmluZygxLCB2YWx1ZS5sZW5ndGgoKSkgOiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24gY3JlYXRlQ2xvYlZhbHVlKG5hdGl2ZTogYW55LCB2YWx1ZTogYW55KTogYW55IHtcblx0dHJ5IHtcblx0XHRsZXQgY29ubmVjdGlvbiA9IG5hdGl2ZS5nZXRDb25uZWN0aW9uKCk7IC8vIGludGVudGlvbmFsbHkgbm90IGNsb3NlZFxuXHRcdGlmIChjb25uZWN0aW9uID09PSBudWxsIHx8IGNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgY3JlYXRlIG5ldyAnQ2xvYicgdmFsdWUgYXMgdGhlIGNvbm5lY3Rpb24gaXMgbnVsbFwiKTtcblx0XHR9XG5cdFx0bGV0IGNsb2IgPSBudWxsO1xuXHRcdGlmIChpc0hhbmFEYXRhYmFzZShjb25uZWN0aW9uKSkge1xuXHRcdFx0bGV0IHBzID0gbnVsbDtcblx0XHRcdHRyeSB7XG5cdFx0XHRcdHBzID0gY29ubmVjdGlvbi5wcmVwYXJlU3RhdGVtZW50KFwiU0VMRUNUIFRPX0NMT0IgKD8pIEZST00gRFVNTVk7XCIpO1xuXHRcdFx0XHRwcy5zZXRTdHJpbmcoMSwgdmFsdWUpO1xuXHRcdFx0XHRsZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTtcblx0XHRcdFx0aWYgKHJzLm5leHQoKSkge1xuXHRcdFx0XHRcdGNsb2IgPSBycy5nZXRDbG9iKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAocHMgIT09IG51bGwgJiYgcHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHBzLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0Y2xvYiA9IGNvbm5lY3Rpb24uY3JlYXRlQ2xvYigpO1xuXHRcdFx0Y2xvYi5zZXRTdHJpbmcoMSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gY2xvYjtcblx0fSBjYXRjaCAoZTogYW55KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cmVkIGR1cmluZyBjcmVhdGlvbiBvZiAnQ2xvYicgdmFsdWU6ICR7ZS5tZXNzYWdlfWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIHJlYWROQ2xvYlZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBhbnkge1xuXHRyZXR1cm4gdmFsdWUgPyB2YWx1ZS5nZXRTdWJTdHJpbmcoMSwgdmFsdWUubGVuZ3RoKCkpIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZU5DbG9iVmFsdWUobmF0aXZlOiBhbnksIHZhbHVlOiBhbnkpOiBhbnkge1xuXHR0cnkge1xuXHRcdGxldCBjb25uZWN0aW9uID0gbmF0aXZlLmdldENvbm5lY3Rpb24oKTsgLy8gaW50ZW50aW9uYWxseSBub3QgY2xvc2VkXG5cdFx0aWYgKGNvbm5lY3Rpb24gPT09IG51bGwgfHwgY29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBjcmVhdGUgbmV3ICdOQ2xvYicgdmFsdWUgYXMgdGhlIGNvbm5lY3Rpb24gaXMgbnVsbFwiKTtcblx0XHR9XG5cdFx0bGV0IG5jbG9iID0gbnVsbDtcblx0XHRpZiAoaXNIYW5hRGF0YWJhc2UoY29ubmVjdGlvbikpIHtcblx0XHRcdGxldCBwcyA9IG51bGw7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwcyA9IGNvbm5lY3Rpb24ucHJlcGFyZVN0YXRlbWVudChcIlNFTEVDVCBUT19OQ0xPQiAoPykgRlJPTSBEVU1NWTtcIik7XG5cdFx0XHRcdHBzLnNldFN0cmluZygxLCB2YWx1ZSk7XG5cdFx0XHRcdGxldCBycyA9IHBzLmV4ZWN1dGVRdWVyeSgpO1xuXHRcdFx0XHRpZiAocnMubmV4dCgpKSB7XG5cdFx0XHRcdFx0bmNsb2IgPSBycy5nZXROQ2xvYigxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKHBzICE9PSBudWxsICYmIHBzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwcy5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdG5jbG9iID0gY29ubmVjdGlvbi5jcmVhdGVOQ2xvYigpO1xuXHRcdFx0bmNsb2Iuc2V0U3RyaW5nKDEsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIG5jbG9iO1xuXHR9IGNhdGNoIChlOiBhbnkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VyZWQgZHVyaW5nIGNyZWF0aW9uIG9mICdOQ2xvYicgdmFsdWU6ICR7ZS5tZXNzYWdlfWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJsb2JWYWx1ZShuYXRpdmU6IGFueSwgdmFsdWU6IGFueSk6IGFueSB7XG5cdHRyeSB7XG5cdFx0bGV0IGNvbm5lY3Rpb24gPSBuYXRpdmUuZ2V0Q29ubmVjdGlvbigpOyAvLyBpbnRlbnRpb25hbGx5IG5vdCBjbG9zZWRcblx0XHRpZiAoY29ubmVjdGlvbiA9PT0gbnVsbCB8fCBjb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNhbid0IGNyZWF0ZSBuZXcgJ0Jsb2InIHZhbHVlIGFzIHRoZSBjb25uZWN0aW9uIGlzIG51bGxcIik7XG5cdFx0fVxuXHRcdGxldCBibG9iID0gbnVsbDtcblx0XHRpZiAoaXNIYW5hRGF0YWJhc2UoY29ubmVjdGlvbikpIHtcblx0XHRcdGxldCBwcyA9IG51bGw7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwcyA9IGNvbm5lY3Rpb24ucHJlcGFyZVN0YXRlbWVudChcIlNFTEVDVCBUT19CTE9CICg/KSBGUk9NIERVTU1ZO1wiKTtcblx0XHRcdFx0cHMuc2V0Qnl0ZXMoMSwgdmFsdWUpO1xuXHRcdFx0XHRsZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTtcblx0XHRcdFx0aWYgKHJzLm5leHQoKSkge1xuXHRcdFx0XHRcdGJsb2IgPSBycy5nZXRCbG9iKDEpO1xuXHRcdFx0XHR9XG5cdFx0XHR9IGZpbmFsbHkge1xuXHRcdFx0XHRpZiAocHMgIT09IG51bGwgJiYgcHMgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHBzLmNsb3NlKCk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9IGVsc2Uge1xuXHRcdFx0YmxvYiA9IGNvbm5lY3Rpb24uY3JlYXRlQmxvYigpO1xuXHRcdFx0YmxvYi5zZXRCeXRlcygxLCB2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBibG9iO1xuXHR9IGNhdGNoIChlOiBhbnkpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoYEVycm9yIG9jY3VyZWQgZHVyaW5nIGNyZWF0aW9uIG9mICdDbG9iJyB2YWx1ZTogJHtlLm1lc3NhZ2V9YCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gZ2V0RGF0ZVZhbHVlKHZhbHVlOiBzdHJpbmcgfCBEYXRlKTogRGF0ZSB7XG5cdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gbmV3IERhdGUodmFsdWUpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLy8gLS0tIFN0YXRlbWVudCBDbGFzc2VzIC0tLVxuXG4vKipcbiAqIFN0YXRlbWVudCBvYmplY3RcbiAqL1xuZXhwb3J0IGNsYXNzIFByZXBhcmVkU3RhdGVtZW50IHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuY2xvc2UoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRSZXN1bHRTZXQoKTogUmVzdWx0U2V0IHtcblx0XHRyZXR1cm4gbmV3IFJlc3VsdFNldCh0aGlzLm5hdGl2ZS5nZXRSZXN1bHRTZXQoKSk7XG5cdH1cblxuXHRwdWJsaWMgZXhlY3V0ZSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZXhlY3V0ZSgpO1xuXHR9XG5cblx0cHVibGljIGV4ZWN1dGVRdWVyeSgpOiBSZXN1bHRTZXQge1xuXHRcdHJldHVybiBuZXcgUmVzdWx0U2V0KHRoaXMubmF0aXZlLmV4ZWN1dGVRdWVyeSgpKTtcblx0fVxuXG5cdHB1YmxpYyBleGVjdXRlVXBkYXRlKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmV4ZWN1dGVVcGRhdGUoKTtcblx0fVxuXG5cdHB1YmxpYyBzZXROdWxsKGluZGV4OiBudW1iZXIsIHNxbFR5cGU6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldE51bGwoaW5kZXgsIHNxbFR5cGUpO1xuXHR9XG5cblx0cHVibGljIHNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCBpbnB1dFN0cmVhbTogSW5wdXRTdHJlYW0sIGxlbmd0aD86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmIChsZW5ndGgpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0sIGxlbmd0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCb29sZWFuKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCb29sZWFuKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuQk9PTEVBTik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJ5dGUoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnkgLyo6IEJ5dGUqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCeXRlKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuVElOWUlOVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJsb2IoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnkgLyoqOiBCbG9iKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IGJsb2IgPSBjcmVhdGVCbG9iVmFsdWUodGhpcy5uYXRpdmUsIHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJsb2IoaW5kZXgsIGJsb2IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkJMT0IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRDbG9iKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55IC8qOiBDbG9iKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IGNsb2IgPSBjcmVhdGVDbG9iVmFsdWUodGhpcy5uYXRpdmUsIHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldENsb2IoaW5kZXgsIGNsb2IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkNMT0IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXROQ2xvYihpbmRleDogbnVtYmVyLCB2YWx1ZT86IGFueSAvKjogTkNsb2IqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRsZXQgbmNsb2IgPSBjcmVhdGVOQ2xvYlZhbHVlKHRoaXMubmF0aXZlLCB2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXROQ2xvYihpbmRleCwgbmNsb2IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLk5DTE9CKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Qnl0ZXNOYXRpdmUoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnlbXSAvKmJ5dGVbXSovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJ5dGVzKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuVkFSQklOQVJZKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Qnl0ZXMoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnlbXSAvKmJ5dGVbXSovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHZhciBkYXRhID0gQnl0ZXMudG9KYXZhQnl0ZXModmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qnl0ZXMoaW5kZXgsIGRhdGEpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlZBUkJJTkFSWSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldERhdGUoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcgfCBEYXRlKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSBnZXREYXRlVmFsdWUodmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RGF0ZShpbmRleCwgbmV3IEpTcWxEYXRlKGRhdGUuZ2V0VGltZSgpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuREFURSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldERvdWJsZShpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXREb3VibGUoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5ET1VCTEUpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRGbG9hdChpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRGbG9hdChpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkZMT0FUKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0SW50KGluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEludChpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLklOVEVHRVIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRMb25nKGluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldExvbmcoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5CSUdJTlQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRTaG9ydChpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRTaG9ydChpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlNNQUxMSU5UKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0U3RyaW5nKGluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldFN0cmluZyhpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlZBUkNIQVIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRUaW1lKGluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nIHwgRGF0ZSk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkYXRlID0gZ2V0RGF0ZVZhbHVlKHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldFRpbWUoaW5kZXgsIG5ldyBKU3FsVGltZShkYXRlLmdldFRpbWUoKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlRJTUUpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRUaW1lc3RhbXAoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcgfCBEYXRlKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSBnZXREYXRlVmFsdWUodmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0VGltZXN0YW1wKGluZGV4LCBuZXcgSlNxbFRpbWVzdGFtcChkYXRlLmdldFRpbWUoKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlRJTUVTVEFNUCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJpZ0RlY2ltYWwoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIgLyo6IEJpZ0RlY2ltYWwqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCaWdEZWNpbWFsKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuREVDSU1BTCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldE5TdHJpbmcoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0TlN0cmluZyhpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLk5WQVJDSEFSKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgYWRkQmF0Y2goKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuYWRkQmF0Y2goKTtcblx0fVxuXG5cdHB1YmxpYyBleGVjdXRlQmF0Y2goKTogbnVtYmVyW10ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5leGVjdXRlQmF0Y2goKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNZXRhRGF0YSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRNZXRhRGF0YSgpO1xuXHR9XG5cblx0cHVibGljIGdldE1vcmVSZXN1bHRzKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRNb3JlUmVzdWx0cygpO1xuXHR9XG5cblx0cHVibGljIGdldFBhcmFtZXRlck1ldGFEYXRhKCk6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFBhcmFtZXRlck1ldGFEYXRhKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U1FMV2FybmluZygpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRXYXJuaW5ncygpO1xuXHR9XG5cblx0cHVibGljIGlzQ2xvc2VkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0Nsb3NlZCgpO1xuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBDYWxsYWJsZVN0YXRlbWVudCB7XG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRSZXN1bHRTZXQoKTogUmVzdWx0U2V0IHtcblx0XHRyZXR1cm4gbmV3IFJlc3VsdFNldCh0aGlzLm5hdGl2ZS5nZXRSZXN1bHRTZXQoKSk7XG5cdH1cblxuXHRwdWJsaWMgZXhlY3V0ZVF1ZXJ5KCk6IFJlc3VsdFNldCB7XG5cdFx0cmV0dXJuIG5ldyBSZXN1bHRTZXQodGhpcy5uYXRpdmUuZXhlY3V0ZVF1ZXJ5KCkpO1xuXHR9XG5cblx0cHVibGljIGV4ZWN1dGVVcGRhdGUoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZXhlY3V0ZVVwZGF0ZSgpO1xuXHR9XG5cblx0cHVibGljIHJlZ2lzdGVyT3V0UGFyYW1ldGVyKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHNxbFR5cGU6IGtleW9mIHR5cGVvZiBTUUxUeXBlcyB8IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnJlZ2lzdGVyT3V0UGFyYW1ldGVyKHBhcmFtZXRlckluZGV4LCBzcWxUeXBlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck91dFBhcmFtZXRlckJ5U2NhbGUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgc3FsVHlwZToga2V5b2YgdHlwZW9mIFNRTFR5cGVzIHwgbnVtYmVyLCBzY2FsZTogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUucmVnaXN0ZXJPdXRQYXJhbWV0ZXIocGFyYW1ldGVySW5kZXgsIHNxbFR5cGUsIHNjYWxlKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck91dFBhcmFtZXRlckJ5VHlwZU5hbWUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgc3FsVHlwZToga2V5b2YgdHlwZW9mIFNRTFR5cGVzIHwgbnVtYmVyLCB0eXBlTmFtZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUucmVnaXN0ZXJPdXRQYXJhbWV0ZXIocGFyYW1ldGVySW5kZXgsIHNxbFR5cGUsIHR5cGVOYW1lKTtcblx0fVxuXG5cdHB1YmxpYyB3YXNOdWxsKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS53YXNOdWxsKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U3RyaW5nKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTdHJpbmcocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEJvb2xlYW4ocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCb29sZWFuKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRCeXRlKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkgLyo6IGJ5dGUqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEJ5dGUocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldFNob3J0KHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTaG9ydChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0SW50KHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJbnQocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldExvbmcocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldExvbmcocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEZsb2F0KHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRGbG9hdChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RG91YmxlKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXREb3VibGUocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldERhdGUocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IERhdGUge1xuXHRcdGNvbnN0IGRhdGVJbnN0YW5jZSA9IHRoaXMubmF0aXZlLmdldERhdGUocGFyYW1ldGVySW5kZXgpO1xuXHRcdHJldHVybiBkYXRlSW5zdGFuY2UgIT09IG51bGwgJiYgZGF0ZUluc3RhbmNlICE9PSB1bmRlZmluZWQgPyBuZXcgRGF0ZShkYXRlSW5zdGFuY2UuZ2V0VGltZSgpKSA6IGRhdGVJbnN0YW5jZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRUaW1lKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBEYXRlIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRUaW1lKHBhcmFtZXRlckluZGV4KTtcblx0XHRyZXR1cm4gZGF0ZUluc3RhbmNlICE9PSBudWxsICYmIGRhdGVJbnN0YW5jZSAhPT0gdW5kZWZpbmVkID8gbmV3IERhdGUoZGF0ZUluc3RhbmNlLmdldFRpbWUoKSkgOiBkYXRlSW5zdGFuY2U7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VGltZXN0YW1wKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBEYXRlIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRUaW1lc3RhbXAocGFyYW1ldGVySW5kZXgpO1xuXHRcdHJldHVybiBkYXRlSW5zdGFuY2UgIT09IG51bGwgJiYgZGF0ZUluc3RhbmNlICE9PSB1bmRlZmluZWQgPyBuZXcgRGF0ZShkYXRlSW5zdGFuY2UuZ2V0VGltZSgpKSA6IGRhdGVJbnN0YW5jZTtcblx0fVxuXG5cdHB1YmxpYyBnZXRPYmplY3QocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE9iamVjdChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmlnRGVjaW1hbChwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogbnVtYmVyIC8qOiBzcWwuQmlnRGVjaW1hbCovIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0QmlnRGVjaW1hbChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UmVmKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkgLyo6IHNxbC5SZWYqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFJlZihwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qnl0ZXMocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IGFueVtdIC8qOiBieXRlW10qLyB7XG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMubmF0aXZlLmdldEJ5dGVzKHBhcmFtZXRlckluZGV4KTtcblx0XHRyZXR1cm4gQnl0ZXMudG9KYXZhU2NyaXB0Qnl0ZXMoZGF0YSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qnl0ZXNOYXRpdmUocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IGFueVtdIC8qOiBieXRlW10qLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEJ5dGVzKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRCbG9iKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkgLyo6IHNxbC5CbG9iKi8ge1xuXHRcdGNvbnN0IGRhdGEgPSBEYXRhYmFzZUZhY2FkZS5yZWFkQmxvYlZhbHVlKHRoaXMubmF0aXZlLCBwYXJhbWV0ZXJJbmRleCk7XG5cdFx0cmV0dXJuIEJ5dGVzLnRvSmF2YVNjcmlwdEJ5dGVzKGRhdGEpO1xuXHR9XG5cblx0cHVibGljIGdldEJsb2JOYXRpdmUocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IGFueSAvKjogc3FsLkJsb2IqLyB7XG5cdFx0cmV0dXJuIERhdGFiYXNlRmFjYWRlLnJlYWRCbG9iVmFsdWUodGhpcy5uYXRpdmUsIHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDbG9iKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkgLyo6IHNxbC5DbG9iKi8ge1xuXHRcdHJldHVybiByZWFkQ2xvYlZhbHVlKHRoaXMubmF0aXZlLmdldENsb2IocGFyYW1ldGVySW5kZXgpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXROQ2xvYihwYXJhbWV0ZXJJbmRleDogc3RyaW5nIHwgbnVtYmVyKTogYW55IC8qOiBzcWwuTkNsb2IqLyB7XG5cdFx0cmV0dXJuIHJlYWROQ2xvYlZhbHVlKHRoaXMubmF0aXZlLmdldE5DbG9iKHBhcmFtZXRlckluZGV4KSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TlN0cmluZyhwYXJhbWV0ZXJJbmRleDogc3RyaW5nIHwgbnVtYmVyKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TlN0cmluZyhwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QXJyYXkocGFyYW1ldGVySW5kZXg6IHN0cmluZyB8IG51bWJlcik6IGFueVtdIC8qOiBzcWwuQXJyYXkqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEFycmF5KHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRVUkwocGFyYW1ldGVySW5kZXg6IHN0cmluZyB8IG51bWJlcik6IGFueSB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFVSTChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Um93SWQocGFyYW1ldGVySW5kZXg6IHN0cmluZyB8IG51bWJlcik6IGFueSAvKjogc3FsLlJvd0lkKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRSb3dJZChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U1FMWE1MKHBhcmFtZXRlckluZGV4OiBzdHJpbmcgfCBudW1iZXIpOiBhbnkgLyo6IHNxbC5TUUxYTUwqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFNRTFhNTChwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0VVJMKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnkpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXRVUkwocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0fVxuXG5cdHB1YmxpYyBzZXROdWxsKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHNxbFR5cGVTdHI6IGtleW9mIHR5cGVvZiBTUUxUeXBlcyB8IG51bWJlciwgdHlwZU5hbWU/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRjb25zdCBzcWxUeXBlOiBudW1iZXIgPSBOdW1iZXIuaXNJbnRlZ2VyKHNxbFR5cGVTdHIgYXMgbnVtYmVyKSA/IHNxbFR5cGVTdHIgYXMgbnVtYmVyIDogU1FMVHlwZXNbc3FsVHlwZVN0ciBhcyBrZXlvZiB0eXBlb2YgU1FMVHlwZXNdO1xuXHRcdGlmICh0eXBlTmFtZSAhPT0gdW5kZWZpbmVkICYmIHR5cGVOYW1lICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBzcWxUeXBlLCB0eXBlTmFtZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldE51bGwocGFyYW1ldGVySW5kZXgsIHNxbFR5cGUpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCb29sZWFuKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogYm9vbGVhbik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCb29sZWFuKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuQk9PTEVBTik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJ5dGUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnkgLyo6IGJ5dGUqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCeXRlKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuQklUKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0U2hvcnQocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0U2hvcnQocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5TTUFMTElOVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEludChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRJbnQocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5JTlRFR0VSKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0TG9uZyhwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRMb25nKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuQklHSU5UKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0RmxvYXQocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RmxvYXQocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5GTE9BVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldERvdWJsZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXREb3VibGUocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5ET1VCTEUpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCaWdEZWNpbWFsKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyIC8qOiBCaWdEZWNpbWFsKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0QmlnRGVjaW1hbChwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkRFQ0lNQUwpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRTdHJpbmcocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0U3RyaW5nKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuVkFSQ0hBUik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJ5dGVzKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55W10gLypieXRlW10qLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCeXRlcyhwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkFSUkFZKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0RGF0ZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IHN0cmluZyB8IERhdGUpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgZGF0ZSA9IGdldERhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXREYXRlKHBhcmFtZXRlckluZGV4LCBuZXcgSlNxbERhdGUoZGF0ZS5nZXRUaW1lKCkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5EQVRFKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0VGltZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IHN0cmluZyB8IERhdGUpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgZGF0ZSA9IGdldERhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRUaW1lKHBhcmFtZXRlckluZGV4LCBuZXcgSlNxbFRpbWUoZGF0ZS5nZXRUaW1lKCkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5USU1FKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0VGltZXN0YW1wKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nIHwgRGF0ZSk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRsZXQgZGF0ZSA9IGdldERhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRUaW1lc3RhbXAocGFyYW1ldGVySW5kZXgsIG5ldyBKU3FsVGltZXN0YW1wKGRhdGUuZ2V0VGltZSgpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuVElNRVNUQU1QKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0QXNjaWlTdHJlYW0ocGFyYW1ldGVySW5kZXg6IG51bWJlciwgaW5wdXRTdHJlYW06IElucHV0U3RyZWFtLCBsZW5ndGg/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAobGVuZ3RoKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRBc2NpaVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0sIGxlbmd0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEFzY2lpU3RyZWFtKHBhcmFtZXRlckluZGV4LCBpbnB1dFN0cmVhbSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCBpbnB1dFN0cmVhbTogSW5wdXRTdHJlYW0sIGxlbmd0aD86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmIChsZW5ndGgpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0sIGxlbmd0aCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJpbmFyeVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRPYmplY3QocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSwgdGFyZ2V0U3FsVHlwZT86IG51bWJlciwgc2NhbGU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAoc2NhbGUgIT09IHVuZGVmaW5lZCAmJiBzY2FsZSAhPT0gbnVsbCAmJiB0YXJnZXRTcWxUeXBlICE9PSB1bmRlZmluZWQgJiYgdGFyZ2V0U3FsVHlwZSAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0T2JqZWN0KHBhcmFtZXRlckluZGV4LCB2YWx1ZSwgdGFyZ2V0U3FsVHlwZSwgc2NhbGUpO1xuXHRcdH0gZWxzZSBpZiAodGFyZ2V0U3FsVHlwZSAhPT0gdW5kZWZpbmVkICYmIHRhcmdldFNxbFR5cGUgIT09IG51bGwpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldE9iamVjdChwYXJhbWV0ZXJJbmRleCwgdmFsdWUsIHRhcmdldFNxbFR5cGUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRPYmplY3QocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Um93SWQocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IG51bWJlciAvKjogUm93SWQqLyk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldFJvd0lkKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0TlN0cmluZyhwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldE5TdHJpbmcocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5OVkFSQ0hBUik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFNRTFhNTChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZTogYW55IC8qOiBTUUxYTUwqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRTUUxYTUwocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiTnVsbGFibGUgU1FMWE1MIHR5cGUgbm90IHN1cHBvcnRlZC5cIik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJsb2IocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSAvKkJsb2IgKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgYmxvYiA9IGNyZWF0ZUJsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgdmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0QmxvYihwYXJhbWV0ZXJJbmRleCwgYmxvYik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuQkxPQik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldENsb2IocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSAvKjogQ2xvYiovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGNsb2IgPSBjcmVhdGVDbG9iVmFsdWUodGhpcy5uYXRpdmUsIHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldENsb2IocGFyYW1ldGVySW5kZXgsIGNsb2IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkNMT0IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXROQ2xvYihwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZTogYW55IC8qOiBOQ2xvYiovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IG5jbG9iID0gY3JlYXRlTkNsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgdmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0TkNsb2IocGFyYW1ldGVySW5kZXgsIG5jbG9iKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5OQ0xPQik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGV4ZWN1dGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNb3JlUmVzdWx0cygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TW9yZVJlc3VsdHMoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRQYXJhbWV0ZXJNZXRhRGF0YSgpOiBhbnkgLyo6IFBhcmFtZXRlck1ldGFEYXRhKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRQYXJhbWV0ZXJNZXRhRGF0YSgpO1xuXHR9XG5cblx0cHVibGljIGlzQ2xvc2VkKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0Nsb3NlZCgpO1xuXHR9XG5cblx0cHVibGljIGNsb3NlKCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmNsb3NlKCk7XG5cdH1cbn1cblxuLyoqXG4gKiBSZXN1bHRTZXQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjbGFzcyBSZXN1bHRTZXQge1xuXG5cdHByaXZhdGUgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IobmF0aXZlOiBhbnkpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IG5hdGl2ZTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDb252ZXJ0cyB0aGUgUmVzdWx0U2V0IGludG8gYSBKU09OIGFycmF5IG9mIG9iamVjdHMuXG5cdCAqIEBwYXJhbSBsaW1pdGVkIFdoZXRoZXIgdG8gdXNlIGxpbWl0ZWQgSlNPTiBjb252ZXJzaW9uIChvcHRpbWl6ZWQpLlxuXHQgKiBAcGFyYW0gc3RyaW5naWZ5IFdoZXRoZXIgdG8gcmV0dXJuIHRoZSBKU09OIGFzIGEgc3RyaW5nIG9yIGEgcGFyc2VkIGFycmF5LlxuXHQgKiBAcmV0dXJucyBBIEphdmFTY3JpcHQgYXJyYXkgb2Ygb2JqZWN0cyByZXByZXNlbnRpbmcgdGhlIHJlc3VsdCBzZXQsIG9yIGEgc3RyaW5nIGlmIHN0cmluZ2lmeSBpcyB0cnVlLlxuXHQgKi9cblx0cHVibGljIHRvSnNvbihsaW1pdGVkID0gZmFsc2UsIHN0cmluZ2lmeSA9IGZhbHNlKTogYW55W10ge1xuXHRcdGNvbnN0IHN3ID0gbmV3IFN0cmluZ1dyaXRlcigpO1xuXHRcdGNvbnN0IG91dHB1dCA9IFdyaXRlck91dHB1dFN0cmVhbVxuXHRcdFx0LmJ1aWxkZXIoKVxuXHRcdFx0LnNldFdyaXRlcihzdylcblx0XHRcdC5zZXRDaGFyc2V0KFN0YW5kYXJkQ2hhcnNldHMuVVRGXzgpXG5cdFx0XHQuZ2V0KCk7XG5cdFx0RGF0YWJhc2VGYWNhZGUudG9Kc29uKHRoaXMubmF0aXZlLCBsaW1pdGVkLCBzdHJpbmdpZnksIG91dHB1dCk7XG5cdFx0Y29uc3QganNvblN0cmluZyA9IHN3LnRvU3RyaW5nKCk7XG5cdFx0cmV0dXJuIHN0cmluZ2lmeSA/IGpzb25TdHJpbmcgOiBKU09OLnBhcnNlKGpzb25TdHJpbmcpO1xuXHR9XG5cblx0cHVibGljIGNsb3NlKCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmNsb3NlKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmlnRGVjaW1hbChpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnkgLyo6IEJpZ0RlY2ltYWwqLyAge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCaWdEZWNpbWFsKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldEJvb2xlYW4oaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEJvb2xlYW4oaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qnl0ZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnkgLyo6IGJ5dGUqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEJ5dGUoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qnl0ZXMoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55W10gLyo6IGJ5dGVbXSovIHtcblx0XHRjb25zdCBkYXRhID0gdGhpcy5uYXRpdmUuZ2V0Qnl0ZXMoaWRlbnRpZmllcik7XG5cdFx0cmV0dXJuIEJ5dGVzLnRvSmF2YVNjcmlwdEJ5dGVzKGRhdGEpO1xuXHR9O1xuXG5cdHB1YmxpYyBnZXRCeXRlc05hdGl2ZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnlbXSAvKjogYnl0ZVtdKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCeXRlcyhpZGVudGlmaWVyKTtcblx0fTtcblxuXHRwdWJsaWMgZ2V0QmxvYihpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnkgLyo6IHNxbC5CbG9iKi8ge1xuXHRcdGNvbnN0IGRhdGEgPSBEYXRhYmFzZUZhY2FkZS5yZWFkQmxvYlZhbHVlKHRoaXMubmF0aXZlLCBpZGVudGlmaWVyKTtcblx0XHRyZXR1cm4gQnl0ZXMudG9KYXZhU2NyaXB0Qnl0ZXMoZGF0YSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmxvYk5hdGl2ZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnkgLyo6IHNxbC5CbG9iKi8ge1xuXHRcdHJldHVybiBEYXRhYmFzZUZhY2FkZS5yZWFkQmxvYlZhbHVlKHRoaXMubmF0aXZlLCBpZGVudGlmaWVyKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDbG9iKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IGFueSAvKjogc3FsLkNsb2IqLyB7XG5cdFx0cmV0dXJuIHJlYWRDbG9iVmFsdWUodGhpcy5uYXRpdmUuZ2V0Q2xvYihpZGVudGlmaWVyKSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TkNsb2IoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55IC8qOiBzcWwuTkNsb2IqLyB7XG5cdFx0cmV0dXJuIHJlYWROQ2xvYlZhbHVlKHRoaXMubmF0aXZlLmdldE5DbG9iKGlkZW50aWZpZXIpKTtcblx0fVxuXG5cdHB1YmxpYyBnZXREYXRlKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IERhdGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRhdGVJbnN0YW5jZSA9IHRoaXMubmF0aXZlLmdldERhdGUoaWRlbnRpZmllcik7XG5cdFx0cmV0dXJuIGRhdGVJbnN0YW5jZSAhPT0gbnVsbCAmJiBkYXRlSW5zdGFuY2UgIT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKGRhdGVJbnN0YW5jZS5nZXRUaW1lKCkpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0cHVibGljIGdldERvdWJsZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXREb3VibGUoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RmxvYXQoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0RmxvYXQoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0SW50KGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEludChpZGVudGlmaWVyKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb25nKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldExvbmcoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U2hvcnQoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0U2hvcnQoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U3RyaW5nKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFN0cmluZyhpZGVudGlmaWVyKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRUaW1lKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IERhdGUgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IGRhdGVJbnN0YW5jZSA9IHRoaXMubmF0aXZlLmdldFRpbWUoaWRlbnRpZmllcik7XG5cdFx0cmV0dXJuIGRhdGVJbnN0YW5jZSAhPT0gbnVsbCAmJiBkYXRlSW5zdGFuY2UgIT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKGRhdGVJbnN0YW5jZS5nZXRUaW1lKCkpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0cHVibGljIGdldFRpbWVzdGFtcChpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRUaW1lc3RhbXAoaWRlbnRpZmllcik7XG5cdFx0cmV0dXJuIGRhdGVJbnN0YW5jZSAhPT0gbnVsbCAmJiBkYXRlSW5zdGFuY2UgIT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKGRhdGVJbnN0YW5jZS5nZXRUaW1lKCkpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0cHVibGljIGlzQWZ0ZXJMYXN0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0FmdGVyTGFzdCgpO1xuXHR9XG5cblx0cHVibGljIGlzQmVmb3JlRmlyc3QoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmlzQmVmb3JlRmlyc3QoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Nsb3NlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNDbG9zZWQoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0ZpcnN0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0ZpcnN0KCk7XG5cdH1cblxuXHRwdWJsaWMgaXNMYXN0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0xhc3QoKTtcblx0fVxuXG5cdHB1YmxpYyBuZXh0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5uZXh0KCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWV0YURhdGEoKTogYW55IC8qOiBSZXN1bHRTZXRNZXRhRGF0YSovIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TWV0YURhdGEoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXROU3RyaW5nKGNvbHVtbkluZGV4OiBudW1iZXIpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXROU3RyaW5nKGNvbHVtbkluZGV4KTtcblx0fVxufVxuXG4vLyAtLS0gQ29ubmVjdGlvbiBDbGFzcyAtLS1cblxuLyoqXG4gKiBDb25uZWN0aW9uIG9iamVjdCB3cmFwcGVyIGFyb3VuZCBhIG5hdGl2ZSBKYXZhIGBDb25uZWN0aW9uYC5cbiAqL1xuZXhwb3J0IGNsYXNzIENvbm5lY3Rpb24ge1xuXG5cdHB1YmxpYyByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihkYXRhc291cmNlTmFtZT86IHN0cmluZykge1xuXHRcdHRoaXMubmF0aXZlID0gRGF0YWJhc2VGYWNhZGUuZ2V0Q29ubmVjdGlvbihkYXRhc291cmNlTmFtZSk7XG5cdH1cblxuXHQvKipcblx0ICogQ2hlY2tzIGlmIHRoZSBjb25uZWN0aW9uIGlzIGZvciBhIHNwZWNpZmljIGRhdGFiYXNlIHN5c3RlbS5cblx0ICovXG5cdHB1YmxpYyBpc09mVHlwZShkYXRhYmFzZVN5c3RlbTogRGF0YWJhc2VTeXN0ZW0pOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5nZXREYXRhYmFzZVN5c3RlbSgpID09PSBkYXRhYmFzZVN5c3RlbTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSB0eXBlIG9mIHRoZSB1bmRlcmx5aW5nIGRhdGFiYXNlIHN5c3RlbSBhcyBhIHtAbGluayBEYXRhYmFzZVN5c3RlbX0gZW51bS5cblx0ICovXG5cdHB1YmxpYyBnZXREYXRhYmFzZVN5c3RlbSgpOiBEYXRhYmFzZVN5c3RlbSB7XG5cdFx0Y29uc3QgZGJTeXN0ZW06IHN0cmluZyA9IHRoaXMubmF0aXZlLmdldERhdGFiYXNlU3lzdGVtKCkubmFtZSgpO1xuXHRcdHN3aXRjaCAoZGJTeXN0ZW0pIHtcblx0XHRcdGNhc2UgXCJERVJCWVwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uREVSQlk7XG5cdFx0XHRjYXNlIFwiUE9TVEdSRVNRTFwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uUE9TVEdSRVNRTDtcblx0XHRcdGNhc2UgXCJIMlwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uSDI7XG5cdFx0XHRjYXNlIFwiTUFSSUFEQlwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uTUFSSUFEQjtcblx0XHRcdGNhc2UgXCJIQU5BXCI6XG5cdFx0XHRcdHJldHVybiBEYXRhYmFzZVN5c3RlbS5IQU5BO1xuXHRcdFx0Y2FzZSBcIlNOT1dGTEFLRVwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uU05PV0ZMQUtFO1xuXHRcdFx0Y2FzZSBcIk1ZU1FMXCI6XG5cdFx0XHRcdHJldHVybiBEYXRhYmFzZVN5c3RlbS5NWVNRTDtcblx0XHRcdGNhc2UgXCJNT05HT0RCXCI6XG5cdFx0XHRcdHJldHVybiBEYXRhYmFzZVN5c3RlbS5NT05HT0RCO1xuXHRcdFx0Y2FzZSBcIlNZQkFTRVwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uU1lCQVNFO1xuXHRcdFx0Y2FzZSBcIlVOS05PV05cIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLlVOS05PV047XG5cdFx0XHRkZWZhdWx0OlxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgbWFwcGluZyBmb3IgZGF0YWJhc2Ugc3lzdGVtIHR5cGUgJHtkYlN5c3RlbX1gKTtcblx0XHR9XG5cdH1cblxuXHQvKipcblx0ICogQ3JlYXRlcyBhIG5ldyB7QGxpbmsgUHJlcGFyZWRTdGF0ZW1lbnR9IG9iamVjdCBmb3Igc2VuZGluZyBwYXJhbWV0ZXJpemVkIFNRTCBzdGF0ZW1lbnRzIHRvIHRoZSBkYXRhYmFzZS5cblx0ICovXG5cdHB1YmxpYyBwcmVwYXJlU3RhdGVtZW50KHNxbDogc3RyaW5nKTogUHJlcGFyZWRTdGF0ZW1lbnQge1xuXHRcdHJldHVybiBuZXcgUHJlcGFyZWRTdGF0ZW1lbnQodGhpcy5uYXRpdmUucHJlcGFyZVN0YXRlbWVudChzcWwpKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEge0BsaW5rIENhbGxhYmxlU3RhdGVtZW50fSBvYmplY3QgZm9yIGNhbGxpbmcgZGF0YWJhc2Ugc3RvcmVkIHByb2NlZHVyZXMgb3IgZnVuY3Rpb25zLlxuXHQgKi9cblx0cHVibGljIHByZXBhcmVDYWxsKHNxbDogc3RyaW5nKTogQ2FsbGFibGVTdGF0ZW1lbnQge1xuXHRcdHJldHVybiBuZXcgQ2FsbGFibGVTdGF0ZW1lbnQodGhpcy5uYXRpdmUucHJlcGFyZUNhbGwoc3FsKSk7XG5cdH1cblxuXHRwdWJsaWMgY2xvc2UoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLmlzQ2xvc2VkKCkpIHtcblx0XHRcdHRoaXMubmF0aXZlLmNsb3NlKCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGNvbW1pdCgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5jb21taXQoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRBdXRvQ29tbWl0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRBdXRvQ29tbWl0KCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q2F0YWxvZygpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRDYXRhbG9nKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0U2NoZW1hKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFNjaGVtYSgpO1xuXHR9XG5cblx0cHVibGljIGdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFRyYW5zYWN0aW9uSXNvbGF0aW9uKCk7XG5cdH1cblxuXHRwdWJsaWMgaXNDbG9zZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmlzQ2xvc2VkKCk7XG5cdH1cblxuXHRwdWJsaWMgaXNSZWFkT25seSgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNSZWFkT25seSgpO1xuXHR9XG5cblx0cHVibGljIGlzVmFsaWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmlzVmFsaWQoKTtcblx0fVxuXG5cdHB1YmxpYyByb2xsYmFjaygpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5yb2xsYmFjaygpO1xuXHR9XG5cblx0cHVibGljIHNldEF1dG9Db21taXQoYXV0b0NvbW1pdDogYm9vbGVhbik6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldEF1dG9Db21taXQoYXV0b0NvbW1pdCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0Q2F0YWxvZyhjYXRhbG9nOiBzdHJpbmcpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXRDYXRhbG9nKGNhdGFsb2cpO1xuXHR9XG5cblx0cHVibGljIHNldFJlYWRPbmx5KHJlYWRPbmx5OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuc2V0UmVhZE9ubHkocmVhZE9ubHkpO1xuXHR9XG5cblx0cHVibGljIHNldFNjaGVtYShzY2hlbWE6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldFNjaGVtYShzY2hlbWEpO1xuXHR9XG5cblx0cHVibGljIHNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5zYWN0aW9uSXNvbGF0aW9uOiBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXRUcmFuc2FjdGlvbklzb2xhdGlvbih0cmFuc2FjdGlvbklzb2xhdGlvbik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWV0YURhdGEoKTogYW55IC8qOiBEYXRhYmFzZU1ldGFEYXRhKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRNZXRhRGF0YSgpO1xuXHR9XG59XG5cbi8vIC0tLSBEYXRhYmFzZSBDbGFzcyAtLS1cblxuZXhwb3J0IGNsYXNzIERhdGFiYXNlIHtcblxuXHQvKipcblx0ICogUmV0dXJucyBhIGxpc3Qgb2YgYXZhaWxhYmxlIGRhdGEgc291cmNlIG5hbWVzLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXREYXRhU291cmNlcygpOiBzdHJpbmdbXSB7XG5cdFx0Y29uc3QgZGF0YXNvdXJjZXMgPSBEYXRhYmFzZUZhY2FkZS5nZXREYXRhU291cmNlcygpO1xuXHRcdHJldHVybiBkYXRhc291cmNlcyA/IEpTT04ucGFyc2UoZGF0YXNvdXJjZXMpIDogW107XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyBkYXRhYmFzZSBtZXRhZGF0YSBmb3IgdGhlIHNwZWNpZmllZCBkYXRhIHNvdXJjZS5cblx0ICovXG5cdHB1YmxpYyBzdGF0aWMgZ2V0TWV0YWRhdGEoZGF0YXNvdXJjZU5hbWU/OiBzdHJpbmcpOiBEYXRhYmFzZU1ldGFkYXRhIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBtZXRhZGF0YSA9IERhdGFiYXNlRmFjYWRlLmdldE1ldGFkYXRhKGRhdGFzb3VyY2VOYW1lKTtcblx0XHRyZXR1cm4gbWV0YWRhdGEgPyBKU09OLnBhcnNlKG1ldGFkYXRhKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIHRoZSBwcm9kdWN0IG5hbWUgb2YgdGhlIHVuZGVybHlpbmcgZGF0YWJhc2Ugc3lzdGVtLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRQcm9kdWN0TmFtZShkYXRhc291cmNlTmFtZT86IHN0cmluZyk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIERhdGFiYXNlRmFjYWRlLmdldFByb2R1Y3ROYW1lKGRhdGFzb3VyY2VOYW1lKTtcblx0fVxuXG5cdC8qKlxuXHQgKiBHZXRzIGEgbmV3IGRhdGFiYXNlIGNvbm5lY3Rpb24gb2JqZWN0LlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRDb25uZWN0aW9uKGRhdGFzb3VyY2VOYW1lPzogc3RyaW5nKTogQ29ubmVjdGlvbiB7XG5cdFx0cmV0dXJuIG5ldyBDb25uZWN0aW9uKGRhdGFzb3VyY2VOYW1lKTtcblx0fVxufVxuXG4vLyBAdHMtaWdub3JlXG5pZiAodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcpIHtcblx0Ly8gQHRzLWlnbm9yZVxuXHRtb2R1bGUuZXhwb3J0cyA9IHtcblx0XHREYXRhYmFzZSxcblx0XHRDb25uZWN0aW9uLFxuXHRcdFByZXBhcmVkU3RhdGVtZW50LFxuXHRcdENhbGxhYmxlU3RhdGVtZW50LFxuXHRcdFJlc3VsdFNldCxcblx0XHREYXRhYmFzZVN5c3RlbSxcblx0XHRTUUxUeXBlc1xuXHR9O1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIkFBSUEsU0FBUyxhQUFhO0FBR3RCLE1BQU0saUJBQWlCLEtBQUssS0FBSyx3REFBd0Q7QUFDekYsTUFBTSxXQUFXLEtBQUss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QUFBLEVBQy9CO0FBQUEsRUFFTyxZQUFvQjtBQUMxQixXQUFPLEtBQUssT0FBTyxVQUFVO0FBQUEsRUFDOUI7QUFBQSxFQUVPLDBCQUFrQztBQUN4QyxXQUFPLEtBQUssT0FBTyx3QkFBd0I7QUFBQSxFQUM1QztBQUFBLEVBRU8sV0FBb0I7QUFDMUIsV0FBTyxLQUFLLE9BQU8sU0FBUztBQUFBLEVBQzdCO0FBQUEsRUFFTyxhQUFzQjtBQUM1QixXQUFPLEtBQUssT0FBTyxXQUFXO0FBQUEsRUFDL0I7QUFBQSxFQUVPLFVBQW1CO0FBQ3pCLFdBQU8sS0FBSyxPQUFPLFFBQVE7QUFBQSxFQUM1QjtBQUFBLEVBRU8sV0FBaUI7QUFDdkIsU0FBSyxPQUFPLFNBQVM7QUFBQSxFQUN0QjtBQUFBLEVBRU8sY0FBYyxZQUEyQjtBQUMvQyxTQUFLLE9BQU8sY0FBYyxVQUFVO0FBQUEsRUFDckM7QUFBQSxFQUVPLFdBQVcsU0FBdUI7QUFDeEMsU0FBSyxPQUFPLFdBQVcsT0FBTztBQUFBLEVBQy9CO0FBQUEsRUFFTyxZQUFZLFVBQXlCO0FBQzNDLFNBQUssT0FBTyxZQUFZLFFBQVE7QUFBQSxFQUNqQztBQUFBLEVBRU8sVUFBVSxRQUFzQjtBQUN0QyxTQUFLLE9BQU8sVUFBVSxNQUFNO0FBQUEsRUFDN0I7QUFBQSxFQUVPLHdCQUF3QixzQkFBb0M7QUFDbEUsU0FBSyxPQUFPLHdCQUF3QixvQkFBb0I7QUFBQSxFQUN6RDtBQUFBLEVBRU8sY0FBMEM7QUFDaEQsV0FBTyxLQUFLLE9BQU8sWUFBWTtBQUFBLEVBQ2hDO0FBQ0Q7QUFJTyxNQUFNLFNBQVM7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtyQixPQUFjLGlCQUEyQjtBQUN4QyxVQUFNLGNBQWMsZUFBZSxlQUFlO0FBQ2xELFdBQU8sY0FBYyxLQUFLLE1BQU0sV0FBVyxJQUFJLENBQUM7QUFBQSxFQUNqRDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBYyxZQUFZLGdCQUF1RDtBQUNoRixVQUFNLFdBQVcsZUFBZSxZQUFZLGNBQWM7QUFDMUQsV0FBTyxXQUFXLEtBQUssTUFBTSxRQUFRLElBQUk7QUFBQSxFQUMxQztBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBYyxlQUFlLGdCQUFpQztBQUM3RCxXQUFPLGVBQWUsZUFBZSxjQUFjO0FBQUEsRUFDcEQ7QUFBQTtBQUFBO0FBQUE7QUFBQSxFQUtBLE9BQWMsY0FBYyxnQkFBcUM7QUFDaEUsV0FBTyxJQUFJLFdBQVcsY0FBYztBQUFBLEVBQ3JDO0FBQ0Q7QUFHQSxJQUFJLE9BQU8sV0FBVyxhQUFhO0FBRWxDLFNBQU8sVUFBVTtBQUFBLElBQ2hCO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsRUFDRDtBQUNEOyIsCiAgIm5hbWVzIjogWyJEYXRhYmFzZVN5c3RlbSIsICJpc0hhbmFEYXRhYmFzZSJdCn0K
|
|
887
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RiL2RhdGFiYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyIvKipcbiAqIEFQSSBEYXRhYmFzZVxuICpcbiAqL1xuaW1wb3J0IHsgQnl0ZXMgfSBmcm9tIFwiQGFlcm9raXQvc2RrL2lvL2J5dGVzXCI7XG5pbXBvcnQgeyBJbnB1dFN0cmVhbSB9IGZyb20gXCJAYWVyb2tpdC9zZGsvaW8vc3RyZWFtc1wiO1xuXG5jb25zdCBEYXRhYmFzZUZhY2FkZSA9IEphdmEudHlwZShcIm9yZy5lY2xpcHNlLmRpcmlnaWJsZS5jb21wb25lbnRzLmFwaS5kYi5EYXRhYmFzZUZhY2FkZVwiKTtcbmNvbnN0IEpTcWxEYXRlID0gSmF2YS50eXBlKFwiamF2YS5zcWwuRGF0ZVwiKTtcbmNvbnN0IEpTcWxUaW1lc3RhbXAgPSBKYXZhLnR5cGUoXCJqYXZhLnNxbC5UaW1lc3RhbXBcIik7XG5jb25zdCBKU3FsVGltZSA9IEphdmEudHlwZShcImphdmEuc3FsLlRpbWVcIik7XG5jb25zdCBTdHJpbmdXcml0ZXIgPSBKYXZhLnR5cGUoXCJqYXZhLmlvLlN0cmluZ1dyaXRlclwiKTtcbmNvbnN0IFdyaXRlck91dHB1dFN0cmVhbSA9IEphdmEudHlwZShcIm9yZy5hcGFjaGUuY29tbW9ucy5pby5vdXRwdXQuV3JpdGVyT3V0cHV0U3RyZWFtXCIpO1xuY29uc3QgU3RhbmRhcmRDaGFyc2V0cyA9IEphdmEudHlwZShcImphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0c1wiKTtcblxuLyoqXG4gKiBNYXBwaW5nIG9mIFNRTCB0eXBlIG5hbWVzIHRvIHRoZWlyIGphdmEuc3FsLlR5cGVzIGludGVnZXIgY29uc3RhbnRzLlxuICovXG5leHBvcnQgY29uc3QgU1FMVHlwZXMgPSBPYmplY3QuZnJlZXplKHtcblx0XCJCT09MRUFOXCI6IDE2LFxuXHRcIkRBVEVcIjogOTEsXG5cdFwiVElNRVwiOiA5Mixcblx0XCJUSU1FU1RBTVBcIjogOTMsXG5cdFwiRE9VQkxFXCI6IDgsXG5cdFwiRkxPQVRcIjogNixcblx0XCJSRUFMXCI6IDcsXG5cdFwiVElOWUlOVFwiOiAtNixcblx0XCJTTUFMTElOVFwiOiA1LFxuXHRcIklOVEVHRVJcIjogNCxcblx0XCJCSUdJTlRcIjogLTUsXG5cdFwiVkFSQ0hBUlwiOiAxMixcblx0XCJDSEFSXCI6IDEsXG5cdFwiQ0xPQlwiOiAyMDA1LFxuXHRcIkJMT0JcIjogMjAwNCxcblx0XCJWQVJCSU5BUllcIjogLTMsXG5cdFwiREVDSU1BTFwiOiAzLFxuXHRcIkFSUkFZXCI6IDIwMDMsXG5cdFwiTlZBUkNIQVJcIjogLTksXG5cdFwiTkNMT0JcIjogMjAxMSxcblx0XCJCSVRcIjogLTdcbn0pO1xuXG5leHBvcnQgZW51bSBEYXRhYmFzZVN5c3RlbSB7XG5cdFVOS05PV04sIERFUkJZLCBQT1NUR1JFU1FMLCBIMiwgTUFSSUFEQiwgSEFOQSwgU05PV0ZMQUtFLCBNWVNRTCwgTU9OR09EQiwgU1lCQVNFLCBNU1NRTFxufVxuXG4vLyAtLS0gTWV0YWRhdGEgSW50ZXJmYWNlcyAtLS1cblxuZXhwb3J0IGludGVyZmFjZSBUYWJsZU1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUgdHlwZS4gKi9cblx0cmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXHQvKiogVGhlIHJlbWFya3MuICovXG5cdHJlYWRvbmx5IHJlbWFya3M6IHN0cmluZztcblx0LyoqIFRoZSBjb2x1bW5zLiAqL1xuXHRyZWFkb25seSBjb2x1bW5zOiBDb2x1bW5NZXRhZGF0YVtdO1xuXHQvKiogVGhlIGluZGljZXMuICovXG5cdHJlYWRvbmx5IGluZGljZXM6IEluZGV4TWV0YWRhdGFbXTtcblx0LyoqIFRoZSBpbmRpY2VzLiAqL1xuXHRyZWFkb25seSBmb3JlaWduS2V5czogRm9yZWlnbktleU1ldGFkYXRhW107XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbHVtbk1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUgdHlwZS4gKi9cblx0cmVhZG9ubHkgdHlwZTogc3RyaW5nO1xuXHQvKiogVGhlIHNpemUuICovXG5cdHJlYWRvbmx5IHNpemU6IG51bWJlcjtcblx0LyoqIFRoZSBudWxsYWJsZS4gKi9cblx0cmVhZG9ubHkgbnVsbGFibGU6IGJvb2xlYW47XG5cdC8qKiBUaGUga2V5LiAqL1xuXHRyZWFkb25seSBrZXk6IGJvb2xlYW47XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xuXHQvKiogVGhlIHNjYWxlLiAqL1xuXHRyZWFkb25seSBzY2FsZTogbnVtYmVyO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEluZGV4TWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlLiAqL1xuXHRyZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cdC8qKiBUaGUgY29sdW1uLiAqL1xuXHRyZWFkb25seSBjb2x1bW46IHN0cmluZztcblx0LyoqIFRoZSBub24gdW5pcXVlLiAqL1xuXHRyZWFkb25seSBub25VbmlxdWU6IGJvb2xlYW47XG5cdC8qKiBUaGUgcXVhbGlmaWVyLiAqL1xuXHRyZWFkb25seSBxdWFsaWZpZXI6IHN0cmluZztcblx0LyoqIFRoZSBvcmRpbmFsIHBvc2l0aW9uLiAqL1xuXHRyZWFkb25seSBvcmRpbmFsUG9zaXRpb246IHN0cmluZztcblx0LyoqIFRoZSBzb3J0IG9yZGVyLiAqL1xuXHRyZWFkb25seSBzb3J0T3JkZXI6IHN0cmluZztcblx0LyoqIFRoZSBjYXJkaW5hbGl0eS4gKi9cblx0cmVhZG9ubHkgY2FyZGluYWxpdHk6IG51bWJlcjtcblx0LyoqIFRoZSBwYWdlcy4gKi9cblx0cmVhZG9ubHkgcGFnZXM6IG51bWJlcjtcblx0LyoqIFRoZSBmaWx0ZXIgY29uZGl0aW9uLiAqL1xuXHRyZWFkb25seSBmaWx0ZXJDb25kaXRpb246IHN0cmluZztcblx0LyoqIFRoZSBraW5kLiAqL1xuXHRyZWFkb25seSBraW5kOiBzdHJpbmc7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgRm9yZWlnbktleU1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFNjaGVtYU1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xuXHQvKiogVGhlIHRhYmxlcy4gKi9cblx0cmVhZG9ubHkgdGFibGVzOiBUYWJsZU1ldGFkYXRhW107XG5cdC8qKiBUaGUgdmlld3MuICovXG5cdHJlYWRvbmx5IHZpZXdzOiBUYWJsZU1ldGFkYXRhW107XG5cdC8qKiBUaGUgcHJvY2VkdXJlcy4gKi9cblx0cmVhZG9ubHkgcHJvY2VkdXJlczogUHJvY2VkdXJlTWV0YWRhdGFbXTtcblx0LyoqIFRoZSBmdW5jdGlvbnMuICovXG5cdHJlYWRvbmx5IGZ1bmN0aW9uczogRnVuY3Rpb25NZXRhZGF0YVtdO1xuXHQvKiogVGhlIGZ1bmN0aW9ucy4gKi9cblx0cmVhZG9ubHkgc2VxdWVuY2VzOiBTZXF1ZW5jZU1ldGFkYXRhW107XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgUHJvY2VkdXJlTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlLiAqL1xuXHRyZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cdC8qKiBUaGUgcmVtYXJrcy4gKi9cblx0cmVhZG9ubHkgcmVtYXJrczogc3RyaW5nO1xuXHQvKiogVGhlIGNvbHVtbnMuICovXG5cdHJlYWRvbmx5IGNvbHVtbnM6IFBhcmFtZXRlckNvbHVtbk1ldGFkYXRhW107XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIEZ1bmN0aW9uTWV0YWRhdGEge1xuXHQvKiogVGhlIG5hbWUuICovXG5cdHJlYWRvbmx5IG5hbWU6IHN0cmluZztcblx0LyoqIFRoZSB0eXBlLiAqL1xuXHRyZWFkb25seSB0eXBlOiBzdHJpbmc7XG5cdC8qKiBUaGUgcmVtYXJrcy4gKi9cblx0cmVhZG9ubHkgcmVtYXJrczogc3RyaW5nO1xuXHQvKiogVGhlIGNvbHVtbnMuICovXG5cdHJlYWRvbmx5IGNvbHVtbnM6IFBhcmFtZXRlckNvbHVtbk1ldGFkYXRhW107XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIFBhcmFtZXRlckNvbHVtbk1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogbnVtYmVyO1xuXHQvKiogVGhlIHR5cGUuICovXG5cdHJlYWRvbmx5IHR5cGU6IHN0cmluZztcblx0LyoqIFRoZSBwcmVjaXNpb24uICovXG5cdHJlYWRvbmx5IHByZWNpc2lvbjogbnVtYmVyO1xuXHQvKiogVGhlIGxlbmd0aC4gKi9cblx0cmVhZG9ubHkgbGVuZ3RoOiBudW1iZXI7XG5cdC8qKiBUaGUgc2NhbGUuICovXG5cdHJlYWRvbmx5IHNjYWxlOiBudW1iZXI7XG5cdC8qKiBUaGUgcmFkaXguICovXG5cdHJlYWRvbmx5IHJhZGl4OiBudW1iZXI7XG5cdC8qKiBUaGUgbnVsbGFibGUuICovXG5cdHJlYWRvbmx5IG51bGxhYmxlOiBib29sZWFuO1xuXHQvKiogVGhlIHJlbWFya3MuICovXG5cdHJlYWRvbmx5IHJlbWFya3M6IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZXF1ZW5jZU1ldGFkYXRhIHtcblx0LyoqIFRoZSBuYW1lLiAqL1xuXHRyZWFkb25seSBuYW1lOiBzdHJpbmc7XG5cdC8qKiBUaGUga2luZC4gKi9cblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIERhdGFiYXNlTWV0YWRhdGEge1xuXHRyZWFkb25seSBhbGxQcm9jZWR1cmVzQXJlQ2FsbGFibGU6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGFsbFRhYmxlc0FyZVNlbGVjdGFibGU6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHVybDogc3RyaW5nO1xuXHRyZWFkb25seSB1c2VyTmFtZTogc3RyaW5nO1xuXHRyZWFkb25seSBpc1JlYWRPbmx5OiBib29sZWFuO1xuXHRyZWFkb25seSBudWxsc0FyZVNvcnRlZEhpZ2g6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG51bGxzQXJlU29ydGVkTG93OiBib29sZWFuO1xuXHRyZWFkb25seSBudWxsc0FyZVNvcnRlZEF0U3RhcnQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG51bGxzQXJlU29ydGVkQXRFbmQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGRhdGFiYXNlUHJvZHVjdE5hbWU6IHN0cmluZztcblx0cmVhZG9ubHkgZGF0YWJhc2VQcm9kdWN0VmVyc2lvbjogc3RyaW5nO1xuXHRyZWFkb25seSBkcml2ZXJOYW1lOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGRyaXZlclZlcnNpb246IHN0cmluZztcblx0cmVhZG9ubHkgZHJpdmVyTWFqb3JWZXJzaW9uOiBudW1iZXI7XG5cdHJlYWRvbmx5IGRyaXZlck1pbm9yVmVyc2lvbjogbnVtYmVyO1xuXHRyZWFkb25seSB1c2VzTG9jYWxGaWxlczogYm9vbGVhbjtcblx0cmVhZG9ubHkgdXNlc0xvY2FsRmlsZVBlclRhYmxlOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c01peGVkQ2FzZUlkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdG9yZXNVcHBlckNhc2VJZGVudGlmaWVyczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3RvcmVzTG93ZXJDYXNlSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN0b3Jlc01peGVkQ2FzZUlkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c01peGVkQ2FzZVF1b3RlZElkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdG9yZXNVcHBlckNhc2VRdW90ZWRJZGVudGlmaWVyczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3RvcmVzTG93ZXJDYXNlUXVvdGVkSWRlbnRpZmllcnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN0b3Jlc01peGVkQ2FzZVF1b3RlZElkZW50aWZpZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBpZGVudGlmaWVyUXVvdGVTdHJpbmc6IHN0cmluZztcblx0cmVhZG9ubHkgc3FsS2V5d29yZHM6IHN0cmluZztcblx0cmVhZG9ubHkgbnVtZXJpY0Z1bmN0aW9uczogc3RyaW5nO1xuXHRyZWFkb25seSBzdHJpbmdGdW5jdGlvbnM6IHN0cmluZztcblx0cmVhZG9ubHkgc3lzdGVtRnVuY3Rpb25zOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHRpbWVEYXRlRnVuY3Rpb25zOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHNlYXJjaFN0cmluZ0VzY2FwZTogc3RyaW5nO1xuXHRyZWFkb25seSBleHRyYU5hbWVDaGFyYWN0ZXJzOiBzdHJpbmc7XG5cdHJlYWRvbmx5IHN1cHBvcnRzQWx0ZXJUYWJsZVdpdGhBZGRDb2x1bW46IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQWx0ZXJUYWJsZVdpdGhEcm9wQ29sdW1uOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0NvbHVtbkFsaWFzaW5nOiBib29sZWFuO1xuXHRyZWFkb25seSBudWxsUGx1c05vbk51bGxJc051bGw6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ29udmVydDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNUYWJsZUNvcnJlbGF0aW9uTmFtZXM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzRGlmZmVyZW50VGFibGVDb3JyZWxhdGlvbk5hbWVzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0V4cHJlc3Npb25zSW5PcmRlckJ5OiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c09yZGVyQnlVbnJlbGF0ZWQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzR3JvdXBCeTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNHcm91cEJ5VW5yZWxhdGVkOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0dyb3VwQnlCZXlvbmRTZWxlY3Q6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTGlrZUVzY2FwZUNsYXVzZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNNdWx0aXBsZVJlc3VsdFNldHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTXVsdGlwbGVUcmFuc2FjdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTm9uTnVsbGFibGVDb2x1bW5zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c01pbmltdW1TUUxHcmFtbWFyOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0NvcmVTUUxHcmFtbWFyOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0V4dGVuZGVkU1FMR3JhbW1hcjogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNBTlNJOTJFbnRyeUxldmVsU1FMOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0FOU0k5MkludGVybWVkaWF0ZVNRTDogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNBTlNJOTJGdWxsU1FMOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0ludGVncml0eUVuaGFuY2VtZW50RmFjaWxpdHk6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3V0ZXJKb2luczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNGdWxsT3V0ZXJKb2luczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNMaW1pdGVkT3V0ZXJKb2luczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc2NoZW1hVGVybTogc3RyaW5nO1xuXHRyZWFkb25seSBwcm9jZWR1cmVUZXJtOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGNhdGFsb2dUZXJtOiBzdHJpbmc7XG5cdHJlYWRvbmx5IGlzQ2F0YWxvZ0F0U3RhcnQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGNhdGFsb2dTZXBhcmF0b3I6IHN0cmluZztcblx0cmVhZG9ubHkgc3VwcG9ydHNTY2hlbWFzSW5EYXRhTWFuaXB1bGF0aW9uOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1NjaGVtYXNJblByb2NlZHVyZUNhbGxzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1NjaGVtYXNJblRhYmxlRGVmaW5pdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU2NoZW1hc0luSW5kZXhEZWZpbml0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTY2hlbWFzSW5Qcml2aWxlZ2VEZWZpbml0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDYXRhbG9nc0luRGF0YU1hbmlwdWxhdGlvbjogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNDYXRhbG9nc0luUHJvY2VkdXJlQ2FsbHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ2F0YWxvZ3NJblRhYmxlRGVmaW5pdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ2F0YWxvZ3NJbkluZGV4RGVmaW5pdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQ2F0YWxvZ3NJblByaXZpbGVnZURlZmluaXRpb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1Bvc2l0aW9uZWREZWxldGU6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzUG9zaXRpb25lZFVwZGF0ZTogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTZWxlY3RGb3JVcGRhdGU6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU3RvcmVkUHJvY2VkdXJlczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdWJxdWVyaWVzSW5Db21wYXJpc29uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdWJxdWVyaWVzSW5FeGlzdHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU3VicXVlcmllc0luSW5zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1N1YnF1ZXJpZXNJblF1YW50aWZpZWRzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0NvcnJlbGF0ZWRTdWJxdWVyaWVzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1VuaW9uOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1VuaW9uQWxsOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c09wZW5DdXJzb3JzQWNyb3NzQ29tbWl0OiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c09wZW5DdXJzb3JzQWNyb3NzUm9sbGJhY2s6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3BlblN0YXRlbWVudHNBY3Jvc3NDb21taXQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzT3BlblN0YXRlbWVudHNBY3Jvc3NSb2xsYmFjazogYm9vbGVhbjtcblx0cmVhZG9ubHkgbWF4QmluYXJ5TGl0ZXJhbExlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDaGFyTGl0ZXJhbExlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb2x1bW5OYW1lTGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heENvbHVtbnNJbkdyb3VwQnk6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q29sdW1uc0luSW5kZXg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q29sdW1uc0luT3JkZXJCeTogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhDb2x1bW5zSW5TZWxlY3Q6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q29sdW1uc0luVGFibGU6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q29ubmVjdGlvbnM6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q3Vyc29yTmFtZUxlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhJbmRleExlbmd0aDogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhTY2hlbWFOYW1lTGVuZ3RoOiBudW1iZXI7XG5cdHJlYWRvbmx5IG1heFByb2NlZHVyZU5hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Q2F0YWxvZ05hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4Um93U2l6ZTogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhSb3dTaXplSW5jbHVkZUJsb2JzOiBib29sZWFuO1xuXHRyZWFkb25seSBtYXhTdGF0ZW1lbnRMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4U3RhdGVtZW50czogbnVtYmVyO1xuXHRyZWFkb25seSBtYXhUYWJsZU5hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4VGFibGVzSW5TZWxlY3Q6IG51bWJlcjtcblx0cmVhZG9ubHkgbWF4VXNlck5hbWVMZW5ndGg6IG51bWJlcjtcblx0cmVhZG9ubHkgZGVmYXVsdFRyYW5zYWN0aW9uSXNvbGF0aW9uOiBudW1iZXI7XG5cdHJlYWRvbmx5IHN1cHBvcnRzVHJhbnNhY3Rpb25zOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c0RhdGFEZWZpbml0aW9uQW5kRGF0YU1hbmlwdWxhdGlvblRyYW5zYWN0aW9uczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNEYXRhTWFuaXB1bGF0aW9uVHJhbnNhY3Rpb25zT25seTogYm9vbGVhbjtcblx0cmVhZG9ubHkgZGF0YURlZmluaXRpb25DYXVzZXNUcmFuc2FjdGlvbkNvbW1pdDogYm9vbGVhbjtcblx0cmVhZG9ubHkgZGF0YURlZmluaXRpb25JZ25vcmVkSW5UcmFuc2FjdGlvbnM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzQmF0Y2hVcGRhdGVzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c1NhdmVwb2ludHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzTmFtZWRQYXJhbWV0ZXJzOiBib29sZWFuO1xuXHRyZWFkb25seSBzdXBwb3J0c011bHRpcGxlT3BlblJlc3VsdHM6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzR2V0R2VuZXJhdGVkS2V5czogYm9vbGVhbjtcblx0cmVhZG9ubHkgcmVzdWx0U2V0SG9sZGFiaWxpdHk6IG51bWJlcjtcblx0cmVhZG9ubHkgZGF0YWJhc2VNYWpvclZlcnNpb246IG51bWJlcjtcblx0cmVhZG9ubHkgZGF0YWJhc2VNaW5vclZlcnNpb246IG51bWJlcjtcblx0cmVhZG9ubHkgamRiY01ham9yVmVyc2lvbjogbnVtYmVyO1xuXHRyZWFkb25seSBqZGJjTWlub3JWZXJzaW9uOiBudW1iZXI7XG5cdHJlYWRvbmx5IHNxbFN0YXRlVHlwZTogbnVtYmVyO1xuXHRyZWFkb25seSBsb2NhdG9yc1VwZGF0ZUNvcHk6IGJvb2xlYW47XG5cdHJlYWRvbmx5IHN1cHBvcnRzU3RhdGVtZW50UG9vbGluZzogYm9vbGVhbjtcblx0cmVhZG9ubHkgc3VwcG9ydHNTdG9yZWRGdW5jdGlvbnNVc2luZ0NhbGxTeW50YXg6IGJvb2xlYW47XG5cdHJlYWRvbmx5IGF1dG9Db21taXRGYWlsdXJlQ2xvc2VzQWxsUmVzdWx0U2V0czogYm9vbGVhbjtcblx0cmVhZG9ubHkgZ2VuZXJhdGVkS2V5QWx3YXlzUmV0dXJuZWQ6IGJvb2xlYW47XG5cdHJlYWRvbmx5IG1heExvZ2ljYWxMb2JTaXplOiBudW1iZXI7XG5cdHJlYWRvbmx5IHN1cHBvcnRzUmVmQ3Vyc29yczogYm9vbGVhbjtcblx0cmVhZG9ubHkgc2NoZW1hczogU2NoZW1hTWV0YWRhdGFbXTtcblx0cmVhZG9ubHkga2luZDogc3RyaW5nO1xufVxuXG4vLyAtLS0gSGVscGVyIEZ1bmN0aW9ucyAtLS1cblxuZnVuY3Rpb24gaXNIYW5hRGF0YWJhc2UoY29ubmVjdGlvbjogYW55KTogYm9vbGVhbiB7XG5cdGxldCBpc0hhbmFEYXRhYmFzZSA9IGZhbHNlO1xuXHRsZXQgbWV0YWRhdGEgPSBjb25uZWN0aW9uLmdldE1ldGFEYXRhKCk7XG5cdGlmIChtZXRhZGF0YSAhPT0gbnVsbCAmJiBtZXRhZGF0YSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0aXNIYW5hRGF0YWJhc2UgPSBtZXRhZGF0YS5nZXREYXRhYmFzZVByb2R1Y3ROYW1lKCkgPT09IFwiSERCXCI7XG5cdH1cblx0cmV0dXJuIGlzSGFuYURhdGFiYXNlO1xufVxuXG5mdW5jdGlvbiByZWFkQ2xvYlZhbHVlKHZhbHVlOiBhbnkpOiBzdHJpbmcgfCBhbnkge1xuXHRyZXR1cm4gdmFsdWUgPyB2YWx1ZS5nZXRTdWJTdHJpbmcoMSwgdmFsdWUubGVuZ3RoKCkpIDogdmFsdWU7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUNsb2JWYWx1ZShuYXRpdmU6IGFueSwgdmFsdWU6IGFueSk6IGFueSB7XG5cdHRyeSB7XG5cdFx0bGV0IGNvbm5lY3Rpb24gPSBuYXRpdmUuZ2V0Q29ubmVjdGlvbigpOyAvLyBpbnRlbnRpb25hbGx5IG5vdCBjbG9zZWRcblx0XHRpZiAoY29ubmVjdGlvbiA9PT0gbnVsbCB8fCBjb25uZWN0aW9uID09PSB1bmRlZmluZWQpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkNhbid0IGNyZWF0ZSBuZXcgJ0Nsb2InIHZhbHVlIGFzIHRoZSBjb25uZWN0aW9uIGlzIG51bGxcIik7XG5cdFx0fVxuXHRcdGxldCBjbG9iID0gbnVsbDtcblx0XHRpZiAoaXNIYW5hRGF0YWJhc2UoY29ubmVjdGlvbikpIHtcblx0XHRcdGxldCBwcyA9IG51bGw7XG5cdFx0XHR0cnkge1xuXHRcdFx0XHRwcyA9IGNvbm5lY3Rpb24ucHJlcGFyZVN0YXRlbWVudChcIlNFTEVDVCBUT19DTE9CICg/KSBGUk9NIERVTU1ZO1wiKTtcblx0XHRcdFx0cHMuc2V0U3RyaW5nKDEsIHZhbHVlKTtcblx0XHRcdFx0bGV0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7XG5cdFx0XHRcdGlmIChycy5uZXh0KCkpIHtcblx0XHRcdFx0XHRjbG9iID0gcnMuZ2V0Q2xvYigxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKHBzICE9PSBudWxsICYmIHBzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwcy5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGNsb2IgPSBjb25uZWN0aW9uLmNyZWF0ZUNsb2IoKTtcblx0XHRcdGNsb2Iuc2V0U3RyaW5nKDEsIHZhbHVlKTtcblx0XHR9XG5cdFx0cmV0dXJuIGNsb2I7XG5cdH0gY2F0Y2ggKGU6IGFueSkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgRXJyb3Igb2NjdXJlZCBkdXJpbmcgY3JlYXRpb24gb2YgJ0Nsb2InIHZhbHVlOiAke2UubWVzc2FnZX1gKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZWFkTkNsb2JWYWx1ZSh2YWx1ZTogYW55KTogc3RyaW5nIHwgYW55IHtcblx0cmV0dXJuIHZhbHVlID8gdmFsdWUuZ2V0U3ViU3RyaW5nKDEsIHZhbHVlLmxlbmd0aCgpKSA6IHZhbHVlO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVOQ2xvYlZhbHVlKG5hdGl2ZTogYW55LCB2YWx1ZTogYW55KTogYW55IHtcblx0dHJ5IHtcblx0XHRsZXQgY29ubmVjdGlvbiA9IG5hdGl2ZS5nZXRDb25uZWN0aW9uKCk7IC8vIGludGVudGlvbmFsbHkgbm90IGNsb3NlZFxuXHRcdGlmIChjb25uZWN0aW9uID09PSBudWxsIHx8IGNvbm5lY3Rpb24gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQ2FuJ3QgY3JlYXRlIG5ldyAnTkNsb2InIHZhbHVlIGFzIHRoZSBjb25uZWN0aW9uIGlzIG51bGxcIik7XG5cdFx0fVxuXHRcdGxldCBuY2xvYiA9IG51bGw7XG5cdFx0aWYgKGlzSGFuYURhdGFiYXNlKGNvbm5lY3Rpb24pKSB7XG5cdFx0XHRsZXQgcHMgPSBudWxsO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cHMgPSBjb25uZWN0aW9uLnByZXBhcmVTdGF0ZW1lbnQoXCJTRUxFQ1QgVE9fTkNMT0IgKD8pIEZST00gRFVNTVk7XCIpO1xuXHRcdFx0XHRwcy5zZXRTdHJpbmcoMSwgdmFsdWUpO1xuXHRcdFx0XHRsZXQgcnMgPSBwcy5leGVjdXRlUXVlcnkoKTtcblx0XHRcdFx0aWYgKHJzLm5leHQoKSkge1xuXHRcdFx0XHRcdG5jbG9iID0gcnMuZ2V0TkNsb2IoMSk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZmluYWxseSB7XG5cdFx0XHRcdGlmIChwcyAhPT0gbnVsbCAmJiBwcyAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cHMuY2xvc2UoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0gZWxzZSB7XG5cdFx0XHRuY2xvYiA9IGNvbm5lY3Rpb24uY3JlYXRlTkNsb2IoKTtcblx0XHRcdG5jbG9iLnNldFN0cmluZygxLCB2YWx1ZSk7XG5cdFx0fVxuXHRcdHJldHVybiBuY2xvYjtcblx0fSBjYXRjaCAoZTogYW55KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cmVkIGR1cmluZyBjcmVhdGlvbiBvZiAnTkNsb2InIHZhbHVlOiAke2UubWVzc2FnZX1gKTtcblx0fVxufVxuXG5mdW5jdGlvbiBjcmVhdGVCbG9iVmFsdWUobmF0aXZlOiBhbnksIHZhbHVlOiBhbnkpOiBhbnkge1xuXHR0cnkge1xuXHRcdGxldCBjb25uZWN0aW9uID0gbmF0aXZlLmdldENvbm5lY3Rpb24oKTsgLy8gaW50ZW50aW9uYWxseSBub3QgY2xvc2VkXG5cdFx0aWYgKGNvbm5lY3Rpb24gPT09IG51bGwgfHwgY29ubmVjdGlvbiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJDYW4ndCBjcmVhdGUgbmV3ICdCbG9iJyB2YWx1ZSBhcyB0aGUgY29ubmVjdGlvbiBpcyBudWxsXCIpO1xuXHRcdH1cblx0XHRsZXQgYmxvYiA9IG51bGw7XG5cdFx0aWYgKGlzSGFuYURhdGFiYXNlKGNvbm5lY3Rpb24pKSB7XG5cdFx0XHRsZXQgcHMgPSBudWxsO1xuXHRcdFx0dHJ5IHtcblx0XHRcdFx0cHMgPSBjb25uZWN0aW9uLnByZXBhcmVTdGF0ZW1lbnQoXCJTRUxFQ1QgVE9fQkxPQiAoPykgRlJPTSBEVU1NWTtcIik7XG5cdFx0XHRcdHBzLnNldEJ5dGVzKDEsIHZhbHVlKTtcblx0XHRcdFx0bGV0IHJzID0gcHMuZXhlY3V0ZVF1ZXJ5KCk7XG5cdFx0XHRcdGlmIChycy5uZXh0KCkpIHtcblx0XHRcdFx0XHRibG9iID0gcnMuZ2V0QmxvYigxKTtcblx0XHRcdFx0fVxuXHRcdFx0fSBmaW5hbGx5IHtcblx0XHRcdFx0aWYgKHBzICE9PSBudWxsICYmIHBzICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRwcy5jbG9zZSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdGJsb2IgPSBjb25uZWN0aW9uLmNyZWF0ZUJsb2IoKTtcblx0XHRcdGJsb2Iuc2V0Qnl0ZXMoMSwgdmFsdWUpO1xuXHRcdH1cblx0XHRyZXR1cm4gYmxvYjtcblx0fSBjYXRjaCAoZTogYW55KSB7XG5cdFx0dGhyb3cgbmV3IEVycm9yKGBFcnJvciBvY2N1cmVkIGR1cmluZyBjcmVhdGlvbiBvZiAnQ2xvYicgdmFsdWU6ICR7ZS5tZXNzYWdlfWApO1xuXHR9XG59XG5cbmZ1bmN0aW9uIGdldERhdGVWYWx1ZSh2YWx1ZTogc3RyaW5nIHwgRGF0ZSk6IERhdGUge1xuXHRpZiAodHlwZW9mIHZhbHVlID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIG5ldyBEYXRlKHZhbHVlKTtcblx0fVxuXHRyZXR1cm4gdmFsdWU7XG59XG5cbi8vIC0tLSBTdGF0ZW1lbnQgQ2xhc3NlcyAtLS1cblxuLyoqXG4gKiBTdGF0ZW1lbnQgb2JqZWN0XG4gKi9cbmV4cG9ydCBjbGFzcyBQcmVwYXJlZFN0YXRlbWVudCB7XG5cblx0cHJpdmF0ZSByZWFkb25seSBuYXRpdmU6IGFueTtcblxuXHRjb25zdHJ1Y3RvcihuYXRpdmU6IGFueSkge1xuXHRcdHRoaXMubmF0aXZlID0gbmF0aXZlO1xuXHR9XG5cblx0cHVibGljIGNsb3NlKCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmNsb3NlKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UmVzdWx0U2V0KCk6IFJlc3VsdFNldCB7XG5cdFx0cmV0dXJuIG5ldyBSZXN1bHRTZXQodGhpcy5uYXRpdmUuZ2V0UmVzdWx0U2V0KCkpO1xuXHR9XG5cblx0cHVibGljIGV4ZWN1dGUoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmV4ZWN1dGUoKTtcblx0fVxuXG5cdHB1YmxpYyBleGVjdXRlUXVlcnkoKTogUmVzdWx0U2V0IHtcblx0XHRyZXR1cm4gbmV3IFJlc3VsdFNldCh0aGlzLm5hdGl2ZS5leGVjdXRlUXVlcnkoKSk7XG5cdH1cblxuXHRwdWJsaWMgZXhlY3V0ZVVwZGF0ZSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5leGVjdXRlVXBkYXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0TnVsbChpbmRleDogbnVtYmVyLCBzcWxUeXBlOiBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXROdWxsKGluZGV4LCBzcWxUeXBlKTtcblx0fVxuXG5cdHB1YmxpYyBzZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXg6IG51bWJlciwgaW5wdXRTdHJlYW06IElucHV0U3RyZWFtLCBsZW5ndGg/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAobGVuZ3RoKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXgsIGlucHV0U3RyZWFtLCBsZW5ndGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXgsIGlucHV0U3RyZWFtKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Qm9vbGVhbihpbmRleDogbnVtYmVyLCB2YWx1ZT86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qm9vbGVhbihpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkJPT0xFQU4pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCeXRlKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55IC8qOiBCeXRlKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qnl0ZShpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlRJTllJTlQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCbG9iKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55IC8qKjogQmxvYiovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxldCBibG9iID0gY3JlYXRlQmxvYlZhbHVlKHRoaXMubmF0aXZlLCB2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCbG9iKGluZGV4LCBibG9iKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5CTE9CKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Q2xvYihpbmRleDogbnVtYmVyLCB2YWx1ZT86IGFueSAvKjogQ2xvYiovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGxldCBjbG9iID0gY3JlYXRlQ2xvYlZhbHVlKHRoaXMubmF0aXZlLCB2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRDbG9iKGluZGV4LCBjbG9iKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5DTE9CKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0TkNsb2IoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBhbnkgLyo6IE5DbG9iKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IG5jbG9iID0gY3JlYXRlTkNsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgdmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0TkNsb2IoaW5kZXgsIG5jbG9iKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5OQ0xPQik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJ5dGVzTmF0aXZlKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55W10gLypieXRlW10qLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCeXRlcyhpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLlZBUkJJTkFSWSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEJ5dGVzKGluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55W10gLypieXRlW10qLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR2YXIgZGF0YSA9IEJ5dGVzLnRvSmF2YUJ5dGVzKHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJ5dGVzKGluZGV4LCBkYXRhKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5WQVJCSU5BUlkpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXREYXRlKGluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nIHwgRGF0ZSk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkYXRlID0gZ2V0RGF0ZVZhbHVlKHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldERhdGUoaW5kZXgsIG5ldyBKU3FsRGF0ZShkYXRlLmdldFRpbWUoKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkRBVEUpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXREb3VibGUoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RG91YmxlKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuRE9VQkxFKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0RmxvYXQoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RmxvYXQoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5GTE9BVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEludChpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRJbnQoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5JTlRFR0VSKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0TG9uZyhpbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlcik6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRMb25nKGluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChpbmRleCwgU1FMVHlwZXMuQklHSU5UKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0U2hvcnQoaW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0U2hvcnQoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5TTUFMTElOVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFN0cmluZyhpbmRleDogbnVtYmVyLCB2YWx1ZT86IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRTdHJpbmcoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5WQVJDSEFSKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0VGltZShpbmRleDogbnVtYmVyLCB2YWx1ZT86IHN0cmluZyB8IERhdGUpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0Y29uc3QgZGF0ZSA9IGdldERhdGVWYWx1ZSh2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRUaW1lKGluZGV4LCBuZXcgSlNxbFRpbWUoZGF0ZS5nZXRUaW1lKCkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5USU1FKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0VGltZXN0YW1wKGluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nIHwgRGF0ZSk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBkYXRlID0gZ2V0RGF0ZVZhbHVlKHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldFRpbWVzdGFtcChpbmRleCwgbmV3IEpTcWxUaW1lc3RhbXAoZGF0ZS5nZXRUaW1lKCkpKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5USU1FU1RBTVApO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCaWdEZWNpbWFsKGluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyIC8qOiBCaWdEZWNpbWFsKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0QmlnRGVjaW1hbChpbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwoaW5kZXgsIFNRTFR5cGVzLkRFQ0lNQUwpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXROU3RyaW5nKGluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldE5TdHJpbmcoaW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKGluZGV4LCBTUUxUeXBlcy5OVkFSQ0hBUik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIGFkZEJhdGNoKCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmFkZEJhdGNoKCk7XG5cdH1cblxuXHRwdWJsaWMgZXhlY3V0ZUJhdGNoKCk6IG51bWJlcltdIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZXhlY3V0ZUJhdGNoKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TWV0YURhdGEoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TWV0YURhdGEoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNb3JlUmVzdWx0cygpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TW9yZVJlc3VsdHMoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRQYXJhbWV0ZXJNZXRhRGF0YSgpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRQYXJhbWV0ZXJNZXRhRGF0YSgpO1xuXHR9XG5cblx0cHVibGljIGdldFNRTFdhcm5pbmcoKTogYW55IHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0V2FybmluZ3MoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Nsb3NlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNDbG9zZWQoKTtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgQ2FsbGFibGVTdGF0ZW1lbnQge1xuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UmVzdWx0U2V0KCk6IFJlc3VsdFNldCB7XG5cdFx0cmV0dXJuIG5ldyBSZXN1bHRTZXQodGhpcy5uYXRpdmUuZ2V0UmVzdWx0U2V0KCkpO1xuXHR9XG5cblx0cHVibGljIGV4ZWN1dGVRdWVyeSgpOiBSZXN1bHRTZXQge1xuXHRcdHJldHVybiBuZXcgUmVzdWx0U2V0KHRoaXMubmF0aXZlLmV4ZWN1dGVRdWVyeSgpKTtcblx0fVxuXG5cdHB1YmxpYyBleGVjdXRlVXBkYXRlKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmV4ZWN1dGVVcGRhdGUoKTtcblx0fVxuXG5cdHB1YmxpYyByZWdpc3Rlck91dFBhcmFtZXRlcihwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCBzcWxUeXBlOiBrZXlvZiB0eXBlb2YgU1FMVHlwZXMgfCBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5yZWdpc3Rlck91dFBhcmFtZXRlcihwYXJhbWV0ZXJJbmRleCwgc3FsVHlwZSk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPdXRQYXJhbWV0ZXJCeVNjYWxlKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHNxbFR5cGU6IGtleW9mIHR5cGVvZiBTUUxUeXBlcyB8IG51bWJlciwgc2NhbGU6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnJlZ2lzdGVyT3V0UGFyYW1ldGVyKHBhcmFtZXRlckluZGV4LCBzcWxUeXBlLCBzY2FsZSk7XG5cdH1cblxuXHRwdWJsaWMgcmVnaXN0ZXJPdXRQYXJhbWV0ZXJCeVR5cGVOYW1lKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHNxbFR5cGU6IGtleW9mIHR5cGVvZiBTUUxUeXBlcyB8IG51bWJlciwgdHlwZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnJlZ2lzdGVyT3V0UGFyYW1ldGVyKHBhcmFtZXRlckluZGV4LCBzcWxUeXBlLCB0eXBlTmFtZSk7XG5cdH1cblxuXHRwdWJsaWMgd2FzTnVsbCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUud2FzTnVsbCgpO1xuXHR9XG5cblx0cHVibGljIGdldFN0cmluZyhwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0U3RyaW5nKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRCb29sZWFuKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0Qm9vbGVhbihwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Qnl0ZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogYW55IC8qOiBieXRlKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCeXRlKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRTaG9ydChwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0U2hvcnQocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEludChwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0SW50KHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRMb25nKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRMb25nKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXRGbG9hdChwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0RmxvYXQocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldERvdWJsZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0RG91YmxlKHBhcmFtZXRlckluZGV4KTtcblx0fVxuXG5cdHB1YmxpYyBnZXREYXRlKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBEYXRlIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXREYXRlKHBhcmFtZXRlckluZGV4KTtcblx0XHRyZXR1cm4gZGF0ZUluc3RhbmNlICE9PSBudWxsICYmIGRhdGVJbnN0YW5jZSAhPT0gdW5kZWZpbmVkID8gbmV3IERhdGUoZGF0ZUluc3RhbmNlLmdldFRpbWUoKSkgOiBkYXRlSW5zdGFuY2U7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VGltZShwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogRGF0ZSB7XG5cdFx0Y29uc3QgZGF0ZUluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0VGltZShwYXJhbWV0ZXJJbmRleCk7XG5cdFx0cmV0dXJuIGRhdGVJbnN0YW5jZSAhPT0gbnVsbCAmJiBkYXRlSW5zdGFuY2UgIT09IHVuZGVmaW5lZCA/IG5ldyBEYXRlKGRhdGVJbnN0YW5jZS5nZXRUaW1lKCkpIDogZGF0ZUluc3RhbmNlO1xuXHR9XG5cblx0cHVibGljIGdldFRpbWVzdGFtcChwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogRGF0ZSB7XG5cdFx0Y29uc3QgZGF0ZUluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0VGltZXN0YW1wKHBhcmFtZXRlckluZGV4KTtcblx0XHRyZXR1cm4gZGF0ZUluc3RhbmNlICE9PSBudWxsICYmIGRhdGVJbnN0YW5jZSAhPT0gdW5kZWZpbmVkID8gbmV3IERhdGUoZGF0ZUluc3RhbmNlLmdldFRpbWUoKSkgOiBkYXRlSW5zdGFuY2U7XG5cdH1cblxuXHRwdWJsaWMgZ2V0T2JqZWN0KHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRPYmplY3QocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEJpZ0RlY2ltYWwocGFyYW1ldGVySW5kZXg6IG51bWJlcik6IG51bWJlciAvKjogc3FsLkJpZ0RlY2ltYWwqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEJpZ0RlY2ltYWwocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldFJlZihwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogYW55IC8qOiBzcWwuUmVmKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRSZWYocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEJ5dGVzKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnlbXSAvKjogYnl0ZVtdKi8ge1xuXHRcdGNvbnN0IGRhdGEgPSB0aGlzLm5hdGl2ZS5nZXRCeXRlcyhwYXJhbWV0ZXJJbmRleCk7XG5cdFx0cmV0dXJuIEJ5dGVzLnRvSmF2YVNjcmlwdEJ5dGVzKGRhdGEpO1xuXHR9XG5cblx0cHVibGljIGdldEJ5dGVzTmF0aXZlKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnlbXSAvKjogYnl0ZVtdKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCeXRlcyhwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0QmxvYihwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogYW55IC8qOiBzcWwuQmxvYiovIHtcblx0XHRjb25zdCBkYXRhID0gRGF0YWJhc2VGYWNhZGUucmVhZEJsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgcGFyYW1ldGVySW5kZXgpO1xuXHRcdHJldHVybiBCeXRlcy50b0phdmFTY3JpcHRCeXRlcyhkYXRhKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRCbG9iTmF0aXZlKHBhcmFtZXRlckluZGV4OiBudW1iZXIpOiBhbnkgLyo6IHNxbC5CbG9iKi8ge1xuXHRcdHJldHVybiBEYXRhYmFzZUZhY2FkZS5yZWFkQmxvYlZhbHVlKHRoaXMubmF0aXZlLCBwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q2xvYihwYXJhbWV0ZXJJbmRleDogbnVtYmVyKTogYW55IC8qOiBzcWwuQ2xvYiovIHtcblx0XHRyZXR1cm4gcmVhZENsb2JWYWx1ZSh0aGlzLm5hdGl2ZS5nZXRDbG9iKHBhcmFtZXRlckluZGV4KSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TkNsb2IocGFyYW1ldGVySW5kZXg6IHN0cmluZyB8IG51bWJlcik6IGFueSAvKjogc3FsLk5DbG9iKi8ge1xuXHRcdHJldHVybiByZWFkTkNsb2JWYWx1ZSh0aGlzLm5hdGl2ZS5nZXROQ2xvYihwYXJhbWV0ZXJJbmRleCkpO1xuXHR9XG5cblx0cHVibGljIGdldE5TdHJpbmcocGFyYW1ldGVySW5kZXg6IHN0cmluZyB8IG51bWJlcik6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE5TdHJpbmcocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldEFycmF5KHBhcmFtZXRlckluZGV4OiBzdHJpbmcgfCBudW1iZXIpOiBhbnlbXSAvKjogc3FsLkFycmF5Ki8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRBcnJheShwYXJhbWV0ZXJJbmRleCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VVJMKHBhcmFtZXRlckluZGV4OiBzdHJpbmcgfCBudW1iZXIpOiBhbnkge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRVUkwocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldFJvd0lkKHBhcmFtZXRlckluZGV4OiBzdHJpbmcgfCBudW1iZXIpOiBhbnkgLyo6IHNxbC5Sb3dJZCovIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0Um93SWQocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIGdldFNRTFhNTChwYXJhbWV0ZXJJbmRleDogc3RyaW5nIHwgbnVtYmVyKTogYW55IC8qOiBzcWwuU1FMWE1MKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTUUxYTUwocGFyYW1ldGVySW5kZXgpO1xuXHR9XG5cblx0cHVibGljIHNldFVSTChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZTogYW55KTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuc2V0VVJMKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0TnVsbChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCBzcWxUeXBlU3RyOiBrZXlvZiB0eXBlb2YgU1FMVHlwZXMgfCBudW1iZXIsIHR5cGVOYW1lPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0Y29uc3Qgc3FsVHlwZTogbnVtYmVyID0gTnVtYmVyLmlzSW50ZWdlcihzcWxUeXBlU3RyIGFzIG51bWJlcikgPyBzcWxUeXBlU3RyIGFzIG51bWJlciA6IFNRTFR5cGVzW3NxbFR5cGVTdHIgYXMga2V5b2YgdHlwZW9mIFNRTFR5cGVzXTtcblx0XHRpZiAodHlwZU5hbWUgIT09IHVuZGVmaW5lZCAmJiB0eXBlTmFtZSAhPT0gbnVsbCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgc3FsVHlwZSwgdHlwZU5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBzcWxUeXBlKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0Qm9vbGVhbihwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IGJvb2xlYW4pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qm9vbGVhbihwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkJPT0xFQU4pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCeXRlKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogYW55IC8qOiBieXRlKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qnl0ZShwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkJJVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFNob3J0KHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldFNob3J0KHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuU01BTExJTlQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRJbnQocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0SW50KHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuSU5URUdFUik7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldExvbmcocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0TG9uZyhwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkJJR0lOVCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEZsb2F0KHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEZsb2F0KHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuRkxPQVQpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXREb3VibGUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RG91YmxlKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuRE9VQkxFKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0QmlnRGVjaW1hbChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IG51bWJlciAvKjogQmlnRGVjaW1hbCovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJpZ0RlY2ltYWwocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5ERUNJTUFMKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0U3RyaW5nKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlPzogc3RyaW5nKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldFN0cmluZyhwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLlZBUkNIQVIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCeXRlcyhwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IGFueVtdIC8qYnl0ZVtdKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0Qnl0ZXMocGFyYW1ldGVySW5kZXgsIHZhbHVlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5BUlJBWSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldERhdGUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcgfCBEYXRlKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSBnZXREYXRlVmFsdWUodmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0RGF0ZShwYXJhbWV0ZXJJbmRleCwgbmV3IEpTcWxEYXRlKGRhdGUuZ2V0VGltZSgpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuREFURSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFRpbWUocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU/OiBzdHJpbmcgfCBEYXRlKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGRhdGUgPSBnZXREYXRlVmFsdWUodmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0VGltZShwYXJhbWV0ZXJJbmRleCwgbmV3IEpTcWxUaW1lKGRhdGUuZ2V0VGltZSgpKSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuVElNRSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFRpbWVzdGFtcChwYXJhbWV0ZXJJbmRleDogbnVtYmVyLCB2YWx1ZT86IHN0cmluZyB8IERhdGUpOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0bGV0IGRhdGUgPSBnZXREYXRlVmFsdWUodmFsdWUpO1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0VGltZXN0YW1wKHBhcmFtZXRlckluZGV4LCBuZXcgSlNxbFRpbWVzdGFtcChkYXRlLmdldFRpbWUoKSkpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLlRJTUVTVEFNUCk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldEFzY2lpU3RyZWFtKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIGlucHV0U3RyZWFtOiBJbnB1dFN0cmVhbSwgbGVuZ3RoPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKGxlbmd0aCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0QXNjaWlTdHJlYW0ocGFyYW1ldGVySW5kZXgsIGlucHV0U3RyZWFtLCBsZW5ndGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRBc2NpaVN0cmVhbShwYXJhbWV0ZXJJbmRleCwgaW5wdXRTdHJlYW0pO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXg6IG51bWJlciwgaW5wdXRTdHJlYW06IElucHV0U3RyZWFtLCBsZW5ndGg/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRpZiAobGVuZ3RoKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXgsIGlucHV0U3RyZWFtLCBsZW5ndGgpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRCaW5hcnlTdHJlYW0ocGFyYW1ldGVySW5kZXgsIGlucHV0U3RyZWFtKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0T2JqZWN0KHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnksIHRhcmdldFNxbFR5cGU/OiBudW1iZXIsIHNjYWxlPzogbnVtYmVyKTogdm9pZCB7XG5cdFx0aWYgKHNjYWxlICE9PSB1bmRlZmluZWQgJiYgc2NhbGUgIT09IG51bGwgJiYgdGFyZ2V0U3FsVHlwZSAhPT0gdW5kZWZpbmVkICYmIHRhcmdldFNxbFR5cGUgIT09IG51bGwpIHtcblx0XHRcdHRoaXMubmF0aXZlLnNldE9iamVjdChwYXJhbWV0ZXJJbmRleCwgdmFsdWUsIHRhcmdldFNxbFR5cGUsIHNjYWxlKTtcblx0XHR9IGVsc2UgaWYgKHRhcmdldFNxbFR5cGUgIT09IHVuZGVmaW5lZCAmJiB0YXJnZXRTcWxUeXBlICE9PSBudWxsKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRPYmplY3QocGFyYW1ldGVySW5kZXgsIHZhbHVlLCB0YXJnZXRTcWxUeXBlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0T2JqZWN0KHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fVxuXHR9XG5cblx0cHVibGljIHNldFJvd0lkKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlOiBudW1iZXIgLyo6IFJvd0lkKi8pOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXRSb3dJZChwYXJhbWV0ZXJJbmRleCwgdmFsdWUpO1xuXHR9XG5cblx0cHVibGljIHNldE5TdHJpbmcocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IHN0cmluZyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXROU3RyaW5nKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuTlZBUkNIQVIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRTUUxYTUwocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSAvKjogU1FMWE1MKi8pOiB2b2lkIHtcblx0XHRpZiAodmFsdWUgIT09IG51bGwgJiYgdmFsdWUgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5uYXRpdmUuc2V0U1FMWE1MKHBhcmFtZXRlckluZGV4LCB2YWx1ZSk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIk51bGxhYmxlIFNRTFhNTCB0eXBlIG5vdCBzdXBwb3J0ZWQuXCIpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRCbG9iKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnkgLypCbG9iICovKTogdm9pZCB7XG5cdFx0aWYgKHZhbHVlICE9PSBudWxsICYmIHZhbHVlICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdGNvbnN0IGJsb2IgPSBjcmVhdGVCbG9iVmFsdWUodGhpcy5uYXRpdmUsIHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldEJsb2IocGFyYW1ldGVySW5kZXgsIGJsb2IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLnNldE51bGwocGFyYW1ldGVySW5kZXgsIFNRTFR5cGVzLkJMT0IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBzZXRDbG9iKHBhcmFtZXRlckluZGV4OiBudW1iZXIsIHZhbHVlOiBhbnkgLyo6IENsb2IqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBjbG9iID0gY3JlYXRlQ2xvYlZhbHVlKHRoaXMubmF0aXZlLCB2YWx1ZSk7XG5cdFx0XHR0aGlzLm5hdGl2ZS5zZXRDbG9iKHBhcmFtZXRlckluZGV4LCBjbG9iKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXROdWxsKHBhcmFtZXRlckluZGV4LCBTUUxUeXBlcy5DTE9CKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgc2V0TkNsb2IocGFyYW1ldGVySW5kZXg6IG51bWJlciwgdmFsdWU6IGFueSAvKjogTkNsb2IqLyk6IHZvaWQge1xuXHRcdGlmICh2YWx1ZSAhPT0gbnVsbCAmJiB2YWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRjb25zdCBuY2xvYiA9IGNyZWF0ZU5DbG9iVmFsdWUodGhpcy5uYXRpdmUsIHZhbHVlKTtcblx0XHRcdHRoaXMubmF0aXZlLnNldE5DbG9iKHBhcmFtZXRlckluZGV4LCBuY2xvYik7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuc2V0TnVsbChwYXJhbWV0ZXJJbmRleCwgU1FMVHlwZXMuTkNMT0IpO1xuXHRcdH1cblx0fVxuXG5cdHB1YmxpYyBleGVjdXRlKCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5leGVjdXRlKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TW9yZVJlc3VsdHMoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE1vcmVSZXN1bHRzKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0UGFyYW1ldGVyTWV0YURhdGEoKTogYW55IC8qOiBQYXJhbWV0ZXJNZXRhRGF0YSovIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0UGFyYW1ldGVyTWV0YURhdGEoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Nsb3NlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNDbG9zZWQoKTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5jbG9zZSgpO1xuXHR9XG59XG5cbi8qKlxuICogUmVzdWx0U2V0IG9iamVjdFxuICovXG5leHBvcnQgY2xhc3MgUmVzdWx0U2V0IHtcblxuXHRwcml2YXRlIHJlYWRvbmx5IG5hdGl2ZTogYW55O1xuXG5cdGNvbnN0cnVjdG9yKG5hdGl2ZTogYW55KSB7XG5cdFx0dGhpcy5uYXRpdmUgPSBuYXRpdmU7XG5cdH1cblxuXHQvKipcblx0ICogQ29udmVydHMgdGhlIFJlc3VsdFNldCBpbnRvIGEgSlNPTiBhcnJheSBvZiBvYmplY3RzLlxuXHQgKiBAcGFyYW0gbGltaXRlZCBXaGV0aGVyIHRvIHVzZSBsaW1pdGVkIEpTT04gY29udmVyc2lvbiAob3B0aW1pemVkKS5cblx0ICogQHBhcmFtIHN0cmluZ2lmeSBXaGV0aGVyIHRvIHJldHVybiB0aGUgSlNPTiBhcyBhIHN0cmluZyBvciBhIHBhcnNlZCBhcnJheS5cblx0ICogQHJldHVybnMgQSBKYXZhU2NyaXB0IGFycmF5IG9mIG9iamVjdHMgcmVwcmVzZW50aW5nIHRoZSByZXN1bHQgc2V0LCBvciBhIHN0cmluZyBpZiBzdHJpbmdpZnkgaXMgdHJ1ZS5cblx0ICovXG5cdHB1YmxpYyB0b0pzb24obGltaXRlZCA9IGZhbHNlLCBzdHJpbmdpZnkgPSBmYWxzZSk6IGFueVtdIHtcblx0XHRjb25zdCBzdyA9IG5ldyBTdHJpbmdXcml0ZXIoKTtcblx0XHRjb25zdCBvdXRwdXQgPSBXcml0ZXJPdXRwdXRTdHJlYW1cblx0XHRcdC5idWlsZGVyKClcblx0XHRcdC5zZXRXcml0ZXIoc3cpXG5cdFx0XHQuc2V0Q2hhcnNldChTdGFuZGFyZENoYXJzZXRzLlVURl84KVxuXHRcdFx0LmdldCgpO1xuXHRcdERhdGFiYXNlRmFjYWRlLnRvSnNvbih0aGlzLm5hdGl2ZSwgbGltaXRlZCwgc3RyaW5naWZ5LCBvdXRwdXQpO1xuXHRcdGNvbnN0IGpzb25TdHJpbmcgPSBzdy50b1N0cmluZygpO1xuXHRcdHJldHVybiBzdHJpbmdpZnkgPyBqc29uU3RyaW5nIDogSlNPTi5wYXJzZShqc29uU3RyaW5nKTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5jbG9zZSgpO1xuXHR9XG5cblx0cHVibGljIGdldEJpZ0RlY2ltYWwoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55IC8qOiBCaWdEZWNpbWFsKi8gIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0QmlnRGVjaW1hbChpZGVudGlmaWVyKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRCb29sZWFuKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCb29sZWFuKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldEJ5dGUoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55IC8qOiBieXRlKi8ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRCeXRlKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldEJ5dGVzKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IGFueVtdIC8qOiBieXRlW10qLyB7XG5cdFx0Y29uc3QgZGF0YSA9IHRoaXMubmF0aXZlLmdldEJ5dGVzKGlkZW50aWZpZXIpO1xuXHRcdHJldHVybiBCeXRlcy50b0phdmFTY3JpcHRCeXRlcyhkYXRhKTtcblx0fTtcblxuXHRwdWJsaWMgZ2V0Qnl0ZXNOYXRpdmUoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55W10gLyo6IGJ5dGVbXSovIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0Qnl0ZXMoaWRlbnRpZmllcik7XG5cdH07XG5cblx0cHVibGljIGdldEJsb2IoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55IC8qOiBzcWwuQmxvYiovIHtcblx0XHRjb25zdCBkYXRhID0gRGF0YWJhc2VGYWNhZGUucmVhZEJsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgaWRlbnRpZmllcik7XG5cdFx0cmV0dXJuIEJ5dGVzLnRvSmF2YVNjcmlwdEJ5dGVzKGRhdGEpO1xuXHR9XG5cblx0cHVibGljIGdldEJsb2JOYXRpdmUoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogYW55IC8qOiBzcWwuQmxvYiovIHtcblx0XHRyZXR1cm4gRGF0YWJhc2VGYWNhZGUucmVhZEJsb2JWYWx1ZSh0aGlzLm5hdGl2ZSwgaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0Q2xvYihpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBhbnkgLyo6IHNxbC5DbG9iKi8ge1xuXHRcdHJldHVybiByZWFkQ2xvYlZhbHVlKHRoaXMubmF0aXZlLmdldENsb2IoaWRlbnRpZmllcikpO1xuXHR9XG5cblx0cHVibGljIGdldE5DbG9iKGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IGFueSAvKjogc3FsLk5DbG9iKi8ge1xuXHRcdHJldHVybiByZWFkTkNsb2JWYWx1ZSh0aGlzLm5hdGl2ZS5nZXROQ2xvYihpZGVudGlmaWVyKSk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0RGF0ZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXREYXRlKGlkZW50aWZpZXIpO1xuXHRcdHJldHVybiBkYXRlSW5zdGFuY2UgIT09IG51bGwgJiYgZGF0ZUluc3RhbmNlICE9PSB1bmRlZmluZWQgPyBuZXcgRGF0ZShkYXRlSW5zdGFuY2UuZ2V0VGltZSgpKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyBnZXREb3VibGUoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0RG91YmxlKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldEZsb2F0KGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEZsb2F0KGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldEludChpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRJbnQoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TG9uZyhpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRMb25nKGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldFNob3J0KGlkZW50aWZpZXI6IG51bWJlciB8IHN0cmluZyk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldFNob3J0KGlkZW50aWZpZXIpO1xuXHR9XG5cblx0cHVibGljIGdldFN0cmluZyhpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBzdHJpbmcge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5nZXRTdHJpbmcoaWRlbnRpZmllcik7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VGltZShpZGVudGlmaWVyOiBudW1iZXIgfCBzdHJpbmcpOiBEYXRlIHwgdW5kZWZpbmVkIHtcblx0XHRjb25zdCBkYXRlSW5zdGFuY2UgPSB0aGlzLm5hdGl2ZS5nZXRUaW1lKGlkZW50aWZpZXIpO1xuXHRcdHJldHVybiBkYXRlSW5zdGFuY2UgIT09IG51bGwgJiYgZGF0ZUluc3RhbmNlICE9PSB1bmRlZmluZWQgPyBuZXcgRGF0ZShkYXRlSW5zdGFuY2UuZ2V0VGltZSgpKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyBnZXRUaW1lc3RhbXAoaWRlbnRpZmllcjogbnVtYmVyIHwgc3RyaW5nKTogRGF0ZSB8IHVuZGVmaW5lZCB7XG5cdFx0Y29uc3QgZGF0ZUluc3RhbmNlID0gdGhpcy5uYXRpdmUuZ2V0VGltZXN0YW1wKGlkZW50aWZpZXIpO1xuXHRcdHJldHVybiBkYXRlSW5zdGFuY2UgIT09IG51bGwgJiYgZGF0ZUluc3RhbmNlICE9PSB1bmRlZmluZWQgPyBuZXcgRGF0ZShkYXRlSW5zdGFuY2UuZ2V0VGltZSgpKSA6IHVuZGVmaW5lZDtcblx0fVxuXG5cdHB1YmxpYyBpc0FmdGVyTGFzdCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNBZnRlckxhc3QoKTtcblx0fVxuXG5cdHB1YmxpYyBpc0JlZm9yZUZpcnN0KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc0JlZm9yZUZpcnN0KCk7XG5cdH1cblxuXHRwdWJsaWMgaXNDbG9zZWQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmlzQ2xvc2VkKCk7XG5cdH1cblxuXHRwdWJsaWMgaXNGaXJzdCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNGaXJzdCgpO1xuXHR9XG5cblx0cHVibGljIGlzTGFzdCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNMYXN0KCk7XG5cdH1cblxuXHRwdWJsaWMgbmV4dCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUubmV4dCgpO1xuXHR9XG5cblx0cHVibGljIGdldE1ldGFEYXRhKCk6IGFueSAvKjogUmVzdWx0U2V0TWV0YURhdGEqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE1ldGFEYXRhKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0TlN0cmluZyhjb2x1bW5JbmRleDogbnVtYmVyKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0TlN0cmluZyhjb2x1bW5JbmRleCk7XG5cdH1cbn1cblxuLy8gLS0tIENvbm5lY3Rpb24gQ2xhc3MgLS0tXG5cbi8qKlxuICogQ29ubmVjdGlvbiBvYmplY3Qgd3JhcHBlciBhcm91bmQgYSBuYXRpdmUgSmF2YSBgQ29ubmVjdGlvbmAuXG4gKi9cbmV4cG9ydCBjbGFzcyBDb25uZWN0aW9uIHtcblxuXHRwdWJsaWMgcmVhZG9ubHkgbmF0aXZlOiBhbnk7XG5cblx0Y29uc3RydWN0b3IoZGF0YXNvdXJjZU5hbWU/OiBzdHJpbmcpIHtcblx0XHR0aGlzLm5hdGl2ZSA9IERhdGFiYXNlRmFjYWRlLmdldENvbm5lY3Rpb24oZGF0YXNvdXJjZU5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENoZWNrcyBpZiB0aGUgY29ubmVjdGlvbiBpcyBmb3IgYSBzcGVjaWZpYyBkYXRhYmFzZSBzeXN0ZW0uXG5cdCAqL1xuXHRwdWJsaWMgaXNPZlR5cGUoZGF0YWJhc2VTeXN0ZW06IERhdGFiYXNlU3lzdGVtKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMuZ2V0RGF0YWJhc2VTeXN0ZW0oKSA9PT0gZGF0YWJhc2VTeXN0ZW07XG5cdH1cblxuXHQvKipcblx0ICogUmV0dXJucyB0aGUgdHlwZSBvZiB0aGUgdW5kZXJseWluZyBkYXRhYmFzZSBzeXN0ZW0gYXMgYSB7QGxpbmsgRGF0YWJhc2VTeXN0ZW19IGVudW0uXG5cdCAqL1xuXHRwdWJsaWMgZ2V0RGF0YWJhc2VTeXN0ZW0oKTogRGF0YWJhc2VTeXN0ZW0ge1xuXHRcdGNvbnN0IGRiU3lzdGVtOiBzdHJpbmcgPSB0aGlzLm5hdGl2ZS5nZXREYXRhYmFzZVN5c3RlbSgpLm5hbWUoKTtcblx0XHRzd2l0Y2ggKGRiU3lzdGVtKSB7XG5cdFx0XHRjYXNlIFwiREVSQllcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLkRFUkJZO1xuXHRcdFx0Y2FzZSBcIlBPU1RHUkVTUUxcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLlBPU1RHUkVTUUw7XG5cdFx0XHRjYXNlIFwiSDJcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLkgyO1xuXHRcdFx0Y2FzZSBcIk1BUklBREJcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLk1BUklBREI7XG5cdFx0XHRjYXNlIFwiSEFOQVwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uSEFOQTtcblx0XHRcdGNhc2UgXCJTTk9XRkxBS0VcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLlNOT1dGTEFLRTtcblx0XHRcdGNhc2UgXCJNU1NRTFwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uTVNTUUw7XG5cdFx0XHRjYXNlIFwiTVlTUUxcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLk1ZU1FMO1xuXHRcdFx0Y2FzZSBcIk1PTkdPREJcIjpcblx0XHRcdFx0cmV0dXJuIERhdGFiYXNlU3lzdGVtLk1PTkdPREI7XG5cdFx0XHRjYXNlIFwiU1lCQVNFXCI6XG5cdFx0XHRcdHJldHVybiBEYXRhYmFzZVN5c3RlbS5TWUJBU0U7XG5cdFx0XHRjYXNlIFwiVU5LTk9XTlwiOlxuXHRcdFx0XHRyZXR1cm4gRGF0YWJhc2VTeXN0ZW0uVU5LTk9XTjtcblx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgTWlzc2luZyBtYXBwaW5nIGZvciBkYXRhYmFzZSBzeXN0ZW0gdHlwZSAke2RiU3lzdGVtfWApO1xuXHRcdH1cblx0fVxuXG5cdC8qKlxuXHQgKiBDcmVhdGVzIGEgbmV3IHtAbGluayBQcmVwYXJlZFN0YXRlbWVudH0gb2JqZWN0IGZvciBzZW5kaW5nIHBhcmFtZXRlcml6ZWQgU1FMIHN0YXRlbWVudHMgdG8gdGhlIGRhdGFiYXNlLlxuXHQgKi9cblx0cHVibGljIHByZXBhcmVTdGF0ZW1lbnQoc3FsOiBzdHJpbmcpOiBQcmVwYXJlZFN0YXRlbWVudCB7XG5cdFx0cmV0dXJuIG5ldyBQcmVwYXJlZFN0YXRlbWVudCh0aGlzLm5hdGl2ZS5wcmVwYXJlU3RhdGVtZW50KHNxbCkpO1xuXHR9XG5cblx0LyoqXG5cdCAqIENyZWF0ZXMgYSB7QGxpbmsgQ2FsbGFibGVTdGF0ZW1lbnR9IG9iamVjdCBmb3IgY2FsbGluZyBkYXRhYmFzZSBzdG9yZWQgcHJvY2VkdXJlcyBvciBmdW5jdGlvbnMuXG5cdCAqL1xuXHRwdWJsaWMgcHJlcGFyZUNhbGwoc3FsOiBzdHJpbmcpOiBDYWxsYWJsZVN0YXRlbWVudCB7XG5cdFx0cmV0dXJuIG5ldyBDYWxsYWJsZVN0YXRlbWVudCh0aGlzLm5hdGl2ZS5wcmVwYXJlQ2FsbChzcWwpKTtcblx0fVxuXG5cdHB1YmxpYyBjbG9zZSgpOiB2b2lkIHtcblx0XHRpZiAoIXRoaXMuaXNDbG9zZWQoKSkge1xuXHRcdFx0dGhpcy5uYXRpdmUuY2xvc2UoKTtcblx0XHR9XG5cdH1cblxuXHRwdWJsaWMgY29tbWl0KCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLmNvbW1pdCgpO1xuXHR9XG5cblx0cHVibGljIGdldEF1dG9Db21taXQoKTogYm9vbGVhbiB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldEF1dG9Db21taXQoKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRDYXRhbG9nKCk6IHN0cmluZyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldENhdGFsb2coKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRTY2hlbWEoKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0U2NoZW1hKCk7XG5cdH1cblxuXHRwdWJsaWMgZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuZ2V0VHJhbnNhY3Rpb25Jc29sYXRpb24oKTtcblx0fVxuXG5cdHB1YmxpYyBpc0Nsb3NlZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNDbG9zZWQoKTtcblx0fVxuXG5cdHB1YmxpYyBpc1JlYWRPbmx5KCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLm5hdGl2ZS5pc1JlYWRPbmx5KCk7XG5cdH1cblxuXHRwdWJsaWMgaXNWYWxpZCgpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gdGhpcy5uYXRpdmUuaXNWYWxpZCgpO1xuXHR9XG5cblx0cHVibGljIHJvbGxiYWNrKCk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnJvbGxiYWNrKCk7XG5cdH1cblxuXHRwdWJsaWMgc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0OiBib29sZWFuKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuc2V0QXV0b0NvbW1pdChhdXRvQ29tbWl0KTtcblx0fVxuXG5cdHB1YmxpYyBzZXRDYXRhbG9nKGNhdGFsb2c6IHN0cmluZyk6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldENhdGFsb2coY2F0YWxvZyk7XG5cdH1cblxuXHRwdWJsaWMgc2V0UmVhZE9ubHkocmVhZE9ubHk6IGJvb2xlYW4pOiB2b2lkIHtcblx0XHR0aGlzLm5hdGl2ZS5zZXRSZWFkT25seShyZWFkT25seSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0U2NoZW1hKHNjaGVtYTogc3RyaW5nKTogdm9pZCB7XG5cdFx0dGhpcy5uYXRpdmUuc2V0U2NoZW1hKHNjaGVtYSk7XG5cdH1cblxuXHRwdWJsaWMgc2V0VHJhbnNhY3Rpb25Jc29sYXRpb24odHJhbnNhY3Rpb25Jc29sYXRpb246IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMubmF0aXZlLnNldFRyYW5zYWN0aW9uSXNvbGF0aW9uKHRyYW5zYWN0aW9uSXNvbGF0aW9uKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRNZXRhRGF0YSgpOiBhbnkgLyo6IERhdGFiYXNlTWV0YURhdGEqLyB7XG5cdFx0cmV0dXJuIHRoaXMubmF0aXZlLmdldE1ldGFEYXRhKCk7XG5cdH1cbn1cblxuLy8gLS0tIERhdGFiYXNlIENsYXNzIC0tLVxuXG5leHBvcnQgY2xhc3MgRGF0YWJhc2Uge1xuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGEgbGlzdCBvZiBhdmFpbGFibGUgZGF0YSBzb3VyY2UgbmFtZXMuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldERhdGFTb3VyY2VzKCk6IHN0cmluZ1tdIHtcblx0XHRjb25zdCBkYXRhc291cmNlcyA9IERhdGFiYXNlRmFjYWRlLmdldERhdGFTb3VyY2VzKCk7XG5cdFx0cmV0dXJuIGRhdGFzb3VyY2VzID8gSlNPTi5wYXJzZShkYXRhc291cmNlcykgOiBbXTtcblx0fVxuXG5cdC8qKlxuXHQgKiBSZXR1cm5zIGRhdGFiYXNlIG1ldGFkYXRhIGZvciB0aGUgc3BlY2lmaWVkIGRhdGEgc291cmNlLlxuXHQgKi9cblx0cHVibGljIHN0YXRpYyBnZXRNZXRhZGF0YShkYXRhc291cmNlTmFtZT86IHN0cmluZyk6IERhdGFiYXNlTWV0YWRhdGEgfCB1bmRlZmluZWQge1xuXHRcdGNvbnN0IG1ldGFkYXRhID0gRGF0YWJhc2VGYWNhZGUuZ2V0TWV0YWRhdGEoZGF0YXNvdXJjZU5hbWUpO1xuXHRcdHJldHVybiBtZXRhZGF0YSA/IEpTT04ucGFyc2UobWV0YWRhdGEpIDogdW5kZWZpbmVkO1xuXHR9XG5cblx0LyoqXG5cdCAqIFJldHVybnMgdGhlIHByb2R1Y3QgbmFtZSBvZiB0aGUgdW5kZXJseWluZyBkYXRhYmFzZSBzeXN0ZW0uXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldFByb2R1Y3ROYW1lKGRhdGFzb3VyY2VOYW1lPzogc3RyaW5nKTogc3RyaW5nIHtcblx0XHRyZXR1cm4gRGF0YWJhc2VGYWNhZGUuZ2V0UHJvZHVjdE5hbWUoZGF0YXNvdXJjZU5hbWUpO1xuXHR9XG5cblx0LyoqXG5cdCAqIEdldHMgYSBuZXcgZGF0YWJhc2UgY29ubmVjdGlvbiBvYmplY3QuXG5cdCAqL1xuXHRwdWJsaWMgc3RhdGljIGdldENvbm5lY3Rpb24oZGF0YXNvdXJjZU5hbWU/OiBzdHJpbmcpOiBDb25uZWN0aW9uIHtcblx0XHRyZXR1cm4gbmV3IENvbm5lY3Rpb24oZGF0YXNvdXJjZU5hbWUpO1xuXHR9XG59XG5cbi8vIEB0cy1pZ25vcmVcbmlmICh0eXBlb2YgbW9kdWxlICE9PSAndW5kZWZpbmVkJykge1xuXHQvLyBAdHMtaWdub3JlXG5cdG1vZHVsZS5leHBvcnRzID0ge1xuXHRcdERhdGFiYXNlLFxuXHRcdENvbm5lY3Rpb24sXG5cdFx0UHJlcGFyZWRTdGF0ZW1lbnQsXG5cdFx0Q2FsbGFibGVTdGF0ZW1lbnQsXG5cdFx0UmVzdWx0U2V0LFxuXHRcdERhdGFiYXNlU3lzdGVtLFxuXHRcdFNRTFR5cGVzXG5cdH07XG59XG4iXSwKICAibWFwcGluZ3MiOiAiQUFJ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LElBQUksQ0FBQztBQUFBLEVBQ2pEO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxPQUFjLFlBQVksZ0JBQXVEO0FBQ2hGLFVBQU0sV0FBVyxlQUFlLFlBQVksY0FBYztBQUMxRCxXQUFPLFdBQVcsS0FBSyxNQUFNLFFBQVEsSUFBSTtBQUFBLEVBQzFDO0FBQUE7QUFBQTtBQUFBO0FBQUEsRUFLQSxPQUFjLGVBQWUsZ0JBQWlDO0FBQzdELFdBQU8sZUFBZSxlQUFlLGNBQWM7QUFBQSxFQUNwRDtBQUFBO0FBQUE7QUFBQTtBQUFBLEVBS0EsT0FBYyxjQUFjLGdCQUFxQztBQUNoRSxXQUFPLElBQUksV0FBVyxjQUFjO0FBQUEsRUFDckM7QUFDRDtBQUdBLElBQUksT0FBTyxXQUFXLGFBQWE7QUFFbEMsU0FBTyxVQUFVO0FBQUEsSUFDaEI7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxJQUNBO0FBQUEsSUFDQTtBQUFBLElBQ0E7QUFBQSxFQUNEO0FBQ0Q7IiwKICAibmFtZXMiOiBbIkRhdGFiYXNlU3lzdGVtIiwgImlzSGFuYURhdGFiYXNlIl0KfQo=
|