@ieeesa-npm/groups 0.13.6 → 0.13.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/components/add-user-roster/add-user-roster.component.mjs +8 -2
- package/esm2022/lib/components/edit-user-roles/edit-user-roles.component.mjs +8 -2
- package/esm2022/lib/models/group-types.model.mjs +1 -1
- package/esm2022/lib/models/roster-type.model.mjs +1 -2
- package/esm2022/lib/services/groups.service.mjs +2 -5
- package/fesm2022/ieeesa-npm-groups.mjs +15 -7
- package/fesm2022/ieeesa-npm-groups.mjs.map +1 -1
- package/lib/models/group-types.model.d.ts +0 -3
- package/lib/models/roster-type.model.d.ts +1 -2
- package/package.json +1 -1
|
@@ -263,7 +263,13 @@ export class EditUserRolesComponent {
|
|
|
263
263
|
*/
|
|
264
264
|
onEditUserRoleFormSubmit(form) {
|
|
265
265
|
form[0]?.markAllAsTouched();
|
|
266
|
-
|
|
266
|
+
const isAllOtherControlsValid = Object.keys(form[0].controls)
|
|
267
|
+
.filter((controlName) => controlName !== 'representingOrg')
|
|
268
|
+
.every((controlName) => form[0].get(controlName)?.status === FormStatus?.VALID);
|
|
269
|
+
if ((form[0].get('representingOrg')?.status === FormStatus?.INVALID &&
|
|
270
|
+
isAllOtherControlsValid &&
|
|
271
|
+
this.representingOrganizations.length > 0) ||
|
|
272
|
+
form[0].status === FormStatus?.VALID) {
|
|
267
273
|
this.groupsService
|
|
268
274
|
.editGroupsUserRole(this.getEditUserRolePayload(form[0]?.getRawValue()))
|
|
269
275
|
.pipe(takeUntil(this.destroy$))
|
|
@@ -525,4 +531,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
525
531
|
}], formCancel: [{
|
|
526
532
|
type: Output
|
|
527
533
|
}] } });
|
|
528
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC11c2VyLXJvbGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC11c2VyLXJvbGVzL2VkaXQtdXNlci1yb2xlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2VkaXQtdXNlci1yb2xlcy9lZGl0LXVzZXItcm9sZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBR1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxTQUFTLEVBSVQsZUFBZSxFQUlmLG9CQUFvQixHQUNyQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxXQUFXLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUF3QixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUNMLFNBQVMsR0FHVixNQUFNLHFCQUFxQixDQUFDO0FBTzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQU16RTs7Ozs7R0FLRztBQVNILE1BQU0sT0FBTyxzQkFBc0I7SUEwQmpDO0lBQ0Us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QjtrQkFSbEMsU0FBUzsrQkFDRSx3QkFBd0IsY0FDdEIsSUFBSSxXQUNQLENBQUMsWUFBWSxFQUFFLG9CQUFvQixDQUFDLGlCQUc5QixpQkFBaUIsQ0FBQyxJQUFJO3dLQXlCSixvQkFBb0I7c0JBQXBELFNBQVM7dUJBQUMsb0JBQW9CO2dCQUNyQixrQkFBa0I7c0JBQTNCLE1BQU07Z0JBQ0csVUFBVTtzQkFBbkIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XHJcbiAgQ29tcG9uZW50LFxyXG4gIEV2ZW50RW1pdHRlcixcclxuICBPbkRlc3Ryb3ksXHJcbiAgT25Jbml0LFxyXG4gIE91dHB1dCxcclxuICBWaWV3Q2hpbGQsXHJcbiAgVmlld0VuY2Fwc3VsYXRpb24sXHJcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7IEdyb3Vwc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgQWxpZ25UeXBlLFxyXG4gIEF1dG9Db21wbGV0ZU9wdGlvbixcclxuICBDaGVja2JveE9wdGlvbixcclxuICBGaWVsZENvbmZpZyxcclxuICBGb3JtQ29udHJvbFR5cGUsXHJcbiAgRm9ybUdyaWQsXHJcbiAgRm9ybU1vZGVsLFxyXG4gIFNlbGVjdE9wdGlvbixcclxuICBEeW5hbWljRm9ybUNvbXBvbmVudCxcclxufSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgKiBhcyBzY3JlZW5UZXh0cyBmcm9tICcuLi8uLi9hc3NldHMvY29uc3RhbnRzLmpzb24nO1xyXG5pbXBvcnQgeyBGb3JtQXJyYXksIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgR3JvdXBVc2VySW5mbyB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC11c2VyLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCB0YWtlVW50aWwgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgRm9ybVN0YXR1cyB9IGZyb20gJy4uLy4uL21vZGVscy9mb3JtLXN0YXR1cy5tb2RlbCc7XHJcbmltcG9ydCB7IEh0dHBFcnJvclJlc3BvbnNlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uL2h0dHAnO1xyXG5pbXBvcnQge1xyXG4gIEFsZXJ0VHlwZSxcclxuICBBbGVydHNTZXJ2aWNlLFxyXG4gIEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbn0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7XHJcbiAgQWRkT3JFZGl0VXNlckluZGl2aWR1YWxSb3N0ZXJQYXlsb2FkLFxyXG4gIEFkZE9yRWRpdFVzZXJQYXlsb2FkLFxyXG4gIFJlcHJlc2VudGluZ09yZ2FuaXphdGlvbixcclxufSBmcm9tICcuLi8uLi9tb2RlbHMvYWRkLW9yLWVkaXQtdXNlci1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb24gfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JvdXAtdHlwZXMubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFJvc3RlclR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvcm9zdGVyLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMgfSBmcm9tICcuLi8uLi9hc3NldHMvZm9ybS12YWxpZGF0aW9ucyc7XHJcbmltcG9ydCB7XHJcbiAgT3JnYW5pemF0aW9uLFxyXG4gIE9yZ2FuaXphdGlvblJlcXVlc3RQYXlsb2FkLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9vcmdhbml6YXRpb24ubW9kZWwnO1xyXG5cclxuLyoqXHJcbiAqIENvbXBvbmVudCBpbXBsZW1lbnRzIHRoZSB2aWV3IGFuZCBmdW5jdGlvbmFsaXRpZXMgdG8gZWRpdCBncm91cCB1c2VycyB0byByb3N0ZXIuXHJcbiAqIEBjbGFzcyBFZGl0VXNlclJvbGVzQ29tcG9uZW50XHJcbiAqIEBpbXBsZW1lbnRzIHtPbkluaXR9XHJcbiAqIEBpbXBsZW1lbnRzIHtPbkRlc3Ryb3l9XHJcbiAqL1xyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2llZWVzYS1lZGl0LXVzZXItcm9sZXMnLFxyXG4gIHN0YW5kYWxvbmU6IHRydWUsXHJcbiAgaW1wb3J0czogW0NvbW1vbk1vZHVsZSwgRHluYW1pY0Zvcm1Db21wb25lbnRdLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi9lZGl0LXVzZXItcm9sZXMuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL2VkaXQtdXNlci1yb2xlcy5jb21wb25lbnQuc2NzcyddLFxyXG4gIGVuY2Fwc3VsYXRpb246IFZpZXdFbmNhcHN1bGF0aW9uLk5vbmUsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBFZGl0VXNlclJvbGVzQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xyXG4gIGRlc3Ryb3kkID0gbmV3IFN1YmplY3Q8Ym9vbGVhbj4oKTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIGNvbnN0YW50czogYW55ID0gc2NyZWVuVGV4dHM7XHJcbiAgYWRkVXNlclJvc3RlclRleHRzID0gdGhpcy5jb25zdGFudHM/LmFkZFVzZXJSb3N0ZXI7XHJcbiAgbGVmdEJ1dHRvbkxhYmVsID0gdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5sZWZ0QnV0dG9uTGFiZWw7XHJcbiAgcmlnaHRCdXR0b25MYWJlbCA9IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uc2F2ZUJ1dHRvbkxhYmVsO1xyXG4gIGlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZTtcclxuICBjb2xXaWR0aDogRm9ybUdyaWQgPSB7IHhzOiAxMiwgeGw6IDEyLCBzbTogMTIsIG1kOiAxMiwgbGc6IDEyIH07XHJcbiAgZWRpdFVzZXJSb2xlRm9ybUdyb3VwITogRm9ybU1vZGVsO1xyXG4gIGVkaXRVc2VyUm9sZUZvcm1Hcm91cFJlZiE6IEZvcm1Hcm91cDtcclxuICB1c2VyUm9sZXMhOiBDaGVja2JveE9wdGlvbltdO1xyXG4gIHNlbGVjdGVkVXNlclJvbGVJZHM6IHN0cmluZ1tdID0gW107XHJcbiAgc2VsZWN0ZWRVc2VySW5mbyE6IEdyb3VwVXNlckluZm87XHJcbiAgYWN0aW9uQnV0dG9uQWxpZ24gPSBBbGlnblR5cGUuTEVGVDtcclxuICBjbGFzc2lmaWNhdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgbWVtYmVyVHlwZXM6IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgb3JnYW5pemF0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBncm91cFR5cGVzITogR3JvdXBUeXBlQ29uZmlndXJhdGlvbltdO1xyXG4gIGhhc0NsYXNzaWZpY2F0aW9uID0gZmFsc2U7XHJcbiAgZ3JvdXBSb3N0ZXJUeXBlITogR3JvdXBSb3N0ZXJUeXBlO1xyXG4gIHJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnM6IFNlbGVjdE9wdGlvbltdID0gW107XHJcbiAgb3JnU2VhcmNoVmFsdWUgPSAnJztcclxuICBAVmlld0NoaWxkKER5bmFtaWNGb3JtQ29tcG9uZW50KSBkeW5hbWljRm9ybUNvbXBvbmVudCE6IER5bmFtaWNGb3JtQ29tcG9uZW50O1xyXG4gIEBPdXRwdXQoKSBzdWJtaXRGb3JtUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIGZvcm1DYW5jZWwgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHByaXZhdGUgZ3JvdXBzU2VydmljZTogR3JvdXBzU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2U6IEdsb2JhbEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcclxuICAgIHB1YmxpYyBhbGVydFNlcnZpY2U6IEFsZXJ0c1NlcnZpY2UgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uXHJcbiAgKSB7fVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBlZGl0IHVzZXIgcm9sZSByZXF1aXJlZCBpbmZvcm1hdGlvbiBhbmQgZm9ybSBncm91cCBhcnJheS5cclxuICAgKiBAcmV0dXJuIC1yZXR1cm5zIG5vdGhpbmdcclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG5nT25Jbml0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvID0gdGhpcy5ncm91cHNTZXJ2aWNlPy5nZXRTZWxlY3RlZFVzZXJJbmZvKCk7XHJcbiAgICB0aGlzLmdyb3Vwc1NlcnZpY2UucmVwcmVzZW50aW5nT3JnYW5pemF0aW9ucy5mb3JFYWNoKFxyXG4gICAgICAodXNlcjogUmVwcmVzZW50aW5nT3JnYW5pemF0aW9uKSA9PiB7XHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvLnVzZXJJZCA9PT0gdXNlci51c2VySWQgJiZcclxuICAgICAgICAgIHVzZXIub3JnYW5pemF0aW9ucz8ubGVuZ3RoXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB1c2VyLm9yZ2FuaXphdGlvbnMuZm9yRWFjaCgob3B0aW9uOiBPcmdhbml6YXRpb24pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zPy5wdXNoKHtcclxuICAgICAgICAgICAgICBpZDogb3B0aW9uLm9yZ0lkLFxyXG4gICAgICAgICAgICAgIG5hbWU6IG9wdGlvbi5vcmdOYW1lLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtZXhwcmVzc2lvbnNcclxuICAgIHRoaXMucmVwcmVzZW50aW5nT3JnYW5pemF0aW9ucz8ubGVuZ3RoXHJcbiAgICAgID8gKHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IGZhbHNlKVxyXG4gICAgICA6ICh0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlKTtcclxuICAgIGNvbnN0IHNlbGVjdGVkVXNlclJvbGVOYW1lcyA9IHRoaXMuc2VsZWN0ZWRVc2VySW5mbz8ucm9sZVxyXG4gICAgICA/LnNwbGl0KCcsJylcclxuICAgICAgLm1hcCgocm9sZSkgPT4gcm9sZT8udHJpbSgpKTtcclxuICAgIHRoaXMudXNlclJvbGVzID0gdGhpcy5ncm91cHNTZXJ2aWNlPy5nZXRHcm91cFR5cGVVc2VyUm9sZXMoKTtcclxuICAgIHRoaXMudXNlclJvbGVzPy5mb3JFYWNoKChyb2xlKSA9PiB7XHJcbiAgICAgIGlmIChzZWxlY3RlZFVzZXJSb2xlTmFtZXM/LmluY2x1ZGVzKHJvbGU/Lm5hbWUgYXMgc3RyaW5nKSkge1xyXG4gICAgICAgIHJvbGUuY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJSb2xlSWRzPy5wdXNoKHJvbGU/LmlkIGFzIHN0cmluZyk7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgY29uc3QgZ3JvdXBUeXBlID0gdGhpcy5ncm91cHNTZXJ2aWNlLmdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpO1xyXG4gICAgdGhpcy5oYXNDbGFzc2lmaWNhdGlvbiA9IGdyb3VwVHlwZT8uaGFzQ2xhc3NpZmljYXRpb24gPz8gZmFsc2U7XHJcbiAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9IGdyb3VwVHlwZT8ucm9zdGVyVHlwZSBhcyBHcm91cFJvc3RlclR5cGU7XHJcbiAgICBpZiAoIXRoaXMuZ3JvdXBSb3N0ZXJUeXBlKVxyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgc3RhdHVzOiAnY3VzdG9tJyxcclxuICAgICAgICBtZXNzYWdlOiB0aGlzLmNvbnN0YW50cz8uZXJyb3JzPy5FUjEwMDEsXHJcbiAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGUuRVJST1IsXHJcbiAgICAgICAgaXNDbG9zZU5lZWRlZDogdHJ1ZSxcclxuICAgICAgfSk7XHJcbiAgICBlbHNlIHtcclxuICAgICAgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGU/LklORElWSURVQUwpIHtcclxuICAgICAgICBpZiAodGhpcy5oYXNDbGFzc2lmaWNhdGlvbikgdGhpcy5nZXRDbGFzc2lmaWNhdGlvbnMoKTtcclxuICAgICAgICB0aGlzLmdldE1lbWJlclR5cGVzKCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5lZGl0VXNlclJvbGVzRm9ybUdyb3VwKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBJbml0aWFsaXplIHRoZSBlZGl0IHVzZXIgcm9sZSBmb3JtIGdyb3VwIGFycmF5LlxyXG4gICAqIEBtZW1iZXJvZiBFZGl0VXNlclJvbGVzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZWRpdFVzZXJSb2xlc0Zvcm1Hcm91cCgpIHtcclxuICAgIHRoaXMuZWRpdFVzZXJSb2xlRm9ybUdyb3VwID0ge1xyXG4gICAgICBmb3JtR3JvdXA6IFtcclxuICAgICAgICB7XHJcbiAgICAgICAgICBsZWdlbmQ6ICcnLFxyXG4gICAgICAgICAgY29udHJvbHM6IFtcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZT8uVEVYVF9BUkVBLFxyXG4gICAgICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmVtYWlsICsgJyonLFxyXG4gICAgICAgICAgICAgIGNvbnRyb2xOYW1lOiAnZW1haWwnLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiB0aGlzLnNlbGVjdGVkVXNlckluZm8/LmVtYWlsLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmVtYWlsLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8uZW1haWwsXHJcbiAgICAgICAgICAgICAgaXNSZWFkb25seTogdHJ1ZSxcclxuICAgICAgICAgICAgICBhcmlhTXVsdGlsaW5lOiBmYWxzZSxcclxuICAgICAgICAgICAgICBpc1Jlc2l6ZTogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5URVhUX0FSRUEsXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uZnVsbE5hbWUgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdmdWxsTmFtZScsXHJcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRVc2VySW5mbz8ubmFtZSxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5mdWxsTmFtZSxcclxuICAgICAgICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWQ/LmZ1bGxOYW1lLFxyXG4gICAgICAgICAgICAgIGlzUmVhZG9ubHk6IHRydWUsXHJcbiAgICAgICAgICAgICAgYXJpYU11bHRpbGluZTogZmFsc2UsXHJcbiAgICAgICAgICAgICAgaXNSZXNpemU6IHRydWUsXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuQ0hFQ0tCT1gsXHJcbiAgICAgICAgICAgICAgbGFiZWw6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUxcclxuICAgICAgICAgICAgICAgICAgPyB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnJvbGVcclxuICAgICAgICAgICAgICAgICAgOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnJvbGUgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdyb2xlcycsXHJcbiAgICAgICAgICAgICAgY2hlY2tib3hPcHRpb25zOiB0aGlzLnVzZXJSb2xlcyxcclxuICAgICAgICAgICAgICBtaW5TZWxlY3Rpb25SZXF1aXJlZDogMSxcclxuICAgICAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5yb2xlLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8ucm9sZSxcclxuICAgICAgICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTFxyXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dFxyXG4gICAgICAgICAgICAgICAgICAgICAgPy5yb2xlRm9ySW5kaXZpZHVhbFJvc3RlclxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8ucm9sZSxcclxuICAgICAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICAgICAgdmFsaWRhdGlvbjpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTFxyXG4gICAgICAgICAgICAgICAgICA/IFtdXHJcbiAgICAgICAgICAgICAgICAgIDogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgXSxcclxuICAgICAgICB9LFxyXG4gICAgICBdLFxyXG4gICAgfTtcclxuICAgIGlmICh0aGlzLmdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlPy5JTkRJVklEVUFMKSB7XHJcbiAgICAgIHRoaXMudXBkYXRlRWRpdFVzZXJSb2xlRm9ybUdyb3VwKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIGNsYXNzaWZpY2F0aW9uLCBNZW1iZXIgVHlwZSBhbmQgUmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbiBmb3JtIGNvbnRyb2xzIHdoaWxlIGVkaXRpbmcgbmV3IHVzZXIgdG8gYW4gaW5kaXZpZHVhbCBncm91cCByb3N0ZXIuXHJcbiAgICogQG1lbWJlcm9mIEFkZFVzZXJSb3N0ZXJDb21wb25lbnRcclxuICAgKi9cclxuICB1cGRhdGVFZGl0VXNlclJvbGVGb3JtR3JvdXAoKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5oYXNDbGFzc2lmaWNhdGlvbilcclxuICAgICAgdGhpcy51cGRhdGVFZGl0VXNlclJvbGVGb3JtQ29udHJvbHMoXHJcbiAgICAgICAgdGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXA/LmZvcm1Hcm91cFswXT8uY29udHJvbHM/Lmxlbmd0aCAtIDEsXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlNFTEVDVCxcclxuICAgICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmNsYXNzaWZpY2F0aW9uICsgJyonLFxyXG4gICAgICAgICAgY29udHJvbE5hbWU6ICdjbGFzc2lmaWNhdGlvbicsXHJcbiAgICAgICAgICBkcm9wZG93bk9wdGlvbnM6IHRoaXMuY2xhc3NpZmljYXRpb25zLFxyXG4gICAgICAgICAgdmFsdWU6IHRoaXMuY2xhc3NpZmljYXRpb25zPy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbj8ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5jbGFzc2lmaWNhdGlvblxyXG4gICAgICAgICAgKVswXSxcclxuICAgICAgICAgIHZhbGlkYXRpb246IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcclxuICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgICAgcmVxdWlyZWRFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucmVxdWlyZWQsXHJcbiAgICAgICAgICBhcmlhTGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5jbGFzc2lmaWNhdGlvbixcclxuICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5jbGFzc2lmaWNhdGlvbixcclxuICAgICAgICB9XHJcbiAgICAgICk7XHJcbiAgICB0aGlzLnVwZGF0ZUVkaXRVc2VyUm9sZUZvcm1Db250cm9scyhcclxuICAgICAgdGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXA/LmZvcm1Hcm91cFswXT8uY29udHJvbHM/Lmxlbmd0aCAtIDEsXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuU0VMRUNULFxyXG4gICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/Lm1lbWJlclR5cGUgKyAnKicsXHJcbiAgICAgICAgY29udHJvbE5hbWU6ICdtZW1iZXJUeXBlJyxcclxuICAgICAgICBkcm9wZG93bk9wdGlvbnM6IHRoaXMubWVtYmVyVHlwZXMsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMubWVtYmVyVHlwZXM/LmZpbHRlcihcclxuICAgICAgICAgIChvcHRpb24pID0+IG9wdGlvbj8ubmFtZSA9PT0gdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5tZW1iZXJTdGF0dXNcclxuICAgICAgICApWzBdLFxyXG4gICAgICAgIHZhbGlkYXRpb246IFtWYWxpZGF0b3JzLnJlcXVpcmVkXSxcclxuICAgICAgICBwbGFjZWhvbGRlcjogJycsXHJcbiAgICAgICAgc3VwcG9ydE1lc3NhZ2U6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8ubWVtYmVyVHlwZSxcclxuICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICBhcmlhTGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYUxhYmVsPy5tZW1iZXJUeXBlLFxyXG4gICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8ubWVtYmVyVHlwZSxcclxuICAgICAgfVxyXG4gICAgKTtcclxuICAgIHRoaXMudXBkYXRlRWRpdFVzZXJSb2xlRm9ybUNvbnRyb2xzKFxyXG4gICAgICB0aGlzLmVkaXRVc2VyUm9sZUZvcm1Hcm91cD8uZm9ybUdyb3VwWzBdPy5jb250cm9scz8ubGVuZ3RoLFxyXG4gICAgICB7XHJcbiAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLk1VTFRJX1NFTEVDVF9BVVRPX0NPTVBMRVRFLFxyXG4gICAgICAgIGxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbiArICcqJyxcclxuICAgICAgICBjb250cm9sTmFtZTogJ3JlcHJlc2VudGluZ09yZycsXHJcbiAgICAgICAgdmFsaWRhdGlvbjogW1xyXG4gICAgICAgICAgVmFsaWRhdG9ycy5yZXF1aXJlZCxcclxuICAgICAgICAgIFZhbGlkYXRvcnMubWF4TGVuZ3RoKFxyXG4gICAgICAgICAgICBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMucmVwcmVzZW50aW5nT3JnTmFtZU1heExlbmd0aFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIFZhbGlkYXRvcnMubWluTGVuZ3RoKFxyXG4gICAgICAgICAgICBHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMucmVwcmVzZW50aW5nT3JnTmFtZU1pbkxlbmd0aFxyXG4gICAgICAgICAgKSxcclxuICAgICAgICAgIFZhbGlkYXRvcnMucGF0dGVybihHcm91cHNWYWxpZGF0aW9uUGF0dGVybnMucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uKSxcclxuICAgICAgICBdLFxyXG4gICAgICAgIG11bHRpU2VsZWN0QXV0b0NvbXBsZXRlT3B0aW9uczogdGhpcy5vcmdhbml6YXRpb25zLFxyXG4gICAgICAgIHZhbHVlOiB0aGlzLnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnMubGVuZ3RoXHJcbiAgICAgICAgICA/IHRoaXMub3JnU2VhcmNoVmFsdWUubGVuZ3RoXHJcbiAgICAgICAgICAgID8gdGhpcy5vcmdTZWFyY2hWYWx1ZVxyXG4gICAgICAgICAgICA6IHRoaXMucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uc1xyXG4gICAgICAgICAgOiB0aGlzLnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnNbMF0ubmFtZSxcclxuICAgICAgICBwbGFjZWhvbGRlcjogJycsXHJcbiAgICAgICAgc3VwcG9ydE1lc3NhZ2U6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8uc3VwcG9ydFRleHQ/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbixcclxuICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICBtYXhFcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LmxpbWl0XHJcbiAgICAgICAgICAgID8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uTWF4Q2hhcnMsXHJcbiAgICAgICAgbWluRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5saW1pdFxyXG4gICAgICAgICAgICA/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbk1pbkNoYXJzLFxyXG4gICAgICAgIHBhdHRlcm5FcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnBhdHRlcm5cclxuICAgICAgICAgICAgPy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb24sXHJcbiAgICAgICAgYXJpYUxhYmVsOlxyXG4gICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbixcclxuICAgICAgICBhcmlhRGVzY3JpYmVkQnlJZDpcclxuICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWRcclxuICAgICAgICAgICAgPy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb24sXHJcbiAgICAgIH1cclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHNlbGVjdGVkIG9yZ2FuaXphdGlvbnMuXHJcbiAgICogQHBhcmFtIHtBdXRvQ29tcGxldGVPcHRpb25bXX0gc2VsZWN0ZWRPcmdcclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkT3JnYW5pemF0aW9ucyhzZWxlY3RlZE9yZzogQXV0b0NvbXBsZXRlT3B0aW9uW10pOiB2b2lkIHtcclxuICAgIHRoaXMucmVwcmVzZW50aW5nT3JnYW5pemF0aW9ucyA9IHNlbGVjdGVkT3JnO1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xyXG4gICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zLmxlbmd0aFxyXG4gICAgICA/ICh0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSBmYWxzZSlcclxuICAgICAgOiAodGhpcy5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkID0gdHJ1ZSk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgdGhlIGVkaXQgdXNlciBmb3JtIGdyb3VwIGNvbnRyb2xzIGJ5IGFkZGluZyBmaWVsZENvbmZpZyBhdCByZXF1aXJlZCBpbmRleC5cclxuICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXhQb3NpdGlvblxyXG4gICAqIEBwYXJhbSB7RmllbGRDb25maWd9IGZpZWxkQ29uZmlnXHJcbiAgICogQG1lbWJlcm9mIEVkaXRVc2VyUm9sZXNDb21wb25lbnRcclxuICAgKi9cclxuICB1cGRhdGVFZGl0VXNlclJvbGVGb3JtQ29udHJvbHMoXHJcbiAgICBpbmRleFBvc2l0aW9uOiBudW1iZXIsXHJcbiAgICBmaWVsZENvbmZpZzogRmllbGRDb25maWdcclxuICApOiB2b2lkIHtcclxuICAgIHRoaXMuZWRpdFVzZXJSb2xlRm9ybUdyb3VwLmZvcm1Hcm91cFswXS5jb250cm9scy5zcGxpY2UoXHJcbiAgICAgIGluZGV4UG9zaXRpb24sXHJcbiAgICAgIDAsXHJcbiAgICAgIGZpZWxkQ29uZmlnXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSGFuZGxlcyB1c2VyIHJvbGUgc2VsZWN0aW9uIGFuZCBzYXZlIGJ1dHRvbiBlbmFibGUgZGlzYWJsZSBpbiBlZGl0IHVzZXIgcm9sZXMgZm9ybS5cclxuICAgKiBAcGFyYW0ge0NoZWNrYm94T3B0aW9ufSBldmVudFxyXG4gICAqIEBtZW1iZXJvZiBFZGl0VXNlclJvbGVzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25Vc2VyUm9sZVNlbGVjdGlvbihldmVudDogQ2hlY2tib3hPcHRpb24pOiB2b2lkIHtcclxuICAgIGlmIChldmVudD8uY2hlY2tlZCkge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVJZHM/LnB1c2goZXZlbnQ/LmlkIGFzIHN0cmluZyk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVJZHMgPSB0aGlzLnNlbGVjdGVkVXNlclJvbGVJZHM/LmZpbHRlcihcclxuICAgICAgICAoaWQpID0+IGlkICE9PSBldmVudD8uaWRcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRoaXMuZ3JvdXBzU2VydmljZS5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkKFxyXG4gICAgICB0aGlzLmdyb3VwUm9zdGVyVHlwZSxcclxuICAgICAgdGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXBSZWY/LnN0YXR1cyxcclxuICAgICAgdGhpcy5zZWxlY3RlZFVzZXJSb2xlSWRzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHJvbGVzIGFuZCBkZXRhaWxzIG9mIHVzZXIgb24gZm9ybSBzdWJtaXNzaW9uLlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIG9uRWRpdFVzZXJSb2xlRm9ybVN1Ym1pdChmb3JtOiBGb3JtR3JvdXBbXSk6IHZvaWQge1xyXG4gICAgZm9ybVswXT8ubWFya0FsbEFzVG91Y2hlZCgpO1xyXG4gICAgaWYgKGZvcm1bMF0uc3RhdHVzID09PSBGb3JtU3RhdHVzPy5WQUxJRCkge1xyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2VcclxuICAgICAgICAuZWRpdEdyb3Vwc1VzZXJSb2xlKHRoaXMuZ2V0RWRpdFVzZXJSb2xlUGF5bG9hZChmb3JtWzBdPy5nZXRSYXdWYWx1ZSgpKSlcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3VibWl0Rm9ybVJlc3BvbnNlPy5lbWl0KHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIGVkaXQgdXNlciBwYXlsb2FkIGZyb20gdGhlIGZvcm0gZGF0YSBkZXBlbmRzIG9uIHRoZSBHcm91cFJvc3RlclR5cGUgYW5kIHJldHVybnMuXHJcbiAgICogQHBhcmFtIHsqfSBmb3JtRGF0YVxyXG4gICAqIEByZXR1cm4geyhBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCl9XHJcbiAgICogQG1lbWJlcm9mIEVkaXRVc2VyUm9sZXNDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRFZGl0VXNlclJvbGVQYXlsb2FkKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGZvcm1EYXRhOiBhbnlcclxuICApOiBBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCB7XHJcbiAgICBsZXQgcGF5bG9hZDogQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQ7XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZT8uSU5ESVZJRFVBTCkge1xyXG4gICAgICBjb25zdCBmb3JtYXR0ZWRPcHRpb25zID0gdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zLm1hcCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9yZ0lkOiBvcHRpb24uaWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgb3JnTmFtZTogb3B0aW9uLm5hbWUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgdXNlcklkOiB0aGlzLnNlbGVjdGVkVXNlckluZm8/LnVzZXJJZCxcclxuICAgICAgICAgIGVtYWlsOiB0aGlzLnNlbGVjdGVkVXNlckluZm8/LmVtYWlsLFxyXG4gICAgICAgICAgcm9sZXM6IHRoaXMuc2VsZWN0ZWRVc2VyUm9sZUlkcyxcclxuICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBzU2VydmljZS5zZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBvcmdhbml6YXRpb25zOiBmb3JtYXR0ZWRPcHRpb25zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmICh0aGlzLmhhc0NsYXNzaWZpY2F0aW9uKVxyXG4gICAgICAgIHBheWxvYWQucGF5bG9hZC5jbGFzc2lmaWNhdGlvbiA9IHtcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uSWQ6IGZvcm1EYXRhPy5jbGFzc2lmaWNhdGlvblxyXG4gICAgICAgICAgICA/IGZvcm1EYXRhPy5jbGFzc2lmaWNhdGlvbj8uaWRcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGZvcm1EYXRhPy5tZW1iZXJUeXBlICYmXHJcbiAgICAgICAgIXBheWxvYWQucGF5bG9hZC5yb2xlcz8uaW5jbHVkZXMoZm9ybURhdGE/Lm1lbWJlclR5cGU/LmlkKVxyXG4gICAgICApXHJcbiAgICAgICAgcGF5bG9hZC5wYXlsb2FkLnJvbGVzPy5wdXNoKGZvcm1EYXRhPy5tZW1iZXJUeXBlPy5pZCk7XHJcbiAgICB9IGVsc2VcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICBlbWFpbDogdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5lbWFpbCxcclxuICAgICAgICAgIHVzZXJJZDogdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy51c2VySWQsXHJcbiAgICAgICAgICByb2xlczogdGhpcy5zZWxlY3RlZFVzZXJSb2xlSWRzLFxyXG4gICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cHNTZXJ2aWNlPy5zZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIHJldHVybiBwYXlsb2FkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgZm9ybSBjYW5jZWwgZXZlbnQuXHJcbiAgICogQG1lbWJlcm9mIEVkaXRVc2VyUm9sZXNDb21wb25lbnRcclxuICAgKi9cclxuICBvbkVkaXRVc2VyUm9sZUNhbmNlbGxlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNhbmNlbD8uZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZvcm0gcmVmZXJlbmNlLlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEZvcm1Hcm91cFJlZmVyZW5jZShmb3JtOiBGb3JtR3JvdXBbXSkge1xyXG4gICAgdGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXBSZWYgPSBmb3JtWzBdO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVXNlckluZm8/LmNhbkRlbGV0ZSkge1xyXG4gICAgICAodGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXBSZWY/LmNvbnRyb2xzWydyb2xlcyddIGFzIEZvcm1BcnJheSlcclxuICAgICAgICA/LmF0KDApXHJcbiAgICAgICAgPy5kaXNhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGVkaXQgdXNlciByb2xlIGZvcm0gY2hhbmdlIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgZWRpdFVzZXJSb2xlRm9ybUdyb3VwUmVmXHJcbiAgICovXHJcbiAgb25FZGl0VXNlclJvbGVGb3JtQ2hhbmdlKGZvcm06IEZvcm1Hcm91cFtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRVc2VyUm9sZUZvcm1Hcm91cFJlZiA9IGZvcm1bMF07XHJcbiAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0aGlzLmdyb3Vwc1NlcnZpY2UuaXNTdWJtaXRCdXR0b25EaXNhYmxlZChcclxuICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUsXHJcbiAgICAgIHRoaXMuZWRpdFVzZXJSb2xlRm9ybUdyb3VwUmVmPy5zdGF0dXMsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyUm9sZUlkc1xyXG4gICAgKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zLmxlbmd0aCAmJlxyXG4gICAgICB0aGlzLmVkaXRVc2VyUm9sZUZvcm1Hcm91cFJlZi5jb250cm9sc1sncmVwcmVzZW50aW5nT3JnJ10uc3RhdHVzID09PVxyXG4gICAgICAgIEZvcm1TdGF0dXMuSU5WQUxJRFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBjbGFzc2lmaWNhdGlvbnMgZnJvbSBtYXN0ZXIgZGF0YS5cclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldENsYXNzaWZpY2F0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBzU2VydmljZVxyXG4gICAgICAuZ2V0Q2xhc3NpZmljYXRpb25zKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWNhdGlvbnM/LnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBvcHRpb24uY2xhc3NpZmljYXRpb25JZCxcclxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24uY2xhc3NpZmljYXRpb25EZXNjLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVGb3JtQ29udHJvbE9wdGlvbnMoXHJcbiAgICAgICAgICAgICdjbGFzc2lmaWNhdGlvbicsXHJcbiAgICAgICAgICAgICdkcm9wZG93bk9wdGlvbnMnLFxyXG4gICAgICAgICAgICB0aGlzLmNsYXNzaWZpY2F0aW9ucyxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5jbGFzc2lmaWNhdGlvblxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBtZW1iZXIgdHlwZXMgZnJvbSBtYXN0ZXIgZGF0YS5cclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE1lbWJlclR5cGVzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWVtYmVyVHlwZXMgPSB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0TWVtYmVyVHlwZXMoKTtcclxuICAgIG1lbWJlclR5cGVzPy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgdGhpcy5tZW1iZXJUeXBlcz8ucHVzaCh7XHJcbiAgICAgICAgaWQ6IG9wdGlvbi5yb2xlSWQsXHJcbiAgICAgICAgbmFtZTogb3B0aW9uLnJvbGVOYW1lLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtQ29udHJvbE9wdGlvbnMoXHJcbiAgICAgICdtZW1iZXJUeXBlJyxcclxuICAgICAgJ2Ryb3Bkb3duT3B0aW9ucycsXHJcbiAgICAgIHRoaXMubWVtYmVyVHlwZXMsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbz8ubWVtYmVyU3RhdHVzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbnMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yZ05hbWVcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE9yZ2FuaXphdGlvbnMob3JnTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm9yZ1NlYXJjaFZhbHVlID0gb3JnTmFtZTtcclxuICAgIHRoaXMub3JnYW5pemF0aW9ucyA9IFtdO1xyXG4gICAgb3JnTmFtZSA9IG9yZ05hbWU/LnRyaW1TdGFydCgpO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtQ29udHJvbE9wdGlvbnMoXHJcbiAgICAgICdyZXByZXNlbnRpbmdPcmcnLFxyXG4gICAgICAnbXVsdGlTZWxlY3RBdXRvQ29tcGxldGVPcHRpb25zJyxcclxuICAgICAgW10sXHJcbiAgICAgICcnXHJcbiAgICApO1xyXG4gICAgaWYgKCFvcmdOYW1lKSByZXR1cm47XHJcbiAgICBjb25zdCBvcmdSZXF1ZXN0UGF5bG9hZDogT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHsgb3JnTmFtZTogb3JnTmFtZSB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JvdXBzU2VydmljZVxyXG4gICAgICAuZ2V0T3JnYW5pemF0aW9ucyhvcmdSZXF1ZXN0UGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgcmVzcG9uc2U/LmJvZHk/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbnM/LnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBvcHRpb24ub3JnSWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLm9yZ05hbWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sT3B0aW9ucyhcclxuICAgICAgICAgICAgJ3JlcHJlc2VudGluZ09yZycsXHJcbiAgICAgICAgICAgICdtdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnMnLFxyXG4gICAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbnMsXHJcbiAgICAgICAgICAgIG9yZ05hbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBvcmdOYW1lTGVuZ3RoID1cclxuICAgICAgICAgICAgdGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXBSZWY/LmdldCgncmVwcmVzZW50aW5nT3JnJyk/LnZhbHVlPy5uYW1lXHJcbiAgICAgICAgICAgICAgPy5sZW5ndGg7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG9yZ05hbWVMZW5ndGggJiZcclxuICAgICAgICAgICAgb3JnTmFtZUxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLnJlcHJlc2VudGluZ09yZ05hbWVNaW5MZW5ndGggJiZcclxuICAgICAgICAgICAgb3JnTmFtZUxlbmd0aCAhPT0gMFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFVzZXJSb2xlRm9ybUdyb3VwUmVmPy5nZXQoJ3JlcHJlc2VudGluZ09yZycpPy5zZXRFcnJvcnMoe1xyXG4gICAgICAgICAgICAgIG1pbmxlbmd0aDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ubGltaXRcclxuICAgICAgICAgICAgICAgICAgPy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25NaW5DaGFycyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBkcm9wZG93biBvcHRpb25zIG9mIENsYXNzaWZpY2F0aW9uLCBNZW1iZXIgVHlwZSBhbmQgUmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbiBmb3JtIGZpZWxkcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybUNvbnRyb2xOYW1lXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1Db250cm9sSW5wdXRQcm9wZXJ0eVxyXG4gICAqIEBwYXJhbSB7U2VsZWN0T3B0aW9uW119IG9wdGlvbnNcclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHVwZGF0ZUZvcm1Db250cm9sT3B0aW9ucyhcclxuICAgIGZvcm1Db250cm9sTmFtZTogc3RyaW5nLFxyXG4gICAgZm9ybUNvbnRyb2xJbnB1dFByb3BlcnR5OiBzdHJpbmcsXHJcbiAgICBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSxcclxuICAgIHNlbGVjdGVkT3B0aW9uPzogc3RyaW5nXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5keW5hbWljRm9ybUNvbXBvbmVudD8uZm9ybUZpZWxkcz8udG9BcnJheSgpO1xyXG4gICAgZm9ybUZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlYXJjaGVkT3JnTmFtZSA9IG9wdGlvbnM/LmZpbHRlcigob3B0aW9uKSA9PlxyXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uPy5pbmNsdWRlcyhvcHRpb24/Lm5hbWUpXHJcbiAgICAgIClbMF07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBmb3JtRmllbGQ/LmNvbXBvbmVudD8uaW5zdGFuY2U/LmNvbmZpZz8uY29udHJvbE5hbWUgPT09XHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWUgJiZcclxuICAgICAgICBmb3JtRmllbGQ/LmNvbXBvbmVudD8uaW5zdGFuY2U/Lltmb3JtQ29udHJvbElucHV0UHJvcGVydHldXHJcbiAgICAgIClcclxuICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Lmluc3RhbmNlW2Zvcm1Db250cm9sSW5wdXRQcm9wZXJ0eV0gPSBvcHRpb25zO1xyXG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgc2VhcmNoZWRPcmdOYW1lKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXBSZWZcclxuICAgICAgICAgIC5nZXQoZm9ybUNvbnRyb2xOYW1lKVxyXG4gICAgICAgICAgPy5zZXRWYWx1ZShzZWFyY2hlZE9yZ05hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhcHR1cmVzIHRoZSBzZXJ2ZXIgc2lkZSBlcnJvcnMgYW5kIGhhbmRsZXMgaXQgYmFzZWQgb24gdGhlIGN1c3RvbSBvciBIdHRwIGVycm9ycy5cclxuICAgKiBAcGFyYW0ge0h0dHBFcnJvclJlc3BvbnNlfSBlcnJvclxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBFZGl0VXNlclJvbGVzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBoYW5kbGVFcnJvcnMoZXJyb3I6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yQ29kZXMpICYmICFlcnJvcj8uZXJyb3I/LnN0YXR1cykge1xyXG4gICAgICBpZiAoZXJyb3JDb2Rlc1swXSAhPT0gJzMwMDQnKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5ncm91cHNTZXJ2aWNlPy5wYXJzZUVycm9yTWVzc2FnZShlcnJvckNvZGVzKTtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGUuRVJST1IsXHJcbiAgICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgdGhpcy5nbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlPy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERpc2FibGVzIGZvcm0gc3VibWl0IGJ1dHRvbiB3aGVuIG9yZyBuYW1lIGxlbmd0aCBpcyBsZXNzIHRoYW4gbWluQ2hhclRvU2VhcmNoIGFuZCBncmVhdGVyIHRoYW4gemVyby5cclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRpc2FibGVTdWJtaXRCdXR0b24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sT3B0aW9ucyhcclxuICAgICAgICAncmVwcmVzZW50aW5nT3JnJyxcclxuICAgICAgICAnbXVsdGlTZWxlY3RBdXRvQ29tcGxldGVPcHRpb25zJyxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTmdPbkRlc3Ryb3kgcGVyZm9ybXMgbmVjZXNzYXJ5IGNsZWFudXAgdGFza3MsIHN1Y2ggYXMgdW5zdWJzY3JpYmluZyBmcm9tIHN1YnNjcmlwdGlvbiB3aGVuIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAqIEBtZW1iZXJvZiBFZGl0VXNlclJvbGVzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxpZWVlc2EtZHluYW1pYy1mb3JtXHJcbiAgW2xlZnRCdXR0b25MYWJlbF09XCJsZWZ0QnV0dG9uTGFiZWxcIlxyXG4gIFtyaWdodEJ1dHRvbkxhYmVsXT1cInJpZ2h0QnV0dG9uTGFiZWxcIlxyXG4gIFtpc0xlZ2VuZFZpc2libGVdPVwiZmFsc2VcIlxyXG4gIFtpc1N1Ym1pdEJ1dHRvbkRpc2FibGVkXT1cImlzU3VibWl0QnV0dG9uRGlzYWJsZWRcIlxyXG4gIFtjb2xXaWR0aF09XCJjb2xXaWR0aFwiXHJcbiAgW2FjdGlvbkJ1dHRvbkFsaWduXT1cImFjdGlvbkJ1dHRvbkFsaWduXCJcclxuICBbZm9ybUdyb3Vwc109XCJlZGl0VXNlclJvbGVGb3JtR3JvdXBcIlxyXG4gIFtpc0xlZnRCdXR0b25OZWVkZWRdPVwidHJ1ZVwiXHJcbiAgKGZvcm1TdWJtaXQpPVwib25FZGl0VXNlclJvbGVGb3JtU3VibWl0KCRldmVudClcIlxyXG4gIChmb3JtTGVmdEJ1dHRvbkNsaWNrZWQpPVwib25FZGl0VXNlclJvbGVDYW5jZWxsZWQoKVwiXHJcbiAgKGZvcm1DaGVja2JveFNlbGVjdGlvbik9XCJvblVzZXJSb2xlU2VsZWN0aW9uKCRldmVudClcIlxyXG4gIChmb3JtR3JvdXBzUmVmZXJlbmNlKT1cImdldEZvcm1Hcm91cFJlZmVyZW5jZSgkZXZlbnQpXCJcclxuICAoZm9ybUNoYW5nZSk9XCJvbkVkaXRVc2VyUm9sZUZvcm1DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgKGZvcm1NdWx0aVNlbGVjdEF1dG9Db21wbGV0ZVNlYXJjaCk9XCJnZXRPcmdhbml6YXRpb25zKCRldmVudClcIlxyXG4gIChtdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnNTZWxlY3RlZCk9XCJnZXRTZWxlY3RlZE9yZ2FuaXphdGlvbnMoJGV2ZW50KVwiXHJcbiAgKGZvcm1NdWx0aVNlbGVjdEF1dG9Db21wbGV0ZUNsZWFyU2VhcmNoVmFsdWUpPVwiZGlzYWJsZVN1Ym1pdEJ1dHRvbigpXCJcclxuPjwvaWVlZXNhLWR5bmFtaWMtZm9ybT5cclxuIl19
|
|
534
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdC11c2VyLXJvbGVzLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2dyb3Vwcy9zcmMvbGliL2NvbXBvbmVudHMvZWRpdC11c2VyLXJvbGVzL2VkaXQtdXNlci1yb2xlcy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9jb21wb25lbnRzL2VkaXQtdXNlci1yb2xlcy9lZGl0LXVzZXItcm9sZXMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFNBQVMsRUFDVCxZQUFZLEVBR1osTUFBTSxFQUNOLFNBQVMsRUFDVCxpQkFBaUIsR0FDbEIsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRS9DLE9BQU8sRUFDTCxTQUFTLEVBSVQsZUFBZSxFQUlmLG9CQUFvQixHQUNyQixNQUFNLDBCQUEwQixDQUFDO0FBQ2xDLE9BQU8sS0FBSyxXQUFXLE1BQU0sNkJBQTZCLENBQUM7QUFDM0QsT0FBTyxFQUF3QixVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUVsRSxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDekQsT0FBTyxFQUNMLFNBQVMsR0FHVixNQUFNLHFCQUFxQixDQUFDO0FBTzdCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNqRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQzs7OztBQU16RTs7Ozs7R0FLRztBQVNILE1BQU0sT0FBTyxzQkFBc0I7SUEwQmpDO0lBQ0Us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T0FHRztJQUNILG1CQUFtQjtRQUNqQixJQUFJLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQy9DLElBQUksQ0FBQyx3QkFBd0IsQ0FDM0IsaUJBQWlCLEVBQ2pCLGdDQUFnQyxFQUNoQyxFQUFFLENBQ0gsQ0FBQztZQUNGLElBQUksQ0FBQyxzQkFBc0IsR0FBRyxJQUFJLENBQUM7U0FDcEM7SUFDSCxDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsV0FBVztRQUNULElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDOUIsQ0FBQzsrR0FwbUJVLHNCQUFzQjttR0FBdEIsc0JBQXNCLHlOQXVCdEIsb0JBQW9CLGdEQ25GakMsMjRCQWtCQSw4bVlEcUNZLFlBQVksK0JBQUUsb0JBQW9COzs0RkFLakMsc0JBQXNCO2tCQVJsQyxTQUFTOytCQUNFLHdCQUF3QixjQUN0QixJQUFJLFdBQ1AsQ0FBQyxZQUFZLEVBQUUsb0JBQW9CLENBQUMsaUJBRzlCLGlCQUFpQixDQUFDLElBQUk7d0tBeUJKLG9CQUFvQjtzQkFBcEQsU0FBUzt1QkFBQyxvQkFBb0I7Z0JBQ3JCLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcclxuICBDb21wb25lbnQsXHJcbiAgRXZlbnRFbWl0dGVyLFxyXG4gIE9uRGVzdHJveSxcclxuICBPbkluaXQsXHJcbiAgT3V0cHV0LFxyXG4gIFZpZXdDaGlsZCxcclxuICBWaWV3RW5jYXBzdWxhdGlvbixcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHsgR3JvdXBzU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2dyb3Vwcy5zZXJ2aWNlJztcclxuaW1wb3J0IHtcclxuICBBbGlnblR5cGUsXHJcbiAgQXV0b0NvbXBsZXRlT3B0aW9uLFxyXG4gIENoZWNrYm94T3B0aW9uLFxyXG4gIEZpZWxkQ29uZmlnLFxyXG4gIEZvcm1Db250cm9sVHlwZSxcclxuICBGb3JtR3JpZCxcclxuICBGb3JtTW9kZWwsXHJcbiAgU2VsZWN0T3B0aW9uLFxyXG4gIER5bmFtaWNGb3JtQ29tcG9uZW50LFxyXG59IGZyb20gJ0BpZWVlc2EtbnBtL3ByZXNlbnRhdGlvbic7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4uLy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IEZvcm1BcnJheSwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBHcm91cFVzZXJJbmZvIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2dyb3VwLXVzZXItaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7IFN1YmplY3QsIHRha2VVbnRpbCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdHVzIH0gZnJvbSAnLi4vLi4vbW9kZWxzL2Zvcm0tc3RhdHVzLm1vZGVsJztcclxuaW1wb3J0IHsgSHR0cEVycm9yUmVzcG9uc2UgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcbmltcG9ydCB7XHJcbiAgQWxlcnRUeXBlLFxyXG4gIEFsZXJ0c1NlcnZpY2UsXHJcbiAgR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxufSBmcm9tICdAaWVlZXNhLW5wbS91dGlsaXR5JztcclxuaW1wb3J0IHtcclxuICBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQsXHJcbiAgQWRkT3JFZGl0VXNlclBheWxvYWQsXHJcbiAgUmVwcmVzZW50aW5nT3JnYW5pemF0aW9uLFxyXG59IGZyb20gJy4uLy4uL21vZGVscy9hZGQtb3ItZWRpdC11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBUeXBlQ29uZmlndXJhdGlvbiB9IGZyb20gJy4uLy4uL21vZGVscy9ncm91cC10eXBlcy5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3VwUm9zdGVyVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy9yb3N0ZXItdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucyB9IGZyb20gJy4uLy4uL2Fzc2V0cy9mb3JtLXZhbGlkYXRpb25zJztcclxuaW1wb3J0IHtcclxuICBPcmdhbml6YXRpb24sXHJcbiAgT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWQsXHJcbn0gZnJvbSAnLi4vLi4vbW9kZWxzL29yZ2FuaXphdGlvbi5tb2RlbCc7XHJcblxyXG4vKipcclxuICogQ29tcG9uZW50IGltcGxlbWVudHMgdGhlIHZpZXcgYW5kIGZ1bmN0aW9uYWxpdGllcyB0byBlZGl0IGdyb3VwIHVzZXJzIHRvIHJvc3Rlci5cclxuICogQGNsYXNzIEVkaXRVc2VyUm9sZXNDb21wb25lbnRcclxuICogQGltcGxlbWVudHMge09uSW5pdH1cclxuICogQGltcGxlbWVudHMge09uRGVzdHJveX1cclxuICovXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnaWVlZXNhLWVkaXQtdXNlci1yb2xlcycsXHJcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcclxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBEeW5hbWljRm9ybUNvbXBvbmVudF0sXHJcbiAgdGVtcGxhdGVVcmw6ICcuL2VkaXQtdXNlci1yb2xlcy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vZWRpdC11c2VyLXJvbGVzLmNvbXBvbmVudC5zY3NzJ10sXHJcbiAgZW5jYXBzdWxhdGlvbjogVmlld0VuY2Fwc3VsYXRpb24uTm9uZSxcclxufSlcclxuZXhwb3J0IGNsYXNzIEVkaXRVc2VyUm9sZXNDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveSB7XHJcbiAgZGVzdHJveSQgPSBuZXcgU3ViamVjdDxib29sZWFuPigpO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY29uc3RhbnRzOiBhbnkgPSBzY3JlZW5UZXh0cztcclxuICBhZGRVc2VyUm9zdGVyVGV4dHMgPSB0aGlzLmNvbnN0YW50cz8uYWRkVXNlclJvc3RlcjtcclxuICBsZWZ0QnV0dG9uTGFiZWwgPSB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmxlZnRCdXR0b25MYWJlbDtcclxuICByaWdodEJ1dHRvbkxhYmVsID0gdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5zYXZlQnV0dG9uTGFiZWw7XHJcbiAgaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gIGNvbFdpZHRoOiBGb3JtR3JpZCA9IHsgeHM6IDEyLCB4bDogMTIsIHNtOiAxMiwgbWQ6IDEyLCBsZzogMTIgfTtcclxuICBlZGl0VXNlclJvbGVGb3JtR3JvdXAhOiBGb3JtTW9kZWw7XHJcbiAgZWRpdFVzZXJSb2xlRm9ybUdyb3VwUmVmITogRm9ybUdyb3VwO1xyXG4gIHVzZXJSb2xlcyE6IENoZWNrYm94T3B0aW9uW107XHJcbiAgc2VsZWN0ZWRVc2VyUm9sZUlkczogc3RyaW5nW10gPSBbXTtcclxuICBzZWxlY3RlZFVzZXJJbmZvITogR3JvdXBVc2VySW5mbztcclxuICBhY3Rpb25CdXR0b25BbGlnbiA9IEFsaWduVHlwZS5MRUZUO1xyXG4gIGNsYXNzaWZpY2F0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBtZW1iZXJUeXBlczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBvcmdhbml6YXRpb25zOiBTZWxlY3RPcHRpb25bXSA9IFtdO1xyXG4gIGdyb3VwVHlwZXMhOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW107XHJcbiAgaGFzQ2xhc3NpZmljYXRpb24gPSBmYWxzZTtcclxuICBncm91cFJvc3RlclR5cGUhOiBHcm91cFJvc3RlclR5cGU7XHJcbiAgcmVwcmVzZW50aW5nT3JnYW5pemF0aW9uczogU2VsZWN0T3B0aW9uW10gPSBbXTtcclxuICBvcmdTZWFyY2hWYWx1ZSA9ICcnO1xyXG4gIEBWaWV3Q2hpbGQoRHluYW1pY0Zvcm1Db21wb25lbnQpIGR5bmFtaWNGb3JtQ29tcG9uZW50ITogRHluYW1pY0Zvcm1Db21wb25lbnQ7XHJcbiAgQE91dHB1dCgpIHN1Ym1pdEZvcm1SZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgZm9ybUNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBjb25zdHJ1Y3RvcihcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSBncm91cHNTZXJ2aWNlOiBHcm91cHNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwdWJsaWMgZ2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZTogR2xvYmFsRXJyb3JIYW5kbGVyU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGFsZXJ0U2VydmljZTogQWxlcnRzU2VydmljZSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cclxuICApIHt9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGVkaXQgdXNlciByb2xlIHJlcXVpcmVkIGluZm9ybWF0aW9uIGFuZCBmb3JtIGdyb3VwIGFycmF5LlxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBFZGl0VXNlclJvbGVzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8gPSB0aGlzLmdyb3Vwc1NlcnZpY2U/LmdldFNlbGVjdGVkVXNlckluZm8oKTtcclxuICAgIHRoaXMuZ3JvdXBzU2VydmljZS5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zLmZvckVhY2goXHJcbiAgICAgICh1c2VyOiBSZXByZXNlbnRpbmdPcmdhbml6YXRpb24pID0+IHtcclxuICAgICAgICBpZiAoXHJcbiAgICAgICAgICB0aGlzLnNlbGVjdGVkVXNlckluZm8udXNlcklkID09PSB1c2VyLnVzZXJJZCAmJlxyXG4gICAgICAgICAgdXNlci5vcmdhbml6YXRpb25zPy5sZW5ndGhcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHVzZXIub3JnYW5pemF0aW9ucy5mb3JFYWNoKChvcHRpb246IE9yZ2FuaXphdGlvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnM/LnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBvcHRpb24ub3JnSWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLm9yZ05hbWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC1leHByZXNzaW9uc1xyXG4gICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zPy5sZW5ndGhcclxuICAgICAgPyAodGhpcy5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkID0gZmFsc2UpXHJcbiAgICAgIDogKHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRydWUpO1xyXG4gICAgY29uc3Qgc2VsZWN0ZWRVc2VyUm9sZU5hbWVzID0gdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5yb2xlXHJcbiAgICAgID8uc3BsaXQoJywnKVxyXG4gICAgICAubWFwKChyb2xlKSA9PiByb2xlPy50cmltKCkpO1xyXG4gICAgdGhpcy51c2VyUm9sZXMgPSB0aGlzLmdyb3Vwc1NlcnZpY2U/LmdldEdyb3VwVHlwZVVzZXJSb2xlcygpO1xyXG4gICAgdGhpcy51c2VyUm9sZXM/LmZvckVhY2goKHJvbGUpID0+IHtcclxuICAgICAgaWYgKHNlbGVjdGVkVXNlclJvbGVOYW1lcz8uaW5jbHVkZXMocm9sZT8ubmFtZSBhcyBzdHJpbmcpKSB7XHJcbiAgICAgICAgcm9sZS5jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVJZHM/LnB1c2gocm9sZT8uaWQgYXMgc3RyaW5nKTtcclxuICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBjb25zdCBncm91cFR5cGUgPSB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk7XHJcbiAgICB0aGlzLmhhc0NsYXNzaWZpY2F0aW9uID0gZ3JvdXBUeXBlPy5oYXNDbGFzc2lmaWNhdGlvbiA/PyBmYWxzZTtcclxuICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID0gZ3JvdXBUeXBlPy5yb3N0ZXJUeXBlIGFzIEdyb3VwUm9zdGVyVHlwZTtcclxuICAgIGlmICghdGhpcy5ncm91cFJvc3RlclR5cGUpXHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnNob3dNZXNzYWdlKHtcclxuICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgIG1lc3NhZ2U6IHRoaXMuY29uc3RhbnRzPy5lcnJvcnM/LkVSMTAwMSxcclxuICAgICAgICBhbGVydFR5cGU6IEFsZXJ0VHlwZS5FUlJPUixcclxuICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICB9KTtcclxuICAgIGVsc2Uge1xyXG4gICAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZT8uSU5ESVZJRFVBTCkge1xyXG4gICAgICAgIGlmICh0aGlzLmhhc0NsYXNzaWZpY2F0aW9uKSB0aGlzLmdldENsYXNzaWZpY2F0aW9ucygpO1xyXG4gICAgICAgIHRoaXMuZ2V0TWVtYmVyVHlwZXMoKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmVkaXRVc2VyUm9sZXNGb3JtR3JvdXAoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemUgdGhlIGVkaXQgdXNlciByb2xlIGZvcm0gZ3JvdXAgYXJyYXkuXHJcbiAgICogQG1lbWJlcm9mIEVkaXRVc2VyUm9sZXNDb21wb25lbnRcclxuICAgKi9cclxuICBlZGl0VXNlclJvbGVzRm9ybUdyb3VwKCkge1xyXG4gICAgdGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXAgPSB7XHJcbiAgICAgIGZvcm1Hcm91cDogW1xyXG4gICAgICAgIHtcclxuICAgICAgICAgIGxlZ2VuZDogJycsXHJcbiAgICAgICAgICBjb250cm9sczogW1xyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlPy5URVhUX0FSRUEsXHJcbiAgICAgICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uZW1haWwgKyAnKicsXHJcbiAgICAgICAgICAgICAgY29udHJvbE5hbWU6ICdlbWFpbCcsXHJcbiAgICAgICAgICAgICAgdmFsdWU6IHRoaXMuc2VsZWN0ZWRVc2VySW5mbz8uZW1haWwsXHJcbiAgICAgICAgICAgICAgYXJpYUxhYmVsOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8uZW1haWwsXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5lbWFpbCxcclxuICAgICAgICAgICAgICBpc1JlYWRvbmx5OiB0cnVlLFxyXG4gICAgICAgICAgICAgIGFyaWFNdWx0aWxpbmU6IGZhbHNlLFxyXG4gICAgICAgICAgICAgIGlzUmVzaXplOiB0cnVlLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgdHlwZTogRm9ybUNvbnRyb2xUeXBlLlRFWFRfQVJFQSxcclxuICAgICAgICAgICAgICBsYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5mdWxsTmFtZSArICcqJyxcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ2Z1bGxOYW1lJyxcclxuICAgICAgICAgICAgICB2YWx1ZTogdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5uYW1lLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmZ1bGxOYW1lLFxyXG4gICAgICAgICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZD8uZnVsbE5hbWUsXHJcbiAgICAgICAgICAgICAgaXNSZWFkb25seTogdHJ1ZSxcclxuICAgICAgICAgICAgICBhcmlhTXVsdGlsaW5lOiBmYWxzZSxcclxuICAgICAgICAgICAgICBpc1Jlc2l6ZTogdHJ1ZSxcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5DSEVDS0JPWCxcclxuICAgICAgICAgICAgICBsYWJlbDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGUuSU5ESVZJRFVBTFxyXG4gICAgICAgICAgICAgICAgICA/IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ucm9sZVxyXG4gICAgICAgICAgICAgICAgICA6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ucm9sZSArICcqJyxcclxuICAgICAgICAgICAgICBjb250cm9sTmFtZTogJ3JvbGVzJyxcclxuICAgICAgICAgICAgICBjaGVja2JveE9wdGlvbnM6IHRoaXMudXNlclJvbGVzLFxyXG4gICAgICAgICAgICAgIG1pblNlbGVjdGlvblJlcXVpcmVkOiAxLFxyXG4gICAgICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LnJvbGUsXHJcbiAgICAgICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5yb2xlLFxyXG4gICAgICAgICAgICAgIHN1cHBvcnRNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMXHJcbiAgICAgICAgICAgICAgICAgID8gdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0XHJcbiAgICAgICAgICAgICAgICAgICAgICA/LnJvbGVGb3JJbmRpdmlkdWFsUm9zdGVyXHJcbiAgICAgICAgICAgICAgICAgIDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0Py5yb2xlLFxyXG4gICAgICAgICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgICAgICB2YWxpZGF0aW9uOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5JTkRJVklEVUFMXHJcbiAgICAgICAgICAgICAgICAgID8gW11cclxuICAgICAgICAgICAgICAgICAgOiBbVmFsaWRhdG9ycy5yZXF1aXJlZF0sXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICBdLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIF0sXHJcbiAgICB9O1xyXG4gICAgaWYgKHRoaXMuZ3JvdXBSb3N0ZXJUeXBlID09PSBHcm91cFJvc3RlclR5cGU/LklORElWSURVQUwpIHtcclxuICAgICAgdGhpcy51cGRhdGVFZGl0VXNlclJvbGVGb3JtR3JvdXAoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEFkZHMgY2xhc3NpZmljYXRpb24sIE1lbWJlciBUeXBlIGFuZCBSZXByZXNlbnRpbmcgT3JnYW5pemF0aW9uIGZvcm0gY29udHJvbHMgd2hpbGUgZWRpdGluZyBuZXcgdXNlciB0byBhbiBpbmRpdmlkdWFsIGdyb3VwIHJvc3Rlci5cclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIHVwZGF0ZUVkaXRVc2VyUm9sZUZvcm1Hcm91cCgpOiB2b2lkIHtcclxuICAgIGlmICh0aGlzLmhhc0NsYXNzaWZpY2F0aW9uKVxyXG4gICAgICB0aGlzLnVwZGF0ZUVkaXRVc2VyUm9sZUZvcm1Db250cm9scyhcclxuICAgICAgICB0aGlzLmVkaXRVc2VyUm9sZUZvcm1Hcm91cD8uZm9ybUdyb3VwWzBdPy5jb250cm9scz8ubGVuZ3RoIC0gMSxcclxuICAgICAgICB7XHJcbiAgICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuU0VMRUNULFxyXG4gICAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uY2xhc3NpZmljYXRpb24gKyAnKicsXHJcbiAgICAgICAgICBjb250cm9sTmFtZTogJ2NsYXNzaWZpY2F0aW9uJyxcclxuICAgICAgICAgIGRyb3Bkb3duT3B0aW9uczogdGhpcy5jbGFzc2lmaWNhdGlvbnMsXHJcbiAgICAgICAgICB2YWx1ZTogdGhpcy5jbGFzc2lmaWNhdGlvbnM/LmZpbHRlcihcclxuICAgICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uPy5uYW1lID09PSB0aGlzLnNlbGVjdGVkVXNlckluZm8/LmNsYXNzaWZpY2F0aW9uXHJcbiAgICAgICAgICApWzBdLFxyXG4gICAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgICAgcGxhY2Vob2xkZXI6ICcnLFxyXG4gICAgICAgICAgc3VwcG9ydE1lc3NhZ2U6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8uY2xhc3NpZmljYXRpb24sXHJcbiAgICAgICAgICByZXF1aXJlZEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/Lm1lc3NhZ2U/LmVycm9yPy5yZXF1aXJlZCxcclxuICAgICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8uYXJpYURlc2NyaWJlZEJ5SWQ/LmNsYXNzaWZpY2F0aW9uLFxyXG4gICAgICAgIH1cclxuICAgICAgKTtcclxuICAgIHRoaXMudXBkYXRlRWRpdFVzZXJSb2xlRm9ybUNvbnRyb2xzKFxyXG4gICAgICB0aGlzLmVkaXRVc2VyUm9sZUZvcm1Hcm91cD8uZm9ybUdyb3VwWzBdPy5jb250cm9scz8ubGVuZ3RoIC0gMSxcclxuICAgICAge1xyXG4gICAgICAgIHR5cGU6IEZvcm1Db250cm9sVHlwZS5TRUxFQ1QsXHJcbiAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ubWVtYmVyVHlwZSArICcqJyxcclxuICAgICAgICBjb250cm9sTmFtZTogJ21lbWJlclR5cGUnLFxyXG4gICAgICAgIGRyb3Bkb3duT3B0aW9uczogdGhpcy5tZW1iZXJUeXBlcyxcclxuICAgICAgICB2YWx1ZTogdGhpcy5tZW1iZXJUeXBlcz8uZmlsdGVyKFxyXG4gICAgICAgICAgKG9wdGlvbikgPT4gb3B0aW9uPy5uYW1lID09PSB0aGlzLnNlbGVjdGVkVXNlckluZm8/Lm1lbWJlclN0YXR1c1xyXG4gICAgICAgIClbMF0sXHJcbiAgICAgICAgdmFsaWRhdGlvbjogW1ZhbGlkYXRvcnMucmVxdWlyZWRdLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcclxuICAgICAgICBzdXBwb3J0TWVzc2FnZTogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LnN1cHBvcnRUZXh0Py5tZW1iZXJUeXBlLFxyXG4gICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgIGFyaWFMYWJlbDogdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhTGFiZWw/Lm1lbWJlclR5cGUsXHJcbiAgICAgICAgYXJpYURlc2NyaWJlZEJ5SWQ6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFEZXNjcmliZWRCeUlkPy5tZW1iZXJUeXBlLFxyXG4gICAgICB9XHJcbiAgICApO1xyXG4gICAgdGhpcy51cGRhdGVFZGl0VXNlclJvbGVGb3JtQ29udHJvbHMoXHJcbiAgICAgIHRoaXMuZWRpdFVzZXJSb2xlRm9ybUdyb3VwPy5mb3JtR3JvdXBbMF0/LmNvbnRyb2xzPy5sZW5ndGgsXHJcbiAgICAgIHtcclxuICAgICAgICB0eXBlOiBGb3JtQ29udHJvbFR5cGUuTVVMVElfU0VMRUNUX0FVVE9fQ09NUExFVEUsXHJcbiAgICAgICAgbGFiZWw6IHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5sYWJlbD8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uICsgJyonLFxyXG4gICAgICAgIGNvbnRyb2xOYW1lOiAncmVwcmVzZW50aW5nT3JnJyxcclxuICAgICAgICB2YWxpZGF0aW9uOiBbXHJcbiAgICAgICAgICBWYWxpZGF0b3JzLnJlcXVpcmVkLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5tYXhMZW5ndGgoXHJcbiAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5yZXByZXNlbnRpbmdPcmdOYW1lTWF4TGVuZ3RoXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5taW5MZW5ndGgoXHJcbiAgICAgICAgICAgIEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5yZXByZXNlbnRpbmdPcmdOYW1lTWluTGVuZ3RoXHJcbiAgICAgICAgICApLFxyXG4gICAgICAgICAgVmFsaWRhdG9ycy5wYXR0ZXJuKEdyb3Vwc1ZhbGlkYXRpb25QYXR0ZXJucy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb24pLFxyXG4gICAgICAgIF0sXHJcbiAgICAgICAgbXVsdGlTZWxlY3RBdXRvQ29tcGxldGVPcHRpb25zOiB0aGlzLm9yZ2FuaXphdGlvbnMsXHJcbiAgICAgICAgdmFsdWU6IHRoaXMucmVwcmVzZW50aW5nT3JnYW5pemF0aW9ucy5sZW5ndGhcclxuICAgICAgICAgID8gdGhpcy5vcmdTZWFyY2hWYWx1ZS5sZW5ndGhcclxuICAgICAgICAgICAgPyB0aGlzLm9yZ1NlYXJjaFZhbHVlXHJcbiAgICAgICAgICAgIDogdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zXHJcbiAgICAgICAgICA6IHRoaXMucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uc1swXS5uYW1lLFxyXG4gICAgICAgIHBsYWNlaG9sZGVyOiAnJyxcclxuICAgICAgICBzdXBwb3J0TWVzc2FnZTpcclxuICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5zdXBwb3J0VGV4dD8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uLFxyXG4gICAgICAgIHJlcXVpcmVkRXJyb3JNZXNzYWdlOiB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LnJlcXVpcmVkLFxyXG4gICAgICAgIG1heEVycm9yTWVzc2FnZTpcclxuICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ubGltaXRcclxuICAgICAgICAgICAgPy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25NYXhDaGFycyxcclxuICAgICAgICBtaW5FcnJvck1lc3NhZ2U6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubWVzc2FnZT8uZXJyb3I/LmxpbWl0XHJcbiAgICAgICAgICAgID8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uTWluQ2hhcnMsXHJcbiAgICAgICAgcGF0dGVybkVycm9yTWVzc2FnZTpcclxuICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ucGF0dGVyblxyXG4gICAgICAgICAgICA/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbixcclxuICAgICAgICBhcmlhTGFiZWw6XHJcbiAgICAgICAgICB0aGlzLmFkZFVzZXJSb3N0ZXJUZXh0cz8ubGFiZWw/LmFyaWFMYWJlbD8ucmVwcmVzZW50aW5nT3JnYW5pemF0aW9uLFxyXG4gICAgICAgIGFyaWFEZXNjcmliZWRCeUlkOlxyXG4gICAgICAgICAgdGhpcy5hZGRVc2VyUm9zdGVyVGV4dHM/LmxhYmVsPy5hcmlhRGVzY3JpYmVkQnlJZFxyXG4gICAgICAgICAgICA/LnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbixcclxuICAgICAgfVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgc2VsZWN0ZWQgb3JnYW5pemF0aW9ucy5cclxuICAgKiBAcGFyYW0ge0F1dG9Db21wbGV0ZU9wdGlvbltdfSBzZWxlY3RlZE9yZ1xyXG4gICAqIEBtZW1iZXJvZiBFZGl0VXNlclJvbGVzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRPcmdhbml6YXRpb25zKHNlbGVjdGVkT3JnOiBBdXRvQ29tcGxldGVPcHRpb25bXSk6IHZvaWQge1xyXG4gICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zID0gc2VsZWN0ZWRPcmc7XHJcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLWV4cHJlc3Npb25zXHJcbiAgICB0aGlzLnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnMubGVuZ3RoXHJcbiAgICAgID8gKHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IGZhbHNlKVxyXG4gICAgICA6ICh0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyB0aGUgZWRpdCB1c2VyIGZvcm0gZ3JvdXAgY29udHJvbHMgYnkgYWRkaW5nIGZpZWxkQ29uZmlnIGF0IHJlcXVpcmVkIGluZGV4LlxyXG4gICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleFBvc2l0aW9uXHJcbiAgICogQHBhcmFtIHtGaWVsZENvbmZpZ30gZmllbGRDb25maWdcclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHVwZGF0ZUVkaXRVc2VyUm9sZUZvcm1Db250cm9scyhcclxuICAgIGluZGV4UG9zaXRpb246IG51bWJlcixcclxuICAgIGZpZWxkQ29uZmlnOiBGaWVsZENvbmZpZ1xyXG4gICk6IHZvaWQge1xyXG4gICAgdGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXAuZm9ybUdyb3VwWzBdLmNvbnRyb2xzLnNwbGljZShcclxuICAgICAgaW5kZXhQb3NpdGlvbixcclxuICAgICAgMCxcclxuICAgICAgZmllbGRDb25maWdcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIHVzZXIgcm9sZSBzZWxlY3Rpb24gYW5kIHNhdmUgYnV0dG9uIGVuYWJsZSBkaXNhYmxlIGluIGVkaXQgdXNlciByb2xlcyBmb3JtLlxyXG4gICAqIEBwYXJhbSB7Q2hlY2tib3hPcHRpb259IGV2ZW50XHJcbiAgICogQG1lbWJlcm9mIEVkaXRVc2VyUm9sZXNDb21wb25lbnRcclxuICAgKi9cclxuICBvblVzZXJSb2xlU2VsZWN0aW9uKGV2ZW50OiBDaGVja2JveE9wdGlvbik6IHZvaWQge1xyXG4gICAgaWYgKGV2ZW50Py5jaGVja2VkKSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyUm9sZUlkcz8ucHVzaChldmVudD8uaWQgYXMgc3RyaW5nKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyUm9sZUlkcyA9IHRoaXMuc2VsZWN0ZWRVc2VyUm9sZUlkcz8uZmlsdGVyKFxyXG4gICAgICAgIChpZCkgPT4gaWQgIT09IGV2ZW50Py5pZFxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgdGhpcy5pc1N1Ym1pdEJ1dHRvbkRpc2FibGVkID0gdGhpcy5ncm91cHNTZXJ2aWNlLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQoXHJcbiAgICAgIHRoaXMuZ3JvdXBSb3N0ZXJUeXBlLFxyXG4gICAgICB0aGlzLmVkaXRVc2VyUm9sZUZvcm1Hcm91cFJlZj8uc3RhdHVzLFxyXG4gICAgICB0aGlzLnNlbGVjdGVkVXNlclJvbGVJZHNcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGUgcm9sZXMgYW5kIGRldGFpbHMgb2YgdXNlciBvbiBmb3JtIHN1Ym1pc3Npb24uXHJcbiAgICogQHBhcmFtIHtGb3JtR3JvdXBbXX0gZm9ybVxyXG4gICAqIEBtZW1iZXJvZiBFZGl0VXNlclJvbGVzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgb25FZGl0VXNlclJvbGVGb3JtU3VibWl0KGZvcm06IEZvcm1Hcm91cFtdKTogdm9pZCB7XHJcbiAgICBmb3JtWzBdPy5tYXJrQWxsQXNUb3VjaGVkKCk7XHJcbiAgICBjb25zdCBpc0FsbE90aGVyQ29udHJvbHNWYWxpZCA9IE9iamVjdC5rZXlzKGZvcm1bMF0uY29udHJvbHMpXHJcbiAgICAgIC5maWx0ZXIoKGNvbnRyb2xOYW1lKSA9PiBjb250cm9sTmFtZSAhPT0gJ3JlcHJlc2VudGluZ09yZycpXHJcbiAgICAgIC5ldmVyeShcclxuICAgICAgICAoY29udHJvbE5hbWUpID0+IGZvcm1bMF0uZ2V0KGNvbnRyb2xOYW1lKT8uc3RhdHVzID09PSBGb3JtU3RhdHVzPy5WQUxJRFxyXG4gICAgICApO1xyXG4gICAgaWYgKFxyXG4gICAgICAoZm9ybVswXS5nZXQoJ3JlcHJlc2VudGluZ09yZycpPy5zdGF0dXMgPT09IEZvcm1TdGF0dXM/LklOVkFMSUQgJiZcclxuICAgICAgICBpc0FsbE90aGVyQ29udHJvbHNWYWxpZCAmJlxyXG4gICAgICAgIHRoaXMucmVwcmVzZW50aW5nT3JnYW5pemF0aW9ucy5sZW5ndGggPiAwKSB8fFxyXG4gICAgICBmb3JtWzBdLnN0YXR1cyA9PT0gRm9ybVN0YXR1cz8uVkFMSURcclxuICAgICkge1xyXG4gICAgICB0aGlzLmdyb3Vwc1NlcnZpY2VcclxuICAgICAgICAuZWRpdEdyb3Vwc1VzZXJSb2xlKHRoaXMuZ2V0RWRpdFVzZXJSb2xlUGF5bG9hZChmb3JtWzBdPy5nZXRSYXdWYWx1ZSgpKSlcclxuICAgICAgICAucGlwZSh0YWtlVW50aWwodGhpcy5kZXN0cm95JCkpXHJcbiAgICAgICAgLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICBuZXh0OiAocmVzKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXM/LnN0YXR1cykge1xyXG4gICAgICAgICAgICAgIHRoaXMuc3VibWl0Rm9ybVJlc3BvbnNlPy5lbWl0KHJlcyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgICBlcnJvcjogKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXJyb3JzKGVycm9yKTtcclxuICAgICAgICAgIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDb25zdHJ1Y3RzIGVkaXQgdXNlciBwYXlsb2FkIGZyb20gdGhlIGZvcm0gZGF0YSBkZXBlbmRzIG9uIHRoZSBHcm91cFJvc3RlclR5cGUgYW5kIHJldHVybnMuXHJcbiAgICogQHBhcmFtIHsqfSBmb3JtRGF0YVxyXG4gICAqIEByZXR1cm4geyhBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCl9XHJcbiAgICogQG1lbWJlcm9mIEVkaXRVc2VyUm9sZXNDb21wb25lbnRcclxuICAgKi9cclxuICBnZXRFZGl0VXNlclJvbGVQYXlsb2FkKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICAgIGZvcm1EYXRhOiBhbnlcclxuICApOiBBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCB7XHJcbiAgICBsZXQgcGF5bG9hZDogQWRkT3JFZGl0VXNlclBheWxvYWQgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQ7XHJcbiAgICBpZiAodGhpcy5ncm91cFJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZT8uSU5ESVZJRFVBTCkge1xyXG4gICAgICBjb25zdCBmb3JtYXR0ZWRPcHRpb25zID0gdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zLm1hcCgob3B0aW9uKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgIG9yZ0lkOiBvcHRpb24uaWQgYXMgc3RyaW5nLFxyXG4gICAgICAgICAgb3JnTmFtZTogb3B0aW9uLm5hbWUsXHJcbiAgICAgICAgfTtcclxuICAgICAgfSk7XHJcbiAgICAgIHBheWxvYWQgPSB7XHJcbiAgICAgICAgcGF5bG9hZDoge1xyXG4gICAgICAgICAgdXNlcklkOiB0aGlzLnNlbGVjdGVkVXNlckluZm8/LnVzZXJJZCxcclxuICAgICAgICAgIGVtYWlsOiB0aGlzLnNlbGVjdGVkVXNlckluZm8/LmVtYWlsLFxyXG4gICAgICAgICAgcm9sZXM6IHRoaXMuc2VsZWN0ZWRVc2VyUm9sZUlkcyxcclxuICAgICAgICAgIGdyb3VwSWQ6IHRoaXMuZ3JvdXBzU2VydmljZS5zZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgICBvcmdhbml6YXRpb25zOiBmb3JtYXR0ZWRPcHRpb25zLFxyXG4gICAgICAgIH0sXHJcbiAgICAgIH07XHJcbiAgICAgIGlmICh0aGlzLmhhc0NsYXNzaWZpY2F0aW9uKVxyXG4gICAgICAgIHBheWxvYWQucGF5bG9hZC5jbGFzc2lmaWNhdGlvbiA9IHtcclxuICAgICAgICAgIGNsYXNzaWZpY2F0aW9uSWQ6IGZvcm1EYXRhPy5jbGFzc2lmaWNhdGlvblxyXG4gICAgICAgICAgICA/IGZvcm1EYXRhPy5jbGFzc2lmaWNhdGlvbj8uaWRcclxuICAgICAgICAgICAgOiAnJyxcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgaWYgKFxyXG4gICAgICAgIGZvcm1EYXRhPy5tZW1iZXJUeXBlICYmXHJcbiAgICAgICAgIXBheWxvYWQucGF5bG9hZC5yb2xlcz8uaW5jbHVkZXMoZm9ybURhdGE/Lm1lbWJlclR5cGU/LmlkKVxyXG4gICAgICApXHJcbiAgICAgICAgcGF5bG9hZC5wYXlsb2FkLnJvbGVzPy5wdXNoKGZvcm1EYXRhPy5tZW1iZXJUeXBlPy5pZCk7XHJcbiAgICB9IGVsc2VcclxuICAgICAgcGF5bG9hZCA9IHtcclxuICAgICAgICBwYXlsb2FkOiB7XHJcbiAgICAgICAgICBlbWFpbDogdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5lbWFpbCxcclxuICAgICAgICAgIHVzZXJJZDogdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy51c2VySWQsXHJcbiAgICAgICAgICByb2xlczogdGhpcy5zZWxlY3RlZFVzZXJSb2xlSWRzLFxyXG4gICAgICAgICAgZ3JvdXBJZDogdGhpcy5ncm91cHNTZXJ2aWNlPy5zZWxlY3RlZEdyb3VwSW5mbz8uZ3JvdXBJZCBhcyBzdHJpbmcsXHJcbiAgICAgICAgfSxcclxuICAgICAgfTtcclxuICAgIHJldHVybiBwYXlsb2FkO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRW1pdHMgZm9ybSBjYW5jZWwgZXZlbnQuXHJcbiAgICogQG1lbWJlcm9mIEVkaXRVc2VyUm9sZXNDb21wb25lbnRcclxuICAgKi9cclxuICBvbkVkaXRVc2VyUm9sZUNhbmNlbGxlZCgpOiB2b2lkIHtcclxuICAgIHRoaXMuZm9ybUNhbmNlbD8uZW1pdCgpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IGZvcm0gcmVmZXJlbmNlLlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldEZvcm1Hcm91cFJlZmVyZW5jZShmb3JtOiBGb3JtR3JvdXBbXSkge1xyXG4gICAgdGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXBSZWYgPSBmb3JtWzBdO1xyXG4gICAgaWYgKCF0aGlzLnNlbGVjdGVkVXNlckluZm8/LmNhbkRlbGV0ZSkge1xyXG4gICAgICAodGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXBSZWY/LmNvbnRyb2xzWydyb2xlcyddIGFzIEZvcm1BcnJheSlcclxuICAgICAgICA/LmF0KDApXHJcbiAgICAgICAgPy5kaXNhYmxlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBIYW5kbGVzIGVkaXQgdXNlciByb2xlIGZvcm0gY2hhbmdlIGV2ZW50LlxyXG4gICAqIEBwYXJhbSB7Rm9ybUdyb3VwW119IGZvcm1cclxuICAgKiBAbWVtYmVyb2YgZWRpdFVzZXJSb2xlRm9ybUdyb3VwUmVmXHJcbiAgICovXHJcbiAgb25FZGl0VXNlclJvbGVGb3JtQ2hhbmdlKGZvcm06IEZvcm1Hcm91cFtdKTogdm9pZCB7XHJcbiAgICB0aGlzLmVkaXRVc2VyUm9sZUZvcm1Hcm91cFJlZiA9IGZvcm1bMF07XHJcbiAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0aGlzLmdyb3Vwc1NlcnZpY2UuaXNTdWJtaXRCdXR0b25EaXNhYmxlZChcclxuICAgICAgdGhpcy5ncm91cFJvc3RlclR5cGUsXHJcbiAgICAgIHRoaXMuZWRpdFVzZXJSb2xlRm9ybUdyb3VwUmVmPy5zdGF0dXMsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VyUm9sZUlkc1xyXG4gICAgKTtcclxuICAgIGlmIChcclxuICAgICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zLmxlbmd0aCAmJlxyXG4gICAgICB0aGlzLmVkaXRVc2VyUm9sZUZvcm1Hcm91cFJlZi5jb250cm9sc1sncmVwcmVzZW50aW5nT3JnJ10uc3RhdHVzID09PVxyXG4gICAgICAgIEZvcm1TdGF0dXMuSU5WQUxJRFxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IGZhbHNlO1xyXG4gICAgfSBlbHNlIGlmICh0aGlzLnJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgIHRoaXMuaXNTdWJtaXRCdXR0b25EaXNhYmxlZCA9IHRydWU7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBjbGFzc2lmaWNhdGlvbnMgZnJvbSBtYXN0ZXIgZGF0YS5cclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldENsYXNzaWZpY2F0aW9ucygpOiB2b2lkIHtcclxuICAgIHRoaXMuZ3JvdXBzU2VydmljZVxyXG4gICAgICAuZ2V0Q2xhc3NpZmljYXRpb25zKClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJlc3BvbnNlPy5ib2R5Py5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jbGFzc2lmaWNhdGlvbnM/LnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBvcHRpb24uY2xhc3NpZmljYXRpb25JZCxcclxuICAgICAgICAgICAgICBuYW1lOiBvcHRpb24uY2xhc3NpZmljYXRpb25EZXNjLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgdGhpcy51cGRhdGVGb3JtQ29udHJvbE9wdGlvbnMoXHJcbiAgICAgICAgICAgICdjbGFzc2lmaWNhdGlvbicsXHJcbiAgICAgICAgICAgICdkcm9wZG93bk9wdGlvbnMnLFxyXG4gICAgICAgICAgICB0aGlzLmNsYXNzaWZpY2F0aW9ucyxcclxuICAgICAgICAgICAgdGhpcy5zZWxlY3RlZFVzZXJJbmZvPy5jbGFzc2lmaWNhdGlvblxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgZXJyb3I6IChlcnJvcjogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLmhhbmRsZUVycm9ycyhlcnJvcik7XHJcbiAgICAgICAgfSxcclxuICAgICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBtZW1iZXIgdHlwZXMgZnJvbSBtYXN0ZXIgZGF0YS5cclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE1lbWJlclR5cGVzKCk6IHZvaWQge1xyXG4gICAgY29uc3QgbWVtYmVyVHlwZXMgPSB0aGlzLmdyb3Vwc1NlcnZpY2UuZ2V0TWVtYmVyVHlwZXMoKTtcclxuICAgIG1lbWJlclR5cGVzPy5mb3JFYWNoKChvcHRpb24pID0+IHtcclxuICAgICAgdGhpcy5tZW1iZXJUeXBlcz8ucHVzaCh7XHJcbiAgICAgICAgaWQ6IG9wdGlvbi5yb2xlSWQsXHJcbiAgICAgICAgbmFtZTogb3B0aW9uLnJvbGVOYW1lLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtQ29udHJvbE9wdGlvbnMoXHJcbiAgICAgICdtZW1iZXJUeXBlJyxcclxuICAgICAgJ2Ryb3Bkb3duT3B0aW9ucycsXHJcbiAgICAgIHRoaXMubWVtYmVyVHlwZXMsXHJcbiAgICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbz8ubWVtYmVyU3RhdHVzXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgcmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbnMuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IG9yZ05hbWVcclxuICAgKiBAbWVtYmVyb2YgQWRkVXNlclJvc3RlckNvbXBvbmVudFxyXG4gICAqL1xyXG4gIGdldE9yZ2FuaXphdGlvbnMob3JnTmFtZTogc3RyaW5nKTogdm9pZCB7XHJcbiAgICB0aGlzLm9yZ1NlYXJjaFZhbHVlID0gb3JnTmFtZTtcclxuICAgIHRoaXMub3JnYW5pemF0aW9ucyA9IFtdO1xyXG4gICAgb3JnTmFtZSA9IG9yZ05hbWU/LnRyaW1TdGFydCgpO1xyXG4gICAgdGhpcy51cGRhdGVGb3JtQ29udHJvbE9wdGlvbnMoXHJcbiAgICAgICdyZXByZXNlbnRpbmdPcmcnLFxyXG4gICAgICAnbXVsdGlTZWxlY3RBdXRvQ29tcGxldGVPcHRpb25zJyxcclxuICAgICAgW10sXHJcbiAgICAgICcnXHJcbiAgICApO1xyXG4gICAgaWYgKCFvcmdOYW1lKSByZXR1cm47XHJcbiAgICBjb25zdCBvcmdSZXF1ZXN0UGF5bG9hZDogT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWQgPSB7XHJcbiAgICAgIHBheWxvYWQ6IHsgb3JnTmFtZTogb3JnTmFtZSB9LFxyXG4gICAgfTtcclxuICAgIHRoaXMuZ3JvdXBzU2VydmljZVxyXG4gICAgICAuZ2V0T3JnYW5pemF0aW9ucyhvcmdSZXF1ZXN0UGF5bG9hZClcclxuICAgICAgLnBpcGUodGFrZVVudGlsKHRoaXMuZGVzdHJveSQpKVxyXG4gICAgICAuc3Vic2NyaWJlKHtcclxuICAgICAgICBuZXh0OiAocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMub3JnYW5pemF0aW9ucyA9IFtdO1xyXG4gICAgICAgICAgcmVzcG9uc2U/LmJvZHk/LmZvckVhY2goKG9wdGlvbikgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbnM/LnB1c2goe1xyXG4gICAgICAgICAgICAgIGlkOiBvcHRpb24ub3JnSWQsXHJcbiAgICAgICAgICAgICAgbmFtZTogb3B0aW9uLm9yZ05hbWUsXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sT3B0aW9ucyhcclxuICAgICAgICAgICAgJ3JlcHJlc2VudGluZ09yZycsXHJcbiAgICAgICAgICAgICdtdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnMnLFxyXG4gICAgICAgICAgICB0aGlzLm9yZ2FuaXphdGlvbnMsXHJcbiAgICAgICAgICAgIG9yZ05hbWVcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBjb25zdCBvcmdOYW1lTGVuZ3RoID1cclxuICAgICAgICAgICAgdGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXBSZWY/LmdldCgncmVwcmVzZW50aW5nT3JnJyk/LnZhbHVlPy5uYW1lXHJcbiAgICAgICAgICAgICAgPy5sZW5ndGg7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIG9yZ05hbWVMZW5ndGggJiZcclxuICAgICAgICAgICAgb3JnTmFtZUxlbmd0aCA8XHJcbiAgICAgICAgICAgICAgR3JvdXBzVmFsaWRhdGlvblBhdHRlcm5zLnJlcHJlc2VudGluZ09yZ05hbWVNaW5MZW5ndGggJiZcclxuICAgICAgICAgICAgb3JnTmFtZUxlbmd0aCAhPT0gMFxyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZWRpdFVzZXJSb2xlRm9ybUdyb3VwUmVmPy5nZXQoJ3JlcHJlc2VudGluZ09yZycpPy5zZXRFcnJvcnMoe1xyXG4gICAgICAgICAgICAgIG1pbmxlbmd0aDpcclxuICAgICAgICAgICAgICAgIHRoaXMuYWRkVXNlclJvc3RlclRleHRzPy5tZXNzYWdlPy5lcnJvcj8ubGltaXRcclxuICAgICAgICAgICAgICAgICAgPy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25NaW5DaGFycyxcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gICAgICAgIGVycm9yOiAoZXJyb3I6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5oYW5kbGVFcnJvcnMoZXJyb3IpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlIHRoZSBkcm9wZG93biBvcHRpb25zIG9mIENsYXNzaWZpY2F0aW9uLCBNZW1iZXIgVHlwZSBhbmQgUmVwcmVzZW50aW5nIE9yZ2FuaXphdGlvbiBmb3JtIGZpZWxkcy5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZm9ybUNvbnRyb2xOYW1lXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGZvcm1Db250cm9sSW5wdXRQcm9wZXJ0eVxyXG4gICAqIEBwYXJhbSB7U2VsZWN0T3B0aW9uW119IG9wdGlvbnNcclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIHVwZGF0ZUZvcm1Db250cm9sT3B0aW9ucyhcclxuICAgIGZvcm1Db250cm9sTmFtZTogc3RyaW5nLFxyXG4gICAgZm9ybUNvbnRyb2xJbnB1dFByb3BlcnR5OiBzdHJpbmcsXHJcbiAgICBvcHRpb25zOiBTZWxlY3RPcHRpb25bXSxcclxuICAgIHNlbGVjdGVkT3B0aW9uPzogc3RyaW5nXHJcbiAgKTogdm9pZCB7XHJcbiAgICBjb25zdCBmb3JtRmllbGRzID0gdGhpcy5keW5hbWljRm9ybUNvbXBvbmVudD8uZm9ybUZpZWxkcz8udG9BcnJheSgpO1xyXG4gICAgZm9ybUZpZWxkcz8uZm9yRWFjaCgoZm9ybUZpZWxkKSA9PiB7XHJcbiAgICAgIGNvbnN0IHNlYXJjaGVkT3JnTmFtZSA9IG9wdGlvbnM/LmZpbHRlcigob3B0aW9uKSA9PlxyXG4gICAgICAgIHNlbGVjdGVkT3B0aW9uPy5pbmNsdWRlcyhvcHRpb24/Lm5hbWUpXHJcbiAgICAgIClbMF07XHJcbiAgICAgIGlmIChcclxuICAgICAgICBmb3JtRmllbGQ/LmNvbXBvbmVudD8uaW5zdGFuY2U/LmNvbmZpZz8uY29udHJvbE5hbWUgPT09XHJcbiAgICAgICAgICBmb3JtQ29udHJvbE5hbWUgJiZcclxuICAgICAgICBmb3JtRmllbGQ/LmNvbXBvbmVudD8uaW5zdGFuY2U/Lltmb3JtQ29udHJvbElucHV0UHJvcGVydHldXHJcbiAgICAgIClcclxuICAgICAgICBmb3JtRmllbGQuY29tcG9uZW50Lmluc3RhbmNlW2Zvcm1Db250cm9sSW5wdXRQcm9wZXJ0eV0gPSBvcHRpb25zO1xyXG4gICAgICBpZiAoc2VsZWN0ZWRPcHRpb24gJiYgc2VhcmNoZWRPcmdOYW1lKSB7XHJcbiAgICAgICAgdGhpcy5lZGl0VXNlclJvbGVGb3JtR3JvdXBSZWZcclxuICAgICAgICAgIC5nZXQoZm9ybUNvbnRyb2xOYW1lKVxyXG4gICAgICAgICAgPy5zZXRWYWx1ZShzZWFyY2hlZE9yZ05hbWUpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhcHR1cmVzIHRoZSBzZXJ2ZXIgc2lkZSBlcnJvcnMgYW5kIGhhbmRsZXMgaXQgYmFzZWQgb24gdGhlIGN1c3RvbSBvciBIdHRwIGVycm9ycy5cclxuICAgKiBAcGFyYW0ge0h0dHBFcnJvclJlc3BvbnNlfSBlcnJvclxyXG4gICAqIEByZXR1cm4gLXJldHVybnMgbm90aGluZ1xyXG4gICAqIEBtZW1iZXJvZiBFZGl0VXNlclJvbGVzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBoYW5kbGVFcnJvcnMoZXJyb3I6IGFueSk6IHZvaWQge1xyXG4gICAgY29uc3QgZXJyb3JDb2RlcyA9IGVycm9yPy5lcnJvcj8uYm9keT8uZXJyb3JDb2RlcztcclxuICAgIGlmIChBcnJheS5pc0FycmF5KGVycm9yQ29kZXMpICYmICFlcnJvcj8uZXJyb3I/LnN0YXR1cykge1xyXG4gICAgICBpZiAoZXJyb3JDb2Rlc1swXSAhPT0gJzMwMDQnKSB7XHJcbiAgICAgICAgY29uc3QgZXJyb3JNZXNzYWdlID0gdGhpcy5ncm91cHNTZXJ2aWNlPy5wYXJzZUVycm9yTWVzc2FnZShlcnJvckNvZGVzKTtcclxuICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5zaG93TWVzc2FnZSh7XHJcbiAgICAgICAgICBzdGF0dXM6ICdjdXN0b20nLFxyXG4gICAgICAgICAgbWVzc2FnZTogZXJyb3JNZXNzYWdlLFxyXG4gICAgICAgICAgYWxlcnRUeXBlOiBBbGVydFR5cGUuRVJST1IsXHJcbiAgICAgICAgICBpc0Nsb3NlTmVlZGVkOiB0cnVlLFxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9IGVsc2UgaWYgKGVycm9yICYmIGVycm9yIGluc3RhbmNlb2YgSHR0cEVycm9yUmVzcG9uc2UpIHtcclxuICAgICAgdGhpcy5nbG9iYWxFcnJvckhhbmRsZXJTZXJ2aWNlPy5oYW5kbGVFcnJvcihlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIERpc2FibGVzIGZvcm0gc3VibWl0IGJ1dHRvbiB3aGVuIG9yZyBuYW1lIGxlbmd0aCBpcyBsZXNzIHRoYW4gbWluQ2hhclRvU2VhcmNoIGFuZCBncmVhdGVyIHRoYW4gemVyby5cclxuICAgKiBAbWVtYmVyb2YgRWRpdFVzZXJSb2xlc0NvbXBvbmVudFxyXG4gICAqL1xyXG4gIGRpc2FibGVTdWJtaXRCdXR0b24oKTogdm9pZCB7XHJcbiAgICBpZiAodGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICB0aGlzLnVwZGF0ZUZvcm1Db250cm9sT3B0aW9ucyhcclxuICAgICAgICAncmVwcmVzZW50aW5nT3JnJyxcclxuICAgICAgICAnbXVsdGlTZWxlY3RBdXRvQ29tcGxldGVPcHRpb25zJyxcclxuICAgICAgICBbXVxyXG4gICAgICApO1xyXG4gICAgICB0aGlzLmlzU3VibWl0QnV0dG9uRGlzYWJsZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTmdPbkRlc3Ryb3kgcGVyZm9ybXMgbmVjZXNzYXJ5IGNsZWFudXAgdGFza3MsIHN1Y2ggYXMgdW5zdWJzY3JpYmluZyBmcm9tIHN1YnNjcmlwdGlvbiB3aGVuIHRoZSBjb21wb25lbnQgaXMgYmVpbmcgZGVzdHJveWVkLlxyXG4gICAqIEBtZW1iZXJvZiBFZGl0VXNlclJvbGVzQ29tcG9uZW50XHJcbiAgICovXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLm5leHQodHJ1ZSk7XHJcbiAgICB0aGlzLmRlc3Ryb3kkLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxpZWVlc2EtZHluYW1pYy1mb3JtXHJcbiAgW2xlZnRCdXR0b25MYWJlbF09XCJsZWZ0QnV0dG9uTGFiZWxcIlxyXG4gIFtyaWdodEJ1dHRvbkxhYmVsXT1cInJpZ2h0QnV0dG9uTGFiZWxcIlxyXG4gIFtpc0xlZ2VuZFZpc2libGVdPVwiZmFsc2VcIlxyXG4gIFtpc1N1Ym1pdEJ1dHRvbkRpc2FibGVkXT1cImlzU3VibWl0QnV0dG9uRGlzYWJsZWRcIlxyXG4gIFtjb2xXaWR0aF09XCJjb2xXaWR0aFwiXHJcbiAgW2FjdGlvbkJ1dHRvbkFsaWduXT1cImFjdGlvbkJ1dHRvbkFsaWduXCJcclxuICBbZm9ybUdyb3Vwc109XCJlZGl0VXNlclJvbGVGb3JtR3JvdXBcIlxyXG4gIFtpc0xlZnRCdXR0b25OZWVkZWRdPVwidHJ1ZVwiXHJcbiAgKGZvcm1TdWJtaXQpPVwib25FZGl0VXNlclJvbGVGb3JtU3VibWl0KCRldmVudClcIlxyXG4gIChmb3JtTGVmdEJ1dHRvbkNsaWNrZWQpPVwib25FZGl0VXNlclJvbGVDYW5jZWxsZWQoKVwiXHJcbiAgKGZvcm1DaGVja2JveFNlbGVjdGlvbik9XCJvblVzZXJSb2xlU2VsZWN0aW9uKCRldmVudClcIlxyXG4gIChmb3JtR3JvdXBzUmVmZXJlbmNlKT1cImdldEZvcm1Hcm91cFJlZmVyZW5jZSgkZXZlbnQpXCJcclxuICAoZm9ybUNoYW5nZSk9XCJvbkVkaXRVc2VyUm9sZUZvcm1DaGFuZ2UoJGV2ZW50KVwiXHJcbiAgKGZvcm1NdWx0aVNlbGVjdEF1dG9Db21wbGV0ZVNlYXJjaCk9XCJnZXRPcmdhbml6YXRpb25zKCRldmVudClcIlxyXG4gIChtdWx0aVNlbGVjdEF1dG9Db21wbGV0ZU9wdGlvbnNTZWxlY3RlZCk9XCJnZXRTZWxlY3RlZE9yZ2FuaXphdGlvbnMoJGV2ZW50KVwiXHJcbiAgKGZvcm1NdWx0aVNlbGVjdEF1dG9Db21wbGV0ZUNsZWFyU2VhcmNoVmFsdWUpPVwiZGlzYWJsZVN1Ym1pdEJ1dHRvbigpXCJcclxuPjwvaWVlZXNhLWR5bmFtaWMtZm9ybT5cclxuIl19
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export {};
|
|
2
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXAtdHlwZXMubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9tb2RlbHMvZ3JvdXAtdHlwZXMubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBpbnRlcmZhY2UgQnVzaW5lc3NSdWxlIHtcclxuICBhbGxvd1N1Ykdyb3VwOiBib29sZWFuO1xyXG4gIGFsbG93Um9zdGVyOiBib29sZWFuO1xyXG4gIHJvc3RlclR5cGU6IHN0cmluZztcclxuICBhbGxvd0FsdGVybmF0ZVZvdGluZzogYm9vbGVhbjtcclxuICBtYW5hZ2VSb3N0ZXJJbkFwcDogYm9vbGVhbjtcclxuICBhbGxvd2VkR3JvdXBUeXBlOiBzdHJpbmdbXTtcclxuICBoYXNDbGFzc2lmaWNhdGlvbj86IGJvb2xlYW47XHJcbiAgaXNBZG1pbj86IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBUeXBlIHtcclxuICBuYW1lOiBzdHJpbmc7XHJcbiAgZGVzY3JpcHRpb246IHN0cmluZztcclxuICBidXNpbmVzc1J1bGU6IEJ1c2luZXNzUnVsZTtcclxuICBoaWVyYXJjaHk6IG51bWJlcjtcclxuICB2aWV3T3JkZXI/OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBUeXBlQ29uZmlndXJhdGlvbiB7XHJcbiAgY29uZmlnRmllbGRJZDogc3RyaW5nO1xyXG4gIGNvbmZpZ0ZpZWxkVmFsdWU6IEdyb3VwVHlwZTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBHcm91cFR5cGVSZXNwb25zZSB7XHJcbiAgc3RhdHVzOiBib29sZWFuO1xyXG4gIG1lc3NhZ2U6IHN0cmluZztcclxuICBib2R5OiBHcm91cFR5cGVDb25maWd1cmF0aW9uW107XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgR3JvdXBUeXBlQ29uZmlnVmFsdWUge1xyXG4gIFtrZXk6IHN0cmluZ106IEdyb3VwVHlwZTtcclxufVxyXG4iXX0=
|
|
@@ -3,6 +3,5 @@ export var GroupRosterType;
|
|
|
3
3
|
(function (GroupRosterType) {
|
|
4
4
|
GroupRosterType["INDIVIDUAL"] = "Individual";
|
|
5
5
|
GroupRosterType["SYSTEM_USER"] = "User";
|
|
6
|
-
GroupRosterType["ENTITY"] = "Entity";
|
|
7
6
|
})(GroupRosterType || (GroupRosterType = {}));
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm9zdGVyLXR5cGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9tb2RlbHMvcm9zdGVyLXR5cGUubW9kZWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUNBQW1DO0FBQ25DLE1BQU0sQ0FBTixJQUFZLGVBR1g7QUFIRCxXQUFZLGVBQWU7SUFDekIsNENBQXlCLENBQUE7SUFDekIsdUNBQW9CLENBQUE7QUFDdEIsQ0FBQyxFQUhXLGVBQWUsS0FBZixlQUFlLFFBRzFCIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgbm8tdW51c2VkLXZhcnMgKi9cclxuZXhwb3J0IGVudW0gR3JvdXBSb3N0ZXJUeXBlIHtcclxuICBJTkRJVklEVUFMID0gJ0luZGl2aWR1YWwnLFxyXG4gIFNZU1RFTV9VU0VSID0gJ1VzZXInLFxyXG59XHJcbiJdfQ==
|
|
@@ -587,10 +587,7 @@ export class GroupsService {
|
|
|
587
587
|
* @memberof GroupsService
|
|
588
588
|
*/
|
|
589
589
|
getBusinessRuleOfSelectedGroup() {
|
|
590
|
-
|
|
591
|
-
if (businessRule?.rosterType === GroupRosterType.ENTITY)
|
|
592
|
-
businessRule.rosterType = GroupRosterType.INDIVIDUAL;
|
|
593
|
-
return businessRule;
|
|
590
|
+
return this.getLoadedGroupTypes()?.find((group) => group?.configFieldId === this.getSelectedGroupInfo()?.groupType)?.configFieldValue?.businessRule;
|
|
594
591
|
}
|
|
595
592
|
/**
|
|
596
593
|
* Enables or disables the form submit button based on passed parameters.
|
|
@@ -646,4 +643,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
646
643
|
providedIn: 'root',
|
|
647
644
|
}]
|
|
648
645
|
}], ctorParameters: function () { return [{ type: i1.HttpService }, { type: i2.UserPermissionsService }, { type: i3.GroupPermissionsMapService }, { type: i1.AlertsService }]; } });
|
|
649
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWFwRSxPQUFPLEtBQUssV0FBVyxNQUFNLDBCQUEwQixDQUFDO0FBYXhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBbUJ4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBTXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUlqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBRXJEOzs7R0FHRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBc0J4Qiw2REFBNkQ7SUFDN0Q7SUFDRSwwQ0FBMEM7SUFDbEMsV0FBd0I7SUFDaEMsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsdUJBQW1EO0lBQzNELDBDQUEwQztJQUNuQyxZQUEyQixDQUFDLDZDQUE2Qzs7UUFOeEUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFFeEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5Qyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQTRCO1FBRXBELGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBOUJwQyxlQUFVLEdBQUcsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQU9qQyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FDckMsaUJBQWlCLENBQUMsV0FBVyxDQUM5QixD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QUFVLENBQUM7UUFDdkQsT0FBTyxZQUFZLENBQUM7SUFDdEIsQ0FBQztJQUNEOzs7Ozs7O09BT0c7SUFDSCxzQkFBc0IsQ0FDcEIsZUFBZ0MsRUFDaEMsVUFBNkIsRUFDN0IsaUJBQTJCO1FBRTNCLElBQUksZUFBZSxLQUFLLGVBQWUsQ0FBQyxVQUFVO1lBQ2hELE9BQU8sVUFBVSxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDM0MsT0FBTyxpQkFBaUIsRUFBRSxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDO0lBQzlFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMEJBQTBCLENBQUMsb0JBQTZCO1FBQ3RELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDBCQUEwQjtRQUN4QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxXQUFtQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQzsrR0FqeEJVLGFBQWE7bUhBQWIsYUFBYSxjQUZaLE1BQU07OzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIGNhdGNoRXJyb3IsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENyZWF0ZUdyb3VwUGF5bG9hZCxcclxuICBDcmVhdGVHcm91cFJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9jcmVhdGUtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEJ1c2luZXNzUnVsZSxcclxuICBHcm91cFR5cGVDb25maWd1cmF0aW9uLFxyXG4gIEdyb3VwVHlwZUNvbmZpZ1ZhbHVlLFxyXG4gIEdyb3VwVHlwZVJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9ncm91cC10eXBlcy5tb2RlbCc7XHJcbmltcG9ydCB7IEFsZXJ0c1NlcnZpY2UsIEh0dHBTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IEdldEdyb3VwUmVzcG9uc2UsIEdldEdyb3Vwc1BheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdmlldy1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IERlbGV0ZUdyb3VwUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy9kZWxldGUtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cEluZm8gfSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgU2VhcmNoVXNlcnNQYXlsb2FkLFxyXG4gIEZpbHRlclVzZXJzUGF5bG9hZCxcclxuICBHZXRHcm91cFVzZXJzUmVzcG9uc2UsXHJcbiAgVXNlcixcclxuICBMb2dnZWRJblVzZXJJbmZvLFxyXG59IGZyb20gJy4uL21vZGVscy91c2VyLm1vZGVsJztcclxuaW1wb3J0IHsgUm9sZSB9IGZyb20gJy4uL21vZGVscy9yb2xlLm1vZGVsJztcclxuaW1wb3J0IHsgQ2hlY2tib3hPcHRpb24gfSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgeyBFZGl0R3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2VkaXQtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cEZ1bmN0aW9uVHlwZSB9IGZyb20gJy4uL21vZGVscy9ncm91cC1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgUm9zdGVyRnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Jvc3Rlci1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBVc2VySW5mbyB9IGZyb20gJy4uL21vZGVscy9ncm91cC11c2VyLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEFkZE9yRWRpdFVzZXJQYXlsb2FkLFxyXG4gIEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZSxcclxuICBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQsXHJcbiAgUmVwcmVzZW50aW5nT3JnYW5pemF0aW9uLFxyXG59IGZyb20gJy4uL21vZGVscy9hZGQtb3ItZWRpdC11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgRGVsZXRlVXNlckdyb3VwUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy9kZWxldGUtdXNlci1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgR2V0VXNlckRldGFpbHNQYXlsb2FkLFxyXG4gIFNlYXJjaFVzZXJCeUVtYWlsUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2FkZC1uZXctdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWQsXHJcbiAgT3JnYW5pemF0aW9uUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL29yZ2FuaXphdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IENsYXNzaWZpY2F0aW9uUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbHMvY2xhc3NpZmljYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFJvc3RlclR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcm9zdGVyLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdHVzIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tc3RhdHVzLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2xTdGF0dXMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgR3JvdXBQZXJtaXNzaW9uLFxyXG4gIFVzZXJQZXJtaXNzaW9uLFxyXG59IGZyb20gJy4uL21vZGVscy9ncm91cC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuL3VzZXItcGVybWlzc2lvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyb3VwUGVybWlzc2lvbnNNYXBTZXJ2aWNlIH0gZnJvbSAnLi9ncm91cC1wZXJtaXNzaW9ucy1tYXAtc2VydmljZSc7XHJcbmltcG9ydCB7IFBhcmVudEdyb3Vwc0luZm8gfSBmcm9tICcuLi9tb2RlbHMvcGFyZW50LWdyb3Vwcy1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHsgUm9sZVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcm9sZS10eXBlLm1vZGVsJztcclxuXHJcbi8qKlxyXG4gKiBHcm91cHMgc2VydmljZSBpcyBhbiBhYnN0cmFjdCBsYXllciBhbmQgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGdyb3VwcyBSRVNUIEFQSSBjYWxscy5cclxuICogQGNsYXNzIEdyb3Vwc1NlcnZpY2VcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cHNTZXJ2aWNlIHtcclxuICBncm91cHNUZXh0ID0gc2NyZWVuVGV4dHM/LmVycm9ycztcclxuICBhcGlCYXNlVXJsITogc3RyaW5nO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgdXNlclBlcm1pc3Npb246IGFueTtcclxuICBzZWxlY3RlZEdyb3VwSW5mbyE6IEdyb3VwSW5mbyB8IHVuZGVmaW5lZDtcclxuICBncm91cEZ1bmN0aW9uVHlwZSE6IEdyb3VwRnVuY3Rpb25UeXBlO1xyXG4gIHNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvITogR3JvdXBJbmZvIHwgdW5kZWZpbmVkO1xyXG4gIG9wZW5Nb2RhbE5vdGlmaWVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cEZ1bmN0aW9uVHlwZT4oXHJcbiAgICBHcm91cEZ1bmN0aW9uVHlwZS5WSUVXX1JPU1RFUlxyXG4gICk7XHJcbiAgZ3JvdXBUeXBlUm9sZXMhOiBDaGVja2JveE9wdGlvbltdO1xyXG4gIHNlbGVjdGVkVXNlckluZm8hOiBHcm91cFVzZXJJbmZvO1xyXG4gIGNhblNob3dNZXNzYWdlID0gZmFsc2U7XHJcbiAgcm9zdGVyRnVuY3Rpb25UeXBlITogUm9zdGVyRnVuY3Rpb25UeXBlO1xyXG4gIHVzZXJHcm91cFBlcm1pc3Npb25zITogR3JvdXBQZXJtaXNzaW9uW107XHJcbiAgZ3JvdXBUeXBlcyE6IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXTtcclxuICBpc1BhcmVudEdyb3VwQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIHVzZXJJbmZvITogTG9nZ2VkSW5Vc2VySW5mbztcclxuICBtZW1iZXJUeXBlcyE6IFJvbGVbXTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnM6IFJlcHJlc2VudGluZ09yZ2FuaXphdGlvbltdID0gW107XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uLCBuby11bnVzZWQtdmFyc1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSB1c2VyUGVybWlzc2lvbnNTZXJ2aWNlOiBVc2VyUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdyb3VwUGVybWlzc2lvbnNTZXJ2aWNlOiBHcm91cFBlcm1pc3Npb25zTWFwU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGFsZXJ0U2VydmljZTogQWxlcnRzU2VydmljZSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cclxuICApIHt9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBzZXRBcHBDb25maWcoYXBpQmFzZVVybDogc3RyaW5nLCB1c2VyUGVybWlzc2lvbjogYW55KSB7XHJcbiAgICB0aGlzLmFwaUJhc2VVcmwgPSBhcGlCYXNlVXJsO1xyXG4gICAgdGhpcy51c2VyUGVybWlzc2lvbiA9IHVzZXJQZXJtaXNzaW9uO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGFwcGxpY2F0aW9uIGdyb3VwIHR5cGVzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHcm91cFR5cGVSZXNwb25zZT59IC1JdCByZXR1cm5zIGdyb3VwIHR5cGVzIGlmIHN1Y2Nlc3MgZWxzZSBlcnJvci5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZ2V0R3JvdXBUeXBlcygpOiBPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9jb25maWcvZ3JvdXBUeXBlQ29uZmlnSW5mb2ApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0TG9hZGVkR3JvdXBUeXBlcyhyZXNwb25zZT8uYm9keSk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsb3dlZCBwYXJlbnQgZ3JvdXBzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEFsbG93ZWRQYXJlbnRHcm91cHMoZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQYXJlbnRHcm91cHNJbmZvW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2FsbG93ZWRQYXJlbnRHcm91cHMvJHtncm91cElkfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZT8uYm9keTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYWxsIHRoZSBncm91cHMgYmFzZWQgb24gcGFzc2VkIGdyb3VwIElkIGFuZCBncm91cCB0eXBlLlxyXG4gICAqIEBwYXJhbSB7R2V0R3JvdXBzUGF5bG9hZH0gZ2V0R3JvdXBzUGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cHMoZ2V0R3JvdXBzUGF5bG9hZDogR2V0R3JvdXBzUGF5bG9hZCk6IE9ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT4ge1xyXG4gICAgbGV0IHVybCA9ICdyb290R3JvdXBzJztcclxuICAgIGlmIChnZXRHcm91cHNQYXlsb2FkLmdyb3VwSWQpXHJcbiAgICAgIHVybCA9ICdpbW1DaGlsZEdyb3Vwc0J5R3JvdXBJZC8nICsgZ2V0R3JvdXBzUGF5bG9hZC5ncm91cElkO1xyXG4gICAgZWxzZSBpZiAoZ2V0R3JvdXBzUGF5bG9hZC5ncm91cFR5cGVJZClcclxuICAgICAgdXJsID0gJ2dyb3Vwc0J5R3JvdXBUeXBlLycgKyBnZXRHcm91cHNQYXlsb2FkLmdyb3VwVHlwZUlkO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvJHt1cmx9YCkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgZ3JvdXAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uXHJcbiAgICogQHBhcmFtIHtncm91cElkfSBzdHJpbmcgLWdyb3VwSWQgb2YgdGhlIGdyb3VwIHdoaWNoIGlzIHRvIGJlIGRlbGV0ZWRcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVHcm91cChkZWxldGVHcm91cFBheWxvYWQ6IERlbGV0ZUdyb3VwUGF5bG9hZCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9kZWxldGVgLCBkZWxldGVHcm91cFBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBhIHVzZXIgZnJvbSBncm91cCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge2dyb3VwSWR9IHN0cmluZyAtZ3JvdXBJZCBvZiB0aGUgc2VsZWN0ZWQgZ3JvdXAgZnJvbSB3aGVyZSBzZWxlY3RlZCB1c2VyIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICogQHBhcmFtIHt1c2VySWR9IEFycmF5IC11c2VyIGlkcyBvZiBzZWxlY3RlZCB1c2VycyB3aG8gYXJlIGRlbGV0ZWQgZnJvbSB0aGUgc2VsZWN0ZWQgZ3JvdXBcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVVc2Vyc0dyb3VwKFxyXG4gICAgZGVsZXRlVXNlckdyb3VwUGF5bG9hZDogRGVsZXRlVXNlckdyb3VwUGF5bG9hZFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2RlbGV0ZUdyb3VwVXNlcnNgLFxyXG4gICAgICAgIGRlbGV0ZVVzZXJHcm91cFBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3N0cyBjcmVhdGUgZ3JvdXAgZm9ybSBkYXRhIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSBmb3IgY3JlYXRpbmcgbmV3IGdyb3VwLlxyXG4gICAqIEBwYXJhbSB7Q3JlYXRlR3JvdXBQYXlsb2FkfSBjcmVhdGVHcm91cFBheWxvYWQgLWNyZWF0ZSBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgdHlwZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPn0gLXJldHVybnMgY3JlYXRlIGdyb3VwIEFQSSByZXNwb25zZSAoc3VjY2VzcyBvciBlcnJvcikgYXMgYW4gb2JzZXJ2YWJsZS5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY3JlYXRlR3JvdXAoXHJcbiAgICBjcmVhdGVHcm91cFBheWxvYWQ6IENyZWF0ZUdyb3VwUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlR3JvdXBSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2NyZWF0ZWAsIGNyZWF0ZUdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBncm91cCBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7RWRpdEdyb3VwUGF5bG9hZH0gZWRpdEdyb3VwUGF5bG9hZCAtZWRpdCBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFZGl0R3JvdXBQYXlsb2FkPn0gLXJldHVybnMgZWRpdCBncm91cCBBUEkgcmVzcG9uc2UgKHN1Y2Nlc3Mgb3IgZXJyb3IpIGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBlZGl0R3JvdXAoXHJcbiAgICBlZGl0R3JvdXBQYXlsb2FkOiBFZGl0R3JvdXBQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9lZGl0YCwgZWRpdEdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBwYXJzZSB0aGUgZXJyb3IgY29kZXMgYW5kIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBlcnJvciBtZXNzYWdlIGZvciBlYWNoIGNvZGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gZXJyb3JDb2Rlc1xyXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBlcnJvck1lc3NhZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2U6IHN0cmluZ1tdID0gW107XHJcbiAgICBlcnJvckNvZGVzPy5mb3JFYWNoKChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlS2V5ID0gZXJyb3JDb2Rlc1tpbmRleF0gYXMga2V5b2YgdHlwZW9mIHRoaXMuZ3JvdXBzVGV4dDtcclxuICAgICAgZXJyb3JNZXNzYWdlLnB1c2godGhpcy5ncm91cHNUZXh0W2Vycm9yTWVzc2FnZUtleV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBzZWxlY3RlZCBncm91cCBpbmZvLlxyXG4gICAqIEBwYXJhbSB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IHNlbGVjdGVkR3JvdXBJbmZvIC1zZWxlY3RlZCBncm91cCBpbmZvLlxyXG4gICAqIEBwYXJhbSB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IFtzZWxlY3RlZEdyb3VwUGFyZW50SW5mb10gLXNlbGVjdGVkIHBhcmVudCBncm91cCBpbmZvLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0U2VsZWN0ZWRHcm91cEluZm8oXHJcbiAgICBzZWxlY3RlZEdyb3VwSW5mbzogR3JvdXBJbmZvIHwgdW5kZWZpbmVkLFxyXG4gICAgc2VsZWN0ZWRHcm91cFBhcmVudEluZm8/OiBHcm91cEluZm8gfCB1bmRlZmluZWRcclxuICApIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEluZm8gPSBzZWxlY3RlZEdyb3VwSW5mbztcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBhcmVudEluZm8gPSBzZWxlY3RlZEdyb3VwUGFyZW50SW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHNlbGVjdGVkIGdyb3VwIGluZm8uXHJcbiAgICogQHJldHVybiB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IC1ncm91cCBpbmZvLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRHcm91cEluZm8oKTogR3JvdXBJbmZvIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkR3JvdXBJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgZ3JvdXAgcGFyZW50IGdyb3VwIGluZm8uXHJcbiAgICogQHJldHVybiB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IC1ncm91cCBpbmZvLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRHcm91cFBhcmVudEluZm8oKTogR3JvdXBJbmZvIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBncm91cCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBGdW5jdGlvblR5cGV9IGdyb3VwRnVuY3Rpb25UeXBlIC1ncm91cCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0R3JvdXBGdW5jdGlvblR5cGUoZ3JvdXBGdW5jdGlvblR5cGU6IEdyb3VwRnVuY3Rpb25UeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwRnVuY3Rpb25UeXBlID0gZ3JvdXBGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHJldHVybiB7R3JvdXBGdW5jdGlvblR5cGV9IC1ncm91cCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBGdW5jdGlvblR5cGUoKTogR3JvdXBGdW5jdGlvblR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBmb3IgdGhlIGdpdmVuIGdyb3VwIGlkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBncm91cElkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgZ2V0R3JvdXBVc2VycyhcclxuICAgIGdyb3VwSWQ6IHN0cmluZyxcclxuICAgIHNvcnRDb2x1bW46IHN0cmluZyxcclxuICAgIHNvcnREaXJlY3Rpb246IGJvb2xlYW5cclxuICApOiBPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyLyR7Z3JvdXBJZH0/c29ydENvbHVtbj0ke3NvcnRDb2x1bW59JmFzY2VuZGluZ09yZGVyPSR7c29ydERpcmVjdGlvbn1gXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgYmFzZWQgb24gdGhlIGZpbHRlcmVkIHJvbGVzLlxyXG4gICAqIEBwYXJhbSB7RmlsdGVyVXNlcnNQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBVc2Vyc0J5Um9sZXMoXHJcbiAgICBwYXlsb2FkOiBGaWx0ZXJVc2Vyc1BheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9ncm91cFVzZXJzRmlsdGVyYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgYmFzZWQgb24gc2VhcmNoZWQgbmFtZSBvciBlbWFpbFxyXG4gICAqIEBwYXJhbSB7U2VhcmNoVXNlcnNQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2VhcmNoR3JvdXBVc2VycyhcclxuICAgIHBheWxvYWQ6IFNlYXJjaFVzZXJzUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2dyb3VwVXNlcnNTZWFyY2hgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCByb2xlcyBiYXNlZCBvbiB0aGUgZ3JvdXAgdHlwZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXBUeXBlSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENoZWNrYm94T3B0aW9uW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICBnZXRHcm91cFR5cGVSb2xlcyhncm91cFR5cGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGVja2JveE9wdGlvbltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9jb25maWcvcm9sZXNCeUdyb3VwVHlwZS8ke2dyb3VwVHlwZUlkfWBcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByb2xlc09wdGlvbjogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgbWVtYmVyVHlwZXM6IFJvbGVbXSA9IFtdO1xyXG4gICAgICAgICAgcmVzcG9uc2U/LmJvZHk/LmZvckVhY2goKHJvbGU6IFJvbGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJvbGU/LnJvbGVUeXBlTmFtZSA9PT0gUm9sZVR5cGUuTUVNQkVSX0xFVkVMKSB7XHJcbiAgICAgICAgICAgICAgbWVtYmVyVHlwZXMucHVzaChyb2xlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByb2xlc09wdGlvbi5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiByb2xlLnJvbGVJZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHJvbGUucm9sZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNldEdyb3VwVHlwZVVzZXJSb2xlcyhyb2xlc09wdGlvbik7XHJcbiAgICAgICAgICB0aGlzLnNldE1lbWJlclR5cGVzKG1lbWJlclR5cGVzKTtcclxuICAgICAgICAgIHJldHVybiByb2xlc09wdGlvbjtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgY2xhc3NpZmljYXRpb25zIG1hc3RlciBkYXRhIGZyb20gY29uZmlndXJhdGlvbiBhbmQgcmV0dXJucy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENsYXNzaWZpY2F0aW9uUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Q2xhc3NpZmljYXRpb25zKCk6IE9ic2VydmFibGU8Q2xhc3NpZmljYXRpb25SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2NsYXNzaWZpY2F0aW9uYClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0cnVlIGlmIGxvZ2dlZCBpbiB1c2VyIGlzIGFkbWluLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBpc0FkbWluVXNlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWNjZXNzKFBlcm1pc3Npb25UeXBlLk1BTkFHRV9TWVNURU1fVVNFUlMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb25jYXRlbmF0ZXMgdGhlIGdyb3VwIHVzZXJzIGFzc2lnbmVkIHJvbGVzIG5hbWUgc2VwYXJhdGVkIGJ5IGNvbW1hIGFzIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgZ3JvdXAgdXNlcnMgaW4gYW4gYXJyYXkuXHJcbiAgICogQHBhcmFtIHtHZXRHcm91cFVzZXJzUmVzcG9uc2V9IHJlc3BvbnNlXHJcbiAgICogQHJldHVybiB7VXNlcltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgdHJhbnNmb3JtVXNlclJvbGVzTmFtZUFzU3RyaW5nKHJlc3BvbnNlOiBHZXRHcm91cFVzZXJzUmVzcG9uc2UpOiBVc2VyW10ge1xyXG4gICAgY29uc3QgdXNlcnM6IFVzZXJbXSA9IFtdO1xyXG4gICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zID0gW107XHJcbiAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBjbGFzc2lmaWNhdGlvbkRlc2MgPVxyXG4gICAgICAgIGl0ZW0uY2xhc3NpZmljYXRpb24/LmNsYXNzaWZpY2F0aW9uTmFtZSArXHJcbiAgICAgICAgJyAoJyArXHJcbiAgICAgICAgaXRlbS5jbGFzc2lmaWNhdGlvbj8uY2xhc3NpZmljYXRpb25EZXNjICtcclxuICAgICAgICAnKSc7XHJcbiAgICAgIGNvbnN0IHJvbGVzTGlzdCA9IGl0ZW0/LnJvbGVzTGlzdD8ucmVkdWNlKFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgKHJvbGVMaXN0OiBhbnksIHJvbGU6IFJvbGUpID0+IHtcclxuICAgICAgICAgIHJvbGVMaXN0W1xyXG4gICAgICAgICAgICByb2xlLnJvbGVUeXBlTmFtZSA9PT0gUm9sZVR5cGUuTUVNQkVSX0xFVkVMID8gJ21lbWJlclR5cGUnIDogJ3JvbGVzJ1xyXG4gICAgICAgICAgXS5wdXNoKHJvbGU/LnJvbGVOYW1lKTtcclxuICAgICAgICAgIHJldHVybiByb2xlTGlzdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgbWVtYmVyVHlwZTogW10sIHJvbGVzOiBbXSB9XHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucmVwcmVzZW50aW5nT3JnYW5pemF0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgdXNlcklkOiBpdGVtPy51c2VySWQsXHJcbiAgICAgICAgb3JnYW5pemF0aW9uczogaXRlbT8ub3JnYW5pemF0aW9ucyxcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IG9yZ2FuaXphdGlvbnMgPSBpdGVtPy5vcmdhbml6YXRpb25zXHJcbiAgICAgICAgPyBpdGVtPy5vcmdhbml6YXRpb25zPy5tYXAoKG9yZykgPT4gb3JnPy5vcmdOYW1lKS5qb2luKCc7ICcpXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgICB1c2Vycy5wdXNoKHtcclxuICAgICAgICB1c2VySWQ6IGl0ZW0udXNlcklkLFxyXG4gICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICBlbWFpbDogaXRlbS5lbWFpbCxcclxuICAgICAgICByb2xlOiByb2xlc0xpc3Q/LnJvbGVzPy5sZW5ndGggPyByb2xlc0xpc3Q/LnJvbGVzPy5qb2luKCcsICcpIDogbnVsbCxcclxuICAgICAgICBjbGFzc2lmaWNhdGlvbjogaXRlbS5jbGFzc2lmaWNhdGlvbj8uY2xhc3NpZmljYXRpb25JZFxyXG4gICAgICAgICAgPyBjbGFzc2lmaWNhdGlvbkRlc2NcclxuICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICBtZW1iZXJTdGF0dXM6IHJvbGVzTGlzdD8ubWVtYmVyVHlwZT8ubGVuZ3RoXHJcbiAgICAgICAgICA/IHJvbGVzTGlzdD8ubWVtYmVyVHlwZVswXVxyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIG9yZ2FuaXphdGlvbjogb3JnYW5pemF0aW9ucyxcclxuICAgICAgICBlbXBsb3llcjogaXRlbS5lbXBsb3llcj8ub3JnTmFtZSA/PyBudWxsLFxyXG4gICAgICAgIGNhbkRlbGV0ZTogIShcclxuICAgICAgICAgIGl0ZW0/LnVzZXJJZCA9PT0gdGhpcy51c2VySW5mbz8udXNlcklkICYmXHJcbiAgICAgICAgICB0aGlzLmlzQWRtaW5Vc2VyKCkgJiZcclxuICAgICAgICAgIHRoaXMuZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk/LmlzQWRtaW5cclxuICAgICAgICApLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHVzZXJzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGZvcm1hdHRlZCBncm91cCB0eXBlcy5cclxuICAgKiBAcGFyYW0ge0dyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXX0gZ3JvdXBUeXBlUmVzcG9uc2VcclxuICAgKiBAcmV0dXJuIHtHcm91cFR5cGVDb25maWdWYWx1ZX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEZvcm1hdHRlZEdyb3VwVHlwZXMoXHJcbiAgICBncm91cFR5cGVSZXNwb25zZTogR3JvdXBUeXBlQ29uZmlndXJhdGlvbltdXHJcbiAgKTogR3JvdXBUeXBlQ29uZmlnVmFsdWUge1xyXG4gICAgY29uc3QgZ3JvdXBUeXBlczogR3JvdXBUeXBlQ29uZmlnVmFsdWUgPSB7fTtcclxuICAgIGdyb3VwVHlwZVJlc3BvbnNlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgZ3JvdXBUeXBlc1tpdGVtLmNvbmZpZ0ZpZWxkSWRdID0gaXRlbS5jb25maWdGaWVsZFZhbHVlO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JvdXBUeXBlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgZ3JvdXAgdXNlciBkZXRhaWxzIGlmIGVtYWlsIGlzIGZvdW5kLCBlbHNlIHRocm93cyBlcnJvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFNlYXJjaFVzZXJCeUVtYWlsUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0VXNlckJ5RW1haWwoZW1haWw6IHN0cmluZyk6IE9ic2VydmFibGU8U2VhcmNoVXNlckJ5RW1haWxSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvdXNlcnMvdXNlckJ5RW1haWwvJHtlbWFpbH1gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB1c2VyIGRldGFpbHMgZm9yIHRoZSBzZWxlY3RlZCBncm91cFxyXG4gICAqIEBwYXJhbSB7R2V0VXNlckRldGFpbHNQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBVc2VyRGV0YWlscyhcclxuICAgIHBheWxvYWQ6IEdldFVzZXJEZXRhaWxzUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL3VzZXJEZXRhaWxzYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBQb3N0cyBhZGQgbmV3IHVzZXIgZm9ybSBkYXRhIHRvIHRoZSBBUEkgZm9yIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgcmV0dXJucyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIHJlc3BvbnNlLlxyXG4gICAqIEBwYXJhbSB7KEFkZE9yRWRpdFVzZXJQYXlsb2FkXHJcbiAgICogICAgICAgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQpfSBBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAqIEBwYXJhbSB7R3JvdXBSb3N0ZXJUeXBlfSBncm91cFJvc3RlclR5cGVcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBhZGROZXdHcm91cFVzZXIoXHJcbiAgICBBZGRPckVkaXRVc2VyUGF5bG9hZDpcclxuICAgICAgfCBBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAgICB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2NyZWF0ZUdyb3VwVXNlclJvbGVgLFxyXG4gICAgICAgIEFkZE9yRWRpdFVzZXJQYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbG9hZGVkIGdyb3VwIHR5cGUgdXNlciByb2xlc1xyXG4gICAqIEBwYXJhbSB7Q2hlY2tib3hPcHRpb25bXX0gdXNlclJvbGVzXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRHcm91cFR5cGVVc2VyUm9sZXModXNlclJvbGVzOiBDaGVja2JveE9wdGlvbltdKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwVHlwZVJvbGVzID0gdXNlclJvbGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgdHlwZSB1c2VyIHJvbGVzLlxyXG4gICAqIEByZXR1cm4ge0NoZWNrYm94T3B0aW9uW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cFR5cGVVc2VyUm9sZXMoKTogQ2hlY2tib3hPcHRpb25bXSB7XHJcbiAgICB0aGlzLmdyb3VwVHlwZVJvbGVzPy5tYXAoKG9wdGlvbikgPT4gKG9wdGlvbi5jaGVja2VkID0gZmFsc2UpKTtcclxuICAgIHJldHVybiB0aGlzLmdyb3VwVHlwZVJvbGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgdXNlciBpbmZvLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBVc2VySW5mb30gdXNlckluZm9cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFNlbGVjdGVkVXNlckluZm8odXNlckluZm86IEdyb3VwVXNlckluZm8pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHVzZXJJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBzZWxlY3RlZCB1c2VyIGluZm8uXHJcbiAgICogQHJldHVybiB7R3JvdXBVc2VySW5mb31cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkVXNlckluZm8oKTogR3JvdXBVc2VySW5mbyB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFVzZXJJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBncm91cCB1c2VyIHJvbGVzIGFuZCBvdGhlciBkZXRhaWxzIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZS5cclxuICAgKiBAcGFyYW0geyhBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCl9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBlZGl0R3JvdXBzVXNlclJvbGUoXHJcbiAgICBwYXlsb2FkOiBBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvZWRpdEdyb3VwVXNlclJvbGVgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHJvc3RlciBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSB7Um9zdGVyRnVuY3Rpb25UeXBlfSByb3N0ZXJGdW5jdGlvblR5cGVcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFJvc3RlckZ1bmN0aW9uVHlwZShyb3N0ZXJGdW5jdGlvblR5cGU6IFJvc3RlckZ1bmN0aW9uVHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3N0ZXJGdW5jdGlvblR5cGUgPSByb3N0ZXJGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHJvc3RlciBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEByZXR1cm4ge1Jvc3RlckZ1bmN0aW9uVHlwZX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJvc3RlckZ1bmN0aW9uVHlwZSgpOiBSb3N0ZXJGdW5jdGlvblR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMucm9zdGVyRnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cHMgYmFzZWQgb24gdGhlIHNlYXJjaCBieSBncm91cCBuYW1lIG9yIGFjcm9ueW0uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm1cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBncm91cHNCeU5hbWVBY3JvbnltKFxyXG4gICAgc2VhcmNoVGVybTogc3RyaW5nLFxyXG4gICAgZmlsdGVyZWRHcm91cFR5cGU/OiBudW1iZXJcclxuICApOiBPYnNlcnZhYmxlPEdldEdyb3VwUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHNlYXJjaEdyb3Vwc1VybCA9IGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2dyb3Vwc0J5TmFtZUFjcm9ueW0/bmFtZT0ke3NlYXJjaFRlcm19YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKFxyXG4gICAgICAgIGZpbHRlcmVkR3JvdXBUeXBlXHJcbiAgICAgICAgICA/IHNlYXJjaEdyb3Vwc1VybCArIGAmZ3JvdXBUeXBlPSR7ZmlsdGVyZWRHcm91cFR5cGV9YFxyXG4gICAgICAgICAgOiBzZWFyY2hHcm91cHNVcmxcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHVzZXIgZ3JvdXAgcGVybWlzc2lvbnNcclxuICAgKiBAcGFyYW0ge0dyb3VwUGVybWlzc2lvbltdfSB1c2VyR3JvdXBQZXJtaXNzaW9uc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0VXNlckdyb3VwUGVybWlzc2lvbnModXNlckdyb3VwUGVybWlzc2lvbnM6IEdyb3VwUGVybWlzc2lvbltdKSB7XHJcbiAgICB0aGlzLnVzZXJHcm91cFBlcm1pc3Npb25zID0gdXNlckdyb3VwUGVybWlzc2lvbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHVzZXIgZ3JvdXAgcGVybWlzc2lvbnNcclxuICAgKiBAcmV0dXJuIHtHcm91cFBlcm1pc3Npb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJHcm91cFBlcm1pc3Npb25zKCk6IEdyb3VwUGVybWlzc2lvbltdIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJHcm91cFBlcm1pc3Npb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBsb2dnZWQgSW4gdXNlciBpbmZvcm1hdGlvbi5cclxuICAgKiBAcGFyYW0ge0xvZ2dlZEluVXNlckluZm99IHVzZXJJbmZvXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRVc2VySW5mbyh1c2VySW5mbzogTG9nZ2VkSW5Vc2VySW5mbyk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VySW5mbyA9IHVzZXJJbmZvO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBsb2dnZWQgaW4gdXNlciBpbmZvcm1hdGlvbi5cclxuICAgKiBAcmV0dXJuIHtMb2dnZWRJblVzZXJJbmZvfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0VXNlckluZm8oKTogTG9nZ2VkSW5Vc2VySW5mbyB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VySW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHBlcm1pc3Npb24gYmFzZWQgYWNjZXNzIGZvciBwcm92aWRlZCBmZWF0dXJlLlxyXG4gICAqIENoZWNrcyBmb3IgZ3JvdXAgbGV2ZWwgcGVybWlzc2lvbnMsIGFuZCBwcm92aWRlcyBhY2Nlc3MgYmFzZWQgb24gaW5kaXZpZHVhbCBncm91cCBwZXJtaXNzaW9ucy5cclxuICAgKiBGb3IgZ2xvYmFsIHBlcm1pc3Npb25zIHByb3ZpZGVzIGFjY2VzcyBhY3Jvc3MgdGhlIGluZGl2aWR1YWwgZ3JvdXBzIG9yIFN5c3RlbSBncm91cHMuXHJcbiAgICogQHBhcmFtIHtQZXJtaXNzaW9uVHlwZX0gcGVybWlzc2lvblR5cGVcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgdmFsaWRhdGVBY2Nlc3MoXHJcbiAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUsXHJcbiAgICBwZXJtaXNzaW9ucz86IFVzZXJQZXJtaXNzaW9uW10gfCBudWxsXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBpZiAocGVybWlzc2lvbnMpIHtcclxuICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25zVG9Hcm91cCA9XHJcbiAgICAgICAgdGhpcy51c2VyUGVybWlzc2lvbnNTZXJ2aWNlLmZpbHRlclVzZXJHcm91cFBlcm1pc3Npb25zKFxyXG4gICAgICAgICAgcGVybWlzc2lvbnMsXHJcbiAgICAgICAgICB0aGlzLmdyb3VwUGVybWlzc2lvbnNTZXJ2aWNlLmdldEdyb3VwUGVybWlzc2lvbnMoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIHJldHVybiB0aGlzLnVzZXJQZXJtaXNzaW9uc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3NQZXJtaXNzaW9uKFxyXG4gICAgICAgIHBlcm1pc3Npb25UeXBlLFxyXG4gICAgICAgIHVzZXJQZXJtaXNzaW9uc1RvR3JvdXBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnVzZXJQZXJtaXNzaW9uc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3NQZXJtaXNzaW9uKFxyXG4gICAgICBwZXJtaXNzaW9uVHlwZSxcclxuICAgICAgdGhpcy5nZXRVc2VyR3JvdXBQZXJtaXNzaW9ucygpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTdG9yZSB0aGUgbG9hZGVkIGdyb3VwIHR5cGVzLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBUeXBlQ29uZmlndXJhdGlvbltdfSBncm91cFR5cGVzXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRMb2FkZWRHcm91cFR5cGVzKGdyb3VwVHlwZXM6IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXSkge1xyXG4gICAgdGhpcy5ncm91cFR5cGVzID0gZ3JvdXBUeXBlcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBsb2FkZWQgZ3JvdXAgdHlwZXMuXHJcbiAgICogQHJldHVybiB7R3JvdXBUeXBlQ29uZmlndXJhdGlvbltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0TG9hZGVkR3JvdXBUeXBlcygpOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBUeXBlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPcmdhbml6YXRpb25SZXF1ZXN0UGF5bG9hZH0gb3JnUmVxdWVzdFBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE9yZ2FuaXphdGlvblJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldE9yZ2FuaXphdGlvbnMoXHJcbiAgICBvcmdSZXF1ZXN0UGF5bG9hZDogT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPE9yZ2FuaXphdGlvblJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL29yZ2FuaXphdGlvbnNgLFxyXG4gICAgICAgIG9yZ1JlcXVlc3RQYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBncm91cCB0eXBlIGNvbmZpZ3VyYXRpb24gQnVzaW5lc3MgcnVsZSBmb3IgdGhlIHNlbGVjdGVkIGdyb3VwLlxyXG4gICAqIEByZXR1cm4geyhCdXNpbmVzc1J1bGUgIHwgdW5kZWZpbmVkKX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpOiBCdXNpbmVzc1J1bGUgfCB1bmRlZmluZWQge1xyXG4gICAgY29uc3QgYnVzaW5lc3NSdWxlID0gdGhpcy5nZXRMb2FkZWRHcm91cFR5cGVzKCk/LmZpbmQoXHJcbiAgICAgIChncm91cCkgPT4gZ3JvdXA/LmNvbmZpZ0ZpZWxkSWQgPT09IHRoaXMuZ2V0U2VsZWN0ZWRHcm91cEluZm8oKT8uZ3JvdXBUeXBlXHJcbiAgICApPy5jb25maWdGaWVsZFZhbHVlPy5idXNpbmVzc1J1bGU7XHJcbiAgICBpZihidXNpbmVzc1J1bGU/LnJvc3RlclR5cGUgPT09IEdyb3VwUm9zdGVyVHlwZS5FTlRJVFkpXHJcbiAgICAgIGJ1c2luZXNzUnVsZS5yb3N0ZXJUeXBlID0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUw7XHJcbiAgICByZXR1cm4gYnVzaW5lc3NSdWxlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmb3JtIHN1Ym1pdCBidXR0b24gYmFzZWQgb24gcGFzc2VkIHBhcmFtZXRlcnMuXHJcbiAgICogQHBhcmFtIHtHcm91cFJvc3RlclR5cGV9IGdyb3VwUm9zdGVyVHlwZVxyXG4gICAqIEBwYXJhbSB7Rm9ybUNvbnRyb2xTdGF0dXN9IGZvcm1TdGF0dXNcclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBzZWxlY3RlZFVzZXJSb2xlc1xyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBpc1N1Ym1pdEJ1dHRvbkRpc2FibGVkKFxyXG4gICAgZ3JvdXBSb3N0ZXJUeXBlOiBHcm91cFJvc3RlclR5cGUsXHJcbiAgICBmb3JtU3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cyxcclxuICAgIHNlbGVjdGVkVXNlclJvbGVzOiBzdHJpbmdbXVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpXHJcbiAgICAgIHJldHVybiBmb3JtU3RhdHVzID09PSBGb3JtU3RhdHVzLklOVkFMSUQ7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRVc2VyUm9sZXM/Lmxlbmd0aCA9PT0gMCB8fCBmb3JtU3RhdHVzID09PSBGb3JtU3RhdHVzLklOVkFMSUQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGlzUGFyZW50R3JvdXBDaGFuZ2VkIHRydWUgb3IgZmFsc2UuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc1BhcmVudEdyb3VwQ2hhbmdlZFxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0UGFyZW50R3JvdXBDaGFuZ2VTdGF0dXMoaXNQYXJlbnRHcm91cENoYW5nZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNQYXJlbnRHcm91cENoYW5nZWQgPSBpc1BhcmVudEdyb3VwQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgaXNQYXJlbnRHcm91cENoYW5nZWQgdmFsdWUuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFBhcmVudEdyb3VwQ2hhbmdlU3RhdHVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNQYXJlbnRHcm91cENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBtZW1iZXIgdHlwZXMuXHJcbiAgICogQHBhcmFtIHtSb2xlW119IG1lbWJlclR5cGVzXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRNZW1iZXJUeXBlcyhtZW1iZXJUeXBlczogUm9sZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lbWJlclR5cGVzID0gbWVtYmVyVHlwZXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG1lbWJlciB0eXBlcy5cclxuICAgKiBAcmV0dXJuIHtSb2xlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRNZW1iZXJUeXBlcygpOiBSb2xlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubWVtYmVyVHlwZXM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|
|
646
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JvdXBzLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9ncm91cHMvc3JjL2xpYi9zZXJ2aWNlcy9ncm91cHMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBYyxHQUFHLEVBQUUsVUFBVSxFQUFFLGVBQWUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQWFwRSxPQUFPLEtBQUssV0FBVyxNQUFNLDBCQUEwQixDQUFDO0FBYXhELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBbUJ4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDOUQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBTXpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUlqRSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sMkJBQTJCLENBQUM7Ozs7O0FBRXJEOzs7R0FHRztBQUlILE1BQU0sT0FBTyxhQUFhO0lBc0J4Qiw2REFBNkQ7SUFDN0Q7SUFDRSwwQ0FBMEM7SUFDbEMsV0FBd0I7SUFDaEMsMENBQTBDO0lBQ2xDLHNCQUE4QztJQUN0RCwwQ0FBMEM7SUFDbEMsdUJBQW1EO0lBQzNELDBDQUEwQztJQUNuQyxZQUEyQixDQUFDLDZDQUE2Qzs7UUFOeEUsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFFeEIsMkJBQXNCLEdBQXRCLHNCQUFzQixDQUF3QjtRQUU5Qyw0QkFBdUIsR0FBdkIsdUJBQXVCLENBQTRCO1FBRXBELGlCQUFZLEdBQVosWUFBWSxDQUFlO1FBOUJwQyxlQUFVLEdBQUcsV0FBVyxFQUFFLE1BQU0sQ0FBQztRQU9qQyxzQkFBaUIsR0FBRyxJQUFJLGVBQWUsQ0FDckMsaUJBQWlCLENBQUMsV0FBVyxDQUM5QixD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QUFLLGVBQWUsQ0FBQyxVQUFVO1lBQ2hELE9BQU8sVUFBVSxLQUFLLFVBQVUsQ0FBQyxPQUFPLENBQUM7UUFDM0MsT0FBTyxpQkFBaUIsRUFBRSxNQUFNLEtBQUssQ0FBQyxJQUFJLFVBQVUsS0FBSyxVQUFVLENBQUMsT0FBTyxDQUFDO0lBQzlFLENBQUM7SUFFRDs7OztPQUlHO0lBQ0gsMEJBQTBCLENBQUMsb0JBQTZCO1FBQ3RELElBQUksQ0FBQyxvQkFBb0IsR0FBRyxvQkFBb0IsQ0FBQztJQUNuRCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILDBCQUEwQjtRQUN4QixPQUFPLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztJQUNuQyxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILGNBQWMsQ0FBQyxXQUFtQjtRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztJQUNqQyxDQUFDO0lBQ0Q7Ozs7T0FJRztJQUNILGNBQWM7UUFDWixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7SUFDMUIsQ0FBQzsrR0E5d0JVLGFBQWE7bUhBQWIsYUFBYSxjQUZaLE1BQU07OzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBtYXAsIGNhdGNoRXJyb3IsIEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQge1xyXG4gIENyZWF0ZUdyb3VwUGF5bG9hZCxcclxuICBDcmVhdGVHcm91cFJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9jcmVhdGUtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEJ1c2luZXNzUnVsZSxcclxuICBHcm91cFR5cGVDb25maWd1cmF0aW9uLFxyXG4gIEdyb3VwVHlwZUNvbmZpZ1ZhbHVlLFxyXG4gIEdyb3VwVHlwZVJlc3BvbnNlLFxyXG59IGZyb20gJy4uL21vZGVscy9ncm91cC10eXBlcy5tb2RlbCc7XHJcbmltcG9ydCB7IEFsZXJ0c1NlcnZpY2UsIEh0dHBTZXJ2aWNlIH0gZnJvbSAnQGllZWVzYS1ucG0vdXRpbGl0eSc7XHJcbmltcG9ydCB7IEdldEdyb3VwUmVzcG9uc2UsIEdldEdyb3Vwc1BheWxvYWQgfSBmcm9tICcuLi9tb2RlbHMvdmlldy1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCAqIGFzIHNjcmVlblRleHRzIGZyb20gJy4uL2Fzc2V0cy9jb25zdGFudHMuanNvbic7XHJcbmltcG9ydCB7IERlbGV0ZUdyb3VwUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy9kZWxldGUtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cEluZm8gfSBmcm9tICcuLi9tb2RlbHMvZ3JvdXAtaW5mby5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgU2VhcmNoVXNlcnNQYXlsb2FkLFxyXG4gIEZpbHRlclVzZXJzUGF5bG9hZCxcclxuICBHZXRHcm91cFVzZXJzUmVzcG9uc2UsXHJcbiAgVXNlcixcclxuICBMb2dnZWRJblVzZXJJbmZvLFxyXG59IGZyb20gJy4uL21vZGVscy91c2VyLm1vZGVsJztcclxuaW1wb3J0IHsgUm9sZSB9IGZyb20gJy4uL21vZGVscy9yb2xlLm1vZGVsJztcclxuaW1wb3J0IHsgQ2hlY2tib3hPcHRpb24gfSBmcm9tICdAaWVlZXNhLW5wbS9wcmVzZW50YXRpb24nO1xyXG5pbXBvcnQgeyBFZGl0R3JvdXBQYXlsb2FkIH0gZnJvbSAnLi4vbW9kZWxzL2VkaXQtZ3JvdXAubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cEZ1bmN0aW9uVHlwZSB9IGZyb20gJy4uL21vZGVscy9ncm91cC1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgUm9zdGVyRnVuY3Rpb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Jvc3Rlci1mdW5jdGlvbi10eXBlLm1vZGVsJztcclxuaW1wb3J0IHsgR3JvdXBVc2VySW5mbyB9IGZyb20gJy4uL21vZGVscy9ncm91cC11c2VyLWluZm8ubW9kZWwnO1xyXG5pbXBvcnQge1xyXG4gIEFkZE9yRWRpdFVzZXJQYXlsb2FkLFxyXG4gIEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZSxcclxuICBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQsXHJcbiAgUmVwcmVzZW50aW5nT3JnYW5pemF0aW9uLFxyXG59IGZyb20gJy4uL21vZGVscy9hZGQtb3ItZWRpdC11c2VyLWdyb3VwLm1vZGVsJztcclxuaW1wb3J0IHsgRGVsZXRlVXNlckdyb3VwUGF5bG9hZCB9IGZyb20gJy4uL21vZGVscy9kZWxldGUtdXNlci1ncm91cC5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgR2V0VXNlckRldGFpbHNQYXlsb2FkLFxyXG4gIFNlYXJjaFVzZXJCeUVtYWlsUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL2FkZC1uZXctdXNlci5tb2RlbCc7XHJcbmltcG9ydCB7XHJcbiAgT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWQsXHJcbiAgT3JnYW5pemF0aW9uUmVzcG9uc2UsXHJcbn0gZnJvbSAnLi4vbW9kZWxzL29yZ2FuaXphdGlvbi5tb2RlbCc7XHJcbmltcG9ydCB7IENsYXNzaWZpY2F0aW9uUmVzcG9uc2UgfSBmcm9tICcuLi9tb2RlbHMvY2xhc3NpZmljYXRpb24ubW9kZWwnO1xyXG5pbXBvcnQgeyBHcm91cFJvc3RlclR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcm9zdGVyLXR5cGUubW9kZWwnO1xyXG5pbXBvcnQgeyBGb3JtU3RhdHVzIH0gZnJvbSAnLi4vbW9kZWxzL2Zvcm0tc3RhdHVzLm1vZGVsJztcclxuaW1wb3J0IHsgRm9ybUNvbnRyb2xTdGF0dXMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7XHJcbiAgR3JvdXBQZXJtaXNzaW9uLFxyXG4gIFVzZXJQZXJtaXNzaW9uLFxyXG59IGZyb20gJy4uL21vZGVscy9ncm91cC1wZXJtaXNzaW9ucy5tb2RlbCc7XHJcbmltcG9ydCB7IFBlcm1pc3Npb25UeXBlIH0gZnJvbSAnLi4vbW9kZWxzL3Blcm1pc3Npb24tdHlwZS5tb2RlbCc7XHJcbmltcG9ydCB7IFVzZXJQZXJtaXNzaW9uc1NlcnZpY2UgfSBmcm9tICcuL3VzZXItcGVybWlzc2lvbnMuc2VydmljZSc7XHJcbmltcG9ydCB7IEdyb3VwUGVybWlzc2lvbnNNYXBTZXJ2aWNlIH0gZnJvbSAnLi9ncm91cC1wZXJtaXNzaW9ucy1tYXAtc2VydmljZSc7XHJcbmltcG9ydCB7IFBhcmVudEdyb3Vwc0luZm8gfSBmcm9tICcuLi9tb2RlbHMvcGFyZW50LWdyb3Vwcy1pbmZvLm1vZGVsJztcclxuaW1wb3J0IHsgUm9sZVR5cGUgfSBmcm9tICcuLi9tb2RlbHMvcm9sZS10eXBlLm1vZGVsJztcclxuXHJcbi8qKlxyXG4gKiBHcm91cHMgc2VydmljZSBpcyBhbiBhYnN0cmFjdCBsYXllciBhbmQgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIGdyb3VwcyBSRVNUIEFQSSBjYWxscy5cclxuICogQGNsYXNzIEdyb3Vwc1NlcnZpY2VcclxuICovXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBHcm91cHNTZXJ2aWNlIHtcclxuICBncm91cHNUZXh0ID0gc2NyZWVuVGV4dHM/LmVycm9ycztcclxuICBhcGlCYXNlVXJsITogc3RyaW5nO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgdXNlclBlcm1pc3Npb246IGFueTtcclxuICBzZWxlY3RlZEdyb3VwSW5mbyE6IEdyb3VwSW5mbyB8IHVuZGVmaW5lZDtcclxuICBncm91cEZ1bmN0aW9uVHlwZSE6IEdyb3VwRnVuY3Rpb25UeXBlO1xyXG4gIHNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvITogR3JvdXBJbmZvIHwgdW5kZWZpbmVkO1xyXG4gIG9wZW5Nb2RhbE5vdGlmaWVyID0gbmV3IEJlaGF2aW9yU3ViamVjdDxHcm91cEZ1bmN0aW9uVHlwZT4oXHJcbiAgICBHcm91cEZ1bmN0aW9uVHlwZS5WSUVXX1JPU1RFUlxyXG4gICk7XHJcbiAgZ3JvdXBUeXBlUm9sZXMhOiBDaGVja2JveE9wdGlvbltdO1xyXG4gIHNlbGVjdGVkVXNlckluZm8hOiBHcm91cFVzZXJJbmZvO1xyXG4gIGNhblNob3dNZXNzYWdlID0gZmFsc2U7XHJcbiAgcm9zdGVyRnVuY3Rpb25UeXBlITogUm9zdGVyRnVuY3Rpb25UeXBlO1xyXG4gIHVzZXJHcm91cFBlcm1pc3Npb25zITogR3JvdXBQZXJtaXNzaW9uW107XHJcbiAgZ3JvdXBUeXBlcyE6IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXTtcclxuICBpc1BhcmVudEdyb3VwQ2hhbmdlZCA9IGZhbHNlO1xyXG4gIHVzZXJJbmZvITogTG9nZ2VkSW5Vc2VySW5mbztcclxuICBtZW1iZXJUeXBlcyE6IFJvbGVbXTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWV4cGxpY2l0LWFueVxyXG4gIHJlcHJlc2VudGluZ09yZ2FuaXphdGlvbnM6IFJlcHJlc2VudGluZ09yZ2FuaXphdGlvbltdID0gW107XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWVtcHR5LWZ1bmN0aW9uLCBuby11bnVzZWQtdmFyc1xyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGh0dHBTZXJ2aWNlOiBIdHRwU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHJpdmF0ZSB1c2VyUGVybWlzc2lvbnNTZXJ2aWNlOiBVc2VyUGVybWlzc2lvbnNTZXJ2aWNlLFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgICBwcml2YXRlIGdyb3VwUGVybWlzc2lvbnNTZXJ2aWNlOiBHcm91cFBlcm1pc3Npb25zTWFwU2VydmljZSxcclxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG4gICAgcHVibGljIGFsZXJ0U2VydmljZTogQWxlcnRzU2VydmljZSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tZW1wdHktZnVuY3Rpb25cclxuICApIHt9XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBzZXRBcHBDb25maWcoYXBpQmFzZVVybDogc3RyaW5nLCB1c2VyUGVybWlzc2lvbjogYW55KSB7XHJcbiAgICB0aGlzLmFwaUJhc2VVcmwgPSBhcGlCYXNlVXJsO1xyXG4gICAgdGhpcy51c2VyUGVybWlzc2lvbiA9IHVzZXJQZXJtaXNzaW9uO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIGFwcGxpY2F0aW9uIGdyb3VwIHR5cGVzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHcm91cFR5cGVSZXNwb25zZT59IC1JdCByZXR1cm5zIGdyb3VwIHR5cGVzIGlmIHN1Y2Nlc3MgZWxzZSBlcnJvci5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgZ2V0R3JvdXBUeXBlcygpOiBPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9jb25maWcvZ3JvdXBUeXBlQ29uZmlnSW5mb2ApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHRoaXMuc2V0TG9hZGVkR3JvdXBUeXBlcyhyZXNwb25zZT8uYm9keSk7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgYWxsb3dlZCBwYXJlbnQgZ3JvdXBzIGZyb20gQVBJIGFuZCByZXR1cm5zIGl0IGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IGdyb3VwSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdyb3VwVHlwZVJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEFsbG93ZWRQYXJlbnRHcm91cHMoZ3JvdXBJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxQYXJlbnRHcm91cHNJbmZvW10+IHtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2FsbG93ZWRQYXJlbnRHcm91cHMvJHtncm91cElkfWApXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZT8uYm9keTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgYWxsIHRoZSBncm91cHMgYmFzZWQgb24gcGFzc2VkIGdyb3VwIElkIGFuZCBncm91cCB0eXBlLlxyXG4gICAqIEBwYXJhbSB7R2V0R3JvdXBzUGF5bG9hZH0gZ2V0R3JvdXBzUGF5bG9hZFxyXG4gICAqIEByZXR1cm4ge09ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cHMoZ2V0R3JvdXBzUGF5bG9hZDogR2V0R3JvdXBzUGF5bG9hZCk6IE9ic2VydmFibGU8R2V0R3JvdXBSZXNwb25zZT4ge1xyXG4gICAgbGV0IHVybCA9ICdyb290R3JvdXBzJztcclxuICAgIGlmIChnZXRHcm91cHNQYXlsb2FkLmdyb3VwSWQpXHJcbiAgICAgIHVybCA9ICdpbW1DaGlsZEdyb3Vwc0J5R3JvdXBJZC8nICsgZ2V0R3JvdXBzUGF5bG9hZC5ncm91cElkO1xyXG4gICAgZWxzZSBpZiAoZ2V0R3JvdXBzUGF5bG9hZC5ncm91cFR5cGVJZClcclxuICAgICAgdXJsID0gJ2dyb3Vwc0J5R3JvdXBUeXBlLycgKyBnZXRHcm91cHNQYXlsb2FkLmdyb3VwVHlwZUlkO1xyXG5cclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvJHt1cmx9YCkucGlwZShcclxuICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgfSksXHJcbiAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBEZWxldGVzIGEgZ3JvdXAgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uXHJcbiAgICogQHBhcmFtIHtncm91cElkfSBzdHJpbmcgLWdyb3VwSWQgb2YgdGhlIGdyb3VwIHdoaWNoIGlzIHRvIGJlIGRlbGV0ZWRcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVHcm91cChkZWxldGVHcm91cFBheWxvYWQ6IERlbGV0ZUdyb3VwUGF5bG9hZCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9kZWxldGVgLCBkZWxldGVHcm91cFBheWxvYWQpXHJcbiAgICAgIC5waXBlKFxyXG4gICAgICAgIG1hcCgocmVzcG9uc2UpID0+IHtcclxuICAgICAgICAgIHJldHVybiByZXNwb25zZTtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvcikgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3I7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBhIHVzZXIgZnJvbSBncm91cCBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb25cclxuICAgKiBAcGFyYW0ge2dyb3VwSWR9IHN0cmluZyAtZ3JvdXBJZCBvZiB0aGUgc2VsZWN0ZWQgZ3JvdXAgZnJvbSB3aGVyZSBzZWxlY3RlZCB1c2VyIHRvIGJlIGRlbGV0ZWQuXHJcbiAgICogQHBhcmFtIHt1c2VySWR9IEFycmF5IC11c2VyIGlkcyBvZiBzZWxlY3RlZCB1c2VycyB3aG8gYXJlIGRlbGV0ZWQgZnJvbSB0aGUgc2VsZWN0ZWQgZ3JvdXBcclxuICAgKiBAcmV0dXJuIHsqfSAge09ic2VydmFibGU8YW55Pn0gLU9ic2VydmFibGUgcmVwcmVzZW50aW5nIHRoZSBncm91cCBkZWxldGlvbiByZXNwb25zZVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICBkZWxldGVVc2Vyc0dyb3VwKFxyXG4gICAgZGVsZXRlVXNlckdyb3VwUGF5bG9hZDogRGVsZXRlVXNlckdyb3VwUGF5bG9hZFxyXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uby1leHBsaWNpdC1hbnlcclxuICApOiBPYnNlcnZhYmxlPGFueT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnB1dERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2RlbGV0ZUdyb3VwVXNlcnNgLFxyXG4gICAgICAgIGRlbGV0ZVVzZXJHcm91cFBheWxvYWRcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBQb3N0cyBjcmVhdGUgZ3JvdXAgZm9ybSBkYXRhIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZSBmb3IgY3JlYXRpbmcgbmV3IGdyb3VwLlxyXG4gICAqIEBwYXJhbSB7Q3JlYXRlR3JvdXBQYXlsb2FkfSBjcmVhdGVHcm91cFBheWxvYWQgLWNyZWF0ZSBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgdHlwZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPn0gLXJldHVybnMgY3JlYXRlIGdyb3VwIEFQSSByZXNwb25zZSAoc3VjY2VzcyBvciBlcnJvcikgYXMgYW4gb2JzZXJ2YWJsZS5cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgY3JlYXRlR3JvdXAoXHJcbiAgICBjcmVhdGVHcm91cFBheWxvYWQ6IENyZWF0ZUdyb3VwUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8Q3JlYXRlR3JvdXBSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2NyZWF0ZWAsIGNyZWF0ZUdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBncm91cCBmb3JtIGRhdGEgdG8gc2VydmVyIHVzaW5nIEh0dHBTZXJ2aWNlLlxyXG4gICAqIEBwYXJhbSB7RWRpdEdyb3VwUGF5bG9hZH0gZWRpdEdyb3VwUGF5bG9hZCAtZWRpdCBncm91cCBmb3JtIGRhdGEgd2hpY2ggaW5jbHVkZXMgZ3JvdXAgbmFtZSwgc2hvcnQgbmFtZSwgc2NvcGUuXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxFZGl0R3JvdXBQYXlsb2FkPn0gLXJldHVybnMgZWRpdCBncm91cCBBUEkgcmVzcG9uc2UgKHN1Y2Nlc3Mgb3IgZXJyb3IpIGFzIGFuIG9ic2VydmFibGUuXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBlZGl0R3JvdXAoXHJcbiAgICBlZGl0R3JvdXBQYXlsb2FkOiBFZGl0R3JvdXBQYXlsb2FkXHJcbiAgKTogT2JzZXJ2YWJsZTxDcmVhdGVHcm91cFJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9lZGl0YCwgZWRpdEdyb3VwUGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGhpcyBtZXRob2Qgd2lsbCBwYXJzZSB0aGUgZXJyb3IgY29kZXMgYW5kIHJldHVybiB0aGUgcmVzcGVjdGl2ZSBlcnJvciBtZXNzYWdlIGZvciBlYWNoIGNvZGUuXHJcbiAgICogQHBhcmFtIHtzdHJpbmdbXX0gZXJyb3JDb2Rlc1xyXG4gICAqIEByZXR1cm4ge3N0cmluZ1tdfSBlcnJvck1lc3NhZ2VcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHBhcnNlRXJyb3JNZXNzYWdlKGVycm9yQ29kZXM6IHN0cmluZ1tdKSB7XHJcbiAgICBjb25zdCBlcnJvck1lc3NhZ2U6IHN0cmluZ1tdID0gW107XHJcbiAgICBlcnJvckNvZGVzPy5mb3JFYWNoKChpdGVtOiBzdHJpbmcsIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgY29uc3QgZXJyb3JNZXNzYWdlS2V5ID0gZXJyb3JDb2Rlc1tpbmRleF0gYXMga2V5b2YgdHlwZW9mIHRoaXMuZ3JvdXBzVGV4dDtcclxuICAgICAgZXJyb3JNZXNzYWdlLnB1c2godGhpcy5ncm91cHNUZXh0W2Vycm9yTWVzc2FnZUtleV0pO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBzZWxlY3RlZCBncm91cCBpbmZvLlxyXG4gICAqIEBwYXJhbSB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IHNlbGVjdGVkR3JvdXBJbmZvIC1zZWxlY3RlZCBncm91cCBpbmZvLlxyXG4gICAqIEBwYXJhbSB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IFtzZWxlY3RlZEdyb3VwUGFyZW50SW5mb10gLXNlbGVjdGVkIHBhcmVudCBncm91cCBpbmZvLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0U2VsZWN0ZWRHcm91cEluZm8oXHJcbiAgICBzZWxlY3RlZEdyb3VwSW5mbzogR3JvdXBJbmZvIHwgdW5kZWZpbmVkLFxyXG4gICAgc2VsZWN0ZWRHcm91cFBhcmVudEluZm8/OiBHcm91cEluZm8gfCB1bmRlZmluZWRcclxuICApIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cEluZm8gPSBzZWxlY3RlZEdyb3VwSW5mbztcclxuICAgIHRoaXMuc2VsZWN0ZWRHcm91cFBhcmVudEluZm8gPSBzZWxlY3RlZEdyb3VwUGFyZW50SW5mbztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHNlbGVjdGVkIGdyb3VwIGluZm8uXHJcbiAgICogQHJldHVybiB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IC1ncm91cCBpbmZvLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRHcm91cEluZm8oKTogR3JvdXBJbmZvIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkR3JvdXBJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgc2VsZWN0ZWQgZ3JvdXAgcGFyZW50IGdyb3VwIGluZm8uXHJcbiAgICogQHJldHVybiB7KEdyb3VwSW5mbyB8IHVuZGVmaW5lZCl9IC1ncm91cCBpbmZvLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0U2VsZWN0ZWRHcm91cFBhcmVudEluZm8oKTogR3JvdXBJbmZvIHwgdW5kZWZpbmVkIHtcclxuICAgIHJldHVybiB0aGlzLnNlbGVjdGVkR3JvdXBQYXJlbnRJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBncm91cCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBGdW5jdGlvblR5cGV9IGdyb3VwRnVuY3Rpb25UeXBlIC1ncm91cCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0R3JvdXBGdW5jdGlvblR5cGUoZ3JvdXBGdW5jdGlvblR5cGU6IEdyb3VwRnVuY3Rpb25UeXBlKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwRnVuY3Rpb25UeXBlID0gZ3JvdXBGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGdyb3VwIGZ1bmN0aW9uIHR5cGUuXHJcbiAgICogQHJldHVybiB7R3JvdXBGdW5jdGlvblR5cGV9IC1ncm91cCBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBGdW5jdGlvblR5cGUoKTogR3JvdXBGdW5jdGlvblR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCB1c2VycyBmb3IgdGhlIGdpdmVuIGdyb3VwIGlkLlxyXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBncm91cElkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbiAgZ2V0R3JvdXBVc2VycyhcclxuICAgIGdyb3VwSWQ6IHN0cmluZyxcclxuICAgIHNvcnRDb2x1bW46IHN0cmluZyxcclxuICAgIHNvcnREaXJlY3Rpb246IGJvb2xlYW5cclxuICApOiBPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyLyR7Z3JvdXBJZH0/c29ydENvbHVtbj0ke3NvcnRDb2x1bW59JmFzY2VuZGluZ09yZGVyPSR7c29ydERpcmVjdGlvbn1gXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgYmFzZWQgb24gdGhlIGZpbHRlcmVkIHJvbGVzLlxyXG4gICAqIEBwYXJhbSB7RmlsdGVyVXNlcnNQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBVc2Vyc0J5Um9sZXMoXHJcbiAgICBwYXlsb2FkOiBGaWx0ZXJVc2Vyc1BheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLnBvc3REYXRhKGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL3Jvc3Rlci9ncm91cFVzZXJzRmlsdGVyYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyB0aGUgZ3JvdXAgdXNlcnMgYmFzZWQgb24gc2VhcmNoZWQgbmFtZSBvciBlbWFpbFxyXG4gICAqIEBwYXJhbSB7U2VhcmNoVXNlcnNQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxHZXRHcm91cFVzZXJzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2VhcmNoR3JvdXBVc2VycyhcclxuICAgIHBheWxvYWQ6IFNlYXJjaFVzZXJzUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8R2V0R3JvdXBVc2Vyc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2dyb3VwVXNlcnNTZWFyY2hgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cCByb2xlcyBiYXNlZCBvbiB0aGUgZ3JvdXAgdHlwZS5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZ3JvdXBUeXBlSWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENoZWNrYm94T3B0aW9uW10+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzLCBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcclxuICBnZXRHcm91cFR5cGVSb2xlcyhncm91cFR5cGVJZDogc3RyaW5nKTogT2JzZXJ2YWJsZTxDaGVja2JveE9wdGlvbltdPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAuZ2V0RGF0YShcclxuICAgICAgICBgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9jb25maWcvcm9sZXNCeUdyb3VwVHlwZS8ke2dyb3VwVHlwZUlkfWBcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCByb2xlc09wdGlvbjogQ2hlY2tib3hPcHRpb25bXSA9IFtdO1xyXG4gICAgICAgICAgY29uc3QgbWVtYmVyVHlwZXM6IFJvbGVbXSA9IFtdO1xyXG4gICAgICAgICAgcmVzcG9uc2U/LmJvZHk/LmZvckVhY2goKHJvbGU6IFJvbGUpID0+IHtcclxuICAgICAgICAgICAgaWYgKHJvbGU/LnJvbGVUeXBlTmFtZSA9PT0gUm9sZVR5cGUuTUVNQkVSX0xFVkVMKSB7XHJcbiAgICAgICAgICAgICAgbWVtYmVyVHlwZXMucHVzaChyb2xlKTtcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICByb2xlc09wdGlvbi5wdXNoKHtcclxuICAgICAgICAgICAgICAgIGlkOiByb2xlLnJvbGVJZCxcclxuICAgICAgICAgICAgICAgIG5hbWU6IHJvbGUucm9sZU5hbWUsXHJcbiAgICAgICAgICAgICAgICBkaXNhYmxlZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBjaGVja2VkOiBmYWxzZSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgICB0aGlzLnNldEdyb3VwVHlwZVVzZXJSb2xlcyhyb2xlc09wdGlvbik7XHJcbiAgICAgICAgICB0aGlzLnNldE1lbWJlclR5cGVzKG1lbWJlclR5cGVzKTtcclxuICAgICAgICAgIHJldHVybiByb2xlc09wdGlvbjtcclxuICAgICAgICB9KSxcclxuICAgICAgICBjYXRjaEVycm9yKChlcnJvclJlcykgPT4ge1xyXG4gICAgICAgICAgdGhyb3cgZXJyb3JSZXM7XHJcbiAgICAgICAgfSlcclxuICAgICAgKTtcclxuICB9XHJcbiAgLyoqXHJcbiAgICogRmV0Y2hlcyB0aGUgY2xhc3NpZmljYXRpb25zIG1hc3RlciBkYXRhIGZyb20gY29uZmlndXJhdGlvbiBhbmQgcmV0dXJucy5cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPENsYXNzaWZpY2F0aW9uUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0Q2xhc3NpZmljYXRpb25zKCk6IE9ic2VydmFibGU8Q2xhc3NpZmljYXRpb25SZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2NsYXNzaWZpY2F0aW9uYClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSB0cnVlIGlmIGxvZ2dlZCBpbiB1c2VyIGlzIGFkbWluLlxyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBpc0FkbWluVXNlcigpOiBib29sZWFuIHtcclxuICAgIHJldHVybiB0aGlzLnZhbGlkYXRlQWNjZXNzKFBlcm1pc3Npb25UeXBlLk1BTkFHRV9TWVNURU1fVVNFUlMpO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBDb25jYXRlbmF0ZXMgdGhlIGdyb3VwIHVzZXJzIGFzc2lnbmVkIHJvbGVzIG5hbWUgc2VwYXJhdGVkIGJ5IGNvbW1hIGFzIHN0cmluZyBhbmQgcmV0dXJucyB0aGUgZ3JvdXAgdXNlcnMgaW4gYW4gYXJyYXkuXHJcbiAgICogQHBhcmFtIHtHZXRHcm91cFVzZXJzUmVzcG9uc2V9IHJlc3BvbnNlXHJcbiAgICogQHJldHVybiB7VXNlcltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgdHJhbnNmb3JtVXNlclJvbGVzTmFtZUFzU3RyaW5nKHJlc3BvbnNlOiBHZXRHcm91cFVzZXJzUmVzcG9uc2UpOiBVc2VyW10ge1xyXG4gICAgY29uc3QgdXNlcnM6IFVzZXJbXSA9IFtdO1xyXG4gICAgdGhpcy5yZXByZXNlbnRpbmdPcmdhbml6YXRpb25zID0gW107XHJcbiAgICByZXNwb25zZT8uYm9keT8uZm9yRWFjaCgoaXRlbSkgPT4ge1xyXG4gICAgICBjb25zdCBjbGFzc2lmaWNhdGlvbkRlc2MgPVxyXG4gICAgICAgIGl0ZW0uY2xhc3NpZmljYXRpb24/LmNsYXNzaWZpY2F0aW9uTmFtZSArXHJcbiAgICAgICAgJyAoJyArXHJcbiAgICAgICAgaXRlbS5jbGFzc2lmaWNhdGlvbj8uY2xhc3NpZmljYXRpb25EZXNjICtcclxuICAgICAgICAnKSc7XHJcbiAgICAgIGNvbnN0IHJvbGVzTGlzdCA9IGl0ZW0/LnJvbGVzTGlzdD8ucmVkdWNlKFxyXG4gICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XHJcbiAgICAgICAgKHJvbGVMaXN0OiBhbnksIHJvbGU6IFJvbGUpID0+IHtcclxuICAgICAgICAgIHJvbGVMaXN0W1xyXG4gICAgICAgICAgICByb2xlLnJvbGVUeXBlTmFtZSA9PT0gUm9sZVR5cGUuTUVNQkVSX0xFVkVMID8gJ21lbWJlclR5cGUnIDogJ3JvbGVzJ1xyXG4gICAgICAgICAgXS5wdXNoKHJvbGU/LnJvbGVOYW1lKTtcclxuICAgICAgICAgIHJldHVybiByb2xlTGlzdDtcclxuICAgICAgICB9LFxyXG4gICAgICAgIHsgbWVtYmVyVHlwZTogW10sIHJvbGVzOiBbXSB9XHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucmVwcmVzZW50aW5nT3JnYW5pemF0aW9ucz8ucHVzaCh7XHJcbiAgICAgICAgdXNlcklkOiBpdGVtPy51c2VySWQsXHJcbiAgICAgICAgb3JnYW5pemF0aW9uczogaXRlbT8ub3JnYW5pemF0aW9ucyxcclxuICAgICAgfSk7XHJcbiAgICAgIGNvbnN0IG9yZ2FuaXphdGlvbnMgPSBpdGVtPy5vcmdhbml6YXRpb25zXHJcbiAgICAgICAgPyBpdGVtPy5vcmdhbml6YXRpb25zPy5tYXAoKG9yZykgPT4gb3JnPy5vcmdOYW1lKS5qb2luKCc7ICcpXHJcbiAgICAgICAgOiBudWxsO1xyXG4gICAgICB1c2Vycy5wdXNoKHtcclxuICAgICAgICB1c2VySWQ6IGl0ZW0udXNlcklkLFxyXG4gICAgICAgIG5hbWU6IGl0ZW0ubmFtZSxcclxuICAgICAgICBlbWFpbDogaXRlbS5lbWFpbCxcclxuICAgICAgICByb2xlOiByb2xlc0xpc3Q/LnJvbGVzPy5sZW5ndGggPyByb2xlc0xpc3Q/LnJvbGVzPy5qb2luKCcsICcpIDogbnVsbCxcclxuICAgICAgICBjbGFzc2lmaWNhdGlvbjogaXRlbS5jbGFzc2lmaWNhdGlvbj8uY2xhc3NpZmljYXRpb25JZFxyXG4gICAgICAgICAgPyBjbGFzc2lmaWNhdGlvbkRlc2NcclxuICAgICAgICAgIDogbnVsbCxcclxuICAgICAgICBtZW1iZXJTdGF0dXM6IHJvbGVzTGlzdD8ubWVtYmVyVHlwZT8ubGVuZ3RoXHJcbiAgICAgICAgICA/IHJvbGVzTGlzdD8ubWVtYmVyVHlwZVswXVxyXG4gICAgICAgICAgOiBudWxsLFxyXG4gICAgICAgIG9yZ2FuaXphdGlvbjogb3JnYW5pemF0aW9ucyxcclxuICAgICAgICBlbXBsb3llcjogaXRlbS5lbXBsb3llcj8ub3JnTmFtZSA/PyBudWxsLFxyXG4gICAgICAgIGNhbkRlbGV0ZTogIShcclxuICAgICAgICAgIGl0ZW0/LnVzZXJJZCA9PT0gdGhpcy51c2VySW5mbz8udXNlcklkICYmXHJcbiAgICAgICAgICB0aGlzLmlzQWRtaW5Vc2VyKCkgJiZcclxuICAgICAgICAgIHRoaXMuZ2V0QnVzaW5lc3NSdWxlT2ZTZWxlY3RlZEdyb3VwKCk/LmlzQWRtaW5cclxuICAgICAgICApLFxyXG4gICAgICB9KTtcclxuICAgIH0pO1xyXG4gICAgcmV0dXJuIHVzZXJzO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIGZvcm1hdHRlZCBncm91cCB0eXBlcy5cclxuICAgKiBAcGFyYW0ge0dyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXX0gZ3JvdXBUeXBlUmVzcG9uc2VcclxuICAgKiBAcmV0dXJuIHtHcm91cFR5cGVDb25maWdWYWx1ZX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEZvcm1hdHRlZEdyb3VwVHlwZXMoXHJcbiAgICBncm91cFR5cGVSZXNwb25zZTogR3JvdXBUeXBlQ29uZmlndXJhdGlvbltdXHJcbiAgKTogR3JvdXBUeXBlQ29uZmlnVmFsdWUge1xyXG4gICAgY29uc3QgZ3JvdXBUeXBlczogR3JvdXBUeXBlQ29uZmlnVmFsdWUgPSB7fTtcclxuICAgIGdyb3VwVHlwZVJlc3BvbnNlLmZvckVhY2goKGl0ZW0pID0+IHtcclxuICAgICAgZ3JvdXBUeXBlc1tpdGVtLmNvbmZpZ0ZpZWxkSWRdID0gaXRlbS5jb25maWdGaWVsZFZhbHVlO1xyXG4gICAgfSk7XHJcbiAgICByZXR1cm4gZ3JvdXBUeXBlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgZ3JvdXAgdXNlciBkZXRhaWxzIGlmIGVtYWlsIGlzIGZvdW5kLCBlbHNlIHRocm93cyBlcnJvci5cclxuICAgKiBAcGFyYW0ge3N0cmluZ30gZW1haWxcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPFNlYXJjaFVzZXJCeUVtYWlsUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0VXNlckJ5RW1haWwoZW1haWw6IHN0cmluZyk6IE9ic2VydmFibGU8U2VhcmNoVXNlckJ5RW1haWxSZXNwb25zZT4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaHR0cFNlcnZpY2VcclxuICAgICAgLmdldERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvdXNlcnMvdXNlckJ5RW1haWwvJHtlbWFpbH1gKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSB1c2VyIGRldGFpbHMgZm9yIHRoZSBzZWxlY3RlZCBncm91cFxyXG4gICAqIEBwYXJhbSB7R2V0VXNlckRldGFpbHNQYXlsb2FkfSBwYXlsb2FkXHJcbiAgICogQHJldHVybiB7T2JzZXJ2YWJsZTxBZGRPckVkaXRHcm91cFVzZXJEZXRhaWxzUmVzcG9uc2U+fVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0R3JvdXBVc2VyRGV0YWlscyhcclxuICAgIHBheWxvYWQ6IEdldFVzZXJEZXRhaWxzUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL3VzZXJEZXRhaWxzYCwgcGF5bG9hZClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBQb3N0cyBhZGQgbmV3IHVzZXIgZm9ybSBkYXRhIHRvIHRoZSBBUEkgZm9yIHRoZSBzZWxlY3RlZCBncm91cCBhbmQgcmV0dXJucyB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIHJlc3BvbnNlLlxyXG4gICAqIEBwYXJhbSB7KEFkZE9yRWRpdFVzZXJQYXlsb2FkXHJcbiAgICogICAgICAgfCBBZGRPckVkaXRVc2VySW5kaXZpZHVhbFJvc3RlclBheWxvYWQpfSBBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAqIEBwYXJhbSB7R3JvdXBSb3N0ZXJUeXBlfSBncm91cFJvc3RlclR5cGVcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBhZGROZXdHcm91cFVzZXIoXHJcbiAgICBBZGRPckVkaXRVc2VyUGF5bG9hZDpcclxuICAgICAgfCBBZGRPckVkaXRVc2VyUGF5bG9hZFxyXG4gICAgICB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL2NyZWF0ZUdyb3VwVXNlclJvbGVgLFxyXG4gICAgICAgIEFkZE9yRWRpdFVzZXJQYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvcjtcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgbG9hZGVkIGdyb3VwIHR5cGUgdXNlciByb2xlc1xyXG4gICAqIEBwYXJhbSB7Q2hlY2tib3hPcHRpb25bXX0gdXNlclJvbGVzXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRHcm91cFR5cGVVc2VyUm9sZXModXNlclJvbGVzOiBDaGVja2JveE9wdGlvbltdKTogdm9pZCB7XHJcbiAgICB0aGlzLmdyb3VwVHlwZVJvbGVzID0gdXNlclJvbGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyB0aGUgZ3JvdXAgdHlwZSB1c2VyIHJvbGVzLlxyXG4gICAqIEByZXR1cm4ge0NoZWNrYm94T3B0aW9uW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRHcm91cFR5cGVVc2VyUm9sZXMoKTogQ2hlY2tib3hPcHRpb25bXSB7XHJcbiAgICB0aGlzLmdyb3VwVHlwZVJvbGVzPy5tYXAoKG9wdGlvbikgPT4gKG9wdGlvbi5jaGVja2VkID0gZmFsc2UpKTtcclxuICAgIHJldHVybiB0aGlzLmdyb3VwVHlwZVJvbGVzO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyB0aGUgc2VsZWN0ZWQgdXNlciBpbmZvLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBVc2VySW5mb30gdXNlckluZm9cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFNlbGVjdGVkVXNlckluZm8odXNlckluZm86IEdyb3VwVXNlckluZm8pOiB2b2lkIHtcclxuICAgIHRoaXMuc2VsZWN0ZWRVc2VySW5mbyA9IHVzZXJJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmV0dXJucyBzZWxlY3RlZCB1c2VyIGluZm8uXHJcbiAgICogQHJldHVybiB7R3JvdXBVc2VySW5mb31cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFNlbGVjdGVkVXNlckluZm8oKTogR3JvdXBVc2VySW5mbyB7XHJcbiAgICByZXR1cm4gdGhpcy5zZWxlY3RlZFVzZXJJbmZvO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBncm91cCB1c2VyIHJvbGVzIGFuZCBvdGhlciBkZXRhaWxzIHRvIHNlcnZlciB1c2luZyBIdHRwU2VydmljZS5cclxuICAgKiBAcGFyYW0geyhBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZCl9IHBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEFkZE9yRWRpdEdyb3VwVXNlckRldGFpbHNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBlZGl0R3JvdXBzVXNlclJvbGUoXHJcbiAgICBwYXlsb2FkOiBBZGRPckVkaXRVc2VyUGF5bG9hZCB8IEFkZE9yRWRpdFVzZXJJbmRpdmlkdWFsUm9zdGVyUGF5bG9hZFxyXG4gICk6IE9ic2VydmFibGU8QWRkT3JFZGl0R3JvdXBVc2VyRGV0YWlsc1Jlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucHV0RGF0YShgJHt0aGlzLmFwaUJhc2VVcmx9L2dyb3Vwcy9yb3N0ZXIvZWRpdEdyb3VwVXNlclJvbGVgLCBwYXlsb2FkKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3IpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHJvc3RlciBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEBwYXJhbSB7Um9zdGVyRnVuY3Rpb25UeXBlfSByb3N0ZXJGdW5jdGlvblR5cGVcclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIHNldFJvc3RlckZ1bmN0aW9uVHlwZShyb3N0ZXJGdW5jdGlvblR5cGU6IFJvc3RlckZ1bmN0aW9uVHlwZSk6IHZvaWQge1xyXG4gICAgdGhpcy5yb3N0ZXJGdW5jdGlvblR5cGUgPSByb3N0ZXJGdW5jdGlvblR5cGU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHJvc3RlciBmdW5jdGlvbiB0eXBlLlxyXG4gICAqIEByZXR1cm4ge1Jvc3RlckZ1bmN0aW9uVHlwZX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFJvc3RlckZ1bmN0aW9uVHlwZSgpOiBSb3N0ZXJGdW5jdGlvblR5cGUge1xyXG4gICAgcmV0dXJuIHRoaXMucm9zdGVyRnVuY3Rpb25UeXBlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBHZXRzIHRoZSBncm91cHMgYmFzZWQgb24gdGhlIHNlYXJjaCBieSBncm91cCBuYW1lIG9yIGFjcm9ueW0uXHJcbiAgICogQHBhcmFtIHtzdHJpbmd9IHNlYXJjaFRlcm1cclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPEdldEdyb3VwVXNlcnNSZXNwb25zZT59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBncm91cHNCeU5hbWVBY3JvbnltKFxyXG4gICAgc2VhcmNoVGVybTogc3RyaW5nLFxyXG4gICAgZmlsdGVyZWRHcm91cFR5cGU/OiBudW1iZXJcclxuICApOiBPYnNlcnZhYmxlPEdldEdyb3VwUmVzcG9uc2U+IHtcclxuICAgIGNvbnN0IHNlYXJjaEdyb3Vwc1VybCA9IGAke3RoaXMuYXBpQmFzZVVybH0vZ3JvdXBzL2dyb3Vwc0J5TmFtZUFjcm9ueW0/bmFtZT0ke3NlYXJjaFRlcm19YDtcclxuICAgIHJldHVybiB0aGlzLmh0dHBTZXJ2aWNlXHJcbiAgICAgIC5nZXREYXRhKFxyXG4gICAgICAgIGZpbHRlcmVkR3JvdXBUeXBlXHJcbiAgICAgICAgICA/IHNlYXJjaEdyb3Vwc1VybCArIGAmZ3JvdXBUeXBlPSR7ZmlsdGVyZWRHcm91cFR5cGV9YFxyXG4gICAgICAgICAgOiBzZWFyY2hHcm91cHNVcmxcclxuICAgICAgKVxyXG4gICAgICAucGlwZShcclxuICAgICAgICBtYXAoKHJlc3BvbnNlKSA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gcmVzcG9uc2U7XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgY2F0Y2hFcnJvcigoZXJyb3JSZXMpID0+IHtcclxuICAgICAgICAgIHRocm93IGVycm9yUmVzO1xyXG4gICAgICAgIH0pXHJcbiAgICAgICk7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFNldHMgdGhlIHVzZXIgZ3JvdXAgcGVybWlzc2lvbnNcclxuICAgKiBAcGFyYW0ge0dyb3VwUGVybWlzc2lvbltdfSB1c2VyR3JvdXBQZXJtaXNzaW9uc1xyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0VXNlckdyb3VwUGVybWlzc2lvbnModXNlckdyb3VwUGVybWlzc2lvbnM6IEdyb3VwUGVybWlzc2lvbltdKSB7XHJcbiAgICB0aGlzLnVzZXJHcm91cFBlcm1pc3Npb25zID0gdXNlckdyb3VwUGVybWlzc2lvbnM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIHVzZXIgZ3JvdXAgcGVybWlzc2lvbnNcclxuICAgKiBAcmV0dXJuIHtHcm91cFBlcm1pc3Npb25bXX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFVzZXJHcm91cFBlcm1pc3Npb25zKCk6IEdyb3VwUGVybWlzc2lvbltdIHtcclxuICAgIHJldHVybiB0aGlzLnVzZXJHcm91cFBlcm1pc3Npb25zO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBsb2dnZWQgSW4gdXNlciBpbmZvcm1hdGlvbi5cclxuICAgKiBAcGFyYW0ge0xvZ2dlZEluVXNlckluZm99IHVzZXJJbmZvXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRVc2VySW5mbyh1c2VySW5mbzogTG9nZ2VkSW5Vc2VySW5mbyk6IHZvaWQge1xyXG4gICAgdGhpcy51c2VySW5mbyA9IHVzZXJJbmZvO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBsb2dnZWQgaW4gdXNlciBpbmZvcm1hdGlvbi5cclxuICAgKiBAcmV0dXJuIHtMb2dnZWRJblVzZXJJbmZvfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0VXNlckluZm8oKTogTG9nZ2VkSW5Vc2VySW5mbyB7XHJcbiAgICByZXR1cm4gdGhpcy51c2VySW5mbztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogVmFsaWRhdGVzIHBlcm1pc3Npb24gYmFzZWQgYWNjZXNzIGZvciBwcm92aWRlZCBmZWF0dXJlLlxyXG4gICAqIENoZWNrcyBmb3IgZ3JvdXAgbGV2ZWwgcGVybWlzc2lvbnMsIGFuZCBwcm92aWRlcyBhY2Nlc3MgYmFzZWQgb24gaW5kaXZpZHVhbCBncm91cCBwZXJtaXNzaW9ucy5cclxuICAgKiBGb3IgZ2xvYmFsIHBlcm1pc3Npb25zIHByb3ZpZGVzIGFjY2VzcyBhY3Jvc3MgdGhlIGluZGl2aWR1YWwgZ3JvdXBzIG9yIFN5c3RlbSBncm91cHMuXHJcbiAgICogQHBhcmFtIHtQZXJtaXNzaW9uVHlwZX0gcGVybWlzc2lvblR5cGVcclxuICAgKiBAcmV0dXJuIHtib29sZWFufVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgdmFsaWRhdGVBY2Nlc3MoXHJcbiAgICBwZXJtaXNzaW9uVHlwZTogUGVybWlzc2lvblR5cGUsXHJcbiAgICBwZXJtaXNzaW9ucz86IFVzZXJQZXJtaXNzaW9uW10gfCBudWxsXHJcbiAgKTogYm9vbGVhbiB7XHJcbiAgICBpZiAocGVybWlzc2lvbnMpIHtcclxuICAgICAgY29uc3QgdXNlclBlcm1pc3Npb25zVG9Hcm91cCA9XHJcbiAgICAgICAgdGhpcy51c2VyUGVybWlzc2lvbnNTZXJ2aWNlLmZpbHRlclVzZXJHcm91cFBlcm1pc3Npb25zKFxyXG4gICAgICAgICAgcGVybWlzc2lvbnMsXHJcbiAgICAgICAgICB0aGlzLmdyb3VwUGVybWlzc2lvbnNTZXJ2aWNlLmdldEdyb3VwUGVybWlzc2lvbnMoKVxyXG4gICAgICAgICk7XHJcbiAgICAgIHJldHVybiB0aGlzLnVzZXJQZXJtaXNzaW9uc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3NQZXJtaXNzaW9uKFxyXG4gICAgICAgIHBlcm1pc3Npb25UeXBlLFxyXG4gICAgICAgIHVzZXJQZXJtaXNzaW9uc1RvR3JvdXBcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzLnVzZXJQZXJtaXNzaW9uc1NlcnZpY2UudmFsaWRhdGVBY2Nlc3NQZXJtaXNzaW9uKFxyXG4gICAgICBwZXJtaXNzaW9uVHlwZSxcclxuICAgICAgdGhpcy5nZXRVc2VyR3JvdXBQZXJtaXNzaW9ucygpXHJcbiAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBTdG9yZSB0aGUgbG9hZGVkIGdyb3VwIHR5cGVzLlxyXG4gICAqIEBwYXJhbSB7R3JvdXBUeXBlQ29uZmlndXJhdGlvbltdfSBncm91cFR5cGVzXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRMb2FkZWRHcm91cFR5cGVzKGdyb3VwVHlwZXM6IEdyb3VwVHlwZUNvbmZpZ3VyYXRpb25bXSkge1xyXG4gICAgdGhpcy5ncm91cFR5cGVzID0gZ3JvdXBUeXBlcztcclxuICB9XHJcbiAgLyoqXHJcbiAgICogUmV0dXJuIHRoZSBsb2FkZWQgZ3JvdXAgdHlwZXMuXHJcbiAgICogQHJldHVybiB7R3JvdXBUeXBlQ29uZmlndXJhdGlvbltdfVxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgZ2V0TG9hZGVkR3JvdXBUeXBlcygpOiBHcm91cFR5cGVDb25maWd1cmF0aW9uW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBUeXBlcztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqXHJcbiAgICogQHBhcmFtIHtPcmdhbml6YXRpb25SZXF1ZXN0UGF5bG9hZH0gb3JnUmVxdWVzdFBheWxvYWRcclxuICAgKiBAcmV0dXJuIHtPYnNlcnZhYmxlPE9yZ2FuaXphdGlvblJlc3BvbnNlPn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldE9yZ2FuaXphdGlvbnMoXHJcbiAgICBvcmdSZXF1ZXN0UGF5bG9hZDogT3JnYW5pemF0aW9uUmVxdWVzdFBheWxvYWRcclxuICApOiBPYnNlcnZhYmxlPE9yZ2FuaXphdGlvblJlc3BvbnNlPiB7XHJcbiAgICByZXR1cm4gdGhpcy5odHRwU2VydmljZVxyXG4gICAgICAucG9zdERhdGEoXHJcbiAgICAgICAgYCR7dGhpcy5hcGlCYXNlVXJsfS9ncm91cHMvcm9zdGVyL29yZ2FuaXphdGlvbnNgLFxyXG4gICAgICAgIG9yZ1JlcXVlc3RQYXlsb2FkXHJcbiAgICAgIClcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgbWFwKChyZXNwb25zZSkgPT4ge1xyXG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGNhdGNoRXJyb3IoKGVycm9yUmVzKSA9PiB7XHJcbiAgICAgICAgICB0aHJvdyBlcnJvclJlcztcclxuICAgICAgICB9KVxyXG4gICAgICApO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBSZXR1cm5zIHRoZSBncm91cCB0eXBlIGNvbmZpZ3VyYXRpb24gQnVzaW5lc3MgcnVsZSBmb3IgdGhlIHNlbGVjdGVkIGdyb3VwLlxyXG4gICAqIEByZXR1cm4geyhCdXNpbmVzc1J1bGUgIHwgdW5kZWZpbmVkKX1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldEJ1c2luZXNzUnVsZU9mU2VsZWN0ZWRHcm91cCgpOiBCdXNpbmVzc1J1bGUgfCB1bmRlZmluZWQge1xyXG4gICAgcmV0dXJuIHRoaXMuZ2V0TG9hZGVkR3JvdXBUeXBlcygpPy5maW5kKFxyXG4gICAgICAoZ3JvdXApID0+IGdyb3VwPy5jb25maWdGaWVsZElkID09PSB0aGlzLmdldFNlbGVjdGVkR3JvdXBJbmZvKCk/Lmdyb3VwVHlwZVxyXG4gICAgKT8uY29uZmlnRmllbGRWYWx1ZT8uYnVzaW5lc3NSdWxlO1xyXG4gIH1cclxuICAvKipcclxuICAgKiBFbmFibGVzIG9yIGRpc2FibGVzIHRoZSBmb3JtIHN1Ym1pdCBidXR0b24gYmFzZWQgb24gcGFzc2VkIHBhcmFtZXRlcnMuXHJcbiAgICogQHBhcmFtIHtHcm91cFJvc3RlclR5cGV9IGdyb3VwUm9zdGVyVHlwZVxyXG4gICAqIEBwYXJhbSB7Rm9ybUNvbnRyb2xTdGF0dXN9IGZvcm1TdGF0dXNcclxuICAgKiBAcGFyYW0ge3N0cmluZ1tdfSBzZWxlY3RlZFVzZXJSb2xlc1xyXG4gICAqIEByZXR1cm4ge2Jvb2xlYW59XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBpc1N1Ym1pdEJ1dHRvbkRpc2FibGVkKFxyXG4gICAgZ3JvdXBSb3N0ZXJUeXBlOiBHcm91cFJvc3RlclR5cGUsXHJcbiAgICBmb3JtU3RhdHVzOiBGb3JtQ29udHJvbFN0YXR1cyxcclxuICAgIHNlbGVjdGVkVXNlclJvbGVzOiBzdHJpbmdbXVxyXG4gICk6IGJvb2xlYW4ge1xyXG4gICAgaWYgKGdyb3VwUm9zdGVyVHlwZSA9PT0gR3JvdXBSb3N0ZXJUeXBlLklORElWSURVQUwpXHJcbiAgICAgIHJldHVybiBmb3JtU3RhdHVzID09PSBGb3JtU3RhdHVzLklOVkFMSUQ7XHJcbiAgICByZXR1cm4gc2VsZWN0ZWRVc2VyUm9sZXM/Lmxlbmd0aCA9PT0gMCB8fCBmb3JtU3RhdHVzID09PSBGb3JtU3RhdHVzLklOVkFMSUQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGlzUGFyZW50R3JvdXBDaGFuZ2VkIHRydWUgb3IgZmFsc2UuXHJcbiAgICogQHBhcmFtIHtib29sZWFufSBpc1BhcmVudEdyb3VwQ2hhbmdlZFxyXG4gICAqIEBtZW1iZXJvZiBHcm91cHNTZXJ2aWNlXHJcbiAgICovXHJcbiAgc2V0UGFyZW50R3JvdXBDaGFuZ2VTdGF0dXMoaXNQYXJlbnRHcm91cENoYW5nZWQ6IGJvb2xlYW4pOiB2b2lkIHtcclxuICAgIHRoaXMuaXNQYXJlbnRHcm91cENoYW5nZWQgPSBpc1BhcmVudEdyb3VwQ2hhbmdlZDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgaXNQYXJlbnRHcm91cENoYW5nZWQgdmFsdWUuXHJcbiAgICogQHJldHVybiB7Ym9vbGVhbn1cclxuICAgKiBAbWVtYmVyb2YgR3JvdXBzU2VydmljZVxyXG4gICAqL1xyXG4gIGdldFBhcmVudEdyb3VwQ2hhbmdlU3RhdHVzKCk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIHRoaXMuaXNQYXJlbnRHcm91cENoYW5nZWQ7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIHRoZSBtZW1iZXIgdHlwZXMuXHJcbiAgICogQHBhcmFtIHtSb2xlW119IG1lbWJlclR5cGVzXHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBzZXRNZW1iZXJUeXBlcyhtZW1iZXJUeXBlczogUm9sZVtdKTogdm9pZCB7XHJcbiAgICB0aGlzLm1lbWJlclR5cGVzID0gbWVtYmVyVHlwZXM7XHJcbiAgfVxyXG4gIC8qKlxyXG4gICAqIFJldHVybnMgdGhlIG1lbWJlciB0eXBlcy5cclxuICAgKiBAcmV0dXJuIHtSb2xlW119XHJcbiAgICogQG1lbWJlcm9mIEdyb3Vwc1NlcnZpY2VcclxuICAgKi9cclxuICBnZXRNZW1iZXJUeXBlcygpOiBSb2xlW10ge1xyXG4gICAgcmV0dXJuIHRoaXMubWVtYmVyVHlwZXM7XHJcbiAgfVxyXG59XHJcbiJdfQ==
|