simpo-component-library 3.7.6 → 3.7.7
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/esm2022/lib/elements/my-bookings/my-bookings.component.mjs +24 -3
- package/esm2022/lib/services/rest.service.mjs +6 -1
- package/fesm2022/simpo-component-library.mjs +28 -2
- package/fesm2022/simpo-component-library.mjs.map +1 -1
- package/lib/elements/my-bookings/my-bookings.component.d.ts +8 -0
- package/lib/services/rest.service.d.ts +3 -0
- package/package.json +1 -1
- package/simpo-component-library-3.7.7.tgz +0 -0
- package/simpo-component-library-3.7.6.tgz +0 -0
|
@@ -611,6 +611,11 @@ export class RestService {
|
|
|
611
611
|
getBookingGroup(groupId) {
|
|
612
612
|
return this.http.get(this.APPOINTMENT_URL + `booking/group/${groupId}`);
|
|
613
613
|
}
|
|
614
|
+
/** Fetched on click, not pre-cached on the booking - ecommerce generates/caches the invoice PDF
|
|
615
|
+
* the first time it's asked for, so there's nothing to gain by fetching it earlier. */
|
|
616
|
+
getBookingInvoiceUrl(groupId) {
|
|
617
|
+
return this.http.get(this.APPOINTMENT_URL + `booking/group/${groupId}/invoice-url`);
|
|
618
|
+
}
|
|
614
619
|
generatePaymentToken(groupId) {
|
|
615
620
|
return this.http.post(this.APPOINTMENT_URL + `payment/token?groupId=${groupId}`, {});
|
|
616
621
|
}
|
|
@@ -801,4 +806,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImpo
|
|
|
801
806
|
type: Inject,
|
|
802
807
|
args: [APPOINTMENT_URL]
|
|
803
808
|
}] }] });
|
|
804
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxHQUFHLEVBQXdDLE1BQU0sTUFBTSxDQUFDO0FBS2pFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxHQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUlMLE9BQU8sR0FFUixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBTWhFLE1BQU0sT0FBTyxXQUFXO0lBV3RCLFlBQ21CLElBQWdCLEVBQ1IsUUFBZ0IsRUFDVixhQUFxQixFQUMxQixRQUFnQixFQUN6QixhQUE0QixFQUNkLE9BQW9CLEVBQ3JCLFlBQW9CLEVBQ2pCLGVBQXVCO0lBQ3hELGlFQUFpRTs7UUFSaEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNSLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDVixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFl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QztRQUN6QyxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUNsQixJQUFJLENBQUMsUUFBUTtZQUNiLG1EQUFtRCxVQUFVLEVBQUUsQ0FDaEUsQ0FBQztJQUNKLENBQUM7SUFFRCxZQUFZLENBQUMsTUFBVztRQUN0QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsa0JBQWtCLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDbkUsQ0FBQzsrR0F6ckNVLFdBQVcsNENBYVosT0FBTyxhQUNQLGFBQWEsYUFDYixRQUFRLDBDQUVSLGFBQWEsYUFDYixZQUFZLGFBQ1osZUFBZTttSEFuQmQsV0FBVyxjQUZWLE1BQU07OzRGQUVQLFdBQVc7a0JBSHZCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25COzswQkFjSSxNQUFNOzJCQUFDLE9BQU87OzBCQUNkLE1BQU07MkJBQUMsYUFBYTs7MEJBQ3BCLE1BQU07MkJBQUMsUUFBUTs7MEJBRWYsTUFBTTsyQkFBQyxhQUFhOzswQkFDcEIsTUFBTTsyQkFBQyxZQUFZOzswQkFDbkIsTUFBTTsyQkFBQyxlQUFlIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSHR0cENsaWVudCwgSHR0cEhlYWRlcnMgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XG5pbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgbWFwLCBPYnNlcnZhYmxlLCBTdWJzY3JpYmVyLCBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IFJldmlldyB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvcmV2aWV3Lm1vZGFsJztcbmltcG9ydCB7IERldmljZUluZm8sIFVzZXIgfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL3VzZXIubW9kYWwnO1xuaW1wb3J0IHsgUGluQ29kZUxvY2F0aW9uSW50ZXIgfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL1BpbmNvZGVMb2NhdGlvbkludGVyLm1vZGVsJztcbmltcG9ydCB7IFBpbmNvZGVMb2NhdGlvbiB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvUGluY29kZUxvY2F0aW9uLm1vZGVsJztcbmltcG9ydCB7XG4gIEFQSV9VUkwsXG4gIENNSVNfVVJMLFxuICBFQ09NTUVSQ0VfVVJMLFxuICBQQVNTQk9PS19VUkwsXG4gIEFQUE9JTlRNRU5UX1VSTCxcbn0gZnJvbSAnLi4vdG9rZW5zL2FwaS10b2tlbic7XG5pbXBvcnQgeyBDYXRlZ29yeSB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvY2F0ZWdvcnkubW9kYWwnO1xuaW1wb3J0IHsgQmxvZ0NhdGVnb3J5IH0gZnJvbSAnLi4vc2VjdGlvbnMvYmxvZy1saXN0L2Jsb2ctY2F0ZWdvcnkubW9kZWwnO1xuaW1wb3J0IHtcbiAgY2hlY2tJdGVtQWxyZWFkeUFkZGVkLFxuICBDdXN0b21GaWVsZEZpbHRlcixcbiAgRmlsdGVyT3B0aW9ucyxcbiAgUHJvZHVjdCxcbiAgc3luY0l0ZW1Ub1NlcnZlckRCUmVxdWVzdCxcbn0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9wcm9kdWN0Lm1vZGFsJztcbmltcG9ydCB7IENvbGxlY3Rpb24gfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL0NvbGxlY3Rpb24ubW9kYWwnO1xuaW1wb3J0IHsgQnJhbmQgfSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL0JyYW5kLm1vZGFsJztcbmltcG9ydCB7IFN0b3JhZ2VTZXJ2aWNlU2VydmljZSB9IGZyb20gJy4vc3RvcmFnZS5zZXJ2aWNlJztcbmltcG9ydCB7IENvb2tpZVNlcnZpY2UgfSBmcm9tICduZ3gtY29va2llLXNlcnZpY2UnO1xuaW1wb3J0IHsgTE9DQUxfU1RPUkFHRSB9IGZyb20gJy4uL3NlcnZpY2VzL2xvY2FsLXN0b3JhZ2UudG9rZW4nO1xuaW1wb3J0IHsgU3RvcmFnZUxpa2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9zdG9yYWdlLWxpa2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290Jyxcbn0pXG5leHBvcnQgY2xhc3MgUmVzdFNlcnZpY2UgaW1wbGVtZW50cyBPbkRlc3Ryb3kge1xuICAvLyBwcml2YXRlIEJBU0VfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vZGV2LWFwaS5zaW1wby5haS9cIjtcbiAgLy8gcHJpdmF0ZSBFQ09NTUVSQ0VfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vZGV2LWVjb21tZXJjZS5zaW1wby5haS9cIjtcbiAgLy8gcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nID0gXCJodHRwczovL2FwaS1jbWlzLnRlanNvZnQuY29tL1wiOyAvL3Byb2R1Y3Rpb25cbiAgLy8gcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nID0gXCJodHRwczovL2Rldi1hcGkuc2ltcG8uYWkvXCI7IC8vZGV2XG4gIC8vIHByaXZhdGUgQ01JU19VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9zdGFnZWFwaS1jbWlzLnRlanNvZnQuY29tL1wiOyAvL3N0YWdlXG4gIHByaXZhdGUgZW52aXJvbm1lbnRUeXBlU3Vic2NyaWJlcjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIGJ1c2luZXNzRGV0YWlsczogYW55O1xuICBzdWJJbmR1c3RyeU5hbWU6IGFueTtcbiAgaXNKZXdlbGxlcnk6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHJlYWRvbmx5IGh0dHA6IEh0dHBDbGllbnQsXG4gICAgQEluamVjdChBUElfVVJMKSBwcml2YXRlIEJBU0VfVVJMOiBzdHJpbmcsXG4gICAgQEluamVjdChFQ09NTUVSQ0VfVVJMKSBwcml2YXRlIEVDT01NRVJDRV9VUkw6IHN0cmluZyxcbiAgICBASW5qZWN0KENNSVNfVVJMKSBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcsXG4gICAgcHJpdmF0ZSByZWFkb25seSBjb29raWVTZXJ2aWNlOiBDb29raWVTZXJ2aWNlLFxuICAgIEBJbmplY3QoTE9DQUxfU1RPUkFHRSkgcHJpdmF0ZSBzdG9yYWdlOiBTdG9yYWdlTGlrZSxcbiAgICBASW5qZWN0KFBBU1NCT09LX1VSTCkgcHJpdmF0ZSBQQVNTQk9PS19VUkw6IHN0cmluZyxcbiAgICBASW5qZWN0KEFQUE9JTlRNRU5UX1VSTCkgcHJpdmF0ZSBBUFBPSU5UTUVOVF9VUkw6IHN0cmluZ1xuICAgIC8vIEBJbmplY3QoUkVDT01NRU5EQVRJT05fVVJMKSBwcml2YXRlIFJFQ09NTUVOREFUSU9OX1VSTDogc3RyaW5nXG4gICkgeyB9XG4gIG9ycmFCYXNlVXJsOiBzdHJpbmcgPSAnaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vJztcbiAgLy8gcGFzc0Jvb2tVcmw6IHN0cmluZyA9IFwiaHR0cHM6Ly9wcm9kLXBhc3Nib29rLnNpbXBvLmFpL1wiO1xuICBnZXRCdXNpbmVzc0RldGFpbHMoKSB7XG4gICAgdGhpcy5pc0pld2VsbGVyeSA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnaXNNYXRlcmlhbEJhc2VkUHJpY2luZycpID09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgfVxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5lbnZpcm9ubWVudFR5cGVTdWJzY3JpYmVyKVxuICAgICAgdGhpcy5lbnZpcm9ubWVudFR5cGVTdWJzY3JpYmVyPy51bnN1YnNjcmliZSgpO1xuICB9XG5cbiAgZ2V0RmVhdHVyZWRQcm9kdWN0KGNvbGxlY3Rpb25JZDogc3RyaW5nIHwgdW5kZWZpbmVkIHwgbnVsbCkge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgbGV0IHN1YkluZHVzdHJ5SWQ6IHN0cmluZyB8IG51bGwgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnc3ViSW5kdXN0cnlJZCcpO1xuICAgIGlmICghc3ViSW5kdXN0cnlJZCkgc3ViSW5kdXN0cnlJZCA9ICcnO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvY29sbGVjdGlvbi9pZD9jb2xsZWN0aW9uSWQ9JHtjb2xsZWN0aW9uSWR9JmlzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgIHJlc3BvbnNlLmRhdGE/Lm1hcCgocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuICBnZXRDYXRlZ29yaWVzQnlDb2xsZWN0aW9uSWQoY29sbGVjdGlvbklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9pbnZlbnRvcnkvY2F0ZWdvcnkvY29sbGVjdGlvbklkP2NvbGxlY3Rpb25JZD0ke2NvbGxlY3Rpb25JZH1gXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgIHJlc3BvbnNlLmRhdGE/Lm1hcCgoY2F0ZWdvcnk6IGFueSkgPT4gbmV3IENhdGVnb3J5KGNhdGVnb3J5KSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuICAvLyBodHRwczovL25ld2Rldi1hcGkuc2ltcG8uYWkvXG4gIGdldEFsbENhdGVnb3JpZXNCeUJ1c2luZXNzSWQocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9pbnZlbnRvcnkvZ2V0L2NhdGVnb3J5YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG4gIC8vIEdFVCBibG9nL2dldEFsbC9jYXRlZ29yaWVzL3tidXNpbmVzc0lkfSDigJQgYmFja2VuZCB0aHJvd3MgXCJObyBDYXRlZ29yaWVzIEZvdW5kXCIgd2hlbiBlbXB0eTtcbiAgLy8gY2FsbGVycyBzaG91bGQgdHJlYXQgdGhhdCBhcyBhbiBlbXB0eSBsaXN0LCBub3QgYW4gZXJyb3Igc3RhdGUuXG4gIGdldEJsb2dDYXRlZ29yaWVzKGJ1c2luZXNzSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQodGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy9ibG9nL2dldEFsbC9jYXRlZ29yaWVzLyR7YnVzaW5lc3NJZH1gKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcChcbiAgICAgICAgICAocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICAgIHJlc3BvbnNlLmRhdGE/Lm1hcCgoY2F0ZWdvcnk6IGFueSkgPT4gbmV3IEJsb2dDYXRlZ29yeShjYXRlZ29yeSkpID8/XG4gICAgICAgICAgICBbXVxuICAgICAgICApXG4gICAgICApO1xuICB9XG4gIC8vIEdFVCBibG9nL3tidXNpbmVzc0lkfS9ibG9nLWxpc3Q/YnVzaW5lc3NJZD17YnVzaW5lc3NJZH0mY2F0ZWdvcnlJZD17Y2F0ZWdvcnlJZH1cbiAgLy8gTm90ZTogdGhlIHBhdGgge2J1c2luZXNzSWR9IHNlZ21lbnQgaXMgdW51c2VkIHNlcnZlci1zaWRlIHBlciB0aGUgQVBJIGRvYywgYnV0IG11c3Qgc3RpbGwgYmVcbiAgLy8gcG9wdWxhdGVkIGlkZW50aWNhbGx5IHRvIHRoZSBxdWVyeSBwYXJhbSDigJQgdGhpcyBpcyB0aGUgZG9jdW1lbnRlZCBVUkwgc2hhcGUsIG5vdCBhIHR5cG8uXG4gIGdldEJsb2dzQnlDYXRlZ29yeShidXNpbmVzc0lkOiBzdHJpbmcsIGNhdGVnb3J5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgYnVzaW5lc3MvYmxvZy8ke2J1c2luZXNzSWR9L2Jsb2ctbGlzdD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mY2F0ZWdvcnlJZD0ke2NhdGVnb3J5SWR9YFxuICAgICk7XG4gIH1cbiAgLy8gR0VUIGJ1c2luZXNzL2Jsb2cvcG9wdWxhcj9idXNpbmVzc0lkPSZzaXplPSZjYXRlZ29yeUlkPSZjYXRlZ29yeU5hbWU9XG4gIC8vIFJldHVybnMgeyBkYXRhOiBCbG9nW10gfSDigJQgYW4gZW1wdHkgYXJyYXkgaXMgYSB2YWxpZCBcIm5vIHBvcHVsYXIgcG9zdHMgeWV0XCIgcmVzdWx0LCBub3QgYW4gZXJyb3IuXG4gIGdldFBvcHVsYXJCbG9ncyhcbiAgICBidXNpbmVzc0lkOiBzdHJpbmcsXG4gICAgc2l6ZT86IG51bWJlcixcbiAgICBjYXRlZ29yeUlkPzogc3RyaW5nLFxuICAgIGNhdGVnb3J5TmFtZT86IHN0cmluZ1xuICApIHtcbiAgICBsZXQgdXJsID0gdGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy9ibG9nL3BvcHVsYXI/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YDtcbiAgICBpZiAoc2l6ZSkgdXJsICs9IGAmc2l6ZT0ke3NpemV9YDtcbiAgICBpZiAoY2F0ZWdvcnlJZCkgdXJsICs9IGAmY2F0ZWdvcnlJZD0ke2NhdGVnb3J5SWR9YDtcbiAgICBlbHNlIGlmIChjYXRlZ29yeU5hbWUpIHVybCArPSBgJmNhdGVnb3J5TmFtZT0ke2NhdGVnb3J5TmFtZX1gO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHVybCk7XG4gIH1cbiAgLy8gUFVUIGJ1c2luZXNzL2Jsb2cvdXBkYXRlL3tibG9nSWR9IOKAlCBpbmNyZW1lbnRzIHRvdGFsVmlzaXRzIGJ5IDEuIE5vIHJlcXVlc3QgYm9keSwgbm8gcXVlcnkgcGFyYW1zLlxuICAvLyBOT1QgdGhlIHNhbWUgYXMgdGhlIGZ1bGwtYmxvZy1lZGl0IFBVVCBidXNpbmVzcy9ibG9nL3VwZGF0ZSAobm8ge2Jsb2dJZH0gaW4gdGhhdCBwYXRoKSDigJQgbmV2ZXIgY29uZnVzZSB0aGUgdHdvLlxuICBpbmNyZW1lbnRCbG9nVmlzaXQoYmxvZ0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2Jsb2cvJHtibG9nSWR9L3Zpc2l0LWNvdW50YCwgbnVsbCk7XG4gIH1cbiAgZ2V0UGFzc2Jvb2tPcmRlclN0YXR1cyhvcmRlcklkOiBhbnkpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBwYXNzYm9vay9tYW51YWwvcGF5bWVudC9zdGF0dXM/cGF5bWVudE9yZGVySWQ9JHtvcmRlcklkfWAsXG4gICAgICB7fSxcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICBnZXRQcm9kdWN0QnlTZWxlY3RlZENhdGVnb3J5KGNhdGVnb3J5SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3Byb2R1Y3QvJHtjYXRlZ29yeUlkfWApO1xuICB9XG4gIGdldEFsbFNjaGVtZXModXNlcklkPzogYW55LCBzdG9yZUlkPzogYW55KTogYW55IHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBleHQvY29ubmVjdC9zaW1wby91c2VyP3VzZXJJZD0ke3VzZXJJZH0mc3RvcmVJZD0ke3N0b3JlSWR9YFxuICAgICk7XG4gIH1cbiAgZ2V0QWxsUmVkZW1wdGlvblNjaGVtZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLm9ycmFCYXNlVXJsICsgYHBhc3NCb29rL3JlZGVtcHRpb24vYW1vdW50L2NoZWNrP3VzZXJDb2RlPUNfMDAwMzEzODg1YFxuICAgICk7XG4gIH1cbiAgZ2V0QWxsUHJvZHVjdHMocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG4gIGdldFByb2R1Y3REZXRhaWxzKHByb2R1Y3RJZDogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIHBhZ2VObzogMCxcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgaXRlbUlkOiBwcm9kdWN0SWQsXG4gICAgICBzdWJJbmR1c3RyeUlkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnc3ViSW5kdXN0cnlJZCcpLFxuICAgICAgdXNlcklkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgncGVySWQnKSA/PyBudWxsLFxuICAgICAgcmVxdWVzdDogJ1VTRVInLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcbiAgICAgICAgcGF5bG9hZFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmRhdGEubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZ2V0UHJvZHVjdERldGFpbHNWMihzbHVnTmFtZTogc3RyaW5nIHwgbnVsbCA9IG51bGwpIHtcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIHBhZ2VObzogMCxcbiAgICAgIHBhZ2VTaXplOiAxLFxuICAgICAgc2x1Z2lmaWVkTmFtZTogc2x1Z05hbWUsXG4gICAgICBzdWJJbmR1c3RyeUlkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnc3ViSW5kdXN0cnlJZCcpLFxuICAgICAgYnVzaW5lc3NJZDpcbiAgICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwZXJJZCcpID8/IG51bGwsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW1WMi9zZWFyY2g/aXNKZXdlbGxlcnk9JHt0aGlzLmlzSmV3ZWxsZXJ5fWAsXG4gICAgICAgIHBheWxvYWRcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YS5kYXRhLm1hcCgocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KSlcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldENvbGxlY3Rpb25CeUlkcyhjb2xsZWN0aW9uSWRzOiBzdHJpbmdbXSkge1xuICAgIGNvbnN0IHBheWxvYWQgPSB7XG4gICAgICBpZHM6IGNvbGxlY3Rpb25JZHMsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9jb2xsZWN0aW9uL2xpc3QvYWxsYCwgcGF5bG9hZClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChjb2xsZWN0aW9uOiBhbnkpID0+IG5ldyBDb2xsZWN0aW9uKGNvbGxlY3Rpb24pKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZ2V0QWxsQ2F0ZWdvcmllcygpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XG4gICAgY29uc3Qgc3ViSW5kdXN0cnlJZDogc3RyaW5nID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJykgPz9cbiAgICAgIGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJykgPz9cbiAgICAgICcnO1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL2ludmVudG9yeS9mZWF0dXJlZD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc3ViSWQ9JHtzdWJJbmR1c3RyeUlkfWBcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChjYXRlZ29yeTogYW55KSA9PiBuZXcgQ2F0ZWdvcnkoY2F0ZWdvcnkpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG4gIGdldEFsbENvbGxlY3Rpb25zKCkge1xuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIHBhZ2VObzogMCxcbiAgICAgIHBhZ2VTaXplOiAxMDAsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgICBidXNpbmVzc0lkOlxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQodGhpcy5CQVNFX1VSTCArICdlY29tbWVyY2UvaW52ZW50b3J5L2dldC9jb2xsZWN0aW9uJywgcGF5bG9hZClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoXG4gICAgICAgICAgICAoY29sbGVjdGlvbjogYW55KSA9PiBuZXcgQ29sbGVjdGlvbihjb2xsZWN0aW9uKVxuICAgICAgICAgIClcbiAgICAgICAgKVxuICAgICAgKTtcbiAgfVxuXG4gIGdldEFsbEJyYW5kcygpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9pbnZlbnRvcnkvJHtidXNpbmVzc0lkfS9icmFuZGApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgIChyZXNwb25zZS5kYXRhID8/IHJlc3BvbnNlKT8ubWFwKChicmFuZDogYW55KSA9PiBuZXcgQnJhbmQoYnJhbmQpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgLy8gUFVUIHByb2R1Y3QvY3VzdG9tLWZpZWxkL3F1ZXJ5LW9wdGlvbnMuIFJldHVybnMgc29ydHMgKyBmaWx0ZXIgZ3JvdXBzIGZvciB0aGUgc2lkZWJhci5cbiAgLy8gSWRzIGFuZCBzbHVncyBhcmUgYXJyYXlzIGluIHRoZSBKU09OIGJvZHkgYW5kIGFyZSBjb21iaW5lZDogYSBwcm9kdWN0IGluIGFueSBsaXN0ZWQgY2F0ZWdvcnlcbiAgLy8gbWF0Y2hlcywgYW5kIGluIGFueSBsaXN0ZWQgY29sbGVjdGlvbi4gV2hlbiBib3RoIGxpc3RzIGFyZSBzZW50IGEgcHJvZHVjdCBtdXN0IG1hdGNoIG9uZSBvZiBlYWNoLlxuICAvLyBBbiB1bnNlZWRlZCBidXNpbmVzcyByZXR1cm5zIGZvdXIgc29ydHMgYW5kIGBncm91cHM6IFtdYDsgY2FsbGVycyBrZWVwIHRoZSBsZWdhY3kgc2lkZWJhciB0aGVuLlxuICBnZXRGaWx0ZXJPcHRpb25zKHNjb3BlOiB7XG4gICAgY2F0ZWdvcnlJZHM/OiBzdHJpbmdbXTtcbiAgICBjb2xsZWN0aW9uSWRzPzogc3RyaW5nW107XG4gICAgY2F0ZWdvcnlTbHVnTmFtZXM/OiBzdHJpbmdbXTtcbiAgICBjb2xsZWN0aW9uU2x1Z05hbWVzPzogc3RyaW5nW107XG4gIH0gPSB7fSkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICBjb25zdCBib2R5ID0ge1xuICAgICAgYnVzaW5lc3NJZCxcbiAgICAgIGNhdGVnb3J5SWRzOiBzY29wZS5jYXRlZ29yeUlkcyA/PyBbXSxcbiAgICAgIGNvbGxlY3Rpb25JZHM6IHNjb3BlLmNvbGxlY3Rpb25JZHMgPz8gW10sXG4gICAgICBjYXRlZ29yeVNsdWdOYW1lczogc2NvcGUuY2F0ZWdvcnlTbHVnTmFtZXMgPz8gW10sXG4gICAgICBjb2xsZWN0aW9uU2x1Z05hbWVzOiBzY29wZS5jb2xsZWN0aW9uU2x1Z05hbWVzID8/IFtdLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dCh0aGlzLkJBU0VfVVJMICsgJ2Vjb21tZXJjZS9wcm9kdWN0L2N1c3RvbS1maWVsZC9xdWVyeS1vcHRpb25zJywgYm9keSlcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpOiBGaWx0ZXJPcHRpb25zID0+IHtcbiAgICAgICAgICAvLyBXcmFwcGVkIGFzIHsgZGF0YTogey4uLn0gfTsgdG9sZXJhdGUgYW4gdW53cmFwcGVkIGJvZHkgdG9vLlxuICAgICAgICAgIGNvbnN0IGJvZHkgPSByZXNwb25zZT8uZGF0YSA/PyByZXNwb25zZSA/PyB7fTtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgc29ydHM6IGJvZHkuc29ydHMgPz8gW10sXG4gICAgICAgICAgICBncm91cHM6IGJvZHkuZ3JvdXBzID8/IFtdLFxuICAgICAgICAgICAgZmlsdGVyczogYm9keS5maWx0ZXJzID8/IFtdLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG5cbiAgZ2V0RmlsdGVyZWRQcm9kdWN0KFxuICAgIGNvbGxlY3Rpb25JZHM6IHN0cmluZ1tdLFxuICAgIGNhdGVnb3J5SWRzOiBzdHJpbmdbXSxcbiAgICBzZWFyY2hUZXh0OiBzdHJpbmcsXG4gICAgbWluUHJpY2U6IG51bWJlcixcbiAgICBtYXhQcmljZTogbnVtYmVyLFxuICAgIG1pblJhdGluZzogbnVtYmVyLFxuICAgIG1heFJhdGluZzogbnVtYmVyLFxuICAgIHNvcnRCeTogc3RyaW5nLFxuICAgIHBhZ2VObzogbnVtYmVyLFxuICAgIHNpemU6IG51bWJlcixcbiAgICBicmFuZElkczogc3RyaW5nW10gPSBbXSxcbiAgICBleHRyYToge1xuICAgICAgY3VzdG9tRmllbGRGaWx0ZXJzPzogQ3VzdG9tRmllbGRGaWx0ZXJbXTtcbiAgICAgIHNvcnREaXJlY3Rpb24/OiAnYXNjJyB8ICdkZXNjJztcbiAgICAgIGNhdGVnb3J5U2x1Z05hbWU/OiBzdHJpbmdbXTtcbiAgICAgIGNvbGxlY3Rpb25TbHVnTmFtZT86IHN0cmluZ1tdO1xuICAgIH0gPSB7fVxuICApIHtcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xuICAgIGxldCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBidXNpbmVzc0lkOlxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBjb2xsZWN0aW9uSWQ6IGNvbGxlY3Rpb25JZHMsXG4gICAgICBjYXRlZ29yeUlkOiBjYXRlZ29yeUlkcyxcbiAgICAgIGJyYW5kSWQ6IGJyYW5kSWRzLFxuICAgICAgc2VhcmNoVGV4dDogc2VhcmNoVGV4dCxcbiAgICAgIHNvcnRCeTogc29ydEJ5LFxuICAgICAgcGFnZU5vOiBwYWdlTm8sXG4gICAgICBwYWdlU2l6ZTogc2l6ZSxcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3BlcklkJykgPz8gbnVsbCxcbiAgICAgIHJlcXVlc3Q6ICdVU0VSJyxcbiAgICB9O1xuICAgIGlmIChtaW5QcmljZSA+IDApIHBheWxvYWRbJ21pblByaWNlJ10gPSBtaW5QcmljZTtcbiAgICBpZiAobWF4UHJpY2UgPiAwKSBwYXlsb2FkWydtYXhQcmljZSddID0gbWF4UHJpY2U7XG4gICAgaWYgKG1pblJhdGluZyA+IDApIHBheWxvYWRbJ21pblJhdGluZyddID0gbWluUmF0aW5nO1xuICAgIGlmIChtYXhSYXRpbmcgPiAwKSBwYXlsb2FkWydtYXhSYXRpbmcnXSA9IG1heFJhdGluZztcbiAgICAvLyBTZW50IG9uIGpld2VsbGVyeSBsaXN0aW5ncyB0b286IHRoZSBiYWNrZW5kIGFwcGxpZXMgdGhlbSB0aGVyZSBhcyB3ZWxsLlxuICAgIGlmIChleHRyYS5jdXN0b21GaWVsZEZpbHRlcnM/Lmxlbmd0aClcbiAgICAgIHBheWxvYWRbJ2N1c3RvbUZpZWxkRmlsdGVycyddID0gZXh0cmEuY3VzdG9tRmllbGRGaWx0ZXJzO1xuICAgIGlmIChleHRyYS5zb3J0RGlyZWN0aW9uKSBwYXlsb2FkWydzb3J0RGlyZWN0aW9uJ10gPSBleHRyYS5zb3J0RGlyZWN0aW9uO1xuICAgIC8vIFNsdWdzIGFyZSBjb21iaW5lZCAoT1IpIHdpdGggdGhlIGlkIGFycmF5cyBhbmQgYXJlIGFjY2VwdGVkIG9uIGpld2VsbGVyeSBzZWFyY2ggYXMgd2VsbC5cbiAgICBpZiAoZXh0cmEuY2F0ZWdvcnlTbHVnTmFtZT8ubGVuZ3RoKSBwYXlsb2FkWydjYXRlZ29yeVNsdWdOYW1lJ10gPSBleHRyYS5jYXRlZ29yeVNsdWdOYW1lO1xuICAgIGlmIChleHRyYS5jb2xsZWN0aW9uU2x1Z05hbWU/Lmxlbmd0aCkgcGF5bG9hZFsnY29sbGVjdGlvblNsdWdOYW1lJ10gPSBleHRyYS5jb2xsZWN0aW9uU2x1Z05hbWU7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtVjIvc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgICBwYXlsb2FkXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdW50OiByZXNwb25zZS5kYXRhLmNvdW50LFxuICAgICAgICAgICAgbWluUHJpY2U6IHJlc3BvbnNlLmRhdGEubWluUHJpY2UsXG4gICAgICAgICAgICBtYXhQcmljZTogcmVzcG9uc2UuZGF0YS5tYXhQcmljZSxcbiAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGEuZGF0YT8ubWFwKFxuICAgICAgICAgICAgICAocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuICBnZXRQcm9kdWN0QnlDYXRlZ29yeUlkKGNhdGVnb3J5SWQ6IHN0cmluZykge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgYnVzaW5lc3NJZDpcbiAgICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyksXG4gICAgICBjYXRlZ29yeUlkOiBbY2F0ZWdvcnlJZF0sXG4gICAgICBzdWJJbmR1c3RyeUlkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnc3ViSW5kdXN0cnlJZCcpLFxuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEwLFxuICAgICAgdXNlcklkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgncGVySWQnKSA/PyBudWxsLFxuICAgICAgcmVxdWVzdDogJ1VTRVInLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcbiAgICAgICAgcGF5bG9hZFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3VudDogcmVzcG9uc2UuY291bnQsXG4gICAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcChcbiAgICAgICAgICAgICAgKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cbiAgZ2V0UHJvZHVjdEJ5Q29sbGVjdGlvbklkKGNvbGxlY3Rpb25JZDogc3RyaW5nKSB7XG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBidXNpbmVzc0lkOlxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcbiAgICAgIGNvbGxlY3Rpb25JZDogW2NvbGxlY3Rpb25JZF0sXG4gICAgICBzdWJJbmR1c3RyeUlkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnc3ViSW5kdXN0cnlJZCcpLFxuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEwLFxuICAgICAgdXNlcklkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgncGVySWQnKSA/PyBudWxsLFxuICAgICAgcmVxdWVzdDogJ1VTRVInLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9pdGVtL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcbiAgICAgICAgcGF5bG9hZFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT4ge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBjb3VudDogcmVzcG9uc2UuY291bnQsXG4gICAgICAgICAgICBkYXRhOiByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcChcbiAgICAgICAgICAgICAgKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdClcbiAgICAgICAgICAgICksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBhZGRSZXZpZXcocGF5bG9hZDogUmV2aWV3KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYWRkL3Jldmlld2AsIHBheWxvYWQpO1xuICB9XG4gIGdldEFsbFJldmlld3MocHJvZHVjdElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvZmlsdGVyL3Jldmlld3M/cHJvZHVjdElkPSR7cHJvZHVjdElkfWAsXG4gICAgICBudWxsXG4gICAgKTtcbiAgfVxuXG4gIGdlbmVyYXRlT1RQKG1vYmlsZTogc3RyaW5nLCBjb3VudHJ5Q29kZTogc3RyaW5nKSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS91c2VyL290cC90cmlnZ2VyP21vYmlsZT0ke21vYmlsZX0mY291bnRyeUNvZGU9JHtjb3VudHJ5Q29kZX0mYnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIHZlcmlmeU9UUChtb2JpbGU6IHN0cmluZywgb3RwOiBzdHJpbmcsIGRldmljZUluZm86IERldmljZUluZm8pIHtcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvdXNlci9hdXRoZW50aWNhdGU/bW9iaWxlPSR7bW9iaWxlfSZvdHA9JHtvdHB9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWAsXG4gICAgICBkZXZpY2VJbmZvXG4gICAgKTtcbiAgfVxuICByZXNlbmRPVFAobW9iaWxlOiBzdHJpbmcsIGNvdW50cnlDb2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL3VzZXIvcmVzZW5kP21vYmlsZT0ke21vYmlsZX0mY291bnRyeUNvZGU9JHtjb3VudHJ5Q29kZX0mYnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIGFwcGxpY2FibGVEaXNjb3VudExpc3QoY2FydElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9vcmRlci9kaXNjb3VudC1jb3Vwb24vJHtjYXJ0SWR9L2FwcGxpY2FiaWxpdHkvbGlzdGBcbiAgICApO1xuICB9XG5cbiAgYWRkSXRlbVRvREIodXNlckNhcnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0YCwgdXNlckNhcnQpO1xuICB9XG4gIGdldFVzZXJJdGVtcyh1c2VySWQ6IHN0cmluZywgY2FydFR5cGU6ICdDQVJUJyB8ICdXSVNITElTVCcgfCAnVFJJQUxfQ0FSVCcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9vcmRlci9jYXJ0P3VzZXJJZD0ke3VzZXJJZH0mY2FydFR5cGU9JHtjYXJ0VHlwZX1gXG4gICAgKTtcbiAgfVxuICBnZXRVc2VySW5mbyh1c2VySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9nZXQvdXNlcj91c2VySWQ9JHt1c2VySWR9YCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG4gIGFkZFVzZXJBZGRyZXNzKHVzZXI6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvdXBkYXRlL3VzZXJgLCB1c2VyKTtcbiAgfVxuICB1cGRhdGVQcm9maWxlKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvdXBkYXRlL3VzZXJgLCBwYXlsb2FkKTtcbiAgfVxuICBnZXRVc2VyT3JkZXJzKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL3VzZXIvb3JkZXJgLCBwYXlsb2FkKTtcbiAgfVxuICBnZXRVc2VyV2lzaGxpc3QodXNlcklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQ/dXNlcklkPSR7dXNlcklkfSZjYXJ0VHlwZT1XSVNITElTVGBcbiAgICApO1xuICB9XG4gIG1vdmVJdGVtVG9DYXJ0KHVzZXJJZDogc3RyaW5nLCBwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL3VwZGF0ZS9jYXJ0P3VzZXJJZD0ke3VzZXJJZH1gLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICAvLyBQYXltZW50XG4gIGNyZWF0ZVBheW1lbnRUb2tlbihwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5FQ09NTUVSQ0VfVVJMICsgYHBheW1lbnQvb3JkZXJgLCBwYXlsb2FkKTtcbiAgfVxuICBjaGVja1BheW1lbnRTdGF0dXMocGF5bG9hZDogYW55KSB7XG4gICAgbGV0IGlzSmV3ZWxsZXJ5ID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdpc01hdGVyaWFsQmFzZWRQcmljaW5nJykgPT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgIGxldCBwYXlsb2FkV2l0aEpld2VsbGVyeSA9IHsgLi4ucGF5bG9hZCwgaXNKZXdlbGxlcnk6IGlzSmV3ZWxsZXJ5IH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5FQ09NTUVSQ0VfVVJMICsgYHBheW1lbnQvc3RhdHVzYCxcbiAgICAgIHBheWxvYWRXaXRoSmV3ZWxsZXJ5XG4gICAgKTtcbiAgfVxuICBnZXRSZWNlbnRWaWV3UHJvZHVjdCh1c2VySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvcmVjZW50Vmlldz91c2VySWQ9JHt1c2VySWR9YCwgbnVsbClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgc2VuZFNpZ251cE9UUChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3NpZ251cC9vdHAvdHJpZ2dlcmAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIHZlcmlmeVNpZ251cE9UUChwYXlsb2FkOiBhbnkpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XG4gICAgLy8gcGF5bG9hZFtcImJ1c2luZXNzSWRcIl0gPSBidXNpbmVzc0lkO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoZW50aWNhdGUvc2lnbnVwYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgc2lnbmluUGFzc3dvcmQocGFzc0RhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoZW50aWNhdGUvbG9naW5gLFxuICAgICAgcGFzc0RhdGFcbiAgICApO1xuICB9XG5cbiAgZW5kVXNlclJlZmZlcmFsRGV0YWlscyh1c2VySWQ6IGFueSwgcmVmZXJyYWxVbmlxdWVJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL2FwaS9lbmQtdXNlci9yZWZlcnJhbERldGFpbHM/dXNlcklkPSR7dXNlcklkfSZyZWZlcnJhbFVuaXF1ZUlkPSR7cmVmZXJyYWxVbmlxdWVJZH1gLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgY3JlYXRlQXBwb2ludG1lbnQoZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgY3JtL2FwcG9pbnRtZW50L2FkZGAsIGRhdGEpO1xuICB9XG5cbiAgZ2V0QWxsTG9jYXRpb24oYnVzaW5lc3NJZDogYW55LCBzaXplOiBudW1iZXIsIHBhZ2U6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9sb2NhdGlvbj9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsVGltZVNsb3RzKGxvY2F0aW9uSWQ6IGFueSwgZGF0ZTogRGF0ZSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy90aW1lc2xvdHM/bG9jYXRpb25JZD0ke2xvY2F0aW9uSWR9JmRhdGU9JHtkYXRlfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsU2VydmljZShidXNpbmVzc0lkOiBhbnksIHNpemU6IGFueSwgcGFnZTogYW55LCBsb2NhdGlvbklkPzogYW55KSB7XG4gICAgaWYgKCFsb2NhdGlvbklkKSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3NlcnZpY2U/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnNpemU9JHtzaXplfSZwYWdlPSR7cGFnZX1gXG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3NlcnZpY2U/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnNpemU9JHtzaXplfSZwYWdlPSR7cGFnZX0mbG9jYXRpb25JZD0ke2xvY2F0aW9uSWR9YFxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBnZXRBbGxTdGFmZkJ5TG9jYXRpb24oXG4gICAgYnVzaW5lc3NJZDogYW55LFxuICAgIHNpemU6IG51bWJlcixcbiAgICBwYWdlOiBudW1iZXIsXG4gICAgbG9jYXRpb25JZDogc3RyaW5nLFxuICAgIHNlcnZpY2VJZDogc3RyaW5nXG4gICkge1xuICAgIGlmICghc2VydmljZUlkKSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3N0YWZmP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9JmxvY2F0aW9uSWQ9JHtsb2NhdGlvbklkfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvc3RhZmY/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnNpemU9JHtzaXplfSZwYWdlPSR7cGFnZX0mbG9jYXRpb25JZD0ke2xvY2F0aW9uSWR9JnNlcnZpY2VJZD0ke3NlcnZpY2VJZH1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEF2YWlsYWJsZVNsb3RzKGRhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL2F2YWlsYWJsZS90aW1lc2xvdHNgLFxuICAgICAgZGF0YVxuICAgICk7XG4gIH1cblxuICBnZXRTZWxlY3RlZExpc3RGaWVsZHMoYklkOiBhbnksIHNob3dJbkVycDogYW55LCBmb3JtTmFtZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkNNSVNfVVJMICtcbiAgICAgIGBjcm0vZmllbGRzP2J1c2luZXNzSWQ9JHtiSWR9JnN0YXR1cz10cnVlJnNob3dJbkZvcm09JHtzaG93SW5FcnB9JmlzUGFnaW5hdGlvbj1mYWxzZSZmaWVsZENhdGVnb3J5PSR7Zm9ybU5hbWV9YFxuICAgICk7XG4gIH1cblxuICBnZXRBY3RpdmVTdWJzY3JpcHRpb25Gb3JGZWVTdHJ1Y3R1cmUoYnVzaW5lc3NJZDogYW55LCBncmFkZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQ01JU19VUkwgK1xuICAgICAgYGNybS9zdWJzY3JpcHRpb24vcGxhbi9saXN0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZncmFkZUlkPSR7Z3JhZGVJZH0mc3RhdHVzPXRydWUmaXNEZWxldGVkPWZhbHNlYFxuICAgICk7XG4gIH1cblxuICBjcmVhdGVBZG1pc3Npb24ocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5DTUlTX1VSTCArXG4gICAgICBgY3JtL3JlZ2lzdHJhdGlvbi9hZG1pc3Npb24/cmVnaXN0cmF0aW9uSWQ9JHtwYXlsb2FkPy5yZWdpc3RyYXRpb25JZCB8fCAnJ31gLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBjcmVhdGVQYXltZW50TGluayhkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9yZWdpc3RyYXRpb24vYWRtaXNzaW9uL3YyL3BheW1lbnQ/aXNGcm9tV2ViPXRydWVgLFxuICAgICAgZGF0YVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVSZWdpc3RyYXRpb25Gb3JQYXltZW50KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9yZWdpc3RyYXRpb24vcGF5bWVudGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGdldFN1YnNjcmlwdGlvbkZvckZlZVN0cnVjdHVyZShncmFkZUlkOiBhbnkpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5DTUlTX1VSTCArXG4gICAgICBgY3JtL3N1YnNjcmlwdGlvbi9wbGFuL2xpc3Q/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JmdyYWRlSWQ9JHtncmFkZUlkfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0RmVlU3RydWN0dXJlKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQ01JU19VUkwgKyBgY3JtL2ZlZS9zdHJ1Y3R1cmVgLCBwYXlsb2FkKTtcbiAgfVxuXG4gIG5ld0ZlZVN0cnVjdHVyZUdldExpc3QoZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5DTUlTX1VSTCArIGBjcm0vZmVlL3N0cnVjdHVyZS92Mi9maWx0ZXJgLCBkYXRhKTtcbiAgfVxuXG4gIGdldEFsbERvY3VtZW50KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5DTUlTX1VSTCArIGBjcm0vbWFzdGVyL2RvY3VtZW50VHlwZS9maWx0ZXJgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBnZXRMZWFkQnlJZChsZWFkSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQ01JU19VUkwgKyBgY3JtL2xlYWRzL2dldC1vbmU/bGVhZElkPSR7bGVhZElkfWApO1xuICB9XG5cbiAgZ2V0UmVnaXN0cmF0aW9uTGlzdChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkNNSVNfVVJMICsgYGNybS9yZWdpc3RyYXRpb24vZ2V0QWxsYCwgcGF5bG9hZCk7XG4gIH1cblxuICBnZXRBbGxDb21wb25lbnRDYXRlZ29yaWVzKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vbWFzdGVyL3RlbXBsYXRlL2NhdGVnb3J5L2FsbGApO1xuICB9XG5cbiAgcHJpdmF0ZSBzYWZlUGFyc2U8VD4ocmF3OiBzdHJpbmcgfCBudWxsKTogVCB8IG51bGwge1xuICAgIGlmICghcmF3KSByZXR1cm4gbnVsbDtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIEpTT04ucGFyc2UocmF3KSBhcyBUO1xuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICB9XG5cbiAgZ2V0VGVtcGxhdGUoKSB7XG4gICAgY29uc3QgYkRldGFpbHNSYXcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYkRldGFpbHMnKTtcbiAgICBjb25zdCBkZXRhaWxzID0gdGhpcy5zYWZlUGFyc2U8eyB0ZW1wbGF0ZUlkPzogc3RyaW5nIH0+KGJEZXRhaWxzUmF3KTtcblxuICAgIC8vIGZhbGxiYWNrIHNvdXJjZVxuICAgIGNvbnN0IHdlYnNpdGVEYXRhUmF3ID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVEYXRhJyk7XG4gICAgY29uc3Qgd2Vic2l0ZURhdGEgPSB0aGlzLnNhZmVQYXJzZTx7IGhvbWVQYWdlSWQ/OiBzdHJpbmcgfT4od2Vic2l0ZURhdGFSYXcpO1xuXG4gICAgLy8gcHJlZmVyIHRlbXBsYXRlSWQgZnJvbSBiRGV0YWlsczsgZWxzZSBmYWxsYmFjayB0byB3ZWJzaXRlRGF0YS5ob21lUGFnZUlkXG4gICAgY29uc3QgdGVtcGxhdGVJZCA9IChcbiAgICAgIGRldGFpbHM/LnRlbXBsYXRlSWQgPz9cbiAgICAgIHdlYnNpdGVEYXRhPy5ob21lUGFnZUlkID8/XG4gICAgICAnJ1xuICAgICkudG9TdHJpbmcoKTtcblxuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy92My93ZWJzaXRlLyR7dGVtcGxhdGVJZH0vcGFnZXMvbGlzdGBcbiAgICApO1xuICB9XG5cbiAgZ2V0RWNvbW1lcmNlQ29uZmlncygpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz9cbiAgICAgICcxZjEwNjUxZi05MjU4LTZiNjMtOWQyMy1hM2Q2OTFhY2ViODgnO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvZWNvbW1lcmNlL2NvbmZpZy9hbGw/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YFxuICAgICk7XG4gIH1cblxuICBwb3N0VmlkZW9DYWxsRGV0YWlscyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9lY29tbWVyY2UvY29uZmlnL3ZpZGVvLWNhbGxgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBnZXRTdG9yZUxvY2F0b3JEZXRhaWxzKHBpbmNvZGU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL3N0b3JlL25lYXJieT9waW5jb2RlPSR7cGluY29kZX0mYnVzaW5lc3NJZD0ke3RoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyl9YFxuICAgICk7XG4gIH1cblxuICBzYXZlSW1hZ2VzVG9CdXNpbmVzc0xpYnJhcnkobWVkaWFSZXF1ZXN0OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGFkbWluL2xpYnJhcnkvaW1hZ2UvbGlicmFyeS9zYXZlYCxcbiAgICAgIG1lZGlhUmVxdWVzdFxuICAgICk7XG4gIH1cblxuICByZWdlbmVyYXRlVGV4dChyZXF1ZXN0OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGFkbWluL2NvbnRlbnQvc3VnZ2VzdC92Mi93ZWJzaXRlL2luZGl2aWR1YWxgLFxuICAgICAgcmVxdWVzdFxuICAgICk7XG4gIH1cbiAgZ2V0Q2F0ZWdvcmllc0hlYWRlckRhdGEoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC8ke3RoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJyl9L2hlYWRlcnNgXG4gICAgKTtcbiAgfVxuICBnZXRBbGxTdG9yZXMocGF5bG9hZDogYW55KSB7XG4gICAgbGV0IHVybCA9ICcnO1xuICAgIGlmIChwYXlsb2FkPy5waW5jb2RlICYmIHBheWxvYWQucGluY29kZS50b1N0cmluZygpLmxlbmd0aCA9PSA2KSB7XG4gICAgICB1cmwgPSB1cmwgKyBgICZwaW5jb2RlPSR7cGF5bG9hZC5waW5jb2RlfWA7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL3N0b3JlL2dldC92Mj9idXNpbmVzc0lkPSR7cGF5bG9hZC5idXNpbmVzc0lkfSR7dXJsfWAsXG4gICAgICAnJ1xuICAgICk7XG4gIH1cblxuICBnZXRBbGxBcHBvaW50bWVudFNlcnZpY2UocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyAnc2VydmljZS9saXN0JywgcGF5bG9hZCk7XG4gIH1cblxuICBnZXRBbGxTdGFmZihwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYHN0YWZmL3N0YWZmL3N0b3JlLXN0YWZmLWxpc3Q/c2VydmljZUlkPSR7cGF5bG9hZC5zZXJ2aWNlSWR9JnN0b3JlSWQ9JHtwYXlsb2FkLnN0b3JlSWR9JmJ1c2luZXNzSWQ9JHtwYXlsb2FkLmJ1c2luZXNzSWR9YFxuICAgICk7XG4gIH1cblxuICBnZXRTdG9yZUJ5SWQoc3RvcmVJZDogc3RyaW5nKSB7XG4gICAgbGV0IHBheWxvYWQgPSB7XG4gICAgICBzdG9yZUlkOiBzdG9yZUlkLFxuICAgICAgYnVzaW5lc3NJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJyxcbiAgICAgIHBhZ2VObzogMCxcbiAgICAgIHBhZ2VTaXplOiAxMDAwLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvc3RvcmUvZ2V0YCwgcGF5bG9hZCk7XG4gIH1cbiAgcG9zdE5ld3NMZXR0ZXIoZW1haWw6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9lY29tbWVyY2UvY29uZmlnL3JlZ2lzdGVyZWQvbmV3c2xldHRlcj9lbWFpbD0ke2VtYWlsfSZidXNpbmVzc0lkPSR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX1gLFxuICAgICAgJydcbiAgICApO1xuICB9XG4gIGFkZFJldmlld1RvUHJvZHVjdChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2FkZC9yZXZpZXc/b3JkZXJJZD0ke3BheWxvYWQub3JkZXJJZH1gLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBnZXRBbGxTdG9yZXNPcnJhKHBhZ2VObzogYW55LCBzaXplOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdG9yZT9wYWdlTm89JHtwYWdlTm99JnNpemU9JHtzaXplfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0c3RhZmZCeVN0b3JlSWQoc3RvcmVJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RhZmYvZ2V0LyR7c3RvcmVJZH1gXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbFNjaGVtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zY2hlbWUvZ2V0QWxsU2NoZW1lcy9kYXNoYm9hcmRgXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbFN0YXRlKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdGF0ZS9nZXRBbGxgKTtcbiAgfVxuXG4gIGdldENpdHlCeVN0YXRlQnlwYWdpbmF0ZWQoc3RhdGVJZDogYW55LCBwYWdlTm86IGFueSwgc2l6ZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vY2l0eS9nZXRCeVN0YXRlP3N0YXRlSWQ9JHtzdGF0ZUlkfSZwYWdlTm89JHtwYWdlTm99JnNpemU9JHtzaXplfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0U3RvcmVCeVNsYWIoZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICBgaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vc3RvcmUvZ2V0U2xhYmAsXG4gICAgICBkYXRhXG4gICAgKTtcbiAgfVxuXG4gIGFkZFRyaWFsSXRlbShyZXF1ZXN0OiBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydC92MmAsIHJlcXVlc3QpO1xuICB9XG5cbiAgY2hlY2tJdGVtQWxyZWFkeUFkZGVkKHJlcXVlc3Q6IGNoZWNrSXRlbUFscmVhZHlBZGRlZCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydC9jaGVjay9pdGVtYCxcbiAgICAgIHJlcXVlc3RcbiAgICApO1xuICB9XG5cbiAgZGVsZXRlSXRlbUZyb21DYXJ0KHJlcXVlc3Q6IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnQvcmVtb3ZlYCxcbiAgICAgIHJlcXVlc3RcbiAgICApO1xuICB9XG5cbiAgYm9va0FwcG9pbnRtZW50KHJlcXVlc3Q6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL3RyeS1ob21lYCwgcmVxdWVzdCk7XG4gIH1cblxuICBjcmVhdGVFbnJvbGxtZW50U2NoZW1lKGVucm9sbGVtZW50OiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICBgICBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9lbnJvbGxtZW50L2NyZWF0ZS9uZXcvdGVtcD9tYW51YWxQYXk9dHJ1ZSZpc1dlYlJlcXVlc3Q9dHJ1ZVxuYCxcbiAgICAgIGVucm9sbGVtZW50XG4gICAgKTtcbiAgfVxuXG4gIGdldEhvbWVBcHBvaW50bWVudExpc3QodXNlcklkOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkID0gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL3VzZXIvdHJ5LWhvbWU/dXNlcklkPSR7dXNlcklkfSZidXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbE9ycmFTY2hlbWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICAnaHR0cHM6Ly9zdGFnZWFwaS1vcnJhLmxldHNtb2JpbGl0eS5jb20vcGFzc0Jvb2svcmVkZW1wdGlvbi9hbW91bnQvY2hlY2s/dXNlckNvZGU9Q18wMDAzMTM4ODUnXG4gICAgKTtcbiAgfVxuXG4gIHJlZGVlbVNjaGVtZShzY2hlbWU6IHN0cmluZywgY2FydElkOiBhbnksIGFjdGlvbjogYm9vbGVhbikge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9vcmRlci9jYXJ0L3JlZGVtcHRpb24/Y2FydElkPSR7Y2FydElkfSZyZW1vdmVTY2hlbWU9JHthY3Rpb259YCxcbiAgICAgIHNjaGVtZVxuICAgICk7XG4gIH1cblxuICBnZXRSZXZpZXdzQnlQcm9kdWN0SWQocHJvZHVjdElkOiBzdHJpbmcsIHBhZ2VOdW1iZXI6IG51bWJlcikge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL3VzZXIvZmlsdGVyL3Jldmlld3M/cHJvZHVjdElkPSR7cHJvZHVjdElkfSZwYWdlTnVtYmVyPSR7cGFnZU51bWJlcn0mcGFnZVNpemU9M2AsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbiAgZ2V0RmllbGRzVG9EaXNwbGF5KGZpZWxkc0xpc3Q6IGFueVtdKSB7XG4gICAgbGV0IG1hcDogYW55ID0ge307XG5cbiAgICBmb3IgKGxldCBmaWVsZCBvZiBmaWVsZHNMaXN0KSB7XG4gICAgICBmb3IgKGxldCBmaWVsZEdyb3VwIG9mIGZpZWxkLmZpZWxkR3JvdXApIHtcbiAgICAgICAgaWYgKCFmaWVsZEdyb3VwLmZpZWxkU3RlcElkKSBjb250aW51ZTtcblxuICAgICAgICBsZXQgc3RlcE5hbWUgPSBmaWVsZEdyb3VwLmZpZWxkU3RlcE5hbWVcbiAgICAgICAgICA/IGZpZWxkR3JvdXAuZmllbGRTdGVwTmFtZVxuICAgICAgICAgIDogJ3VuZGVmaW5lZCc7XG4gICAgICAgIGxldCBncm91cE5hbWUgPSBmaWVsZEdyb3VwLmZpZWxkR3JvdXBOYW1lO1xuXG4gICAgICAgIGlmICghbWFwW3N0ZXBOYW1lXSkge1xuICAgICAgICAgIG1hcFtzdGVwTmFtZV0gPSB7fTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIW1hcFtzdGVwTmFtZV1bZ3JvdXBOYW1lXSkge1xuICAgICAgICAgIG1hcFtzdGVwTmFtZV1bZ3JvdXBOYW1lXSA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGZpZWxkWydmaWVsZFN0ZXBJZCddID0gZmllbGRHcm91cC5maWVsZFN0ZXBJZDtcbiAgICAgICAgZmllbGRbJ2ZpZWxkR3JvdXBJZCddID0gZmllbGRHcm91cC5maWVsZEdyb3VwSWQ7XG5cbiAgICAgICAgY29uc3QgbmV3RmllbGQgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KGZpZWxkKSk7XG4gICAgICAgIG1hcFtzdGVwTmFtZV1bZ3JvdXBOYW1lXS5wdXNoKG5ld0ZpZWxkKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gbWFwO1xuICB9XG5cbiAgZ2V0Qm9va2luZ1Nsb3RzKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyAnYm9va2luZy9hdmFpbGFibGUtc2xvdHMnLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgZ2V0QnVzaW5lc3NBcHBvaW50bWVudFNldHRpbmdzKGJ1c2luZXNzSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgc2VydmljZS9zZXR0aW5ncy8ke2J1c2luZXNzSWR9YFxuICAgICk7XG4gIH1cblxuICByZXNvbHZlQ2FydChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgJ2Jvb2tpbmcvZ3JvdXAvcmVzb2x2ZS1jYXJ0JyxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG4gIGhvbGRCb29raW5nKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArICdib29raW5nL2dyb3VwL2hvbGQnLCBwYXlsb2FkKTtcbiAgfVxuICBnZXRCb29raW5nR3JvdXAoZ3JvdXBJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9YCk7XG4gIH1cbiAgZ2VuZXJhdGVQYXltZW50VG9rZW4oZ3JvdXBJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC90b2tlbj9ncm91cElkPSR7Z3JvdXBJZH1gLFxuICAgICAge31cbiAgICApO1xuICB9XG4gIGNvbXBsZXRlQm9va2luZ0dyb3VwKGdyb3VwSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC9jb21wbGV0ZS8ke2dyb3VwSWR9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuICBnZXRNeUJvb2tpbmdzKGJ1c2luZXNzSWQ6IHN0cmluZywgdXNlcklkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICtcbiAgICAgIGBib29raW5nL2dyb3VwL215P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZ1c2VySWQ9JHt1c2VySWR9YFxuICAgICk7XG4gIH1cbiAgZ2V0R3JvdXBMaW5lcyhncm91cElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfS9saW5lc2BcbiAgICApO1xuICB9XG4gIGNhbmNlbEJvb2tpbmdHcm91cChncm91cElkOiBzdHJpbmcsIHJlYXNvbj86IHN0cmluZykge1xuICAgIGNvbnN0IHF1ZXJ5ID0gcmVhc29uID8gYD9yZWFzb249JHtlbmNvZGVVUklDb21wb25lbnQocmVhc29uKX1gIDogJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vY2FuY2VsJHtxdWVyeX1gLFxuICAgICAge31cbiAgICApO1xuICB9XG4gIGdldENhbmNlbGxhdGlvblBvbGljeShidXNpbmVzc0lkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICtcbiAgICAgIGBwb2xpY3ktbWFzdGVycy8ke2J1c2luZXNzSWR9P3BvbGljeVR5cGU9Q0FOQ0VMTEFUSU9OYFxuICAgICk7XG4gIH1cbiAgZ2V0UmVzY2hlZHVsZVNsb3RzKGdyb3VwSWQ6IHN0cmluZywgZGF0ZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vcmVzY2hlZHVsZS1zbG90c2AsXG4gICAgICB7IGRhdGUgfVxuICAgICk7XG4gIH1cbiAgcmVzY2hlZHVsZUJvb2tpbmcoZ3JvdXBJZDogc3RyaW5nLCBuZXdEYXRlOiBzdHJpbmcsIG5ld1N0YXJ0VGltZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vcmVzY2hlZHVsZWAsXG4gICAgICB7IG5ld0RhdGUsIG5ld1N0YXJ0VGltZSwgcmVzY2hlZHVsZWRCeTogJ0NVU1RPTUVSJyB9XG4gICAgKTtcbiAgfVxuXG4gIC8vIEFkZCBzZXJ2aWNlKHMpIHRvIGFuIGFscmVhZHktYm9va2VkIGFwcG9pbnRtZW50LCBiZWZvcmUgc3RhcnQgb25seSAtIHNlZVxuICAvLyBkb2NzL3VuaWZpZWQtYXBwb2ludG1lbnQtam91cm5leS5tZCDCpzVlIChhcHBvaW50bWVudF9zZXJ2aWNlIHJlcG8pLiBzZXJ2aWNlSWRzIGNhbiBiZSBvbmUgb3JcbiAgLy8gbWFueSAtIHRoZSBiYWNrZW5kIGFwcGxpZXMvcGF5cyBmb3IgdGhlIHdob2xlIGJhdGNoIGluIG9uZSBjYWxsLlxuICBnZXRBZGRTZXJ2aWNlT3B0aW9ucyhncm91cElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfS9hZGQtc2VydmljZS9vcHRpb25zYFxuICAgICk7XG4gIH1cbiAgYWRkU2VydmljZVRvQm9va2luZyhncm91cElkOiBzdHJpbmcsIHNlcnZpY2VJZHM6IHN0cmluZ1tdKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L2FkZC1zZXJ2aWNlYCxcbiAgICAgIHsgc2VydmljZUlkcywgaW5pdGlhdGVkQnk6ICdDVVNUT01FUicgfVxuICAgICk7XG4gIH1cbiAgZ2VuZXJhdGVBZGRTZXJ2aWNlUGF5bWVudFRva2VuKGdyb3VwSWQ6IHN0cmluZywgc2VydmljZUlkczogc3RyaW5nW10pIHtcbiAgICBjb25zdCBxdWVyeSA9IHNlcnZpY2VJZHMubWFwKChpZCkgPT4gYHNlcnZpY2VJZHM9JHtpZH1gKS5qb2luKCcmJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC9hZGQtb24vdG9rZW4/Z3JvdXBJZD0ke2dyb3VwSWR9JiR7cXVlcnl9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuICBnZXRBZGRPblBheW1lbnRTdGF0dXMob3JkZXJJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBwYXltZW50L2FkZC1vbi92ZXJpZnkvc3RhdHVzP29yZGVySWQ9JHtvcmRlcklkfWBcbiAgICApO1xuICB9XG4gIGdlbmVyYXRlVG9rZW4oYklkOiBhbnksIHVzZXJJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYGV4dC9jb25uZWN0L3NpbXBvL3Rva2VuP2J1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH0mdXNlclR5cGU9RVhURVJOQUxfVVNFUmAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbiAgZ2V0QWxsRW5yb2xsZWRTY2hlbWVzKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgKyAnZXh0L2Nvbm5lY3Qvc2ltcG8vc2NoZW1lL2xpc3QnLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgZW5yb2xsU2NoZW1lKHBheWxvYWQ6IGFueSwgY2hlY2tDaGFyZ2VzOiBib29sZWFuKSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICB9KTtcbiAgICBpZiAoY2hlY2tDaGFyZ2VzKSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgJ3Bhc3Nib29rL2NhcnQvaW5pdGlhdGUvcGF5bWVudD9tYW51YWxQYXk9dHJ1ZScsXG4gICAgICAgIHBheWxvYWQsXG4gICAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgICApO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgJ3Bhc3Nib29rL2luaXRpYXRlL3BheW1lbnQ/bWFudWFsUGF5PXRydWUnLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB7IGhlYWRlcnM6IGhlYWRlcnMgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgZ2V0QmVuZWZpdFNsYWIocGFzc2Jvb2tJZD86IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYHBhc3Nib29rL2JlbmVmaXQvcGVyY2VudGFnZXM/cGFzc2Jvb2tJZD0ke3Bhc3Nib29rSWR9YCxcbiAgICAgIHt9LFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIGdldEFsbFN0YWZmTGlzdCgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYHN0YWZmL3N0YWZmL2xpc3QvJHt0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpfT9pc1BhZ2luYXRpb249ZmFsc2VgXG4gICAgKTtcbiAgfVxuICByZXF1ZXN0UmVkZWVtcHRpb24ocGFzc2Jvb2tJZDogYW55KSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBwYXNzYm9vay9yZXF1ZXN0L3JlZGVtcHRpb24/cGFzc0Jvb2tJZD0ke3Bhc3Nib29rSWR9YCxcbiAgICAgIHt9LFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIFBhc3Nib29rQXBwU3RhdHVzKGJJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGFwcC9hcHAvY2hlY2stYXBwP2J1c2luZXNzSWQ9JHtiSWR9JmFwcE5hbWU9UGFzc2Jvb2tgXG4gICAgKTtcbiAgfVxuICBjaGVja0FwcEluc3RhbGxlZChiSWQ6IGFueSwgYXBwTmFtZTogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGFwcC9hcHAvY2hlY2stYXBwP2J1c2luZXNzSWQ9JHtiSWR9JmFwcE5hbWU9JHthcHBOYW1lfWBcbiAgICApO1xuICB9XG4gIGdldFJlZGVlbVBvaW50cyhcbiAgICBiSWQ6IGFueSxcbiAgICB1c2VySWQ6IGFueSxcbiAgICBldmV0VHlwZTogc3RyaW5nLFxuICAgIG9yZGVyVmFsdWU6IGFueSxcbiAgICByZXdhcmRQb2ludHM6IGJvb2xlYW5cbiAgKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvYXBpL3JlZmVycmFscy9hdmFpbGFibGUtYW1vdW50P2J1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH0mZXZlbnRUeXBlPSR7ZXZldFR5cGV9Jm9yZGVyVmFsdWU9JHtvcmRlclZhbHVlfSZyZXdhcmRQb2ludHM9JHtyZXdhcmRQb2ludHN9YFxuICAgICk7XG4gIH1cbiAgcGF5bWVudFdpdGhDb21wbGV0ZVBvaW50cyhjYXJ0SWQ6IGFueSwgZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvb3JkZXIvcmV3YXJkcz9jYXJ0SWQ9JHtjYXJ0SWR9YCxcbiAgICAgIGRhdGFcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsUGFzc2Jvb2tEdWVzKGJJZDogYW55LCB1c2VySWQ6IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArXG4gICAgICBgcGFzc2Jvb2svcGF5bWVudC9kdWVzP3BhZ2U9MCZzaXplPTEwMDAmYnVzaW5lc3NJZD0ke2JJZH0mdXNlcklkPSR7dXNlcklkfWAsXG4gICAgICB7IGhlYWRlcnM6IGhlYWRlcnMgfVxuICAgICk7XG4gIH1cbiAgZ2V0VG9rZW4oKSB7XG4gICAgbGV0IHRva2VuID0gdGhpcy5jb29raWVTZXJ2aWNlLmdldCgncGFzc0Jvb2tUb2tlbicpO1xuICAgIHJldHVybiB0b2tlbjtcbiAgfVxuICBnZXRBbGxUcmFuc2FjdGlvbnMocGF5bG9hZDogYW55KSB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFRva2VuKCk7XG4gICAgY29uc3QgaGVhZGVycyA9IG5ldyBIdHRwSGVhZGVycyh7XG4gICAgICBBdXRob3JpemF0aW9uOiBgQmVhcmVyICR7dG9rZW59YCxcbiAgICB9KTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgYGRhc2hib2FyZC92My90cmFuc2FjdGlvbnMvcGFnZWAsXG4gICAgICBwYXlsb2FkLFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIGdldFNjaGVtZURldGFpbHMoc2NoZW1lSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgYGV4dC9jb25uZWN0L3NpbXBvL2dldC9zY2hlbWU/aWQ9JHtzY2hlbWVJZH1gLFxuICAgICAge31cbiAgICApO1xuICB9XG5cbiAgZ2V0TWV0YWxQcmljZShzdG9yZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgYGV4dC9jb25uZWN0L3NpbXBvL21ldGFsL3ByaWNlcz9pZD0ke3N0b3JlSWR9YFxuICAgICk7XG4gIH1cblxuICBjcmVhdGVMZWFkKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2NvbnRhY3RgLCBwYXlsb2FkKTtcbiAgfVxuICBnZXRBcHBvaW50bWVudFBheW1lbnRTdGF0dXMob3JkZXJJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBwYXltZW50L3ZlcmlmeS9zdGF0dXM/b3JkZXJJZD0ke29yZGVySWR9YFxuICAgICk7XG4gIH1cbiAgZ2V0T3RwRm9yTG9naW4ocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2dlbmVyYXRlLW90cGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIC8qKiBOZXcgT1RQIEFQSTogUFVUIC9lY29tbWVyY2UvdXNlci9hdXRoL3NlbmQtb3RwXG4gICAqICBCb2R5OiB7IGlkZW50aWZpZXIsIGJ1c2luZXNzSWQgfVxuICAgKiAgUmVzcG9uc2U6IHsgZGF0YTogeyBpc0V4aXN0aW5nVXNlcjogYm9vbGVhbiwgbWVzc2FnZTogc3RyaW5nIH0gfVxuICAgKi9cbiAgc2VuZE90cFYyKGlkZW50aWZpZXI6IHN0cmluZywgYnVzaW5lc3NJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hdXRoL3NlbmQtb3RwYCwge1xuICAgICAgaWRlbnRpZmllcixcbiAgICAgIGJ1c2luZXNzSWQsXG4gICAgfSk7XG4gIH1cblxuICB2ZXJpZnlPdHBWMihwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC92ZXJpZnktb3RwYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgY29tcGxldGVTaWdudXBWMihwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC9jb21wbGV0ZS1zaWdudXBgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBsb2dpbldpdGhQYXNzd29yZE5ldyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC9sb2dpbi1wYXNzd29yZGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGZsdXNoKGV2ZW50c1RvU2VuZDogYW55KSB7XG4gICAgdGhpcy5odHRwXG4gICAgICAucG9zdCh0aGlzLkJBU0VfVVJMICsgJ2Vjb21tZXJjZS9hbmFseXRpY3MvYmF0Y2gnLCBldmVudHNUb1NlbmQpXG4gICAgICAuc3Vic2NyaWJlKHsgZXJyb3I6ICgpID0+IHsgfSB9KTtcbiAgfVxuXG4gIGdldFBvcHVsYXJTZWFyY2hlcygpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/P1xuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/P1xuICAgICAgJzFmMTIxMDgxLWRiZWEtNjVjNi1hZDg5LTFkZmU4Y2RkYTkwMic7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvaW52ZW50b3J5L3BvcHVsYXItc2VhcmNoZXM/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YFxuICAgICk7XG4gIH1cblxuICBnZXRNZW51SXRlbXMobWVudUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9tZW51LyR7bWVudUlkfWApO1xuICB9XG5cbiAgLy8gZ2V0SG9tZVJlY29tbWVuZGF0aW9ucyhidXNpbmVzc0lkOiBhbnksIFVzZXJJZDogYW55KSB7XG4gIC8vICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5SRUNPTU1FTkRBVElPTl9VUkwgKyBgYXBpL3YxL3JlY29tbWVuZGF0aW9ucy8ke1VzZXJJZH0vaG9tZT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mcGFnZT0xJnBhZ2VTaXplPTIwYClcbiAgLy8gfVxuXG4gIC8vIGdldENhcnRSZWNvbW1lbmRhdGlvbnMoYnVzaW5lc3NJZDogYW55LCBVc2VySWQ6IGFueSkge1xuICAvLyAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUkVDT01NRU5EQVRJT05fVVJMICsgYGFwaS92MS9yZWNvbW1lbmRhdGlvbnMvJHtVc2VySWR9L2NhcnQ/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnBhZ2U9MSZwYWdlU2l6ZT0xNWApXG4gIC8vIH1cblxuICAvLyBnZXRQcm9kdWN0RGVzY3JpcHRpb25SZWNvbW1lbmRhdGlvbnMoYnVzaW5lc3NJZDogYW55LCBVc2VySWQ6IGFueSkge1xuICAvLyAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUkVDT01NRU5EQVRJT05fVVJMICsgYGFwaS92MS9yZWNvbW1lbmRhdGlvbnMvJHtVc2VySWR9L3BkcD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mcGFnZT0xJnBhZ2VTaXplPTEwYClcbiAgLy8gfVxufVxuIl19
|
|
809
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVzdC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvc2ltcG8tdWkvc3JjL2xpYi9zZXJ2aWNlcy9yZXN0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFjLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQy9ELE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDO0FBQzlELE9BQU8sRUFBRSxHQUFHLEVBQXdDLE1BQU0sTUFBTSxDQUFDO0FBS2pFLE9BQU8sRUFDTCxPQUFPLEVBQ1AsUUFBUSxFQUNSLGFBQWEsRUFDYixZQUFZLEVBQ1osZUFBZSxHQUNoQixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxvQ0FBb0MsQ0FBQztBQUM5RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sMkNBQTJDLENBQUM7QUFDekUsT0FBTyxFQUlMLE9BQU8sR0FFUixNQUFNLG1DQUFtQyxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUNsRSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFHeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBTWhFLE1BQU0sT0FBTyxXQUFXO0lBV3RCLFlBQ21CLElBQWdCLEVBQ1IsUUFBZ0IsRUFDVixhQUFxQixFQUMxQixRQUFnQixFQUN6QixhQUE0QixFQUNkLE9BQW9CLEVBQ3JCLFlBQW9CLEVBQ2pCLGVBQXVCO0lBQ3hELGlFQUFpRTs7UUFSaEQsU0FBSSxHQUFKLElBQUksQ0FBWTtRQUNSLGFBQVEsR0FBUixRQUFRLENBQVE7UUFDVixrQkFBYSxHQUFiLGFBQWEsQ0FBUTtRQUMxQixhQUFRLEdBQVIsUUFBUSxDQUFRO1FBQ3pCLGtCQUFhLEdBQWIsYUFBYSxDQUFl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QUVELGtCQUFrQjtRQUNoQixNQUFNLFVBQVUsR0FDZCxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7WUFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBQ2xDLHNDQUFzQyxDQUFDO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQ2xCLElBQUksQ0FBQyxRQUFRO1lBQ2IsbURBQW1ELFVBQVUsRUFBRSxDQUNoRSxDQUFDO0lBQ0osQ0FBQztJQUVELFlBQVksQ0FBQyxNQUFXO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxrQkFBa0IsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUNuRSxDQUFDOytHQTlyQ1UsV0FBVyw0Q0FhWixPQUFPLGFBQ1AsYUFBYSxhQUNiLFFBQVEsMENBRVIsYUFBYSxhQUNiLFlBQVksYUFDWixlQUFlO21IQW5CZCxXQUFXLGNBRlYsTUFBTTs7NEZBRVAsV0FBVztrQkFIdkIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQWNJLE1BQU07MkJBQUMsT0FBTzs7MEJBQ2QsTUFBTTsyQkFBQyxhQUFhOzswQkFDcEIsTUFBTTsyQkFBQyxRQUFROzswQkFFZixNQUFNOzJCQUFDLGFBQWE7OzBCQUNwQixNQUFNOzJCQUFDLFlBQVk7OzBCQUNuQixNQUFNOzJCQUFDLGVBQWUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBIdHRwQ2xpZW50LCBIdHRwSGVhZGVycyB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgT25EZXN0cm95IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBtYXAsIE9ic2VydmFibGUsIFN1YnNjcmliZXIsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUmV2aWV3IH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9yZXZpZXcubW9kYWwnO1xuaW1wb3J0IHsgRGV2aWNlSW5mbywgVXNlciB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvdXNlci5tb2RhbCc7XG5pbXBvcnQgeyBQaW5Db2RlTG9jYXRpb25JbnRlciB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvUGluY29kZUxvY2F0aW9uSW50ZXIubW9kZWwnO1xuaW1wb3J0IHsgUGluY29kZUxvY2F0aW9uIH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9QaW5jb2RlTG9jYXRpb24ubW9kZWwnO1xuaW1wb3J0IHtcbiAgQVBJX1VSTCxcbiAgQ01JU19VUkwsXG4gIEVDT01NRVJDRV9VUkwsXG4gIFBBU1NCT09LX1VSTCxcbiAgQVBQT0lOVE1FTlRfVVJMLFxufSBmcm9tICcuLi90b2tlbnMvYXBpLXRva2VuJztcbmltcG9ydCB7IENhdGVnb3J5IH0gZnJvbSAnLi4vZWNvbW1lcmNlL3N0eWxlcy9jYXRlZ29yeS5tb2RhbCc7XG5pbXBvcnQgeyBCbG9nQ2F0ZWdvcnkgfSBmcm9tICcuLi9zZWN0aW9ucy9ibG9nLWxpc3QvYmxvZy1jYXRlZ29yeS5tb2RlbCc7XG5pbXBvcnQge1xuICBjaGVja0l0ZW1BbHJlYWR5QWRkZWQsXG4gIEN1c3RvbUZpZWxkRmlsdGVyLFxuICBGaWx0ZXJPcHRpb25zLFxuICBQcm9kdWN0LFxuICBzeW5jSXRlbVRvU2VydmVyREJSZXF1ZXN0LFxufSBmcm9tICcuLi9lY29tbWVyY2Uvc3R5bGVzL3Byb2R1Y3QubW9kYWwnO1xuaW1wb3J0IHsgQ29sbGVjdGlvbiB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvQ29sbGVjdGlvbi5tb2RhbCc7XG5pbXBvcnQgeyBCcmFuZCB9IGZyb20gJy4uL2Vjb21tZXJjZS9zdHlsZXMvQnJhbmQubW9kYWwnO1xuaW1wb3J0IHsgU3RvcmFnZVNlcnZpY2VTZXJ2aWNlIH0gZnJvbSAnLi9zdG9yYWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgQ29va2llU2VydmljZSB9IGZyb20gJ25neC1jb29raWUtc2VydmljZSc7XG5pbXBvcnQgeyBMT0NBTF9TVE9SQUdFIH0gZnJvbSAnLi4vc2VydmljZXMvbG9jYWwtc3RvcmFnZS50b2tlbic7XG5pbXBvcnQgeyBTdG9yYWdlTGlrZSB9IGZyb20gJy4uL3NlcnZpY2VzL3N0b3JhZ2UtbGlrZSc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBSZXN0U2VydmljZSBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gIC8vIHByaXZhdGUgQkFTRV9VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9kZXYtYXBpLnNpbXBvLmFpL1wiO1xuICAvLyBwcml2YXRlIEVDT01NRVJDRV9VUkw6IHN0cmluZyA9IFwiaHR0cHM6Ly9kZXYtZWNvbW1lcmNlLnNpbXBvLmFpL1wiO1xuICAvLyBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vYXBpLWNtaXMudGVqc29mdC5jb20vXCI7IC8vcHJvZHVjdGlvblxuICAvLyBwcml2YXRlIENNSVNfVVJMOiBzdHJpbmcgPSBcImh0dHBzOi8vZGV2LWFwaS5zaW1wby5haS9cIjsgLy9kZXZcbiAgLy8gcHJpdmF0ZSBDTUlTX1VSTDogc3RyaW5nID0gXCJodHRwczovL3N0YWdlYXBpLWNtaXMudGVqc29mdC5jb20vXCI7IC8vc3RhZ2VcbiAgcHJpdmF0ZSBlbnZpcm9ubWVudFR5cGVTdWJzY3JpYmVyOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgYnVzaW5lc3NEZXRhaWxzOiBhbnk7XG4gIHN1YkluZHVzdHJ5TmFtZTogYW55O1xuICBpc0pld2VsbGVyeTogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCxcbiAgICBASW5qZWN0KEFQSV9VUkwpIHByaXZhdGUgQkFTRV9VUkw6IHN0cmluZyxcbiAgICBASW5qZWN0KEVDT01NRVJDRV9VUkwpIHByaXZhdGUgRUNPTU1FUkNFX1VSTDogc3RyaW5nLFxuICAgIEBJbmplY3QoQ01JU19VUkwpIHByaXZhdGUgQ01JU19VUkw6IHN0cmluZyxcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvb2tpZVNlcnZpY2U6IENvb2tpZVNlcnZpY2UsXG4gICAgQEluamVjdChMT0NBTF9TVE9SQUdFKSBwcml2YXRlIHN0b3JhZ2U6IFN0b3JhZ2VMaWtlLFxuICAgIEBJbmplY3QoUEFTU0JPT0tfVVJMKSBwcml2YXRlIFBBU1NCT09LX1VSTDogc3RyaW5nLFxuICAgIEBJbmplY3QoQVBQT0lOVE1FTlRfVVJMKSBwcml2YXRlIEFQUE9JTlRNRU5UX1VSTDogc3RyaW5nXG4gICAgLy8gQEluamVjdChSRUNPTU1FTkRBVElPTl9VUkwpIHByaXZhdGUgUkVDT01NRU5EQVRJT05fVVJMOiBzdHJpbmdcbiAgKSB7IH1cbiAgb3JyYUJhc2VVcmw6IHN0cmluZyA9ICdodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS8nO1xuICAvLyBwYXNzQm9va1VybDogc3RyaW5nID0gXCJodHRwczovL3Byb2QtcGFzc2Jvb2suc2ltcG8uYWkvXCI7XG4gIGdldEJ1c2luZXNzRGV0YWlscygpIHtcbiAgICB0aGlzLmlzSmV3ZWxsZXJ5ID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdpc01hdGVyaWFsQmFzZWRQcmljaW5nJykgPT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmVudmlyb25tZW50VHlwZVN1YnNjcmliZXIpXG4gICAgICB0aGlzLmVudmlyb25tZW50VHlwZVN1YnNjcmliZXI/LnVuc3Vic2NyaWJlKCk7XG4gIH1cblxuICBnZXRGZWF0dXJlZFByb2R1Y3QoY29sbGVjdGlvbklkOiBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsKSB7XG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcbiAgICBsZXQgc3ViSW5kdXN0cnlJZDogc3RyaW5nIHwgbnVsbCA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyk7XG4gICAgaWYgKCFzdWJJbmR1c3RyeUlkKSBzdWJJbmR1c3RyeUlkID0gJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBlY29tbWVyY2UvcHJvZHVjdC9jb2xsZWN0aW9uL2lkP2NvbGxlY3Rpb25JZD0ke2NvbGxlY3Rpb25JZH0maXNKZXdlbGxlcnk9JHt0aGlzLmlzSmV3ZWxsZXJ5fWBcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG4gIGdldENhdGVnb3JpZXNCeUNvbGxlY3Rpb25JZChjb2xsZWN0aW9uSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL2ludmVudG9yeS9jYXRlZ29yeS9jb2xsZWN0aW9uSWQ/Y29sbGVjdGlvbklkPSR7Y29sbGVjdGlvbklkfWBcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChjYXRlZ29yeTogYW55KSA9PiBuZXcgQ2F0ZWdvcnkoY2F0ZWdvcnkpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG4gIC8vIGh0dHBzOi8vbmV3ZGV2LWFwaS5zaW1wby5haS9cbiAgZ2V0QWxsQ2F0ZWdvcmllc0J5QnVzaW5lc3NJZChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS9nZXQvY2F0ZWdvcnlgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgLy8gR0VUIGJsb2cvZ2V0QWxsL2NhdGVnb3JpZXMve2J1c2luZXNzSWR9IOKAlCBiYWNrZW5kIHRocm93cyBcIk5vIENhdGVnb3JpZXMgRm91bmRcIiB3aGVuIGVtcHR5O1xuICAvLyBjYWxsZXJzIHNob3VsZCB0cmVhdCB0aGF0IGFzIGFuIGVtcHR5IGxpc3QsIG5vdCBhbiBlcnJvciBzdGF0ZS5cbiAgZ2V0QmxvZ0NhdGVnb3JpZXMoYnVzaW5lc3NJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldCh0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2Jsb2cvZ2V0QWxsL2NhdGVnb3JpZXMvJHtidXNpbmVzc0lkfWApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKFxuICAgICAgICAgIChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgICAgcmVzcG9uc2UuZGF0YT8ubWFwKChjYXRlZ29yeTogYW55KSA9PiBuZXcgQmxvZ0NhdGVnb3J5KGNhdGVnb3J5KSkgPz9cbiAgICAgICAgICAgIFtdXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cbiAgLy8gR0VUIGJsb2cve2J1c2luZXNzSWR9L2Jsb2ctbGlzdD9idXNpbmVzc0lkPXtidXNpbmVzc0lkfSZjYXRlZ29yeUlkPXtjYXRlZ29yeUlkfVxuICAvLyBOb3RlOiB0aGUgcGF0aCB7YnVzaW5lc3NJZH0gc2VnbWVudCBpcyB1bnVzZWQgc2VydmVyLXNpZGUgcGVyIHRoZSBBUEkgZG9jLCBidXQgbXVzdCBzdGlsbCBiZVxuICAvLyBwb3B1bGF0ZWQgaWRlbnRpY2FsbHkgdG8gdGhlIHF1ZXJ5IHBhcmFtIOKAlCB0aGlzIGlzIHRoZSBkb2N1bWVudGVkIFVSTCBzaGFwZSwgbm90IGEgdHlwby5cbiAgZ2V0QmxvZ3NCeUNhdGVnb3J5KGJ1c2luZXNzSWQ6IHN0cmluZywgY2F0ZWdvcnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBidXNpbmVzcy9ibG9nLyR7YnVzaW5lc3NJZH0vYmxvZy1saXN0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZjYXRlZ29yeUlkPSR7Y2F0ZWdvcnlJZH1gXG4gICAgKTtcbiAgfVxuICAvLyBHRVQgYnVzaW5lc3MvYmxvZy9wb3B1bGFyP2J1c2luZXNzSWQ9JnNpemU9JmNhdGVnb3J5SWQ9JmNhdGVnb3J5TmFtZT1cbiAgLy8gUmV0dXJucyB7IGRhdGE6IEJsb2dbXSB9IOKAlCBhbiBlbXB0eSBhcnJheSBpcyBhIHZhbGlkIFwibm8gcG9wdWxhciBwb3N0cyB5ZXRcIiByZXN1bHQsIG5vdCBhbiBlcnJvci5cbiAgZ2V0UG9wdWxhckJsb2dzKFxuICAgIGJ1c2luZXNzSWQ6IHN0cmluZyxcbiAgICBzaXplPzogbnVtYmVyLFxuICAgIGNhdGVnb3J5SWQ/OiBzdHJpbmcsXG4gICAgY2F0ZWdvcnlOYW1lPzogc3RyaW5nXG4gICkge1xuICAgIGxldCB1cmwgPSB0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL2Jsb2cvcG9wdWxhcj9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gO1xuICAgIGlmIChzaXplKSB1cmwgKz0gYCZzaXplPSR7c2l6ZX1gO1xuICAgIGlmIChjYXRlZ29yeUlkKSB1cmwgKz0gYCZjYXRlZ29yeUlkPSR7Y2F0ZWdvcnlJZH1gO1xuICAgIGVsc2UgaWYgKGNhdGVnb3J5TmFtZSkgdXJsICs9IGAmY2F0ZWdvcnlOYW1lPSR7Y2F0ZWdvcnlOYW1lfWA7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodXJsKTtcbiAgfVxuICAvLyBQVVQgYnVzaW5lc3MvYmxvZy91cGRhdGUve2Jsb2dJZH0g4oCUIGluY3JlbWVudHMgdG90YWxWaXNpdHMgYnkgMS4gTm8gcmVxdWVzdCBib2R5LCBubyBxdWVyeSBwYXJhbXMuXG4gIC8vIE5PVCB0aGUgc2FtZSBhcyB0aGUgZnVsbC1ibG9nLWVkaXQgUFVUIGJ1c2luZXNzL2Jsb2cvdXBkYXRlIChubyB7YmxvZ0lkfSBpbiB0aGF0IHBhdGgpIOKAlCBuZXZlciBjb25mdXNlIHRoZSB0d28uXG4gIGluY3JlbWVudEJsb2dWaXNpdChibG9nSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgYnVzaW5lc3MvYmxvZy8ke2Jsb2dJZH0vdmlzaXQtY291bnRgLCBudWxsKTtcbiAgfVxuICBnZXRQYXNzYm9va09yZGVyU3RhdHVzKG9yZGVySWQ6IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYHBhc3Nib29rL21hbnVhbC9wYXltZW50L3N0YXR1cz9wYXltZW50T3JkZXJJZD0ke29yZGVySWR9YCxcbiAgICAgIHt9LFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIGdldFByb2R1Y3RCeVNlbGVjdGVkQ2F0ZWdvcnkoY2F0ZWdvcnlJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvcHJvZHVjdC8ke2NhdGVnb3J5SWR9YCk7XG4gIH1cbiAgZ2V0QWxsU2NoZW1lcyh1c2VySWQ/OiBhbnksIHN0b3JlSWQ/OiBhbnkpOiBhbnkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYGV4dC9jb25uZWN0L3NpbXBvL3VzZXI/dXNlcklkPSR7dXNlcklkfSZzdG9yZUlkPSR7c3RvcmVJZH1gXG4gICAgKTtcbiAgfVxuICBnZXRBbGxSZWRlbXB0aW9uU2NoZW1lcygpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMub3JyYUJhc2VVcmwgKyBgcGFzc0Jvb2svcmVkZW1wdGlvbi9hbW91bnQvY2hlY2s/dXNlckNvZGU9Q18wMDAzMTM4ODVgXG4gICAgKTtcbiAgfVxuICBnZXRBbGxQcm9kdWN0cyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgZ2V0UHJvZHVjdERldGFpbHMocHJvZHVjdElkOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBpdGVtSWQ6IHByb2R1Y3RJZCxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwZXJJZCcpID8/IG51bGwsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgICBwYXlsb2FkXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PlxuICAgICAgICAgIHJlc3BvbnNlLmRhdGEuZGF0YS5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBnZXRQcm9kdWN0RGV0YWlsc1YyKHNsdWdOYW1lOiBzdHJpbmcgfCBudWxsID0gbnVsbCkge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEsXG4gICAgICBzbHVnaWZpZWROYW1lOiBzbHVnTmFtZSxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBidXNpbmVzc0lkOlxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcbiAgICAgIHVzZXJJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3BlcklkJykgPz8gbnVsbCxcbiAgICAgIHJlcXVlc3Q6ICdVU0VSJyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgZWNvbW1lcmNlL3Byb2R1Y3QvaXRlbVYyL3NlYXJjaD9pc0pld2VsbGVyeT0ke3RoaXMuaXNKZXdlbGxlcnl9YCxcbiAgICAgICAgcGF5bG9hZFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmRhdGEubWFwKChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZ2V0Q29sbGVjdGlvbkJ5SWRzKGNvbGxlY3Rpb25JZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcGF5bG9hZCA9IHtcbiAgICAgIGlkczogY29sbGVjdGlvbklkcyxcbiAgICB9O1xuICAgIHJldHVybiB0aGlzLmh0dHBcbiAgICAgIC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvaW52ZW50b3J5L2NvbGxlY3Rpb24vbGlzdC9hbGxgLCBwYXlsb2FkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKGNvbGxlY3Rpb246IGFueSkgPT4gbmV3IENvbGxlY3Rpb24oY29sbGVjdGlvbikpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBnZXRBbGxDYXRlZ29yaWVzKCkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICBjb25zdCBzdWJJbmR1c3RyeUlkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSA/P1xuICAgICAgbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSA/P1xuICAgICAgJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLmdldChcbiAgICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICAgIGBlY29tbWVyY2UvaW52ZW50b3J5L2ZlYXR1cmVkP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzdWJJZD0ke3N1YkluZHVzdHJ5SWR9YFxuICAgICAgKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKGNhdGVnb3J5OiBhbnkpID0+IG5ldyBDYXRlZ29yeShjYXRlZ29yeSkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cbiAgZ2V0QWxsQ29sbGVjdGlvbnMoKSB7XG4gICAgY29uc3QgcGF5bG9hZDogYW55ID0ge1xuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEwMCxcbiAgICAgIHJlcXVlc3Q6ICdVU0VSJyxcbiAgICAgIGJ1c2luZXNzSWQ6XG4gICAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxuICAgIH07XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnB1dCh0aGlzLkJBU0VfVVJMICsgJ2Vjb21tZXJjZS9pbnZlbnRvcnkvZ2V0L2NvbGxlY3Rpb24nLCBwYXlsb2FkKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhLmRhdGE/Lm1hcChcbiAgICAgICAgICAgIChjb2xsZWN0aW9uOiBhbnkpID0+IG5ldyBDb2xsZWN0aW9uKGNvbGxlY3Rpb24pXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICApO1xuICB9XG5cbiAgZ2V0QWxsQnJhbmRzKCkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAuZ2V0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2ludmVudG9yeS8ke2J1c2luZXNzSWR9L2JyYW5kYClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+XG4gICAgICAgICAgKHJlc3BvbnNlLmRhdGEgPz8gcmVzcG9uc2UpPy5tYXAoKGJyYW5kOiBhbnkpID0+IG5ldyBCcmFuZChicmFuZCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICAvLyBQVVQgcHJvZHVjdC9jdXN0b20tZmllbGQvcXVlcnktb3B0aW9ucy4gUmV0dXJucyBzb3J0cyArIGZpbHRlciBncm91cHMgZm9yIHRoZSBzaWRlYmFyLlxuICAvLyBJZHMgYW5kIHNsdWdzIGFyZSBhcnJheXMgaW4gdGhlIEpTT04gYm9keSBhbmQgYXJlIGNvbWJpbmVkOiBhIHByb2R1Y3QgaW4gYW55IGxpc3RlZCBjYXRlZ29yeVxuICAvLyBtYXRjaGVzLCBhbmQgaW4gYW55IGxpc3RlZCBjb2xsZWN0aW9uLiBXaGVuIGJvdGggbGlzdHMgYXJlIHNlbnQgYSBwcm9kdWN0IG11c3QgbWF0Y2ggb25lIG9mIGVhY2guXG4gIC8vIEFuIHVuc2VlZGVkIGJ1c2luZXNzIHJldHVybnMgZm91ciBzb3J0cyBhbmQgYGdyb3VwczogW11gOyBjYWxsZXJzIGtlZXAgdGhlIGxlZ2FjeSBzaWRlYmFyIHRoZW4uXG4gIGdldEZpbHRlck9wdGlvbnMoc2NvcGU6IHtcbiAgICBjYXRlZ29yeUlkcz86IHN0cmluZ1tdO1xuICAgIGNvbGxlY3Rpb25JZHM/OiBzdHJpbmdbXTtcbiAgICBjYXRlZ29yeVNsdWdOYW1lcz86IHN0cmluZ1tdO1xuICAgIGNvbGxlY3Rpb25TbHVnTmFtZXM/OiBzdHJpbmdbXTtcbiAgfSA9IHt9KSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZDogc3RyaW5nID1cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnO1xuICAgIGNvbnN0IGJvZHkgPSB7XG4gICAgICBidXNpbmVzc0lkLFxuICAgICAgY2F0ZWdvcnlJZHM6IHNjb3BlLmNhdGVnb3J5SWRzID8/IFtdLFxuICAgICAgY29sbGVjdGlvbklkczogc2NvcGUuY29sbGVjdGlvbklkcyA/PyBbXSxcbiAgICAgIGNhdGVnb3J5U2x1Z05hbWVzOiBzY29wZS5jYXRlZ29yeVNsdWdOYW1lcyA/PyBbXSxcbiAgICAgIGNvbGxlY3Rpb25TbHVnTmFtZXM6IHNjb3BlLmNvbGxlY3Rpb25TbHVnTmFtZXMgPz8gW10sXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KHRoaXMuQkFTRV9VUkwgKyAnZWNvbW1lcmNlL3Byb2R1Y3QvY3VzdG9tLWZpZWxkL3F1ZXJ5LW9wdGlvbnMnLCBib2R5KVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSk6IEZpbHRlck9wdGlvbnMgPT4ge1xuICAgICAgICAgIC8vIFdyYXBwZWQgYXMgeyBkYXRhOiB7Li4ufSB9OyB0b2xlcmF0ZSBhbiB1bndyYXBwZWQgYm9keSB0b28uXG4gICAgICAgICAgY29uc3QgYm9keSA9IHJlc3BvbnNlPy5kYXRhID8/IHJlc3BvbnNlID8/IHt9O1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3J0czogYm9keS5zb3J0cyA/PyBbXSxcbiAgICAgICAgICAgIGdyb3VwczogYm9keS5ncm91cHMgPz8gW10sXG4gICAgICAgICAgICBmaWx0ZXJzOiBib2R5LmZpbHRlcnMgPz8gW10sXG4gICAgICAgICAgfTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gIH1cblxuICBnZXRGaWx0ZXJlZFByb2R1Y3QoXG4gICAgY29sbGVjdGlvbklkczogc3RyaW5nW10sXG4gICAgY2F0ZWdvcnlJZHM6IHN0cmluZ1tdLFxuICAgIHNlYXJjaFRleHQ6IHN0cmluZyxcbiAgICBtaW5QcmljZTogbnVtYmVyLFxuICAgIG1heFByaWNlOiBudW1iZXIsXG4gICAgbWluUmF0aW5nOiBudW1iZXIsXG4gICAgbWF4UmF0aW5nOiBudW1iZXIsXG4gICAgc29ydEJ5OiBzdHJpbmcsXG4gICAgcGFnZU5vOiBudW1iZXIsXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIGJyYW5kSWRzOiBzdHJpbmdbXSA9IFtdLFxuICAgIGV4dHJhOiB7XG4gICAgICBjdXN0b21GaWVsZEZpbHRlcnM/OiBDdXN0b21GaWVsZEZpbHRlcltdO1xuICAgICAgc29ydERpcmVjdGlvbj86ICdhc2MnIHwgJ2Rlc2MnO1xuICAgICAgY2F0ZWdvcnlTbHVnTmFtZT86IHN0cmluZ1tdO1xuICAgICAgY29sbGVjdGlvblNsdWdOYW1lPzogc3RyaW5nW107XG4gICAgfSA9IHt9XG4gICkge1xuICAgIHRoaXMuZ2V0QnVzaW5lc3NEZXRhaWxzKCk7XG4gICAgbGV0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIGJ1c2luZXNzSWQ6XG4gICAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxuICAgICAgc3ViSW5kdXN0cnlJZDogdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ3N1YkluZHVzdHJ5SWQnKSxcbiAgICAgIGNvbGxlY3Rpb25JZDogY29sbGVjdGlvbklkcyxcbiAgICAgIGNhdGVnb3J5SWQ6IGNhdGVnb3J5SWRzLFxuICAgICAgYnJhbmRJZDogYnJhbmRJZHMsXG4gICAgICBzZWFyY2hUZXh0OiBzZWFyY2hUZXh0LFxuICAgICAgc29ydEJ5OiBzb3J0QnksXG4gICAgICBwYWdlTm86IHBhZ2VObyxcbiAgICAgIHBhZ2VTaXplOiBzaXplLFxuICAgICAgdXNlcklkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgncGVySWQnKSA/PyBudWxsLFxuICAgICAgcmVxdWVzdDogJ1VTRVInLFxuICAgIH07XG4gICAgaWYgKG1pblByaWNlID4gMCkgcGF5bG9hZFsnbWluUHJpY2UnXSA9IG1pblByaWNlO1xuICAgIGlmIChtYXhQcmljZSA+IDApIHBheWxvYWRbJ21heFByaWNlJ10gPSBtYXhQcmljZTtcbiAgICBpZiAobWluUmF0aW5nID4gMCkgcGF5bG9hZFsnbWluUmF0aW5nJ10gPSBtaW5SYXRpbmc7XG4gICAgaWYgKG1heFJhdGluZyA+IDApIHBheWxvYWRbJ21heFJhdGluZyddID0gbWF4UmF0aW5nO1xuICAgIC8vIFNlbnQgb24gamV3ZWxsZXJ5IGxpc3RpbmdzIHRvbzogdGhlIGJhY2tlbmQgYXBwbGllcyB0aGVtIHRoZXJlIGFzIHdlbGwuXG4gICAgaWYgKGV4dHJhLmN1c3RvbUZpZWxkRmlsdGVycz8ubGVuZ3RoKVxuICAgICAgcGF5bG9hZFsnY3VzdG9tRmllbGRGaWx0ZXJzJ10gPSBleHRyYS5jdXN0b21GaWVsZEZpbHRlcnM7XG4gICAgaWYgKGV4dHJhLnNvcnREaXJlY3Rpb24pIHBheWxvYWRbJ3NvcnREaXJlY3Rpb24nXSA9IGV4dHJhLnNvcnREaXJlY3Rpb247XG4gICAgLy8gU2x1Z3MgYXJlIGNvbWJpbmVkIChPUikgd2l0aCB0aGUgaWQgYXJyYXlzIGFuZCBhcmUgYWNjZXB0ZWQgb24gamV3ZWxsZXJ5IHNlYXJjaCBhcyB3ZWxsLlxuICAgIGlmIChleHRyYS5jYXRlZ29yeVNsdWdOYW1lPy5sZW5ndGgpIHBheWxvYWRbJ2NhdGVnb3J5U2x1Z05hbWUnXSA9IGV4dHJhLmNhdGVnb3J5U2x1Z05hbWU7XG4gICAgaWYgKGV4dHJhLmNvbGxlY3Rpb25TbHVnTmFtZT8ubGVuZ3RoKSBwYXlsb2FkWydjb2xsZWN0aW9uU2x1Z05hbWUnXSA9IGV4dHJhLmNvbGxlY3Rpb25TbHVnTmFtZTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW1WMi9zZWFyY2g/aXNKZXdlbGxlcnk9JHt0aGlzLmlzSmV3ZWxsZXJ5fWAsXG4gICAgICAgIHBheWxvYWRcbiAgICAgIClcbiAgICAgIC5waXBlKFxuICAgICAgICBtYXAoKHJlc3BvbnNlOiBhbnkpID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY291bnQ6IHJlc3BvbnNlLmRhdGEuY291bnQsXG4gICAgICAgICAgICBtaW5QcmljZTogcmVzcG9uc2UuZGF0YS5taW5QcmljZSxcbiAgICAgICAgICAgIG1heFByaWNlOiByZXNwb25zZS5kYXRhLm1heFByaWNlLFxuICAgICAgICAgICAgZGF0YTogcmVzcG9uc2UuZGF0YS5kYXRhPy5tYXAoXG4gICAgICAgICAgICAgIChwcm9kdWN0OiBhbnkpID0+IG5ldyBQcm9kdWN0KHByb2R1Y3QpXG4gICAgICAgICAgICApLFxuICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICApO1xuICB9XG4gIGdldFByb2R1Y3RCeUNhdGVnb3J5SWQoY2F0ZWdvcnlJZDogc3RyaW5nKSB7XG4gICAgdGhpcy5nZXRCdXNpbmVzc0RldGFpbHMoKTtcbiAgICBjb25zdCBwYXlsb2FkOiBhbnkgPSB7XG4gICAgICBidXNpbmVzc0lkOlxuICAgICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSxcbiAgICAgIGNhdGVnb3J5SWQ6IFtjYXRlZ29yeUlkXSxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBwYWdlTm86IDAsXG4gICAgICBwYWdlU2l6ZTogMTAsXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwZXJJZCcpID8/IG51bGwsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgICBwYXlsb2FkXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdW50OiByZXNwb25zZS5jb3VudCxcbiAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGEuZGF0YT8ubWFwKFxuICAgICAgICAgICAgICAocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuICBnZXRQcm9kdWN0QnlDb2xsZWN0aW9uSWQoY29sbGVjdGlvbklkOiBzdHJpbmcpIHtcbiAgICB0aGlzLmdldEJ1c2luZXNzRGV0YWlscygpO1xuICAgIGNvbnN0IHBheWxvYWQ6IGFueSA9IHtcbiAgICAgIGJ1c2luZXNzSWQ6XG4gICAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiSWQnKSA/PyB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpLFxuICAgICAgY29sbGVjdGlvbklkOiBbY29sbGVjdGlvbklkXSxcbiAgICAgIHN1YkluZHVzdHJ5SWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdzdWJJbmR1c3RyeUlkJyksXG4gICAgICBwYWdlTm86IDAsXG4gICAgICBwYWdlU2l6ZTogMTAsXG4gICAgICB1c2VySWQ6IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdwZXJJZCcpID8/IG51bGwsXG4gICAgICByZXF1ZXN0OiAnVVNFUicsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwXG4gICAgICAucHV0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGVjb21tZXJjZS9wcm9kdWN0L2l0ZW0vc2VhcmNoP2lzSmV3ZWxsZXJ5PSR7dGhpcy5pc0pld2VsbGVyeX1gLFxuICAgICAgICBwYXlsb2FkXG4gICAgICApXG4gICAgICAucGlwZShcbiAgICAgICAgbWFwKChyZXNwb25zZTogYW55KSA9PiB7XG4gICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGNvdW50OiByZXNwb25zZS5jb3VudCxcbiAgICAgICAgICAgIGRhdGE6IHJlc3BvbnNlLmRhdGEuZGF0YT8ubWFwKFxuICAgICAgICAgICAgICAocHJvZHVjdDogYW55KSA9PiBuZXcgUHJvZHVjdChwcm9kdWN0KVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgfVxuXG4gIGFkZFJldmlldyhwYXlsb2FkOiBSZXZpZXcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9hZGQvcmV2aWV3YCwgcGF5bG9hZCk7XG4gIH1cbiAgZ2V0QWxsUmV2aWV3cyhwcm9kdWN0SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9YCxcbiAgICAgIG51bGxcbiAgICApO1xuICB9XG5cbiAgZ2VuZXJhdGVPVFAobW9iaWxlOiBzdHJpbmcsIGNvdW50cnlDb2RlOiBzdHJpbmcpIHtcbiAgICBjb25zdCBidXNpbmVzc0lkOiBzdHJpbmcgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2JJZCcpID8/IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz8gJyc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL3VzZXIvb3RwL3RyaWdnZXI/bW9iaWxlPSR7bW9iaWxlfSZjb3VudHJ5Q29kZT0ke2NvdW50cnlDb2RlfSZidXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgdmVyaWZ5T1RQKG1vYmlsZTogc3RyaW5nLCBvdHA6IHN0cmluZywgZGV2aWNlSW5mbzogRGV2aWNlSW5mbykge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZT9tb2JpbGU9JHttb2JpbGV9Jm90cD0ke290cH0mYnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9YCxcbiAgICAgIGRldmljZUluZm9cbiAgICApO1xuICB9XG4gIHJlc2VuZE9UUChtb2JpbGU6IHN0cmluZywgY291bnRyeUNvZGU6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvdXNlci9yZXNlbmQ/bW9iaWxlPSR7bW9iaWxlfSZjb3VudHJ5Q29kZT0ke2NvdW50cnlDb2RlfSZidXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgYXBwbGljYWJsZURpc2NvdW50TGlzdChjYXJ0SWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL29yZGVyL2Rpc2NvdW50LWNvdXBvbi8ke2NhcnRJZH0vYXBwbGljYWJpbGl0eS9saXN0YFxuICAgICk7XG4gIH1cblxuICBhZGRJdGVtVG9EQih1c2VyQ2FydDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL2NhcnRgLCB1c2VyQ2FydCk7XG4gIH1cbiAgZ2V0VXNlckl0ZW1zKHVzZXJJZDogc3RyaW5nLCBjYXJ0VHlwZTogJ0NBUlQnIHwgJ1dJU0hMSVNUJyB8ICdUUklBTF9DQVJUJykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL29yZGVyL2NhcnQ/dXNlcklkPSR7dXNlcklkfSZjYXJ0VHlwZT0ke2NhcnRUeXBlfWBcbiAgICApO1xuICB9XG4gIGdldFVzZXJJbmZvKHVzZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2dldC91c2VyP3VzZXJJZD0ke3VzZXJJZH1gLFxuICAgICAgbnVsbFxuICAgICk7XG4gIH1cbiAgYWRkVXNlckFkZHJlc3ModXNlcjogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci91cGRhdGUvdXNlcmAsIHVzZXIpO1xuICB9XG4gIHVwZGF0ZVByb2ZpbGUocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci91cGRhdGUvdXNlcmAsIHBheWxvYWQpO1xuICB9XG4gIGdldFVzZXJPcmRlcnMocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvdXNlci9vcmRlcmAsIHBheWxvYWQpO1xuICB9XG4gIGdldFVzZXJXaXNobGlzdCh1c2VySWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydD91c2VySWQ9JHt1c2VySWR9JmNhcnRUeXBlPVdJU0hMSVNUYFxuICAgICk7XG4gIH1cbiAgbW92ZUl0ZW1Ub0NhcnQodXNlcklkOiBzdHJpbmcsIHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvdXBkYXRlL2NhcnQ/dXNlcklkPSR7dXNlcklkfWAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIC8vIFBheW1lbnRcbiAgY3JlYXRlUGF5bWVudFRva2VuKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdCh0aGlzLkVDT01NRVJDRV9VUkwgKyBgcGF5bWVudC9vcmRlcmAsIHBheWxvYWQpO1xuICB9XG4gIGNoZWNrUGF5bWVudFN0YXR1cyhwYXlsb2FkOiBhbnkpIHtcbiAgICBsZXQgaXNKZXdlbGxlcnkgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2lzTWF0ZXJpYWxCYXNlZFByaWNpbmcnKSA9PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XG4gICAgbGV0IHBheWxvYWRXaXRoSmV3ZWxsZXJ5ID0geyAuLi5wYXlsb2FkLCBpc0pld2VsbGVyeTogaXNKZXdlbGxlcnkgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkVDT01NRVJDRV9VUkwgKyBgcGF5bWVudC9zdGF0dXNgLFxuICAgICAgcGF5bG9hZFdpdGhKZXdlbGxlcnlcbiAgICApO1xuICB9XG4gIGdldFJlY2VudFZpZXdQcm9kdWN0KHVzZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9yZWNlbnRWaWV3P3VzZXJJZD0ke3VzZXJJZH1gLCBudWxsKVxuICAgICAgLnBpcGUoXG4gICAgICAgIG1hcCgocmVzcG9uc2U6IGFueSkgPT5cbiAgICAgICAgICByZXNwb25zZS5kYXRhPy5tYXAoKHByb2R1Y3Q6IGFueSkgPT4gbmV3IFByb2R1Y3QocHJvZHVjdCkpXG4gICAgICAgIClcbiAgICAgICk7XG4gIH1cblxuICBzZW5kU2lnbnVwT1RQKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvc2lnbnVwL290cC90cmlnZ2VyYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgdmVyaWZ5U2lnbnVwT1RQKHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQ6IHN0cmluZyA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz8gdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/PyAnJztcbiAgICAvLyBwYXlsb2FkW1wiYnVzaW5lc3NJZFwiXSA9IGJ1c2luZXNzSWQ7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZS9zaWdudXBgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBzaWduaW5QYXNzd29yZChwYXNzRGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGhlbnRpY2F0ZS9sb2dpbmAsXG4gICAgICBwYXNzRGF0YVxuICAgICk7XG4gIH1cblxuICBlbmRVc2VyUmVmZmVyYWxEZXRhaWxzKHVzZXJJZDogYW55LCByZWZlcnJhbFVuaXF1ZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvYXBpL2VuZC11c2VyL3JlZmVycmFsRGV0YWlscz91c2VySWQ9JHt1c2VySWR9JnJlZmVycmFsVW5pcXVlSWQ9JHtyZWZlcnJhbFVuaXF1ZUlkfWAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cblxuICBjcmVhdGVBcHBvaW50bWVudChkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBjcm0vYXBwb2ludG1lbnQvYWRkYCwgZGF0YSk7XG4gIH1cblxuICBnZXRBbGxMb2NhdGlvbihidXNpbmVzc0lkOiBhbnksIHNpemU6IG51bWJlciwgcGFnZTogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL2xvY2F0aW9uP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZzaXplPSR7c2l6ZX0mcGFnZT0ke3BhZ2V9YFxuICAgICk7XG4gIH1cblxuICBnZXRBbGxUaW1lU2xvdHMobG9jYXRpb25JZDogYW55LCBkYXRlOiBEYXRlKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBjcm0vYXBwb2ludG1lbnQvY29uZmlnL3RpbWVzbG90cz9sb2NhdGlvbklkPSR7bG9jYXRpb25JZH0mZGF0ZT0ke2RhdGV9YFxuICAgICk7XG4gIH1cblxuICBnZXRBbGxTZXJ2aWNlKGJ1c2luZXNzSWQ6IGFueSwgc2l6ZTogYW55LCBwYWdlOiBhbnksIGxvY2F0aW9uSWQ/OiBhbnkpIHtcbiAgICBpZiAoIWxvY2F0aW9uSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvc2VydmljZT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfWBcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvc2VydmljZT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH1gXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIGdldEFsbFN0YWZmQnlMb2NhdGlvbihcbiAgICBidXNpbmVzc0lkOiBhbnksXG4gICAgc2l6ZTogbnVtYmVyLFxuICAgIHBhZ2U6IG51bWJlcixcbiAgICBsb2NhdGlvbklkOiBzdHJpbmcsXG4gICAgc2VydmljZUlkOiBzdHJpbmdcbiAgKSB7XG4gICAgaWYgKCFzZXJ2aWNlSWQpIHtcbiAgICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgICAgYGNybS9hcHBvaW50bWVudC9jb25maWcvc3RhZmY/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnNpemU9JHtzaXplfSZwYWdlPSR7cGFnZX0mbG9jYXRpb25JZD0ke2xvY2F0aW9uSWR9YFxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgICBgY3JtL2FwcG9pbnRtZW50L2NvbmZpZy9zdGFmZj9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mc2l6ZT0ke3NpemV9JnBhZ2U9JHtwYWdlfSZsb2NhdGlvbklkPSR7bG9jYXRpb25JZH0mc2VydmljZUlkPSR7c2VydmljZUlkfWBcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgZ2V0QXZhaWxhYmxlU2xvdHMoZGF0YTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGNybS9hcHBvaW50bWVudC9jb25maWcvYXZhaWxhYmxlL3RpbWVzbG90c2AsXG4gICAgICBkYXRhXG4gICAgKTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkTGlzdEZpZWxkcyhiSWQ6IGFueSwgc2hvd0luRXJwOiBhbnksIGZvcm1OYW1lOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQ01JU19VUkwgK1xuICAgICAgYGNybS9maWVsZHM/YnVzaW5lc3NJZD0ke2JJZH0mc3RhdHVzPXRydWUmc2hvd0luRm9ybT0ke3Nob3dJbkVycH0maXNQYWdpbmF0aW9uPWZhbHNlJmZpZWxkQ2F0ZWdvcnk9JHtmb3JtTmFtZX1gXG4gICAgKTtcbiAgfVxuXG4gIGdldEFjdGl2ZVN1YnNjcmlwdGlvbkZvckZlZVN0cnVjdHVyZShidXNpbmVzc0lkOiBhbnksIGdyYWRlSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5DTUlTX1VSTCArXG4gICAgICBgY3JtL3N1YnNjcmlwdGlvbi9wbGFuL2xpc3Q/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JmdyYWRlSWQ9JHtncmFkZUlkfSZzdGF0dXM9dHJ1ZSZpc0RlbGV0ZWQ9ZmFsc2VgXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZUFkbWlzc2lvbihwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLkNNSVNfVVJMICtcbiAgICAgIGBjcm0vcmVnaXN0cmF0aW9uL2FkbWlzc2lvbj9yZWdpc3RyYXRpb25JZD0ke3BheWxvYWQ/LnJlZ2lzdHJhdGlvbklkIHx8ICcnfWAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVBheW1lbnRMaW5rKGRhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9hZG1pc3Npb24vdjIvcGF5bWVudD9pc0Zyb21XZWI9dHJ1ZWAsXG4gICAgICBkYXRhXG4gICAgKTtcbiAgfVxuXG4gIGNyZWF0ZVJlZ2lzdHJhdGlvbkZvclBheW1lbnQocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5DTUlTX1VSTCArIGBjcm0vcmVnaXN0cmF0aW9uL3JlZ2lzdHJhdGlvbi9wYXltZW50YCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgZ2V0U3Vic2NyaXB0aW9uRm9yRmVlU3RydWN0dXJlKGdyYWRlSWQ6IGFueSkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkNNSVNfVVJMICtcbiAgICAgIGBjcm0vc3Vic2NyaXB0aW9uL3BsYW4vbGlzdD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mZ3JhZGVJZD0ke2dyYWRlSWR9YFxuICAgICk7XG4gIH1cblxuICBnZXRGZWVTdHJ1Y3R1cmUocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQodGhpcy5DTUlTX1VSTCArIGBjcm0vZmVlL3N0cnVjdHVyZWAsIHBheWxvYWQpO1xuICB9XG5cbiAgbmV3RmVlU3RydWN0dXJlR2V0TGlzdChkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkNNSVNfVVJMICsgYGNybS9mZWUvc3RydWN0dXJlL3YyL2ZpbHRlcmAsIGRhdGEpO1xuICB9XG5cbiAgZ2V0QWxsRG9jdW1lbnQocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkNNSVNfVVJMICsgYGNybS9tYXN0ZXIvZG9jdW1lbnRUeXBlL2ZpbHRlcmAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGdldExlYWRCeUlkKGxlYWRJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5DTUlTX1VSTCArIGBjcm0vbGVhZHMvZ2V0LW9uZT9sZWFkSWQ9JHtsZWFkSWR9YCk7XG4gIH1cblxuICBnZXRSZWdpc3RyYXRpb25MaXN0KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQ01JU19VUkwgKyBgY3JtL3JlZ2lzdHJhdGlvbi9nZXRBbGxgLCBwYXlsb2FkKTtcbiAgfVxuXG4gIGdldEFsbENvbXBvbmVudENhdGVnb3JpZXMoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBhZG1pbi9tYXN0ZXIvdGVtcGxhdGUvY2F0ZWdvcnkvYWxsYCk7XG4gIH1cblxuICBwcml2YXRlIHNhZmVQYXJzZTxUPihyYXc6IHN0cmluZyB8IG51bGwpOiBUIHwgbnVsbCB7XG4gICAgaWYgKCFyYXcpIHJldHVybiBudWxsO1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gSlNPTi5wYXJzZShyYXcpIGFzIFQ7XG4gICAgfSBjYXRjaCB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gIH1cblxuICBnZXRUZW1wbGF0ZSgpIHtcbiAgICBjb25zdCBiRGV0YWlsc1JhdyA9IHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdiRGV0YWlscycpO1xuICAgIGNvbnN0IGRldGFpbHMgPSB0aGlzLnNhZmVQYXJzZTx7IHRlbXBsYXRlSWQ/OiBzdHJpbmcgfT4oYkRldGFpbHNSYXcpO1xuXG4gICAgLy8gZmFsbGJhY2sgc291cmNlXG4gICAgY29uc3Qgd2Vic2l0ZURhdGFSYXcgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnd2Vic2l0ZURhdGEnKTtcbiAgICBjb25zdCB3ZWJzaXRlRGF0YSA9IHRoaXMuc2FmZVBhcnNlPHsgaG9tZVBhZ2VJZD86IHN0cmluZyB9Pih3ZWJzaXRlRGF0YVJhdyk7XG5cbiAgICAvLyBwcmVmZXIgdGVtcGxhdGVJZCBmcm9tIGJEZXRhaWxzOyBlbHNlIGZhbGxiYWNrIHRvIHdlYnNpdGVEYXRhLmhvbWVQYWdlSWRcbiAgICBjb25zdCB0ZW1wbGF0ZUlkID0gKFxuICAgICAgZGV0YWlscz8udGVtcGxhdGVJZCA/P1xuICAgICAgd2Vic2l0ZURhdGE/LmhvbWVQYWdlSWQgPz9cbiAgICAgICcnXG4gICAgKS50b1N0cmluZygpO1xuXG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGJ1c2luZXNzL3YzL3dlYnNpdGUvJHt0ZW1wbGF0ZUlkfS9wYWdlcy9saXN0YFxuICAgICk7XG4gIH1cblxuICBnZXRFY29tbWVyY2VDb25maWdzKCkge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPVxuICAgICAgdGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKSA/P1xuICAgICAgJzFmMTA2NTFmLTkyNTgtNmI2My05ZDIzLWEzZDY5MWFjZWI4OCc7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9lY29tbWVyY2UvY29uZmlnL2FsbD9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH1gXG4gICAgKTtcbiAgfVxuXG4gIHBvc3RWaWRlb0NhbGxEZXRhaWxzKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL2Vjb21tZXJjZS9jb25maWcvdmlkZW8tY2FsbGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0b3JlTG9jYXRvckRldGFpbHMocGluY29kZTogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2Uvc3RvcmUvbmVhcmJ5P3BpbmNvZGU9JHtwaW5jb2RlfSZidXNpbmVzc0lkPSR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX1gXG4gICAgKTtcbiAgfVxuXG4gIHNhdmVJbWFnZXNUb0J1c2luZXNzTGlicmFyeShtZWRpYVJlcXVlc3Q6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vbGlicmFyeS9pbWFnZS9saWJyYXJ5L3NhdmVgLFxuICAgICAgbWVkaWFSZXF1ZXN0XG4gICAgKTtcbiAgfVxuXG4gIHJlZ2VuZXJhdGVUZXh0KHJlcXVlc3Q6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgYWRtaW4vY29udGVudC9zdWdnZXN0L3YyL3dlYnNpdGUvaW5kaXZpZHVhbGAsXG4gICAgICByZXF1ZXN0XG4gICAgKTtcbiAgfVxuICBnZXRDYXRlZ29yaWVzSGVhZGVyRGF0YSgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIHRoaXMuQkFTRV9VUkwgK1xuICAgICAgYGVjb21tZXJjZS9wcm9kdWN0LyR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX0vaGVhZGVyc2BcbiAgICApO1xuICB9XG4gIGdldEFsbFN0b3JlcyhwYXlsb2FkOiBhbnkpIHtcbiAgICBsZXQgdXJsID0gJyc7XG4gICAgaWYgKHBheWxvYWQ/LnBpbmNvZGUgJiYgcGF5bG9hZC5waW5jb2RlLnRvU3RyaW5nKCkubGVuZ3RoID09IDYpIHtcbiAgICAgIHVybCA9IHVybCArIGAgJnBpbmNvZGU9JHtwYXlsb2FkLnBpbmNvZGV9YDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2Uvc3RvcmUvZ2V0L3YyP2J1c2luZXNzSWQ9JHtwYXlsb2FkLmJ1c2luZXNzSWR9JHt1cmx9YCxcbiAgICAgICcnXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbEFwcG9pbnRtZW50U2VydmljZShwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArICdzZXJ2aWNlL2xpc3QnLCBwYXlsb2FkKTtcbiAgfVxuXG4gIGdldEFsbFN0YWZmKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgc3RhZmYvc3RhZmYvc3RvcmUtc3RhZmYtbGlzdD9zZXJ2aWNlSWQ9JHtwYXlsb2FkLnNlcnZpY2VJZH0mc3RvcmVJZD0ke3BheWxvYWQuc3RvcmVJZH0mYnVzaW5lc3NJZD0ke3BheWxvYWQuYnVzaW5lc3NJZH1gXG4gICAgKTtcbiAgfVxuXG4gIGdldFN0b3JlQnlJZChzdG9yZUlkOiBzdHJpbmcpIHtcbiAgICBsZXQgcGF5bG9hZCA9IHtcbiAgICAgIHN0b3JlSWQ6IHN0b3JlSWQsXG4gICAgICBidXNpbmVzc0lkOiB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpID8/ICcnLFxuICAgICAgcGFnZU5vOiAwLFxuICAgICAgcGFnZVNpemU6IDEwMDAsXG4gICAgfTtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9zdG9yZS9nZXRgLCBwYXlsb2FkKTtcbiAgfVxuICBwb3N0TmV3c0xldHRlcihlbWFpbDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL2Vjb21tZXJjZS9jb25maWcvcmVnaXN0ZXJlZC9uZXdzbGV0dGVyP2VtYWlsPSR7ZW1haWx9JmJ1c2luZXNzSWQ9JHt0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYnVzaW5lc3NJZCcpfWAsXG4gICAgICAnJ1xuICAgICk7XG4gIH1cbiAgYWRkUmV2aWV3VG9Qcm9kdWN0KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYWRkL3Jldmlldz9vcmRlcklkPSR7cGF5bG9hZC5vcmRlcklkfWAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbFN0b3Jlc09ycmEocGFnZU5vOiBhbnksIHNpemU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3N0b3JlP3BhZ2VObz0ke3BhZ2VOb30mc2l6ZT0ke3NpemV9YFxuICAgICk7XG4gIH1cblxuICBnZXRzdGFmZkJ5U3RvcmVJZChzdG9yZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdGFmZi9nZXQvJHtzdG9yZUlkfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsU2NoZW1lKCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3NjaGVtZS9nZXRBbGxTY2hlbWVzL2Rhc2hib2FyZGBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsU3RhdGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoYGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL3N0YXRlL2dldEFsbGApO1xuICB9XG5cbiAgZ2V0Q2l0eUJ5U3RhdGVCeXBhZ2luYXRlZChzdGF0ZUlkOiBhbnksIHBhZ2VObzogYW55LCBzaXplOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9jaXR5L2dldEJ5U3RhdGU/c3RhdGVJZD0ke3N0YXRlSWR9JnBhZ2VObz0ke3BhZ2VOb30mc2l6ZT0ke3NpemV9YFxuICAgICk7XG4gIH1cblxuICBnZXRTdG9yZUJ5U2xhYihkYXRhOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIGBodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9zdG9yZS9nZXRTbGFiYCxcbiAgICAgIGRhdGFcbiAgICApO1xuICB9XG5cbiAgYWRkVHJpYWxJdGVtKHJlcXVlc3Q6IHN5bmNJdGVtVG9TZXJ2ZXJEQlJlcXVlc3QpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dCh0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0L3YyYCwgcmVxdWVzdCk7XG4gIH1cblxuICBjaGVja0l0ZW1BbHJlYWR5QWRkZWQocmVxdWVzdDogY2hlY2tJdGVtQWxyZWFkeUFkZGVkKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS9vcmRlci9jYXJ0L2NoZWNrL2l0ZW1gLFxuICAgICAgcmVxdWVzdFxuICAgICk7XG4gIH1cblxuICBkZWxldGVJdGVtRnJvbUNhcnQocmVxdWVzdDogc3luY0l0ZW1Ub1NlcnZlckRCUmVxdWVzdCkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2Uvb3JkZXIvY2FydC9yZW1vdmVgLFxuICAgICAgcmVxdWVzdFxuICAgICk7XG4gIH1cblxuICBib29rQXBwb2ludG1lbnQocmVxdWVzdDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvdHJ5LWhvbWVgLCByZXF1ZXN0KTtcbiAgfVxuXG4gIGNyZWF0ZUVucm9sbG1lbnRTY2hlbWUoZW5yb2xsZW1lbnQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIGAgIGh0dHBzOi8vc3RhZ2VhcGktb3JyYS5sZXRzbW9iaWxpdHkuY29tL2Vucm9sbG1lbnQvY3JlYXRlL25ldy90ZW1wP21hbnVhbFBheT10cnVlJmlzV2ViUmVxdWVzdD10cnVlXG5gLFxuICAgICAgZW5yb2xsZW1lbnRcbiAgICApO1xuICB9XG5cbiAgZ2V0SG9tZUFwcG9pbnRtZW50TGlzdCh1c2VySWQ6IHN0cmluZykge1xuICAgIGNvbnN0IGJ1c2luZXNzSWQgPSB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJyk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvdXNlci90cnktaG9tZT91c2VySWQ9JHt1c2VySWR9JmJ1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0QWxsT3JyYVNjaGVtZSgpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldChcbiAgICAgICdodHRwczovL3N0YWdlYXBpLW9ycmEubGV0c21vYmlsaXR5LmNvbS9wYXNzQm9vay9yZWRlbXB0aW9uL2Ftb3VudC9jaGVjaz91c2VyQ29kZT1DXzAwMDMxMzg4NSdcbiAgICApO1xuICB9XG5cbiAgcmVkZWVtU2NoZW1lKHNjaGVtZTogc3RyaW5nLCBjYXJ0SWQ6IGFueSwgYWN0aW9uOiBib29sZWFuKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL29yZGVyL2NhcnQvcmVkZW1wdGlvbj9jYXJ0SWQ9JHtjYXJ0SWR9JnJlbW92ZVNjaGVtZT0ke2FjdGlvbn1gLFxuICAgICAgc2NoZW1lXG4gICAgKTtcbiAgfVxuXG4gIGdldFJldmlld3NCeVByb2R1Y3RJZChwcm9kdWN0SWQ6IHN0cmluZywgcGFnZU51bWJlcjogbnVtYmVyKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBlY29tbWVyY2UvdXNlci9maWx0ZXIvcmV2aWV3cz9wcm9kdWN0SWQ9JHtwcm9kdWN0SWR9JnBhZ2VOdW1iZXI9JHtwYWdlTnVtYmVyfSZwYWdlU2l6ZT0zYCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuICBnZXRGaWVsZHNUb0Rpc3BsYXkoZmllbGRzTGlzdDogYW55W10pIHtcbiAgICBsZXQgbWFwOiBhbnkgPSB7fTtcblxuICAgIGZvciAobGV0IGZpZWxkIG9mIGZpZWxkc0xpc3QpIHtcbiAgICAgIGZvciAobGV0IGZpZWxkR3JvdXAgb2YgZmllbGQuZmllbGRHcm91cCkge1xuICAgICAgICBpZiAoIWZpZWxkR3JvdXAuZmllbGRTdGVwSWQpIGNvbnRpbnVlO1xuXG4gICAgICAgIGxldCBzdGVwTmFtZSA9IGZpZWxkR3JvdXAuZmllbGRTdGVwTmFtZVxuICAgICAgICAgID8gZmllbGRHcm91cC5maWVsZFN0ZXBOYW1lXG4gICAgICAgICAgOiAndW5kZWZpbmVkJztcbiAgICAgICAgbGV0IGdyb3VwTmFtZSA9IGZpZWxkR3JvdXAuZmllbGRHcm91cE5hbWU7XG5cbiAgICAgICAgaWYgKCFtYXBbc3RlcE5hbWVdKSB7XG4gICAgICAgICAgbWFwW3N0ZXBOYW1lXSA9IHt9O1xuICAgICAgICB9XG4gICAgICAgIGlmICghbWFwW3N0ZXBOYW1lXVtncm91cE5hbWVdKSB7XG4gICAgICAgICAgbWFwW3N0ZXBOYW1lXVtncm91cE5hbWVdID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZmllbGRbJ2ZpZWxkU3RlcElkJ10gPSBmaWVsZEdyb3VwLmZpZWxkU3RlcElkO1xuICAgICAgICBmaWVsZFsnZmllbGRHcm91cElkJ10gPSBmaWVsZEdyb3VwLmZpZWxkR3JvdXBJZDtcblxuICAgICAgICBjb25zdCBuZXdGaWVsZCA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoZmllbGQpKTtcbiAgICAgICAgbWFwW3N0ZXBOYW1lXVtncm91cE5hbWVdLnB1c2gobmV3RmllbGQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtYXA7XG4gIH1cblxuICBnZXRCb29raW5nU2xvdHMocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArICdib29raW5nL2F2YWlsYWJsZS1zbG90cycsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuICBnZXRCdXNpbmVzc0FwcG9pbnRtZW50U2V0dGluZ3MoYnVzaW5lc3NJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBzZXJ2aWNlL3NldHRpbmdzLyR7YnVzaW5lc3NJZH1gXG4gICAgKTtcbiAgfVxuXG4gIHJlc29sdmVDYXJ0KHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyAnYm9va2luZy9ncm91cC9yZXNvbHZlLWNhcnQnLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cbiAgaG9sZEJvb2tpbmcocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgJ2Jvb2tpbmcvZ3JvdXAvaG9sZCcsIHBheWxvYWQpO1xuICB9XG4gIGdldEJvb2tpbmdHcm91cChncm91cElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH1gKTtcbiAgfVxuICAvKiogRmV0Y2hlZCBvbiBjbGljaywgbm90IHByZS1jYWNoZWQgb24gdGhlIGJvb2tpbmcgLSBlY29tbWVyY2UgZ2VuZXJhdGVzL2NhY2hlcyB0aGUgaW52b2ljZSBQREZcbiAgICogdGhlIGZpcnN0IHRpbWUgaXQncyBhc2tlZCBmb3IsIHNvIHRoZXJlJ3Mgbm90aGluZyB0byBnYWluIGJ5IGZldGNoaW5nIGl0IGVhcmxpZXIuICovXG4gIGdldEJvb2tpbmdJbnZvaWNlVXJsKGdyb3VwSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfS9pbnZvaWNlLXVybGApO1xuICB9XG4gIGdlbmVyYXRlUGF5bWVudFRva2VuKGdyb3VwSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYHBheW1lbnQvdG9rZW4/Z3JvdXBJZD0ke2dyb3VwSWR9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuICBjb21wbGV0ZUJvb2tpbmdHcm91cChncm91cElkOiBzdHJpbmcpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvY29tcGxldGUvJHtncm91cElkfWAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbiAgZ2V0TXlCb29raW5ncyhidXNpbmVzc0lkOiBzdHJpbmcsIHVzZXJJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArXG4gICAgICBgYm9va2luZy9ncm91cC9teT9idXNpbmVzc0lkPSR7YnVzaW5lc3NJZH0mdXNlcklkPSR7dXNlcklkfWBcbiAgICApO1xuICB9XG4gIGdldEdyb3VwTGluZXMoZ3JvdXBJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vbGluZXNgXG4gICAgKTtcbiAgfVxuICBjYW5jZWxCb29raW5nR3JvdXAoZ3JvdXBJZDogc3RyaW5nLCByZWFzb24/OiBzdHJpbmcpIHtcbiAgICBjb25zdCBxdWVyeSA9IHJlYXNvbiA/IGA/cmVhc29uPSR7ZW5jb2RlVVJJQ29tcG9uZW50KHJlYXNvbil9YCA6ICcnO1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L2NhbmNlbCR7cXVlcnl9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuICBnZXRDYW5jZWxsYXRpb25Qb2xpY3koYnVzaW5lc3NJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArXG4gICAgICBgcG9saWN5LW1hc3RlcnMvJHtidXNpbmVzc0lkfT9wb2xpY3lUeXBlPUNBTkNFTExBVElPTmBcbiAgICApO1xuICB9XG4gIGdldFJlc2NoZWR1bGVTbG90cyhncm91cElkOiBzdHJpbmcsIGRhdGU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L3Jlc2NoZWR1bGUtc2xvdHNgLFxuICAgICAgeyBkYXRlIH1cbiAgICApO1xuICB9XG4gIHJlc2NoZWR1bGVCb29raW5nKGdyb3VwSWQ6IHN0cmluZywgbmV3RGF0ZTogc3RyaW5nLCBuZXdTdGFydFRpbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgYm9va2luZy9ncm91cC8ke2dyb3VwSWR9L3Jlc2NoZWR1bGVgLFxuICAgICAgeyBuZXdEYXRlLCBuZXdTdGFydFRpbWUsIHJlc2NoZWR1bGVkQnk6ICdDVVNUT01FUicgfVxuICAgICk7XG4gIH1cblxuICAvLyBBZGQgc2VydmljZShzKSB0byBhbiBhbHJlYWR5LWJvb2tlZCBhcHBvaW50bWVudCwgYmVmb3JlIHN0YXJ0IG9ubHkgLSBzZWVcbiAgLy8gZG9jcy91bmlmaWVkLWFwcG9pbnRtZW50LWpvdXJuZXkubWQgwqc1ZSAoYXBwb2ludG1lbnRfc2VydmljZSByZXBvKS4gc2VydmljZUlkcyBjYW4gYmUgb25lIG9yXG4gIC8vIG1hbnkgLSB0aGUgYmFja2VuZCBhcHBsaWVzL3BheXMgZm9yIHRoZSB3aG9sZSBiYXRjaCBpbiBvbmUgY2FsbC5cbiAgZ2V0QWRkU2VydmljZU9wdGlvbnMoZ3JvdXBJZDogc3RyaW5nKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkFQUE9JTlRNRU5UX1VSTCArIGBib29raW5nL2dyb3VwLyR7Z3JvdXBJZH0vYWRkLXNlcnZpY2Uvb3B0aW9uc2BcbiAgICApO1xuICB9XG4gIGFkZFNlcnZpY2VUb0Jvb2tpbmcoZ3JvdXBJZDogc3RyaW5nLCBzZXJ2aWNlSWRzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYGJvb2tpbmcvZ3JvdXAvJHtncm91cElkfS9hZGQtc2VydmljZWAsXG4gICAgICB7IHNlcnZpY2VJZHMsIGluaXRpYXRlZEJ5OiAnQ1VTVE9NRVInIH1cbiAgICApO1xuICB9XG4gIGdlbmVyYXRlQWRkU2VydmljZVBheW1lbnRUb2tlbihncm91cElkOiBzdHJpbmcsIHNlcnZpY2VJZHM6IHN0cmluZ1tdKSB7XG4gICAgY29uc3QgcXVlcnkgPSBzZXJ2aWNlSWRzLm1hcCgoaWQpID0+IGBzZXJ2aWNlSWRzPSR7aWR9YCkuam9pbignJicpO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQVBQT0lOVE1FTlRfVVJMICsgYHBheW1lbnQvYWRkLW9uL3Rva2VuP2dyb3VwSWQ9JHtncm91cElkfSYke3F1ZXJ5fWAsXG4gICAgICB7fVxuICAgICk7XG4gIH1cbiAgZ2V0QWRkT25QYXltZW50U3RhdHVzKG9yZGVySWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC9hZGQtb24vdmVyaWZ5L3N0YXR1cz9vcmRlcklkPSR7b3JkZXJJZH1gXG4gICAgKTtcbiAgfVxuICBnZW5lcmF0ZVRva2VuKGJJZDogYW55LCB1c2VySWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBleHQvY29ubmVjdC9zaW1wby90b2tlbj9idXNpbmVzc0lkPSR7YklkfSZ1c2VySWQ9JHt1c2VySWR9JnVzZXJUeXBlPUVYVEVSTkFMX1VTRVJgLFxuICAgICAge31cbiAgICApO1xuICB9XG4gIGdldEFsbEVucm9sbGVkU2NoZW1lcyhwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnB1dChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICsgJ2V4dC9jb25uZWN0L3NpbXBvL3NjaGVtZS9saXN0JyxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG4gIGVucm9sbFNjaGVtZShwYXlsb2FkOiBhbnksIGNoZWNrQ2hhcmdlczogYm9vbGVhbikge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgaWYgKGNoZWNrQ2hhcmdlcykge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgICB0aGlzLlBBU1NCT09LX1VSTCArICdwYXNzYm9vay9jYXJ0L2luaXRpYXRlL3BheW1lbnQ/bWFudWFsUGF5PXRydWUnLFxuICAgICAgICBwYXlsb2FkLFxuICAgICAgICB7IGhlYWRlcnM6IGhlYWRlcnMgfVxuICAgICAgKTtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuaHR0cC5wb3N0KFxuICAgICAgICB0aGlzLlBBU1NCT09LX1VSTCArICdwYXNzYm9vay9pbml0aWF0ZS9wYXltZW50P21hbnVhbFBheT10cnVlJyxcbiAgICAgICAgcGF5bG9hZCxcbiAgICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG4gIGdldEJlbmVmaXRTbGFiKHBhc3Nib29rSWQ/OiBhbnkpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuUEFTU0JPT0tfVVJMICtcbiAgICAgIGBwYXNzYm9vay9iZW5lZml0L3BlcmNlbnRhZ2VzP3Bhc3Nib29rSWQ9JHtwYXNzYm9va0lkfWAsXG4gICAgICB7fSxcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICBnZXRBbGxTdGFmZkxpc3QoKSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICtcbiAgICAgIGBzdGFmZi9zdGFmZi9saXN0LyR7dGhpcy5zdG9yYWdlLmdldEl0ZW0oJ2J1c2luZXNzSWQnKX0/aXNQYWdpbmF0aW9uPWZhbHNlYFxuICAgICk7XG4gIH1cbiAgcmVxdWVzdFJlZGVlbXB0aW9uKHBhc3Nib29rSWQ6IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArXG4gICAgICBgcGFzc2Jvb2svcmVxdWVzdC9yZWRlbXB0aW9uP3Bhc3NCb29rSWQ9JHtwYXNzYm9va0lkfWAsXG4gICAgICB7fSxcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICBQYXNzYm9va0FwcFN0YXR1cyhiSWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBhcHAvYXBwL2NoZWNrLWFwcD9idXNpbmVzc0lkPSR7YklkfSZhcHBOYW1lPVBhc3Nib29rYFxuICAgICk7XG4gIH1cbiAgY2hlY2tBcHBJbnN0YWxsZWQoYklkOiBhbnksIGFwcE5hbWU6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBhcHAvYXBwL2NoZWNrLWFwcD9idXNpbmVzc0lkPSR7YklkfSZhcHBOYW1lPSR7YXBwTmFtZX1gXG4gICAgKTtcbiAgfVxuICBnZXRSZWRlZW1Qb2ludHMoXG4gICAgYklkOiBhbnksXG4gICAgdXNlcklkOiBhbnksXG4gICAgZXZldFR5cGU6IHN0cmluZyxcbiAgICBvcmRlclZhbHVlOiBhbnksXG4gICAgcmV3YXJkUG9pbnRzOiBib29sZWFuXG4gICkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL2FwaS9yZWZlcnJhbHMvYXZhaWxhYmxlLWFtb3VudD9idXNpbmVzc0lkPSR7YklkfSZ1c2VySWQ9JHt1c2VySWR9JmV2ZW50VHlwZT0ke2V2ZXRUeXBlfSZvcmRlclZhbHVlPSR7b3JkZXJWYWx1ZX0mcmV3YXJkUG9pbnRzPSR7cmV3YXJkUG9pbnRzfWBcbiAgICApO1xuICB9XG4gIHBheW1lbnRXaXRoQ29tcGxldGVQb2ludHMoY2FydElkOiBhbnksIGRhdGE6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucG9zdChcbiAgICAgIHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL29yZGVyL29yZGVyL3Jld2FyZHM/Y2FydElkPSR7Y2FydElkfWAsXG4gICAgICBkYXRhXG4gICAgKTtcbiAgfVxuXG4gIGdldEFsbFBhc3Nib29rRHVlcyhiSWQ6IGFueSwgdXNlcklkOiBhbnkpIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0VG9rZW4oKTtcbiAgICBjb25zdCBoZWFkZXJzID0gbmV3IEh0dHBIZWFkZXJzKHtcbiAgICAgIEF1dGhvcml6YXRpb246IGBCZWFyZXIgJHt0b2tlbn1gLFxuICAgIH0pO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5QQVNTQk9PS19VUkwgK1xuICAgICAgYHBhc3Nib29rL3BheW1lbnQvZHVlcz9wYWdlPTAmc2l6ZT0xMDAwJmJ1c2luZXNzSWQ9JHtiSWR9JnVzZXJJZD0ke3VzZXJJZH1gLFxuICAgICAgeyBoZWFkZXJzOiBoZWFkZXJzIH1cbiAgICApO1xuICB9XG4gIGdldFRva2VuKCkge1xuICAgIGxldCB0b2tlbiA9IHRoaXMuY29va2llU2VydmljZS5nZXQoJ3Bhc3NCb29rVG9rZW4nKTtcbiAgICByZXR1cm4gdG9rZW47XG4gIH1cbiAgZ2V0QWxsVHJhbnNhY3Rpb25zKHBheWxvYWQ6IGFueSkge1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRUb2tlbigpO1xuICAgIGNvbnN0IGhlYWRlcnMgPSBuZXcgSHR0cEhlYWRlcnMoe1xuICAgICAgQXV0aG9yaXphdGlvbjogYEJlYXJlciAke3Rva2VufWAsXG4gICAgfSk7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArIGBkYXNoYm9hcmQvdjMvdHJhbnNhY3Rpb25zL3BhZ2VgLFxuICAgICAgcGF5bG9hZCxcbiAgICAgIHsgaGVhZGVyczogaGVhZGVycyB9XG4gICAgKTtcbiAgfVxuICBnZXRTY2hlbWVEZXRhaWxzKHNjaGVtZUlkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArIGBleHQvY29ubmVjdC9zaW1wby9nZXQvc2NoZW1lP2lkPSR7c2NoZW1lSWR9YCxcbiAgICAgIHt9XG4gICAgKTtcbiAgfVxuXG4gIGdldE1ldGFsUHJpY2Uoc3RvcmVJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQoXG4gICAgICB0aGlzLlBBU1NCT09LX1VSTCArIGBleHQvY29ubmVjdC9zaW1wby9tZXRhbC9wcmljZXM/aWQ9JHtzdG9yZUlkfWBcbiAgICApO1xuICB9XG5cbiAgY3JlYXRlTGVhZChwYXlsb2FkOiBhbnkpIHtcbiAgICByZXR1cm4gdGhpcy5odHRwLnBvc3QodGhpcy5CQVNFX1VSTCArIGBidXNpbmVzcy9jb250YWN0YCwgcGF5bG9hZCk7XG4gIH1cbiAgZ2V0QXBwb2ludG1lbnRQYXltZW50U3RhdHVzKG9yZGVySWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5BUFBPSU5UTUVOVF9VUkwgKyBgcGF5bWVudC92ZXJpZnkvc3RhdHVzP29yZGVySWQ9JHtvcmRlcklkfWBcbiAgICApO1xuICB9XG4gIGdldE90cEZvckxvZ2luKHBheWxvYWQ6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvdXNlci9nZW5lcmF0ZS1vdHBgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICAvKiogTmV3IE9UUCBBUEk6IFBVVCAvZWNvbW1lcmNlL3VzZXIvYXV0aC9zZW5kLW90cFxuICAgKiAgQm9keTogeyBpZGVudGlmaWVyLCBidXNpbmVzc0lkIH1cbiAgICogIFJlc3BvbnNlOiB7IGRhdGE6IHsgaXNFeGlzdGluZ1VzZXI6IGJvb2xlYW4sIG1lc3NhZ2U6IHN0cmluZyB9IH1cbiAgICovXG4gIHNlbmRPdHBWMihpZGVudGlmaWVyOiBzdHJpbmcsIGJ1c2luZXNzSWQ6IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmh0dHAucHV0KHRoaXMuQkFTRV9VUkwgKyBgZWNvbW1lcmNlL3VzZXIvYXV0aC9zZW5kLW90cGAsIHtcbiAgICAgIGlkZW50aWZpZXIsXG4gICAgICBidXNpbmVzc0lkLFxuICAgIH0pO1xuICB9XG5cbiAgdmVyaWZ5T3RwVjIocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvdmVyaWZ5LW90cGAsXG4gICAgICBwYXlsb2FkXG4gICAgKTtcbiAgfVxuXG4gIGNvbXBsZXRlU2lnbnVwVjIocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvY29tcGxldGUtc2lnbnVwYCxcbiAgICAgIHBheWxvYWRcbiAgICApO1xuICB9XG5cbiAgbG9naW5XaXRoUGFzc3dvcmROZXcocGF5bG9hZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5wdXQoXG4gICAgICB0aGlzLkJBU0VfVVJMICsgYGVjb21tZXJjZS91c2VyL2F1dGgvbG9naW4tcGFzc3dvcmRgLFxuICAgICAgcGF5bG9hZFxuICAgICk7XG4gIH1cblxuICBmbHVzaChldmVudHNUb1NlbmQ6IGFueSkge1xuICAgIHRoaXMuaHR0cFxuICAgICAgLnBvc3QodGhpcy5CQVNFX1VSTCArICdlY29tbWVyY2UvYW5hbHl0aWNzL2JhdGNoJywgZXZlbnRzVG9TZW5kKVxuICAgICAgLnN1YnNjcmliZSh7IGVycm9yOiAoKSA9PiB7IH0gfSk7XG4gIH1cblxuICBnZXRQb3B1bGFyU2VhcmNoZXMoKSB7XG4gICAgY29uc3QgYnVzaW5lc3NJZCA9XG4gICAgICB0aGlzLnN0b3JhZ2UuZ2V0SXRlbSgnYklkJykgPz9cbiAgICAgIHRoaXMuc3RvcmFnZS5nZXRJdGVtKCdidXNpbmVzc0lkJykgPz9cbiAgICAgICcxZjEyMTA4MS1kYmVhLTY1YzYtYWQ4OS0xZGZlOGNkZGE5MDInO1xuICAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KFxuICAgICAgdGhpcy5CQVNFX1VSTCArXG4gICAgICBgZWNvbW1lcmNlL2ludmVudG9yeS9wb3B1bGFyLXNlYXJjaGVzP2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfWBcbiAgICApO1xuICB9XG5cbiAgZ2V0TWVudUl0ZW1zKG1lbnVJZDogYW55KSB7XG4gICAgcmV0dXJuIHRoaXMuaHR0cC5nZXQodGhpcy5CQVNFX1VSTCArIGBlY29tbWVyY2UvbWVudS8ke21lbnVJZH1gKTtcbiAgfVxuXG4gIC8vIGdldEhvbWVSZWNvbW1lbmRhdGlvbnMoYnVzaW5lc3NJZDogYW55LCBVc2VySWQ6IGFueSkge1xuICAvLyAgIHJldHVybiB0aGlzLmh0dHAuZ2V0KHRoaXMuUkVDT01NRU5EQVRJT05fVVJMICsgYGFwaS92MS9yZWNvbW1lbmRhdGlvbnMvJHtVc2VySWR9L2hvbWU/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnBhZ2U9MSZwYWdlU2l6ZT0yMGApXG4gIC8vIH1cblxuICAvLyBnZXRDYXJ0UmVjb21tZW5kYXRpb25zKGJ1c2luZXNzSWQ6IGFueSwgVXNlcklkOiBhbnkpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLlJFQ09NTUVOREFUSU9OX1VSTCArIGBhcGkvdjEvcmVjb21tZW5kYXRpb25zLyR7VXNlcklkfS9jYXJ0P2J1c2luZXNzSWQ9JHtidXNpbmVzc0lkfSZwYWdlPTEmcGFnZVNpemU9MTVgKVxuICAvLyB9XG5cbiAgLy8gZ2V0UHJvZHVjdERlc2NyaXB0aW9uUmVjb21tZW5kYXRpb25zKGJ1c2luZXNzSWQ6IGFueSwgVXNlcklkOiBhbnkpIHtcbiAgLy8gICByZXR1cm4gdGhpcy5odHRwLmdldCh0aGlzLlJFQ09NTUVOREFUSU9OX1VSTCArIGBhcGkvdjEvcmVjb21tZW5kYXRpb25zLyR7VXNlcklkfS9wZHA/YnVzaW5lc3NJZD0ke2J1c2luZXNzSWR9JnBhZ2U9MSZwYWdlU2l6ZT0xMGApXG4gIC8vIH1cbn1cbiJdfQ==
|