tnx-shared 5.3.55 → 5.3.56
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundles/tnx-shared.umd.js +1 -1
- package/bundles/tnx-shared.umd.js.map +1 -1
- package/bundles/tnx-shared.umd.min.js +1 -1
- package/bundles/tnx-shared.umd.min.js.map +1 -1
- package/esm2015/classes/base/list-component-base.js +2 -2
- package/fesm2015/tnx-shared.js +1 -1
- package/fesm2015/tnx-shared.js.map +1 -1
- package/package.json +2 -2
|
@@ -2069,7 +2069,7 @@ export class ListComponentBase extends ComponentBase {
|
|
|
2069
2069
|
case DataType.boolean:
|
|
2070
2070
|
templateFilter.push(new Filter({
|
|
2071
2071
|
field: this.getFieldFilter(col),
|
|
2072
|
-
operator: Operator.in,
|
|
2072
|
+
operator: col.single ? Operator.equal : Operator.in,
|
|
2073
2073
|
sourceField: col.field
|
|
2074
2074
|
}));
|
|
2075
2075
|
break;
|
|
@@ -3074,4 +3074,4 @@ ListComponentBase.propDecorators = {
|
|
|
3074
3074
|
widthFunctionColumnChange: [{ type: Output }],
|
|
3075
3075
|
onSearched: [{ type: Output }]
|
|
3076
3076
|
};
|
|
3077
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb21wb25lbnQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvbGlzdC1jb21wb25lbnQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFSCxZQUFZLEVBQ1osZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RSxPQUFPLEVBQXFCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRixPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsV0FBVyxFQUNYLGNBQWMsRUFDZCxZQUFZ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Q3pDLFlBQVksU0FBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7dUJBQ2hELGVBQWUsU0FBQyxXQUFXO29CQUUzQixLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsS0FBSzttQkFDTCxLQUFLOzRCQUdMLEtBQUs7K0JBQ0wsS0FBSztrQ0FHTCxLQUFLOzRCQUVMLEtBQUs7NEJBU0wsS0FBSzsrQkFDTCxLQUFLO2lDQUNMLEtBQUs7eUJBQ0wsS0FBSzttQ0FDTCxLQUFLOzBCQUNMLEtBQUs7NEJBQ0wsS0FBSzsrQkFDTCxLQUFLOzhCQU1MLEtBQUs7bUNBQ0wsS0FBSzs4QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzsyQkFDTCxLQUFLO3lCQUNMLEtBQUs7NkJBQ0wsS0FBSzt5QkFDTCxLQUFLO3FDQUNMLEtBQUs7MkJBQ0wsS0FBSztxQkFDTCxLQUFLOzRCQUNMLEtBQUs7cUJBQ0wsS0FBSzsrQkFDTCxLQUFLO3dCQUNMLEtBQUs7a0NBQ0wsS0FBSztpQ0FDTCxLQUFLOzBCQUNMLEtBQUs7eUJBQ0wsS0FBSztvQkFHTCxLQUFLO3lCQU1MLEtBQUs7NEJBV0wsS0FBSzt5QkFhTCxLQUFLOzZCQVlMLEtBQUs7MEJBRUwsTUFBTTswQkFDTixNQUFNO3lCQUNOLE1BQU07dUJBQ04sTUFBTTt5QkFDTixNQUFNO3NCQUNOLE1BQU07NEJBQ04sTUFBTTtvQkFDTixNQUFNO3FCQUNOLE1BQU07eUJBQ04sTUFBTTtpQ0FDTixNQUFNO3FCQUNOLE1BQU07dUJBQ04sTUFBTTsrQkFDTixNQUFNO2dDQUNOLE1BQU07NkJBQ04sTUFBTTtnQ0FDTixNQUFNO2tDQUNOLE1BQU07bUNBQ04sTUFBTTtzQ0FDTixNQUFNO3dDQUNOLE1BQU07eUJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9jb250ZXh0bWVudSc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IFRyZWVUYWJsZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL3RyZWV0YWJsZSc7XG5cbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgSUxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvaS1saXN0LWNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25UZXh0QWN0aW9uQ29uZ1ZpZWMsIEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IEVudmlyb25tZW50U2NoZW1hLCBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQge1xuICAgIENoZWNrQm94TGlzdENvbnRyb2xTY2hlbWEsXG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcbiAgICBDb2x1bW5TZXR0aW5nLFxuICAgIENvbnRyb2xUeXBlLFxuICAgIENydWRMaXN0Q29uZmlnLFxuICAgIENydWRMaXN0RGF0YSxcbiAgICBDcnVkTGlzdFNldHRpbmcsXG4gICAgRGF0YVR5cGUsXG4gICAgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEsXG4gICAgRGlhbG9nTW9kZWwsXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxuICAgIEV4cG9ydEl0ZW1zTW9kZSxcbiAgICBGaWxlVXBsb2FkTW9kZSxcbiAgICBGb3JtQ29udHJvbEJhc2UsXG4gICAgSGVpZ2h0VHlwZSxcbiAgICBOdW1iZXJSYW5nZUNvbnRyb2xTY2hlbWEsXG4gICAgT3BlcmF0b3IsXG4gICAgUG9wdXBTaXplLFxuICAgIFJlZkZpZWxkLFxuICAgIFRleHRBbGlnbixcbiAgICBUZXh0Q29udHJvbFNjaGVtYVxufSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IFRuTWVudUl0ZW0gfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RuLW1lbnUtaXRlbSc7XG5pbXBvcnQgeyBBY3Rpb24sIFdvcmtmbG93U2V0dGluZ05ldyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvd29ya2Zsb3ctc2NoZW1hJztcbmltcG9ydCB7IGdldFJlZ2V4UmVzdWx0LCByZW5kZXJUZXh0VGVtcGxhdGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NydWQvdXRpbHMnO1xuaW1wb3J0IHsgU2VhcmNoSW5mbyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9kZWxzL3NlYXJjaCc7XG5pbXBvcnQgeyBFbnVtU3RhdGVUeXBlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdGF0ZW1hY2hpbmVzL21vZGVscy9lbnVtcyc7XG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmVzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc3RhdGVtYWNoaW5lcy9zZXJ2aWNlcy9zdGF0ZW1hY2hpbmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3RuLWN1c3RvbS1zY3JvbGxiYXIvdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmllbGREZWZpbmVIYXNUYXNrLCBNYUFjdGlvbkJhdERhdVF1eVRyaW5oIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9tb2RlbHMvY29uc3QnO1xuaW1wb3J0IHsgV2ZBY3Rpb24sIFdmSXRlbSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvbW9kZWxzL21vZGVscyc7XG5pbXBvcnQgeyBDYW5Cb19Ib1NvU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvY2FuYm8taG9zby5zZXJ2aWNlJztcbmltcG9ydCB7IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2VudGl0eS13b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Zsb3dIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvd29ya2Zsb3ctaGlzdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL3dvcmtmbG93LXBlcm1pc3Npb24tZGV0YWlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGF0YVNvdXJjZUljb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3dvcmtmbG93LXNldHRpbmcvd29ya2Zsb3ctc2V0dGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uZ3ZpZWMvY29uZ3ZpZWMvc2VydmljZXMvY29uZ3ZpZWMuc2VydmljZSc7XG5pbXBvcnQgeyBEbUxvYWlDb25nVmllY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25ndmllYy9kbS1sb2FpLWNvbmd2aWVjL3NlcnZpY2VzL2RtLWxvYWktY29uZ3ZpZWMuc2VydmljZSc7XG5pbXBvcnQgeyBGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm0sIFJlZ2V4U3BsaXRGaWVsZEJ5SXRlbSB9IGZyb20gJy4uLy4uL2NvbnN0L2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEZpZWxkQ2hlY2tib3hDcnVkTGlzdCxcbiAgICBGaWVsZENvbEV4cGFuZENydWRMaXN0LFxuICAgIEZpZWxkQ29sUmVvcmRlckNydWRMaXN0LFxuICAgIEZpZWxkRnVuY3Rpb25DcnVkTGlzdCxcbiAgICBGaWVsZEluZGV4SW5EYXRhU291cmNlLFxuICAgIEZpZWxkT3JkZXJDcnVkTGlzdFxufSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbywgU29ydCB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RuLXVzZXInO1xuaW1wb3J0IHsgS2V5VmFsdWVUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3R5cGVzJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFByaW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByaW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90ZW1wbGF0ZWluc3RhbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgbXVsdGlwbGVTb3J0IH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXknO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmRlY2xhcmUgbGV0ICQ6IGFueTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGlzdENvbXBvbmVudEJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgSUxpc3RDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCd0cmVldGFibGUnKSB0cmVlVGFibGU6IFRyZWVUYWJsZTtcbiAgICB0YWJsZTogVGFibGU7XG5cbiAgICBAVmlld0NoaWxkKFRhYmxlLCB7IHN0YXRpYzogZmFsc2UgfSkgc2V0IF90YWJsZSh2OiBUYWJsZSkge1xuICAgICAgICB0aGlzLnRhYmxlID0gdjtcbiAgICAgICAgdGhpcy50YWJsZVJlYWR5Lm5leHQodGhpcyk7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyOiBFbGVtZW50UmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgnaWNvblRvZ2dsZVJvd0dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgaWNvblRvZ2dsZVJvd0dyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2ljb25Ub2dnbGVSb3dEYXRhJywgeyBzdGF0aWM6IHRydWUgfSkgaWNvblRvZ2dsZVJvd0RhdGE6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgndHJhbmdUaGFpVjUnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZVRyYW5nVGhhaVY1OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ3ZpZXdIaXN0b3J5JywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGVDb2xWaWV3SGlzdG9yeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCd3b3JrZmxvd0NvcmVTdGF0dXMnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZVdvcmtmbG93Q29yZVN0YXR1czogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCdzY3JvbGxiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzY3JvbGxiYXI6IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbnRleHRNZW51OiBDb250ZXh0TWVudTtcbiAgICBAQ29udGVudENoaWxkKCdwYWdpbmF0aW9uJywgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ3NlYXJjaEN1c3RvbScsIHsgc3RhdGljOiB0cnVlIH0pIHNlYXJjaEN1c3RvbTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBoZWFkZXI6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyRmlsdGVyJywgeyBzdGF0aWM6IHRydWUgfSkgaGVhZGVyRmlsdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ3Jvd0V4cGFuc2lvbicsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0V4cGFuc2lvbjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdzdW1tYXJ5JywgeyBzdGF0aWM6IHRydWUgfSkgc3VtbWFyeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdmb290ZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBmb290ZXI6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnY29sZ3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb2xncm91cDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdyb3dHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0dyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2NvbnRlbnRSb3dHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRlbnRSb3dHcm91cDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlUmVmKSBjaGlsZHJlbjogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQElucHV0KCkgbW9kZWw6IENydWRMaXN0RGF0YSA9IG5ldyBDcnVkTGlzdERhdGEoKTtcbiAgICBASW5wdXQoKSBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgQElucHV0KCkgZmlsZU5hbWUgPSAnZXhwb3J0JztcbiAgICBASW5wdXQoKSBsYXp5ID0gdHJ1ZTsgLy8gxJHhurd0IGdpw6EgdHLhu4sgbsOgeSBi4bqxbmcgZmFsc2UgdGjDrCBz4bq9IGZpbHRlciDEkWMgY2xpZW50XG5cbiAgICAvLyBkdW5nIGRvbiB2aSByZW0gZGUgd2lkdGgga2hvbmcgYmkgYW5oIGh1b25nIGJvaSBmb250IHNpemUgY3VhIHRoLCBubyBzZSBsYXkgdGhlbyBmb250IHNpemUgY3VhIHRoZSBodG1sXG4gICAgQElucHV0KCkgd2lkdGhDaGVja2JveCA9ICcyLjVyZW0nO1xuICAgIEBJbnB1dCgpIHdpZHRoT3JkZXJDb2x1bW4gPSAnMy41cmVtJztcbiAgICBfZGVmYXVsdFdpdGhGdW5jdGlvbkNvbHVtbiA9IDgxO1xuICAgIF93aWR0aEZ1bmN0aW9uQ29sdW1uID0gYCR7dGhpcy5fZGVmYXVsdFdpdGhGdW5jdGlvbkNvbHVtbn1weGA7XG4gICAgQElucHV0KCkgd2lkdGhGdW5jdGlvbkNvbHVtbjogc3RyaW5nO1xuICAgIF9jbGFzc1Jvd0dyb3VwID0gJ25vLXBhZGRpbmcnO1xuICAgIEBJbnB1dCgpIHNldCBjbGFzc1Jvd0dyb3VwKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jbGFzc1Jvd0dyb3VwID0gYG5vLXBhZGRpbmcgJHt2YWx1ZX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY2xhc3NSb3dHcm91cCA9IGBuby1wYWRkaW5nYDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIHNob3dTY3JvbGxCYXIgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHBUYWJsZVNjcm9sbGFibGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwVGFibGVTY3JvbGxIZWlnaHQ6IHN0cmluZyA9IG51bGw7XG4gICAgQElucHV0KCkgcmVzcG9uc2l2ZSA9IHRydWU7XG4gICAgQElucHV0KCkgZW5hYmxlQmFzaWNBdXRob3JpemU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGF1dGhvcml6ZVBhdGg6IHN0cmluZztcbiAgICBASW5wdXQoKSBhdXRob3JpemVCdXR0b25zOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5BREQsXG4gICAgICAgIENvbUN0eENvbnN0YW50cy5DT01NT04uRURJVCxcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5ERUxFVEUsXG4gICAgICAgIENvbUN0eENvbnN0YW50cy5DT01NT04uREVMRVRFX01VTFRJUExFXG4gICAgXTtcbiAgICBASW5wdXQoKSBjb25maWdTY3JvbGxCYXI6IGFueSA9IHsgc3VwcHJlc3NTY3JvbGxYOiB0cnVlLCBzdXBwcmVzc1Njcm9sbFk6IGZhbHNlIH07XG4gICAgQElucHV0KCkgc2hvd1Njcm9sbEhvcml6b250YWwgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzaG93TWVudUJ1dHRvbnMgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dSYWRpbyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlbkFkZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlbkRlbGV0ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlbkVkaXQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBoaWRkZW5Db3B5TGluayA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlblZpZXcgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlS2V5cHJlc3NDb250cm9sID0gZmFsc2U7XG4gICAgQElucHV0KCkgY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBlc2NhcGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb25maWc6IENydWRMaXN0Q29uZmlnID0gbmV3IENydWRMaXN0Q29uZmlnKCk7XG4gICAgQElucHV0KCkgZW5hYmxlUmVvcmRlclJvdyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlc0Zyb21QYXJlbnQ6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcbiAgICBASW5wdXQoKSBjaGlsZHJlbkZyb21QYXJlbnQ6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcbiAgICBASW5wdXQoKSBtZW51QnV0dG9uczogKHJvd0RhdGEpID0+IFRuTWVudUl0ZW1bXSB8IFByb21pc2U8VG5NZW51SXRlbVtdPjtcbiAgICBASW5wdXQoKSBmaWVsZE9yZGVyOiBzdHJpbmcgPSBGaWVsZE9yZGVyQ3J1ZExpc3Q7XG5cbiAgICBfc3R5bGU6IGFueSA9IHt9O1xuICAgIEBJbnB1dCgpIHNldCBzdHlsZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB0YWJsZUNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGFibGVDbGFzcyA9IHRoaXMuX2RlZmF1bHRUYWJsZUNsYXNzO1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS50cmltKCkgIT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gYCAke3ZhbHVlfWA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHVwVGFibGVDbGFzcygpO1xuICAgIH1cblxuICAgIF9yYXdEYXRhU291cmNlOiBhbnlbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgc2V0IGFsbERhdGFTb3VyY2UodmFsdWU6IGFueSkge1xuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdLFxuICAgICAgICAgICAgcmF3RGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUucmF3KSB7XG4gICAgICAgICAgICBkYXRhU291cmNlID0gdmFsdWUuZGF0YTtcbiAgICAgICAgICAgIHJhd0RhdGFTb3VyY2UgPSB2YWx1ZS5yYXc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzRGF0YVNvdXJjZShyYXdEYXRhU291cmNlKTtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UgPSByYXdEYXRhU291cmNlO1xuICAgIH1cblxuICAgIF9kYXRhU291cmNlOiBhbnlbXSA9IFtdO1xuICAgIEBJbnB1dCgpIHNldCBkYXRhU291cmNlKHZhbHVlOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5pc1RyZWVUYWJsZSkgcmV0dXJuO1xuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5fcmF3RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIG3hurdjIMSR4buLbmggY2hvIGRldiBjb2RlXG4gICAgQElucHV0KCkgZmlsdGVyX2RlZmF1bHQ6IEZpbHRlcltdID0gW107XG5cbiAgICBAT3V0cHV0KCkgb25Sb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25SZW9yZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25DaGVja0FsbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db250ZW50SW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db3B5TGluayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNvcHlMaW5rTXVsdGlwbGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25WaWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGVsZXRlTXVsdGlwbGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25JbnZhbGlkV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25BZnRlclRyaW5oS3kgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TdGFydGVkV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Qcm9jZXNzZWRXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJvbGxiYWNrZWRXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWRTdGF0dXNXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSB3aWR0aEZ1bmN0aW9uQ29sdW1uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uU2VhcmNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBwcml2YXRlIGlzVHJlZVRhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSB0YWJsZVJlYWR5ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHRhYmxlUmVhZHlTb3VyY2UkID0gdGhpcy50YWJsZVJlYWR5LmFzT2JzZXJ2YWJsZSgpO1xuICAgIGZpZWxkQ2hlY2tib3ggPSBGaWVsZENoZWNrYm94Q3J1ZExpc3Q7XG4gICAgZmllbGRDb2xFeHBhbmQgPSBGaWVsZENvbEV4cGFuZENydWRMaXN0O1xuICAgIGZpZWxkQ29sUmVvcmRlciA9IEZpZWxkQ29sUmVvcmRlckNydWRMaXN0O1xuICAgIGZpZWxkRnVuY3Rpb24gPSBGaWVsZEZ1bmN0aW9uQ3J1ZExpc3Q7XG4gICAgZmllbGRJbmRleEluRGF0YVNvdXJjZSA9IEZpZWxkSW5kZXhJbkRhdGFTb3VyY2U7XG5cbiAgICBjaGVja2VkQWxsID0gbnVsbDtcbiAgICBkYXRhU2VhcmNoQ29tbW9uOiBhbnkgPSB7fTtcbiAgICByb3dHcm91cENoZWNrZWQ6IGFueSA9IHt9O1xuICAgIHJvd0dyb3VwTWV0YWRhdGE6IGFueSA9IHt9O1xuICAgIGRhdGFTb3VyY2VJbnRlcm5hbDogYW55W107XG4gICAgY2xhc3NUb29sYmFyID0gJyc7XG4gICAgaXRlbVNldHRpbmdzOiBhbnkgPSB7fTtcbiAgICBzb3J0SGlzdG9yeTogU29ydFtdID0gW107XG4gICAgc29ydENsaWVudEhpc3Rvcnk6IGFueSA9IHt9O1xuICAgIF9ncm91cEZpZWxkOiBzdHJpbmcgPSBudWxsO1xuICAgIF9ncm91cEluQ2xpZW50ID0gZmFsc2U7XG4gICAgZW5hYmxlZFdmMSA9IHVuZGVmaW5lZDtcbiAgICBzaG93aW5nQWN0aW9uV29ya2Zsb3cgPSBmYWxzZTtcbiAgICBidXR0b25Db250ZXh0czogTWVudUl0ZW1bXSA9IFtdO1xuICAgIGF1dGhvcml6ZVBhdGhzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICAgIGJ1dHRvbkFwcGx5QXV0aG9yaXplOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW47IH0gPSB7fTtcbiAgICBjb21tb25Db25zdCA9IENvbUN0eENvbnN0YW50cy5DT01NT047XG5cbiAgICBfZGVmYXVsdFRhYmxlQ2xhc3MgPSAnbmV3LXRhYmxlIHNjci10YWJsZSBjcnVkLWxpc3QtdGFibGUnO1xuICAgIF90YWJsZUNsYXNzID0gJyc7XG4gICAgX3Nob3dTZXR0aW5nc1Jvd0NvbG9yID0gZmFsc2U7XG4gICAgX3Nob3dTZXR0aW5ncyA9IGZhbHNlO1xuICAgIF9zaG93U2V0dGluZ3NXb3JrZmxvdyA9IGZhbHNlO1xuICAgIF9zaG93U2V0dGluZ3NQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgX2NvbG9yRmlsdGVyVGFibGUgPSBbXTtcbiAgICBfc29ydEZpZWxkID0gJyc7XG4gICAgX3NvcnREaXI6IC0xIHwgMCB8IDEgfCAyID0gLTE7XG5cbiAgICB0ZW1wbGF0ZTogYW55ID0ge307XG4gICAgdGVtcGxhdGVGaWx0ZXI6IEZpbHRlcltdID0gW107XG4gICAgdGVtcGxhdGVIZWFkZXJDb250ZW50OiBhbnkgPSB7fTtcblxuICAgIGNhY2hlZFRyYW5zZm9ybXMgPSB7fTtcblxuICAgIGZpbHRlclNjaGVtYTogYW55ID0ge307XG4gICAgZmlsdGVyRGF0YTogYW55ID0ge307XG4gICAgY3VycmVudEZpZWxkRmlsdGVyOiBzdHJpbmc7XG4gICAgY2hlY2tCb3hDb250ZXh0TWVudTogTWVudUl0ZW1bXSA9IFtcbiAgICAgICAgeyBsYWJlbDogYEPDs2AsIGljb246ICdwaSBwaS1jaGVjaycsIGNvbW1hbmQ6ICgpID0+IHRoaXMuY2hhbmdlRmlsdGVyQm9vbGVhbih0cnVlKSB9LFxuICAgICAgICB7IGxhYmVsOiBgS2jDtG5nYCwgaWNvbjogJ3BpIHBpLXRpbWVzJywgY29tbWFuZDogKCkgPT4gdGhpcy5jaGFuZ2VGaWx0ZXJCb29sZWFuKGZhbHNlKSB9LFxuICAgICAgICB7IGxhYmVsOiBgSOG7p3kgYuG7j2AsIGljb246ICdwaSBwaS11bmRvJywgY29tbWFuZDogKCkgPT4gdGhpcy5jaGFuZ2VGaWx0ZXJCb29sZWFuKG51bGwpIH1cbiAgICBdO1xuICAgIHNlYXJjaEluZm86IFNlYXJjaEluZm8gPSBuZXcgU2VhcmNoSW5mbygpO1xuICAgIGNyZWF0aW5nU2VhcmNoSW5mbyA9IGZhbHNlO1xuXG4gICAgZmlsdGVyX2N1c3RvbTogRmlsdGVyW10gPSBbXTtcbiAgICAvLyBmaWx0ZXIgY+G7p2EgYWR2YW5jZSBzZWFyY2ggdHLhuqMgduG7gVxuICAgIGZpbHRlcl9hZHZhbmNlU2VhcmNoOiBGaWx0ZXJbXSA9IFtdO1xuICAgIGZpbHRlcl9jb21tb25TZWFyY2g6IEZpbHRlcltdID0gW107XG4gICAgLy8gZmlsdGVyIHRoZW8gY8OhYyBmaWx0ZXIgaGnhu4NuIHRo4buLIHRyb25nIGPhu5l0IGPhu6dhIGdyaWRcbiAgICBmaWx0ZXJfY29sdW1uOiBGaWx0ZXJbXSA9IFtdO1xuXG4gICAgdGltZW91dDogYW55O1xuICAgIGludGVydmFsOiBhbnk7XG4gICAgZGF0YUFkdmFuY2U6IGFueSA9IHt9O1xuICAgIHNlYXJjaE1vZGVsOiBhbnkgPSB7fTtcblxuICAgIGN1cnJlbnRJdGVtOiBhbnk7XG4gICAgc2hvd0Zvcm1Xb3JrZmxvdyA9IGZhbHNlO1xuICAgIGhlYWRlcldvcmtmbG93ID0gJyc7XG4gICAgYWN0aW9uV29ya2Zsb3c6IEFjdGlvbjtcbiAgICBwb3B1cFNpemVXb3JrZmxvdzogUG9wdXBTaXplID0gbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiA5NTAsIGhlaWdodDogNTQwIH0pO1xuICAgIHNob3dIaXN0b3J5V29ya2Zsb3cgPSBmYWxzZTtcbiAgICBoaWRkZW5CdG5GdW5jdGlvbiA9IGZhbHNlO1xuICAgIC8vIEJp4bq/biDEkeG7gyBraeG7g20gdHJhIGzhuqduIGNsaWNrIMSR4bqndSB0acOqbiBj4bunYSB1c2VyIHbDoG8gZMOybmcgdHLDqm4gZ3JpZFxuICAgIC8vIFPhu60gZOG7pW5nIMSR4buDIGZpeCBidWcgc2V0IHNlbGVjdGVkIHJvdyB04burIGZvcm0gY2hhLCBuaMawbmcgdsOgbyBmb3JtIGNvbiDhuqVuIHNhbmcgcm93IGtow6FjIG7DsyBrIGLhu48gc2VsZWN0ZWQgcm93IMSRw6Mgc2V0IHThu6sgYsOqbiBuZ2/DoGlcbiAgICBmaXJzdFJvd0NsaWNrID0gdHJ1ZTtcblxuICAgIHN0YXJ0V29ya2Zsb3dNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdDaOG7jW4gcXV5IHRyw6xuaCBuZ2hp4buHcCB24bulIHPhu60gZOG7pW5nJ1xuICAgIH0pO1xuICAgIHByb2Nlc3NXb3JrZmxvd01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCgpO1xuICAgIGNob1lLaWVuTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ2hvIMO9IGtp4bq/bicsXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiAxMTAwLCBoZWlnaHQ6IDY1MCB9KVxuICAgIH0pO1xuICAgIHdvcmtmbG93U2V0dGluZ01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCgpO1xuICAgIHdvcmtmbG93SGlzdG9yeU1vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ1hlbSBs4buLY2ggc+G7rSdcbiAgICB9KTtcbiAgICBwZXJtaXNzaW9uU2hhcmluZ01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ1hlbSBkYW5oIHPDoWNoIGxpbmsgY2hpYSBz4bq7JyxcbiAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDExMDAsIGhlaWdodDogNjUwIH0pLFxuICAgIH0pO1xuICAgIHBlcm1pc3Npb25MaXN0TW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnWGVtIGRhbmggc8OhY2ggY8OzIHF1eeG7gW4nLFxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogMTEwMCwgaGVpZ2h0OiA2NTAgfSksXG4gICAgfSk7XG4gICAgY29uZ1ZpZWNNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdDaOG6oXkgcXV5IHRyw6xuaCBjw7RuZyB2aeG7h2MnLFxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogMTEwMCwgaGVpZ2h0OiA2NTAgfSksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNvbmdWaWVjU2V0dGluZzogbmV3IENydWRMaXN0U2V0dGluZygpXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBkZXRhaWxUYXNrTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ2hpIHRp4bq/dCBjw7RuZyB2aeG7h2MnXG4gICAgfSk7XG4gICAgc2hhcmVMaW5rTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ2hpYSBz4bq7IHF1eeG7gW4nLFxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogNjUwLCBoZWlnaHQ6IDMxMCB9KVxuICAgIH0pO1xuICAgIGF0dGFjaGVkVGFza01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ0Rhbmggc8OhY2ggY8O0bmcgdmnhu4djIMSRw61uaCBrw6htJ1xuICAgIH0pO1xuXG4gICAgQlVUVE9OX1BIQU5fUVVZRU4gPSBCdXR0b25QZXJtaXNzaW9uLkJVVFRPTl9QSEFOX1FVWUVOO1xuICAgIEJVVFRPTl9DQVVfSElOSF9RVVlfVFJJTkggPSBCdXR0b25QZXJtaXNzaW9uLkJVVFRPTl9DQVVfSElOSF9RVVlfVFJJTkg7XG4gICAgbHN0QnV0dG9uUGVybWlzc2lvbiA9IFtdO1xuICAgIGJ1dHRvblBlcm1pc3Npb25NYXA6IE1hcDxzdHJpbmcsIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xuXG4gICAgZW50aXR5TWV0YWRhdGFTZXJ2aWNlOiBFbnRpdHlNZXRhZGF0YVNlcnZpY2U7XG4gICAgZW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZTogRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZTtcblxuICAgIHN0YXRlTWFjaGluZXNTZXJ2aWNlOiBTdGF0ZU1hY2hpbmVzU2VydmljZTtcblxuICAgIGNhbkJvX0hvU29TZXJ2aWNlOiBDYW5Cb19Ib1NvU2VydmljZTtcblxuICAgIHNvdXJjZUljb246IGFueSA9IHt9O1xuICAgIHN0b3BDYWxjdWxhdGluZ0Z1bmN0aW9uQ29sdW1uV2lkdGggPSBmYWxzZTtcbiAgICBzZWxlY3RlZEl0ZW1MYXN0OiBhbnk7XG5cbiAgICByb3dEYXRhQ3VycmVudDogYW55O1xuICAgIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFNjaGVtYTtcbiAgICBGaWxlVXBsb2FkTW9kZSA9IEZpbGVVcGxvYWRNb2RlO1xuICAgIGN1cnJlbnRVc2VyOiBUblVzZXI7XG4gICAgT3BlcmF0b3IgPSBPcGVyYXRvcjtcblxuICAgIHB1YmxpYyBfcm91dGVyOiBSb3V0ZXI7XG4gICAgcHVibGljIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gICAgcHVibGljIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBfdW5TdWJzY3JpYmVBbGwgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcHVibGljIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZTtcbiAgICBwdWJsaWMgX2V4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2U7XG4gICAgcHVibGljIF9sb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBfY29uZ1ZpZWNTZXJ2aWNlOiBDb25nVmllY1NlcnZpY2U7XG4gICAgcHVibGljIF9kbUxvYWlDb25nVmllY1NlcnZpY2U6IERtTG9haUNvbmdWaWVjU2VydmljZTtcbiAgICBwdWJsaWMgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XG4gICAgcHVibGljIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XG4gICAgcHVibGljIF9zYW50aWxpemVyOiBEb21TYW5pdGl6ZXI7XG4gICAgcHVibGljIF9kYXRlUGlwZTogRGF0ZVBpcGU7XG5cbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2U7XG4gICAgcHJpdmF0ZSBfcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgX3RlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlOiBUZW1wbGF0ZUluc3RhbmNlU2VydmljZTtcbiAgICBwcml2YXRlIF9wcmludFNlcnZpY2U6IFByaW50U2VydmljZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgX2lzVHJlZVRhYmxlOiBib29sZWFuXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG4gICAgICAgIHRoaXMuaXNUcmVlVGFibGUgPSBfaXNUcmVlVGFibGU7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICAgIHRoaXMuX2N1c3RvbVJvdXRlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3VzdG9tUm91dGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEV4cG9ydFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KExvZ2dlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLmVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSk7XG4gICAgICAgIHRoaXMuc3RhdGVNYWNoaW5lc1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoU3RhdGVNYWNoaW5lc1NlcnZpY2UpO1xuICAgICAgICB0aGlzLmNhbkJvX0hvU29TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENhbkJvX0hvU29TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbmdWaWVjU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChEbUxvYWlDb25nVmllY1NlcnZpY2UpO1xuXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fc2FudGlsaXplciA9IHRoaXMuX2luamVjdG9yLmdldChEb21TYW5pdGl6ZXIpO1xuICAgICAgICB0aGlzLl9kYXRlUGlwZSA9IHRoaXMuX2luamVjdG9yLmdldChEYXRlUGlwZSk7XG4gICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFBlcm1pc3Npb25TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9wcmludFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoUHJpbnRTZXJ2aWNlKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrQWxsID0gdGhpcy5oYW5kbGVDaGVja0FsbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrQWxsX0dyb3VwID0gdGhpcy5oYW5kbGVDaGVja0FsbF9Hcm91cC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FTlRJVFlfTUVUQURBVEFfUkVMT0FERUQsIHNlcnZpY2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbnRpdHlNZXRhZGF0YVNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kYXRlUmFuZ2UgPSBuZXcgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEoeyBhcHBlbmRUbzogJ2JvZHknIH0pO1xuICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kYXRlVGltZVJhbmdlID0gbmV3IERhdGVUaW1lUmFuZ2VDb250cm9sU2NoZW1hKHsgYXBwZW5kVG86ICdib2R5Jywgc2hvd1RpbWU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVyU2NoZW1hLmRyb3Bkb3duID0ge307XG5cbiAgICAgICAgZGF0YVNvdXJjZUljb24uZm9yRWFjaChzb3VyY2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VJY29uW3NvdXJjZS5pZF0gPSBzb3VyY2UudGVuO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRlbXBsYXRlRmlsdGVyID0gW107XG5cbiAgICAgICAgaWYgKCF0aGlzLl90YWJsZUNsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzID0gdGhpcy5fZGVmYXVsdFRhYmxlQ2xhc3M7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0dXBUYWJsZUNsYXNzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0Q29sdW1uU2NoZW1hKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5jcmVhdGVTZWFyY2hTY2hlbWEoKTtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuRmlsdGVyUm93KSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuRmlsdGVyUm93ID0gdGhpcy5zZXR0aW5nLnVzZUNvbW1vblNlYXJjaDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5UcmluaEt5IHx8ICF0aGlzLnNldHRpbmcuZGlzYWJsZVNoYXJlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWVudUJ1dHRvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVCdXR0b25zID0gYXN5bmMgKCkgPT4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBO4bq/dSBtw6Ag4bqpbiBhZHZhbmNlc2VhcmNoID0+IHPhur0ga2jDtG5nIGPDsyB0cmlnZ2VyIGxvYWQgZGF0YSB04burIGFkdmFuY2Ugc2VhcmNoID0+IHBo4bqjaSB04buxIGfhu41pIGdldERhdGEg4bufIE9uSW5pdFxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmhpZGRlbkFkdmFuY2VTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2VDb2RlICYmIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlQ29kZSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmF1dGhvcml6ZVBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5BRERdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9BRERgO1xuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkVESVRdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9FRElUYDtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5ERUxFVEVdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9ERUxFVEVgO1xuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkRFTEVURV9NVUxUSVBMRV0gPSBgJHt0aGlzLmF1dGhvcml6ZVBhdGh9L0RFTEVURV9NVUxUSVBMRWA7XG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6ZVBhdGhzW0NvbUN0eENvbnN0YW50cy5DT01NT04uRVhQT1JUX0VYQ0VMXSA9IGAke3RoaXMuYXV0aG9yaXplUGF0aH0vRVhQT1JUX0VYQ0VMYDtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FWFBPUlRfQUxMX0VYQ0VMXSA9IGAke3RoaXMuYXV0aG9yaXplUGF0aH0vRVhQT1JUX0FMTF9FWENFTGA7XG5cbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplQnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25BcHBseUF1dGhvcml6ZVtidXR0b25dID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XG4gICAgICAgIGNvbnN0IHRlbXAgPSB1c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICBpZiAodGVtcCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gbmV3IFRuVXNlcih1c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlciA9PSBudWxsKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvblBlcm1pc3Npb25Db2RlIG9mIHRoaXMubHN0QnV0dG9uUGVybWlzc2lvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvblBlcm1pc3Npb24gPSBgJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGV9LyR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWV9LyR7YnV0dG9uUGVybWlzc2lvbkNvZGV9YC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uUGVybWlzc2lvbk1hcC5zZXQoYnV0dG9uUGVybWlzc2lvbiwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNraXAgY2hlY2sgcGVybWlzc2lvbiBpZiBjdXJyZW50IHVzZXIgaXMgc3VwZXJ1c2VyIG9yIChpZ25vcmVBZG1pbiA9PSBmYWxzZSBhbmQgdXNlciBpcyBhZG1pbilcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSAhPT0gJ3RydWUnXG4gICAgICAgICAgICAmJiAodGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5pZ25vcmVBZG1pbiA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgIHx8IHRoaXMuY3VycmVudFVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpICE9PSAndHJ1ZSdcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5nZXRTZXJ2aWNlUGVybWlzc2lvbih0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsc3RCYXNlUGVybWlzc2lvbiA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB0aGlzLmxzdEJ1dHRvblBlcm1pc3Npb24gPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmJ1dHRvblBlcm1pc3Npb25zIGFzIHN0cmluZ1tdID8/IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYnV0dG9uUGVybWlzc2lvbkNvZGUgb2YgdGhpcy5sc3RCdXR0b25QZXJtaXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvblBlcm1pc3Npb24gPSBgJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGV9LyR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWV9LyR7YnV0dG9uUGVybWlzc2lvbkNvZGV9YC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvblBlcm1pc3Npb25NYXAuc2V0KGJ1dHRvblBlcm1pc3Npb24sIGxzdEJhc2VQZXJtaXNzaW9uLmluY2x1ZGVzKGJ1dHRvblBlcm1pc3Npb24pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5maW5kVGVtcGxhdGUoYGhlYWRlciR7Y29sLmZpZWxkLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpfSR7Y29sLmZpZWxkLnN1YnN0cmluZygxKX1gKTtcbiAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUhlYWRlckNvbnRlbnRbY29sLmZpZWxkXSA9IHRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25Db250ZW50SW5pdC5lbWl0KHRoaXMpO1xuICAgIH1cblxuICAgIHNldHVwVGFibGVDbGFzcygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93IHx8ICF0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3gpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBtdWx0aS1jaGVjayc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzICs9ICcgc2luZ2xlLWNoZWNrJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuc3RpY2t5Q29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzICs9ICcgc3RpY2t5LWNvbHVtbnMtYWN0aXZlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3gpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBoaWRkZW4tY29sdW1uLWNoZWNrYm94JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGlkZGVuT3JkZXJDb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBoaWRkZW4tY29sdW1uLW9yZGVyJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRDb2x1bW5TY2hlbWEoY29sczogQ29sdW1uU2NoZW1hQmFzZVtdKSB7XG4gICAgICAgIGlmICghY29scyB8fCAhY29scy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbGV0IGNvbEZ1bmN0aW9uID0gbnVsbCwgY29sR3JvdXAgPSBudWxsLCBjb2xIYXNUb2dnbGVJY29uID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC5zaG93VG9nZ2xlSWNvbikge1xuICAgICAgICAgICAgICAgIGNvbEhhc1RvZ2dsZUljb24gPSBjb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sLmZpZWxkID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb2xGdW5jdGlvbiA9IGNvbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5ncm91cCkge1xuICAgICAgICAgICAgICAgIGNvbC5ncm91cCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbEdyb3VwID0gY29sO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbEZ1bmN0aW9uICYmICFjb2xGdW5jdGlvbi53aWR0aCkge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGhGdW5jdGlvbkNvbHVtbiA9IGNvbEZ1bmN0aW9uLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29sSGFzVG9nZ2xlSWNvbikge1xuICAgICAgICAgICAgY29sSGFzVG9nZ2xlSWNvbiA9IHRoaXMuc2V0dGluZy5jb2xzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbEhhc1RvZ2dsZUljb24uY29sSGFzVG9nZ2xlSWNvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2V0Q29sb3JTZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuZ2V0Q29sdW1uU2V0dGluZyhjb2xHcm91cCk7XG4gICAgICAgIHRoaXMuZ2V0UGFnZVNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5leHRlbmRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5hcHBseUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlckNvbHVtbih0aGlzLnNldHRpbmcuY29scyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRlbmRDb2x1bW5zKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSwgYXBwZW5kQ29sID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmID0gW107XG4gICAgICAgIGlmICghY29scykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGVtcDogQ29sdW1uU2NoZW1hQmFzZVtdID0gW107XG4gICAgICAgIGNvbnN0IHRtcENvbHMgPSBbLi4uY29sc107XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzLmZvckVhY2goY29sUmVvcmRlciA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xzW2ldLmZpZWxkID09IGNvbFJlb3JkZXIuY29sdW1uQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKGNvbHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29scy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gQ8OybiBs4bqhaSBuaOG7r25nIGNvZGUgbcOgIGtow7RuZyDEkcaw4bujYyBj4bqldSBow6xuaCB0aMOsIGdow6lwIGzhuqFpIHRoZW8gaW5kZXggxJHGsOG7o2Mga2hhaSBiw6FvXG4gICAgICAgICAgICBsZXQgdGVtcENvbHM6IENvbHVtblNjaGVtYUJhc2VbXSA9IFtdO1xuICAgICAgICAgICAgY29scy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4Q29sT2xkID0gdG1wQ29scy5maW5kSW5kZXgocCA9PiBwLmZpZWxkID09IGNvbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4Q29sT2xkID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcC5zcGxpY2UoMCwgMCwgY29sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFTDrG0gduG7iyB0csOtIGPhu6dhIGPhu5l0IHBow61hIHRyxrDhu5tjIHRyb25nIGxpc3QgcmVvcmRlciBt4bubaVxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXhDb2xCZWZvcmVOZXcgPSB0ZW1wLmZpbmRJbmRleChwID0+IHAuZmllbGQgPT0gdG1wQ29sc1tpbmRleENvbE9sZCAtIDFdLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4Q29sQmVmb3JlTmV3ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29scy5zcGxpY2UoMCwgMCwgY29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFTDrG0gduG7iyB0csOtIGPhu6dhIGPhu5l0IHRyxrDhu5tjIGPhu5l0IMSRYW5nIGtp4buDbSB0cmEgdHJvbmcgbGlzdCBj4buZdCBn4buRY1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb2xPbGQgPSB0bXBDb2xzLmZpbmRJbmRleChwID0+IHAuZmllbGQgPT0gdG1wQ29sc1tpbmRleENvbE9sZCAtIDFdLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Q29sQmVmb3JlTmV3ID0gdGVtcC5maW5kSW5kZXgocCA9PiBwLmZpZWxkID09IHRtcENvbHNbaW5kZXhDb2xPbGQgLSAxXS5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gPT4gxJDhur9uIGtoaSB0aOG6pXkgdGjDrCBhZGQgY+G7mXQgaGnhu4duIHThuqFpIHbDoCBsaXN0IHThuqFtIHbDoG8gduG7iyB0csOtIGNow6huXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleENvbEJlZm9yZU5ldyA9PSB0ZW1wLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaChjb2wsIC4uLnRlbXBDb2xzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuc3BsaWNlKGluZGV4Q29sQmVmb3JlTmV3ICsgMSwgMCwgY29sLCAuLi50ZW1wQ29scyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVtcENvbHMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgICBjb2xzLnNwbGljZSgwLCBjb2xzLmxlbmd0aCk7XG4gICAgICAgIGNvbHMuc3BsaWNlKDAsIDAsIC4uLnRlbXApO1xuXG4gICAgICAgIGxldCBmaXJzdENvbFZpc2libGUgPSBudWxsO1xuICAgICAgICBsZXQgZm91bmRJdGVtU2hvd0VkaXRMaW5rID0gZmFsc2U7XG4gICAgICAgIHRlbXAuc3BsaWNlKDAsIHRlbXAubGVuZ3RoKTtcbiAgICAgICAgbGV0IHRtcENvbDogQ29sdW1uU2NoZW1hQmFzZSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBjb2xzKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5yYXdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXAucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmRldGFpbHMuZmluZChwID0+IHAuY29sdW1uQ29kZSA9PSBlbGVtZW50LmZpZWxkKTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcudmlzaWJsZSAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy52aXNpYmxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5sYWJlbCA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlbGVtZW50LmxhYmVsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcudGV4dEFsaWduICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLnRleHRBbGlnbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQudGV4dEFsaWduID0gY29uZmlnLnRleHRBbGlnbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcud2lkdGggIT09IHVuZGVmaW5lZCAmJiBjb25maWcud2lkdGggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LndpZHRoID0gY29uZmlnLndpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kYXRhVHlwZSA9PSBudWxsIHx8IGVsZW1lbnQuZGF0YVR5cGUgPT0gdW5kZWZpbmVkIHx8IGVsZW1lbnQuZGF0YVR5cGUgPT0gJycpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmRhdGFUeXBlID0gRGF0YVR5cGUuc3RyaW5nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC52aXNpYmxlXG4gICAgICAgICAgICAgICAgfHwgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtblxuICAgICAgICAgICAgICAgICAgICAmJiBlbGVtZW50LmZpZWxkID09IHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5maWVsZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmJhc2VTZXJ2aWNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cm9sVHlwZSA9IENvbnRyb2xUeXBlLmRyb3Bkb3duO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQucmF3Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLnB1c2gobmV3IFJlZkZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZUZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlRmllbGQgPSAnaWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheUZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRpc3BsYXlGaWVsZCA9ICd0ZW4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ29sID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWZGaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdDb2x1bW46IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBlbGVtZW50LmRhdGFUeXBlUmVmRmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgZWxlbWVudC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZWxlbWVudC5hbGxvd0ZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ1JlZkZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscy5maW5kKHAgPT4gcC5jb2x1bW5Db2RlID09IHRtcENvbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnUmVmRmllbGQgJiYgY29uZmlnUmVmRmllbGQudmlzaWJsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ29sLnZpc2libGUgPSBjb25maWdSZWZGaWVsZC52aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKHRtcENvbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RDb2xWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb2xWaXNpYmxlID0gdG1wQ29sO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuZGF0YVNvdXJjZSAmJiBlbGVtZW50LmRhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvbnRyb2xUeXBlID0gQ29udHJvbFR5cGUuZHJvcGRvd247XG4gICAgICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5yYXdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXBDb2wgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlZkZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd0NvbHVtbjogZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGVsZW1lbnQuZGF0YVR5cGVSZWZGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBlbGVtZW50LmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBlbGVtZW50LmFsbG93RmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnUmVmRmllbGQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzLmZpbmQocCA9PiBwLmNvbHVtbkNvZGUgPT0gdG1wQ29sLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdSZWZGaWVsZCAmJiBjb25maWdSZWZGaWVsZC52aXNpYmxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDb2wudmlzaWJsZSA9IGNvbmZpZ1JlZkZpZWxkLnZpc2libGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2godG1wQ29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdENvbFZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENvbFZpc2libGUgPSB0bXBDb2w7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWZpcnN0Q29sVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdENvbFZpc2libGUgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuZm9yY2VHZXREYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYmFzZVNlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWVGaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlRmllbGQgPSAnaWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXlGaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRpc3BsYXlGaWVsZCA9ICd0ZW4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnNob3dFZGl0TGluaykge1xuICAgICAgICAgICAgICAgIGZvdW5kSXRlbVNob3dFZGl0TGluayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZEl0ZW1TaG93RWRpdExpbmsgJiYgZmlyc3RDb2xWaXNpYmxlKSB7XG4gICAgICAgICAgICBmaXJzdENvbFZpc2libGUuc2hvd0VkaXRMaW5rID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb2xzLmxlbmd0aCA9IDA7XG4gICAgICAgIGNvbHMucHVzaCguLi50ZW1wKTtcblxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtTGVuZ3RoID0gW107XG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZEhhc01heGltdW1Xb3JkID0gW107XG4gICAgICAgIGNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb2wudmlzaWJsZSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGNvbC5tYXhXb3JkRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZEhhc01heGltdW1Xb3JkLnB1c2goY29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5tYXhMZW5ndGhEaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bUxlbmd0aC5wdXNoKGNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JtYXRDb2x1bW5zKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICAgICAgICBpZiAoY29sLmRhdGFUeXBlID09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgIGlmICghY29sLmZvcm1hdCkgY29sLmZvcm1hdCA9ICdub3JtYWwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sLmV4dGVuZERhdGEuc3R5bGUgPSB0aGlzLmdldENvbHVtblN0eWxlKGNvbCk7XG4gICAgICAgICAgICBjb2wuZXh0ZW5kRGF0YS5oZWFkZXJTdHlsZSA9IHRoaXMuZ2V0Q29sdW1uU3R5bGUoY29sLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbC5leHRlbmREYXRhLmhlYWRlckNsYXNzID0gdGhpcy5nZXRDZWxsQ2xhc3NIZWFkZXIoY29sKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uU2V0dGluZyhjb2xHcm91cDogQ29sdW1uU2NoZW1hQmFzZSkge1xuICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gPSBjb2xHcm91cDtcbiAgICAgICAgY29uc3QgZGF0YVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xVTU5fU0VUVElORyk7XG4gICAgICAgIGlmIChkYXRhU2V0dGluZykge1xuICAgICAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcbiAgICAgICAgICAgICAgICBwYXRoTmFtZSArPSAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhU2V0dGluZyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBlbGVtZW50ID0gc2V0dGluZ3NbaV07XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHBhdGhOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCA9IGVsZW1lbnQuc2V0dGluZy5zb3J0RmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPSBlbGVtZW50LnNldHRpbmcuc29ydERpciA/IGVsZW1lbnQuc2V0dGluZy5zb3J0RGlyIDogMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkID0gZWxlbWVudC5zZXR0aW5nLmdyb3VwRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwSW5DbGllbnQgPSBlbGVtZW50LnNldHRpbmcuZ3JvdXBJbkNsaWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkICYmIGNvbEdyb3VwICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0R3JvdXBGaWVsZChjb2xHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscyA9IGVsZW1lbnQuc2V0dGluZy5kZXRhaWxzO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29sR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JvdXBGaWVsZChjb2xHcm91cCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEdyb3VwRmllbGQoY29sR3JvdXApIHtcbiAgICAgICAgaWYgKChjb2xHcm91cC5kYXRhU291cmNlICYmIGNvbEdyb3VwLmRhdGFTb3VyY2UubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHx8IGNvbEdyb3VwLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkID0gYHN0ciR7Y29sR3JvdXAuZmllbGR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQgPSBjb2xHcm91cC5maWVsZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZUNvbHVtblNldHRpbmcoKSB7XG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcbiAgICAgICAgICAgIHBhdGhOYW1lICs9ICcvJyArIHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5O1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb2x1bW5TZXR0aW5nID0gW107XG4gICAgICAgIGxldCBjaGVja0V4aXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRhdGFTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcpO1xuICAgICAgICBpZiAoZGF0YVNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbHVtblNldHRpbmcgPSBKU09OLnBhcnNlKGRhdGFTZXR0aW5nKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1TZXR0aW5nID0gY29sdW1uU2V0dGluZy5maW5kKHEgPT4gcS5wYXRobmFtZSA9PSBwYXRoTmFtZSk7XG4gICAgICAgICAgICBpZiAoaXRlbVNldHRpbmcpIHtcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLnNvcnRGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZDtcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLnNvcnREaXIgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RGlyO1xuICAgICAgICAgICAgICAgIGl0ZW1TZXR0aW5nLnNldHRpbmcuZ3JvdXBGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQ7XG4gICAgICAgICAgICAgICAgaXRlbVNldHRpbmcuc2V0dGluZy5ncm91cEluQ2xpZW50ID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBJbkNsaWVudDtcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLmRldGFpbHMgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzO1xuICAgICAgICAgICAgICAgIGNoZWNrRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjaGVja0V4aXN0KSB7XG4gICAgICAgICAgICBjb2x1bW5TZXR0aW5nLnB1c2goeyBwYXRobmFtZTogcGF0aE5hbWUsIHNldHRpbmc6IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcsIEpTT04uc3RyaW5naWZ5KGNvbHVtblNldHRpbmcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZUNvbHVtblNldHRpbmcoKSB7XG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcbiAgICAgICAgICAgIHBhdGhOYW1lICs9ICcvJyArIHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5O1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb2x1bW5TZXR0aW5nID0gW107XG4gICAgICAgIGNvbnN0IGRhdGFTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcpO1xuICAgICAgICBpZiAoZGF0YVNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbHVtblNldHRpbmcgPSBKU09OLnBhcnNlKGRhdGFTZXR0aW5nKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY29sdW1uU2V0dGluZy5maW5kSW5kZXgocSA9PiBxLnBhdGhuYW1lID09IHBhdGhOYW1lKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSBjb2x1bW5TZXR0aW5nLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xVTU5fU0VUVElORywgSlNPTi5zdHJpbmdpZnkoY29sdW1uU2V0dGluZykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sb3JTZXR0aW5nKCkge1xuICAgICAgICBjb25zdCBkYXRhUGFnZVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xPUl9TRVRUSU5HKTtcbiAgICAgICAgaWYgKGRhdGFQYWdlU2V0dGluZykge1xuICAgICAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcbiAgICAgICAgICAgICAgICBwYXRoTmFtZSArPSAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhUGFnZVNldHRpbmcpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBzZXR0aW5nc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gcGF0aE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQgPSBlbGVtZW50LmNvbG9yRmlsdGVyRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlID0gZWxlbWVudC5jb2xvckZpbHRlclRhYmxlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZUNvbG9yU2V0dGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FjaGVDb2xvclNldHRpbmcoKSB7XG4gICAgICAgIHRoaXMuX2NvbG9yRmlsdGVyVGFibGUgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGVbaV07XG4gICAgICAgICAgICBjb25zdCBpdGVtVmFsdWVzID0gW107XG4gICAgICAgICAgICBpdGVtVmFsdWVzWzBdID0gaXRlbS5jb21wYXJlVHlwZTtcbiAgICAgICAgICAgIGl0ZW1WYWx1ZXNbMV0gPSBpdGVtLmZpbHRlclZhbHVlO1xuICAgICAgICAgICAgaXRlbVZhbHVlc1syXSA9IHRoaXMuY29udmVydFRvRGF0ZShpdGVtLmZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgIGl0ZW1WYWx1ZXNbM10gPSBOdW1iZXIoaXRlbS5maWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICBpdGVtVmFsdWVzWzRdID0gKC90cnVlL2kpLnRlc3QoaXRlbS5maWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICBpdGVtVmFsdWVzWzVdID0gaXRlbS5jb2xvcjtcbiAgICAgICAgICAgIHRoaXMuX2NvbG9yRmlsdGVyVGFibGUucHVzaChpdGVtVmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29sb3JTZXR0aW5nKCkge1xuICAgICAgICBsZXQgcGF0aE5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5KSB7XG4gICAgICAgICAgICBwYXRoTmFtZSArPSAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29sb3JTZXR0aW5nID0gW107XG4gICAgICAgIGxldCBjaGVja0V4aXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRhdGFDb2xvclNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xPUl9TRVRUSU5HKTtcbiAgICAgICAgaWYgKGRhdGFDb2xvclNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbG9yU2V0dGluZyA9IEpTT04ucGFyc2UoZGF0YUNvbG9yU2V0dGluZyk7XG4gICAgICAgICAgICBjb2xvclNldHRpbmcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gcGF0aE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb2xvckZpbHRlckZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29sb3JGaWx0ZXJUYWJsZSA9IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlO1xuICAgICAgICAgICAgICAgICAgICBjaGVja0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hlY2tFeGlzdCkge1xuICAgICAgICAgICAgY29sb3JTZXR0aW5nLnB1c2goe1xuICAgICAgICAgICAgICAgIHBhdGhuYW1lOiBwYXRoTmFtZSxcbiAgICAgICAgICAgICAgICBjb2xvckZpbHRlckZpZWxkOiB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgICBjb2xvckZpbHRlclRhYmxlOiB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJUYWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xPUl9TRVRUSU5HLCBKU09OLnN0cmluZ2lmeShjb2xvclNldHRpbmcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhZ2VTZXR0aW5nKCkge1xuICAgICAgICBjb25zdCBkYXRhUGFnZVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5QQUdFX1NFVFRJTkcpO1xuICAgICAgICBpZiAoZGF0YVBhZ2VTZXR0aW5nKSB7XG4gICAgICAgICAgICBsZXQgcGF0aE5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2V0dGluZ0tleSkge1xuICAgICAgICAgICAgICAgIHBhdGhOYW1lICs9ICcvJyArIHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFnZVNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhUGFnZVNldHRpbmcpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlU2V0dGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gcGFnZVNldHRpbmdzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhdGhuYW1lID09PSBwYXRoTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgPSBlbGVtZW50LnBhZ2VTaXplO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVQYWdlU2V0dGluZygpIHtcbiAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2V0dGluZ0tleSkge1xuICAgICAgICAgICAgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhZ2VTZXR0aW5nID0gW107XG4gICAgICAgIGxldCBjaGVja0V4aXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRhdGFQYWdlU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLlBBR0VfU0VUVElORyk7XG4gICAgICAgIGlmIChkYXRhUGFnZVNldHRpbmcpIHtcbiAgICAgICAgICAgIHBhZ2VTZXR0aW5nID0gSlNPTi5wYXJzZShkYXRhUGFnZVNldHRpbmcpO1xuICAgICAgICAgICAgcGFnZVNldHRpbmcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gcGF0aE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYWdlU2l6ZSA9IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoZWNrRXhpc3QpIHtcbiAgICAgICAgICAgIHBhZ2VTZXR0aW5nLnB1c2goeyBwYXRobmFtZTogcGF0aE5hbWUsIHBhZ2VTaXplOiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5QQUdFX1NFVFRJTkcsIEpTT04uc3RyaW5naWZ5KHBhZ2VTZXR0aW5nKSk7XG4gICAgfVxuXG4gICAgY2hlY2tJc0luc2lkZURpYWxvZygpIHtcbiAgICAgICAgY29uc3QgJGRpYWxvZyA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgnLnAtZGlhbG9nJyk7XG4gICAgICAgIHJldHVybiAhISRkaWFsb2c7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVhZHkoKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZml4SGVpZ2h0VHlwZUluRGlhbG9nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja0lzSW5zaWRlRGlhbG9nKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuaGVpZ2h0VHlwZSA9IEhlaWdodFR5cGUuY3VzdG9tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25SZWFkeS5lbWl0KHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tBbGxvd1NlbGVjdFJvdyhldnQsIHJvd0RhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRpc2FibGVSb3dTZWxlY3RXaGVuQ2xpY2tBY3Rpb25cbiAgICAgICAgICAgICYmIChldnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnLmxpbmstb3ItYWN0aW9uJylcbiAgICAgICAgICAgICAgICB8fCBldnQudGFyZ2V0LmNsb3Nlc3QoJy5saW5rLW9yLWFjdGlvbicpXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENsaWNrIHbDoG8gY2hlY2tib3hcbiAgICAgICAgaWYgKGV2dC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdwLWNoZWNrYm94LWJveCcpIHx8IGV2dC50YXJnZXQuY2xvc2VzdCgnLnAtY2hlY2tib3gtYm94JykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNoZWNrQWxsb3dTZWxlY3RSb3cgJiYgIXRoaXMuc2V0dGluZy5jaGVja0FsbG93U2VsZWN0Um93KHJvd0RhdGEsIGV2dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVTZWxlY3RSb3cgPSAoZXZ0LCBkYXRhKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGFzQ3VzdG9tSGFuZGxlQ2xpY2tSb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FsbG93U2VsZWN0Um93KGV2dCwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbGRDaGVja2VkID0gZGF0YS5fY2hlY2tlZDtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcubXVsdGlwbGVDaGVja1doZW5DbGlja1Jvdykge1xuICAgICAgICAgICAgbGV0IGRhdGFUb0NsZWFyQ2hlY2tlZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5maXJzdFJvd0NsaWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdFJvd0NsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZGF0YVRvQ2xlYXJDaGVja2VkID0gdGhpcy5fcmF3RGF0YVNvdXJjZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGFUb0NsZWFyQ2hlY2tlZCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGFUb0NsZWFyQ2hlY2tlZC5mb3JFYWNoKChwLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHAuX2NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fY2hlY2tlZCA9ICFvbGRDaGVja2VkO1xuICAgICAgICBsZXQgZmlyZUV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuZmlyZUV2ZW50V2hlblJlU2VsZWN0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1MYXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhc3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIGZpcmVFdmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhKGRhdGEsIGV2dC50YXJnZXQuY2xvc2VzdCgndHInKSwgZmlyZUV2ZW50KTtcbiAgICB9O1xuXG4gICAgaGFuZGxlU2VsZWN0Um93R3JvdXAgPSAoZXZ0LCBkYXRhKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0FsbG93U2VsZWN0Um93KGV2dCwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93KSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtc01vZGlmaWVkID0gWy4uLnRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc107XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCgocCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBwLl9jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaXRlbXNNb2RpZmllZC5zb21lKHEgPT4gcS5pZCA9PSBkYXRhLmlkKSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zTW9kaWZpZWQucHVzaChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW1zTW9kaWZpZWQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoZWNrUm93RGF0YV9Hcm91cChpdGVtLCBudWxsLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLl9jaGVja2VkID0gIWRhdGEuX2NoZWNrZWQ7XG5cbiAgICAgICAgbGV0IGZpcmVFdmVudCA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmZpcmVFdmVudFdoZW5SZVNlbGVjdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtTGFzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1MYXN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmaXJlRXZlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrUm93RGF0YV9Hcm91cChkYXRhLCBldnQudGFyZ2V0LmNsb3Nlc3QoJ3RyJyksIGZpcmVFdmVudCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2V0TGFzdEl0ZW1TZWxlY3RlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3QgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXNbdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1MYXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VtaXRSb3dTZWxlY3QodHJFbGVtZW50LCBkYXRhKSB7XG4gICAgICAgIHRoaXMub25Sb3dTZWxlY3QuZW1pdCh7XG4gICAgICAgICAgICBlbGVtZW50OiB0ckVsZW1lbnQsXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVUb2dnbGVSb3cocm93RGF0YSwgZXZ0KSB7XG4gICAgICAgIHRoaXMudGFibGUudG9nZ2xlUm93KHJvd0RhdGEsIGV2dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2hvd0NvbnRleHRNZW51KGV2dCkge1xuICAgICAgICAvLyBzZXRUaW1lb3V0IMSR4buDIGZpeCBidWcgaGnhu4NuIHRo4buLIGNvbnRleHQgbWVudSB0csOgbiByYSBuZ2/DoGkgbcOgbiBow6xuaFxuICAgICAgICBzZXRUaW1lb3V0KGYgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS5zaG93KGV2dCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbHRlcnMoKTogRmlsdGVyW10ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2RlZmF1bHQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmlsdGVyX2RlZmF1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9jb21tb25TZWFyY2gpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmlsdGVyX2NvbW1vblNlYXJjaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2N1c3RvbSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfY3VzdG9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJfY29sdW1uKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9jb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9hZHZhbmNlU2VhcmNoKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9hZHZhbmNlU2VhcmNoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldEdyaWRJbmZvKCkge1xuICAgICAgICBjb25zdCBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XG4gICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmdldEZpbHRlcnMoKSxcbiAgICAgICAgICAgIHNvcnRzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkICYmICF0aGlzLl9ncm91cEluQ2xpZW50KSB7XG4gICAgICAgICAgICBncmlkSW5mby5zb3J0cy51bnNoaWZ0KHsgZmllbGQ6IHRoaXMuX2dyb3VwRmllbGQsIGRpcjogMSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc29ydEZpZWxkICYmIHRoaXMuX3NvcnREaXIgIT09IDApIHtcbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzLnB1c2goeyBmaWVsZDogdGhpcy5fc29ydEZpZWxkLCBkaXI6IHRoaXMuX3NvcnREaXIgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ3JpZEluZm87XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZVNlYXJjaEFkdnMoZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICAgICAgdGhpcy5maWx0ZXJfYWR2YW5jZVNlYXJjaCA9IGZpbHRlcnM7XG4gICAgICAgIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlID0gMTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZVNlYXJjaChkYXRhKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyX2NvbW1vblNlYXJjaCA9IGRhdGEuZmlsdGVycztcbiAgICAgICAgdGhpcy5kYXRhU2VhcmNoQ29tbW9uID0gZGF0YS5kYXRhRm9ybTtcbiAgICAgICAgYXdhaXQgdGhpcy5vblNlYXJjaGVkLmVtaXQoZGF0YSk7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIGhhbmRsZUluaXRBZHZhbmNlU2VhcmNoKGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyX2FkdmFuY2VTZWFyY2ggPSBmaWx0ZXJzO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YSgpIHtcbiAgICAgICAgY29uc3QgaW5mb0dldERhdGEgPSB7XG4gICAgICAgICAgICBncmlkSW5mbzogdGhpcy5nZXRHcmlkSW5mbygpLFxuICAgICAgICAgICAgZGF0YVNlYXJjaENvbW1vbjogdGhpcy5kYXRhU2VhcmNoQ29tbW9uXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25SZWxvYWQuZW1pdChpbmZvR2V0RGF0YSk7XG4gICAgfVxuXG4gICAgcmVsb2FkKGZpbHRlcl9jdXN0b20/OiBGaWx0ZXJbXSwgcGFnZSA9IDEpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJfY3VzdG9tID0gZmlsdGVyX2N1c3RvbTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGFuaFNvVGh1VHVHcm91cExhc3Rlc3QoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zb3J0R3JvdXBMYXN0TW9kZWxCYXNlKCkudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICfEkMOhbmggbOG6oWkgc+G7kSB0aOG7qSB04buxIHRow6BuaCBjw7RuZycsIGYgPT4ge1xuXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkKCkge1xuICAgICAgICB0aGlzLm9uQWRkLmVtaXQoKTtcbiAgICB9XG5cbiAgICBhc3luYyB4dWF0Q2FjTXVjRGFDaG9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dDb25maXJtRXhwb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBycyA9IGF3YWl0IHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIHh14bqldCBi4bqjbiBnaGkgxJHDoyBjaOG7jW4gKFbDoCBjw6FjIGLhuqNuIGdoaSBjb24gdMawxqFuZyDhu6luZyknLCAnWMOhYyBuaOG6rW4geHXhuqV0IGZpbGUnKTtcbiAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLnNldHRpbmcuZXhwb3J0SXRlbXNNb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydEl0ZW1zTW9kZS5Gcm9tSHRtbDpcbiAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydEJ5UmVhZGluZ0h0bWwoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0SXRlbXNNb2RlLk1hbnVhbEdldERhdGE6XG4gICAgICAgICAgICBjYXNlIEV4cG9ydEl0ZW1zTW9kZS5BdXRvR2V0RGF0YTpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdUaGUgZnVuY3Rpb24gaGF2ZW5cXCd0IHN1cHBvcnRlZCB5ZXQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHByaW50QnlSZWFkaW5nSHRtbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93Q29uZmlybUV4cG9ydCkge1xuICAgICAgICAgICAgY29uc3QgcnMgPSBhd2FpdCB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBpbiBi4bqjbiBnaGkgxJHDoyBjaOG7jW4gKFbDoCBjw6FjIGLhuqNuIGdoaSBjb24gdMawxqFuZyDhu6luZyknLCAnWMOhYyBuaOG6rW4gaW4gZmlsZScpO1xuICAgICAgICAgICAgaWYgKCFycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkZXIgPSAnRGFuaCBzw6FjaCAnICsgdGhpcy5zZXR0aW5nLm9iamVjdE5hbWU7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRhYmxlRWxlID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0YWJsZScpO1xuICAgICAgICBjb25zdCBoZWFkRWxlID0gdGFibGVFbGUucXVlcnlTZWxlY3RvcigndGhlYWQnKTtcbiAgICAgICAgY29uc3QgYm9keUVsZSA9IHRhYmxlRWxlLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5Jyk7XG5cbiAgICAgICAgY29uc3QgYXJySGVhZEVsZSA9IHRoaXMuZ2V0QXJySGVhZEJ5SHRtbChoZWFkRWxlKTtcbiAgICAgICAgY29uc3QgYXJyUm93RGF0YSA9IHRoaXMuZ2V0QXJyUm93RGF0YUJ5SHRtbChib2R5RWxlLCBhcnJIZWFkRWxlKTtcblxuICAgICAgICBjb25zdCBzdHJIZWFkRWxlID0gdGhpcy5oZWFkSHRtbFRvU3RyaW5nKGFyckhlYWRFbGUpO1xuICAgICAgICBjb25zdCBzdHJCb2R5RWxlID0gdGhpcy5yb3dEYXRhSHRtbFRvU3RyaW5nKGFyclJvd0RhdGEpO1xuICAgICAgICBjb25zdCBjc3MgPSAnPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPnRhYmxlIHRoLCB0YWJsZSB0ZCB7Ym9yZGVyOjFweCBzb2xpZCAjMDAwO30gdGFibGUgdGgge3RleHQtYWxpZ246IGNlbnRlcjt9IHRhYmxlIHt3aWR0aDogMTAwJTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO30gdGFibGUgdGQ6Zmlyc3QtY2hpbGQge3RleHQtYWxpZ246IGNlbnRlcjt9PC9zdHlsZT4nO1xuICAgICAgICBjb25zdCB0YWJsZSA9IGAke2Nzc308dGFibGU+JHtzdHJIZWFkRWxlfSR7c3RyQm9keUVsZX08L3RhYmxlPmA7XG4gICAgICAgIHRoaXMuX3ByaW50U2VydmljZS5wcmludEh0bWxDb250ZW50KHRhYmxlLCBoZWFkZXIudG9VcHBlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHByaW50QnlSZWFkaW5nSHRtbEhhc1Jvd1NwYW4oKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9ICdEYW5oIHPDoWNoICcgKyB0aGlzLnNldHRpbmcub2JqZWN0TmFtZTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgdGFibGVFbGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XG4gICAgICAgIGNvbnN0IGhlYWRFbGUgPSB0YWJsZUVsZS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpO1xuICAgICAgICBjb25zdCBib2R5RWxlID0gdGFibGVFbGUucXVlcnlTZWxlY3RvcigndGJvZHknKTtcblxuICAgICAgICBjb25zdCBhcnJIZWFkRWxlID0gdGhpcy5nZXRBcnJIZWFkQnlIdG1sKGhlYWRFbGUpO1xuICAgICAgICBjb25zdCBhcnJSb3dEYXRhID0gdGhpcy5nZXRBcnJSb3dEYXRhSGFzUm93U3BhbkJ5SHRtbChib2R5RWxlLCBhcnJIZWFkRWxlKTtcblxuICAgICAgICBjb25zdCBzdHJIZWFkRWxlID0gdGhpcy5oZWFkSHRtbFRvU3RyaW5nKGFyckhlYWRFbGUpO1xuICAgICAgICBjb25zdCBzdHJCb2R5RWxlID0gdGhpcy5yb3dEYXRhSHRtbEhhc1Jvd1NwYW5Ub1N0cmluZyhhcnJSb3dEYXRhKTtcbiAgICAgICAgY29uc3QgY3NzID0gJzxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj50YWJsZSB0aCwgdGFibGUgdGQge2JvcmRlcjoxcHggc29saWQgIzAwMDt9IHRhYmxlIHRoIHt0ZXh0LWFsaWduOiBjZW50ZXI7fSB0YWJsZSB7d2lkdGg6IDEwMCU7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTt9IHRhYmxlIHRkOmZpcnN0LWNoaWxkIHt0ZXh0LWFsaWduOiBjZW50ZXI7fTwvc3R5bGU+JztcbiAgICAgICAgY29uc3QgdGFibGUgPSBgJHtjc3N9PHRhYmxlPiR7c3RySGVhZEVsZX0ke3N0ckJvZHlFbGV9PC90YWJsZT5gO1xuICAgICAgICB0aGlzLl9wcmludFNlcnZpY2UucHJpbnRIdG1sQ29udGVudCh0YWJsZSwgaGVhZGVyLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRBbGwoKSB7XG4gICAgICAgIHRoaXMuZXhwb3J0QnlSZWFkaW5nSHRtbCh0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwb3J0QnlSZWFkaW5nSHRtbChleHBvcnRBbGwgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5fZ3JvdXBGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDaMawYSBo4buXIHRy4bujIHh14bqldCBjw7MgbmjDs20gZOG7ryBsaeG7h3UhJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50YWJsZS5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0YWJsZUVsZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICAgICAgY29uc3QgaGVhZEVsZSA9IHRhYmxlRWxlLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJyk7XG4gICAgICAgIGNvbnN0IGJvZHlFbGUgPSB0YWJsZUVsZS5xdWVyeVNlbGVjdG9yKCd0Ym9keScpO1xuXG4gICAgICAgIC8vIGhlYWRlci5cbiAgICAgICAgY29uc3QgYXJySGVhZCA9IHRoaXMuZ2V0QXJySGVhZEJ5SHRtbChoZWFkRWxlKTtcbiAgICAgICAgaWYgKCFhcnJIZWFkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBib2R5LlxuICAgICAgICBjb25zdCBhcnJSb3dEYXRhID0gdGhpcy5nZXRBcnJSb3dEYXRhQnlIdG1sKGJvZHlFbGUsIGFyckhlYWQsIGV4cG9ydEFsbCk7XG5cbiAgICAgICAgLy8gZXhwb3J0LlxuICAgICAgICBjb25zdCBkYXRhRXhwb3J0ID0gW2FyckhlYWQubWFwKGkgPT4gaS52YWx1ZSksIC4uLmFyclJvd0RhdGFdO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGBEYW5oIHPDoWNoICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcbiAgICAgICAgdGhpcy5fZXhwb3J0U2VydmljZS5vYmplY3RUb0V4Y2VsKGRhdGFFeHBvcnQsIGZpbGVOYW1lKTtcblxuICAgIH1cblxuICAgIHB1YmxpYyBoZWFkSHRtbFRvU3RyaW5nKGFyckhlYWRFbGUpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBhcnJIZWFkRWxlLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICByZXN1bHQgKz0gYDx0aD4ke2VsZW1lbnQudmFsdWV9PC90aD5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RGF0YUh0bWxUb1N0cmluZyhyb3dEYXRhcykge1xuICAgICAgICBjb25zdCBhcnJSb3dEYXRhID0gW107XG4gICAgICAgIHJvd0RhdGFzLmZvckVhY2goYXJyUm93RGF0YUNoaWxkID0+IHtcbiAgICAgICAgICAgIGxldCByb3dEYXRhID0gJzx0cj4nO1xuICAgICAgICAgICAgYXJyUm93RGF0YUNoaWxkLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgcm93RGF0YSArPSBgPHRkPiR7ZWxlbWVudH08L3RkPmA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJvd0RhdGEgKz0gJzwvdHI+JztcbiAgICAgICAgICAgIGFyclJvd0RhdGEucHVzaChyb3dEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhcnJSb3dEYXRhLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXJySGVhZEJ5SHRtbChoZWFkZXIpIHtcbiAgICAgICAgY29uc3QgZmlyc3RSb3cgPSBoZWFkZXIucXVlcnlTZWxlY3RvcigndHInKTtcbiAgICAgICAgaWYgKCFmaXJzdFJvdykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJyVGggPSBmaXJzdFJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3ggPyAwIDogMTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBhcnJUaC5sZW5ndGggLSAodGhpcy5zZXR0aW5nLmhpZGRlbkZ1bmN0aW9uQ29sdW1uID8gMCA6IDEpIC0gMTtcbiAgICAgICAgaWYgKHN0YXJ0SW5kZXggPiBlbmRJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcnJIZWFkZXIgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFyclRoW2ldLmlubmVyVGV4dCkge1xuICAgICAgICAgICAgICAgIGFyckhlYWRlci5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhcnJUaFtpXS5pbm5lclRleHRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJIZWFkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFyclJvd0RhdGFIYXNSb3dTcGFuQnlIdG1sKGJvZHlFbGUsIGFyckhlYWQsIGV4cG9ydEFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGFyclJvdyA9IGV4cG9ydEFsbCA/IGJvZHlFbGUucXVlcnlTZWxlY3RvckFsbCgndHInKSA6IGJvZHlFbGUucXVlcnlTZWxlY3RvckFsbCgndHIudWktc3RhdGUtaGlnaGxpZ2h0Jyk7XG4gICAgICAgIGlmICghYXJyUm93Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyUm93RGF0YSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyUm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBhcnJSb3dbaV07XG4gICAgICAgICAgICBjb25zdCBhcnJUZCA9IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpO1xuICAgICAgICAgICAgYXJyUm93RGF0YS5wdXNoKFsuLi5hcnJUZF0uZmlsdGVyKHggPT4gIXguY2xhc3NOYW1lLmluY2x1ZGVzKCdjaGtib3ggbGluay1vci1hY3Rpb24gY2VsbC1jaGVja2JveCcpKS5tYXAoeCA9PiAoeyB2YWx1ZTogeC5pbm5lclRleHQsIHJvd1NwYW46IHgucm93U3BhbiB9KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyclJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHJvd0RhdGFIdG1sSGFzUm93U3BhblRvU3RyaW5nKHJvd0RhdGFzKSB7XG4gICAgICAgIGNvbnN0IGFyclJvd0RhdGEgPSBbXTtcbiAgICAgICAgcm93RGF0YXMuZm9yRWFjaChhcnJSb3dEYXRhQ2hpbGQgPT4ge1xuICAgICAgICAgICAgbGV0IHJvd0RhdGEgPSAnPHRyPic7XG4gICAgICAgICAgICBhcnJSb3dEYXRhQ2hpbGQuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICByb3dEYXRhICs9IGA8dGQgcm93U3Bhbj1cIiR7ZWxlbWVudC5yb3dTcGFufVwiPiR7ZWxlbWVudC52YWx1ZX08L3RkPmA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJvd0RhdGEgKz0gJzwvdHI+JztcbiAgICAgICAgICAgIGFyclJvd0RhdGEucHVzaChyb3dEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhcnJSb3dEYXRhLmpvaW4oJyAnKTtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBnZXRBcnJSb3dEYXRhQnlIdG1sKGJvZHlFbGUsIGFyckhlYWQsIGV4cG9ydEFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGFyclJvdyA9IGV4cG9ydEFsbCA/IGJvZHlFbGUucXVlcnlTZWxlY3RvckFsbCgndHInKSA6IGJvZHlFbGUucXVlcnlTZWxlY3RvckFsbCgndHIudWktc3RhdGUtaGlnaGxpZ2h0Jyk7XG4gICAgICAgIGlmICghYXJyUm93Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyUm93RGF0YSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyUm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBhcnJSb3dbaV07XG4gICAgICAgICAgICBjb25zdCBhcnJUZCA9IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRUZDtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSBbXTtcblxuICAgICAgICAgICAgYXJySGVhZC5mb3JFYWNoKGhlYWQgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRUZCA9IGFyclRkW2hlYWQuaW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGQuaW5uZXJUZXh0ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICByb3dEYXRhLnB1c2godGhpcy5nZXRWYWx1ZUNoZWNrYm94Rm9ybWF0KGN1cnJlbnRUZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5wdXNoKGN1cnJlbnRUZC5pbm5lclRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhcnJSb3dEYXRhLnB1c2gocm93RGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyUm93RGF0YTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUNoZWNrYm94Rm9ybWF0KGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2hlY2tCb3ggPSBkYXRhLnF1ZXJ5U2VsZWN0b3IoJ3AtY2hlY2tib3gnKTtcbiAgICAgICAgaWYgKGNoZWNrQm94KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEucXVlcnlTZWxlY3Rvcignc3Bhbi5waS1jaGVjaycpO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDw7MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdLaMO0bmcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgdmlldyhyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vblZpZXcuZW1pdChyb3dEYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZWRpdChyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkVkaXQuZW1pdChyb3dEYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlKHJvd0RhdGE6IGFueSkge1xuICAgICAgICB0aGlzLm9uRGVsZXRlLmVtaXQocm93RGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZU11dGlwbGUoKSB7XG4gICAgICAgIHRoaXMub25EZWxldGVNdWx0aXBsZS5lbWl0KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2hvd0NvbnRleHRNZW51KGV2dCwgcm93RGF0YSkge1xuICAgICAgICB0aGlzLnJvd0RhdGFDdXJyZW50ID0gcm93RGF0YTtcbiAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0TWVudUJ1dHRvbkF1dGhvcml6ZWQoYXdhaXQgdGhpcy5tZW51QnV0dG9ucyhyb3dEYXRhKSk7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmRpc2FibGVTaGFyZSkge1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVCdXR0b25zID0gW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdDaGlhIHPhursnLCBpY29uOiAncGkgcGktbGluaycsIGNvbW1hbmQ6IHRoaXMuY3JlYXRlU2hhcmVMaW5rLmJpbmQodGhpcykgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnRGFuaCBzw6FjaCBjaGlhIHPhursnLCBpY29uOiAncGkgcGktbGlzdCcsIGNvbW1hbmQ6IHRoaXMuc2hvd0xpbmtTaGFyaW5nLmJpbmQodGhpcykgfSxcbiAgICAgICAgICAgICAgICAvLyB7IGxhYmVsOiAnRGFuaCBzw6FjaCBuaMOsbiB0aOG6pXknLCBpY29uOiAncGkgcGktbGlzdCcsIGNvbW1hbmQ6IHRoaXMuc2hvd0xpc3RQZXJtaXNzaW9uQnlJdGVtLmJpbmQodGhpcykgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMucHVzaCguLi5zaGFyZUJ1dHRvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNob3dXb3JrZmxvd0F0dGFjaCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdfX3Nob3dXb3JrZmxvd0F0dGFjaCcpO1xuICAgICAgICBpZiAoc2hvd1dvcmtmbG93QXR0YWNoID09ICd0cnVlJykge1xuICAgICAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cy5wdXNoKFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdEYW5oIHPDoWNoIGPDtG5nIHZp4buHYycsIGljb246ICdwaSBwaS1saXN0JywgY29tbWFuZDogdGhpcy5zaG93QXR0YWNoZWRUYXNrLmJpbmQodGhpcykgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uQ29udGV4dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc2hvd0NvbnRleHRNZW51KGV2dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyBjw7MgaMOgbmggxJHhu5luZyBraOG6oyBk4bulbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0TWVudUJ1dHRvbkF1dGhvcml6ZWQobWVudUJ1dHRvbnM6IFRuTWVudUl0ZW1bXSkge1xuICAgICAgICBjb25zdCBhdXRob3JpemVkQnV0dG9uczogVG5NZW51SXRlbVtdID0gW107XG4gICAgICAgIGNvbnN0IHNlcnZpY2VDb2RlQnlCYXNlID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICE9IG51bGwgPyB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUgOiAnJztcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1lbnVCdXR0b25zKSB7XG4gICAgICAgICAgICBpZiAoIWl0ZW0uYXV0aG9yaXphdGlvblBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgICAgICBhdXRob3JpemVkQnV0dG9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvZGUgPSBpdGVtLmF1dGhvcml6YXRpb25TZXJ2aWNlQ29kZSA/IGl0ZW0uYXV0aG9yaXphdGlvblNlcnZpY2VDb2RlIDogc2VydmljZUNvZGVCeUJhc2U7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZChzZXJ2aWNlQ29kZSwgaXRlbS5hdXRob3JpemF0aW9uUGVybWlzc2lvbiwgdHJ1ZSkudGhlbihhdXRob3JpemVkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml6ZWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhdXRob3JpemVkQnV0dG9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgcmV0dXJuIGF1dGhvcml6ZWRCdXR0b25zO1xuICAgIH1cblxuICAgIGhhbmRsZUNoZWNrQWxsX0dyb3VwID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jaGVja2VkQWxsID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5fcmF3RGF0YVNvdXJjZV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZEFsbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRMYXN0SXRlbVNlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0uX2NoZWNrZWQgPSB0aGlzLmNoZWNrZWRBbGw7XG4gICAgICAgICAgICB0aGlzLnJvd0dyb3VwQ2hlY2tlZFtpdGVtW3RoaXMuX2dyb3VwRmllbGRdXSA9IHRoaXMuY2hlY2tlZEFsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25DaGVja0FsbC5lbWl0KHRoaXMuY2hlY2tlZEFsbCk7XG4gICAgfTtcblxuICAgIGhhbmRsZUNoZWNrUm93R3JvdXAgPSAocm93RGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBncm91cENoZWNrZWQgPSB0aGlzLnJvd0dyb3VwQ2hlY2tlZFtyb3dEYXRhW3RoaXMuX2dyb3VwRmllbGRdXSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV1bdGhpcy5fZ3JvdXBGaWVsZF0gPT0gcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV0uX2NoZWNrZWQgPSBncm91cENoZWNrZWQ7XG4gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZm91bmQpIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV0uX2NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLl9yYXdEYXRhU291cmNlW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldExhc3RJdGVtU2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2VkQWxsKCk7XG4gICAgfTtcblxuICAgIGhhbmRsZUNoZWNrUm93RGF0YV9Hcm91cCA9IChyb3dEYXRhLCB0ckVsZW1lbnQgPSBudWxsLCBmaXJlRXZlbnQgPSB0cnVlKSA9PiB7XG4gICAgICAgIGlmICghcm93RGF0YS5fY2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5yb3dHcm91cENoZWNrZWRbcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXV0gPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmZpbmRJbmRleChwID0+IHAuaWQgPT0gcm93RGF0YS5pZCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNoZWNrR3JvdXAgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnB1c2gocm93RGF0YSk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbSA9IHJvd0RhdGE7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3Jhd0RhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3Jhd0RhdGFTb3VyY2VbaV0uX2NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV1bdGhpcy5fZ3JvdXBGaWVsZF0gPT0gcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tHcm91cCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb3dHcm91cENoZWNrZWRbcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXV0gPSBjaGVja0dyb3VwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0TGFzdEl0ZW1TZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrZWRBbGwoKTtcbiAgICAgICAgaWYgKGZpcmVFdmVudCkge1xuICAgICAgICAgICAgaWYgKCF0ckVsZW1lbnQpIHRyRWxlbWVudCA9IHRoaXMuZ2V0VHJCeVJvd0RhdGEocm93RGF0YSk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0KHRyRWxlbWVudCwgcm93RGF0YSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaGFuZGxlQ2hlY2tBbGwgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWRBbGwgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLl9yYXdEYXRhU291cmNlXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0TGFzdEl0ZW1TZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLl9yYXdEYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLl9jaGVja2VkID0gdGhpcy5jaGVja2VkQWxsID09PSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbkNoZWNrQWxsLmVtaXQodGhpcy5jaGVja2VkQWxsKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlQ2hlY2tSb3dEYXRhID0gKHJvd0RhdGEsIHRyRWxlbWVudCA9IG51bGwsIGZpcmVFdmVudCA9IHRydWUpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhIYXNSb3dTcGFuID0gdGhpcy5fY29tbW9uU2VydmljZS5maW5kTGFzdEluZGV4KHRoaXMubW9kZWwuZGF0YVNvdXJjZSwgKHgsIGkpID0+IE9iamVjdC52YWx1ZXMoeC5yb3dTcGFuKS5sZW5ndGggPiAwICYmIGkgPD0gcm93RGF0YS5faW5kZXhJbkRhdGFTb3VyY2UpO1xuICAgICAgICBpZiAoIXJvd0RhdGEuX2NoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4SGFzUm93U3BhblVuQ2hlY2tlZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZmluZExhc3RJbmRleCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMsICh4LCBpKSA9PiBPYmplY3QudmFsdWVzKHgucm93U3BhbikubGVuZ3RoID4gMCAmJiBpIDw9IHJvd0RhdGEuX2luZGV4SW5EYXRhU291cmNlKTtcbiAgICAgICAgICAgIGlmIChpbmRleEhhc1Jvd1NwYW5VbkNoZWNrZWQgPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1NwYW4gPSBPYmplY3QudmFsdWVzKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc1tpbmRleEhhc1Jvd1NwYW5VbkNoZWNrZWRdLnJvd1NwYW4pO1xuICAgICAgICAgICAgICAgIGlmIChyb3dTcGFuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4Um93U3BhbjogYW55ID0gcm93U3Bhbi5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGFjY3VtdWxhdG9yID4gZWxlbWVudCkgPyBhY2N1bXVsYXRvciA6IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4SGFzUm93U3BhbjsgaSA8IG1heFJvd1NwYW4gKyBpbmRleEhhc1Jvd1NwYW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZVtpXS5fY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnNwbGljZShpbmRleEhhc1Jvd1NwYW5VbkNoZWNrZWQsIG1heFJvd1NwYW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghcm93RGF0YS5oaWRkZW5DaGVja0JveCkge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleEhhc1Jvd1NwYW4gPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dTcGFuID0gT2JqZWN0LnZhbHVlcyh0aGlzLm1vZGVsLmRhdGFTb3VyY2VbaW5kZXhIYXNSb3dTcGFuXS5yb3dTcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvd1NwYW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4Um93U3BhbjogYW55ID0gcm93U3Bhbi5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhY2N1bXVsYXRvciA+IGVsZW1lbnQpID8gYWNjdW11bGF0b3IgOiBlbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gaW5kZXhIYXNSb3dTcGFuOyBpIDwgbWF4Um93U3BhbiArIGluZGV4SGFzUm93U3BhbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlW2ldLl9jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5jb25jYXQodGhpcy5tb2RlbC5kYXRhU291cmNlLnNsaWNlKGluZGV4SGFzUm93U3BhbiwgaW5kZXhIYXNSb3dTcGFuICsgbWF4Um93U3BhbikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW0gPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2Uuc2xpY2UoaW5kZXhIYXNSb3dTcGFuLCBpbmRleEhhc1Jvd1NwYW4gKyBtYXhSb3dTcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcm93RGF0YS5oaWRkZW5DaGVja0JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnB1c2gocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbSA9IHJvd0RhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldExhc3RJdGVtU2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2VkQWxsKCk7XG4gICAgICAgIGlmICghdHJFbGVtZW50KSB7XG4gICAgICAgICAgICB0ckVsZW1lbnQgPSB0aGlzLmdldFRyQnlSb3dEYXRhKHJvd0RhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaXJlRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSb3dTZWxlY3QodHJFbGVtZW50LCByb3dEYXRhKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNoZWNrZWRBbGwoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09IHRoaXMuX3Jhd0RhdGFTb3VyY2UubGVuZ3RoICYmIHRoaXMuX3Jhd0RhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdFJvdyhkYXRhczogYW55W10gPSBbXSkge1xuICAgICAgICBpZiAoIWRhdGFzIHx8IGRhdGFzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCkge1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBkYXRhc1tkYXRhcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGxhc3RJdGVtLl9jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGFfR3JvdXAobGFzdEl0ZW0sIHRoaXMuZ2V0VHJCeVJvd0RhdGEobGFzdEl0ZW0pLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhKGxhc3RJdGVtLCB0aGlzLmdldFRyQnlSb3dEYXRhKGxhc3RJdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhcy5mb3JFYWNoKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGEuX2NoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhX0dyb3VwKGRhdGEsIHRoaXMuZ2V0VHJCeVJvd0RhdGEoZGF0YSksIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGEoZGF0YSwgdGhpcy5nZXRUckJ5Um93RGF0YShkYXRhKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Tb3J0KGV2ZW50OiBhbnksIF90YWJsZTogVGFibGUpIHtcbiAgICAgICAgdGhpcy5zb3J0V2l0aEFwaShldmVudCwgX3RhYmxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRXaXRoQXBpKGV2ZW50OiBhbnksIF90YWJsZTogVGFibGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIF90YWJsZS5yZXNldCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc29ydEhpc3RvcnkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSBldmVudC5maWVsZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RGlyID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc29ydEhpc3RvcnlbMF0uZmllbGQgPT0gZXZlbnQuZmllbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSBldmVudC5maWVsZDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc29ydERpciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RGlyID0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NvcnREaXIgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnREaXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydERpciA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQuZmllbGQgIT0gdGhpcy5zb3J0SGlzdG9yeVswXS5maWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRGaWVsZCA9IGV2ZW50LmZpZWxkO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnREaXIgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgICAgICB0aGlzLnNvcnRIaXN0b3J5LnVuc2hpZnQoeyBmaWVsZDogdGhpcy5fc29ydEZpZWxkLCBkaXI6IHRoaXMuX3NvcnREaXIgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcHJvY2Vzc0RhdGFTb3VyY2UoZGF0YVNvdXJjZSkge1xuICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xuICAgICAgICB0aGlzLnJvd0dyb3VwQ2hlY2tlZCA9IHt9O1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIHJldHVybjtcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICBpZiAoc291cmNlLmlkID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5pZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3MgPSB7fTtcbiAgICAgICAgICAgIGlmICghc291cmNlLmNvbFNwYW4pIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UuY29sU3BhbiA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzb3VyY2Uucm93U3Bhbikge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5yb3dTcGFuID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNvdXJjZS5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UuaGlkZGVuID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc291cmNlLmlzTmV3KSB7XG4gICAgICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3MuaXNOZXcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZS5pc0V4cGlyaW5nKSB7XG4gICAgICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3MuZXhwaXJpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZS5jbGFzcykge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5jbGFzcy5zcGxpdCgnICcpLmZpbHRlcihwID0+IHApLmZvckVhY2goY2xzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3NbY2xzXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzb3VyY2UuYm9va21hcmtTdHlsZSA9IHRoaXMuZ2V0Qm9va21hcmtDb2xvcihzb3VyY2UsIHRoaXMuc2V0dGluZy5jb2xzKTtcblxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bUxlbmd0aCAmJiB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtTGVuZ3RoLmZvckVhY2goX2NvbCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sID0gPENvbHVtblNjaGVtYUJhc2U+X2NvbDtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtjb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5zdWJzdHJpbmcgJiYgdmFsdWUubGVuZ3RoID4gY29sLm1heExlbmd0aERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Y6IHNob3J0IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVtgJHtjb2wuZmllbGR9X19zdmBdID0gYCR7dmFsdWUuc3Vic3RyaW5nKDAsIGNvbC5tYXhMZW5ndGhEaXNwbGF5KX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtV29yZCAmJiB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtV29yZC5mb3JFYWNoKF9jb2wgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IDxDb2x1bW5TY2hlbWFCYXNlPl9jb2w7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVTaG9ydFdvcmQgPSB0aGlzLnN1YldvcmQoc291cmNlW2NvbC5maWVsZF0sIGNvbC5tYXhXb3JkRGlzcGxheSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlU2hvcnRXb3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN2OiBzaG9ydCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VbYCR7Y29sLmZpZWxkfV9fc3ZgXSA9IGAke3ZhbHVlU2hvcnRXb3JkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZVJvd0dyb3VwTWV0YURhdGEoZGF0YVNvdXJjZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN1YldvcmQodmFsdWU6IHN0cmluZywgd29yZENvdW50OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUudHJpbSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgbGV0IGluZGV4ID0gLTEsIGJlZm9yZUNoYXIgPSAnYSc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtpXSA9PSAnJyAmJiBiZWZvcmVDaGFyICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgd29yZENvdW50LS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiZWZvcmVDaGFyID0gdmFsdWVbaV07XG4gICAgICAgICAgICBpZiAod29yZENvdW50ID09IDApIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0b2dnbGVTaG93RnVsbChyb3dEYXRhLCBmaWVsZCkge1xuICAgICAgICByb3dEYXRhW2ZpZWxkICsgJ19fc2hvd0Z1bGwnXSA9ICFyb3dEYXRhW2ZpZWxkICsgJ19fc2hvd0Z1bGwnXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWVyZ2VDbGFzc09iaihzb3VyY2UsIG90aGVyT2JqID0ge30pIHtcbiAgICAgICAgY29uc3Qgb2JqID0gc291cmNlLm9ialN0eWxlQ2xhc3M7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG90aGVyT2JqKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IG90aGVyT2JqW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGV4dFJvd0dyb3VwKHJvd0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICByb3dHcm91cE1ldGFkYXRhOiB0aGlzLnJvd0dyb3VwTWV0YWRhdGEsXG4gICAgICAgICAgICBncm91cENvbDogdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLFxuICAgICAgICAgICAgZ3JvdXBGaWVsZDogdGhpcy5fZ3JvdXBGaWVsZCxcbiAgICAgICAgICAgIGdyb3VwSW5DbGllbnQ6IHRoaXMuX2dyb3VwSW5DbGllbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGV4dFJvd0dyb3VwUm9vdChyb3dEYXRhLCBleHBhbmRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udGhpcy5nZXRDb250ZXh0Um93R3JvdXAocm93RGF0YSksXG4gICAgICAgICAgICBleHBhbmRlZCxcbiAgICAgICAgICAgIGhhbmRsZUNoZWNrUm93R3JvdXA6IHRoaXMuaGFuZGxlQ2hlY2tSb3dHcm91cCxcbiAgICAgICAgICAgIGdldENvbFNwYW5Hcm91cDogdGhpcy5nZXRDb2xTcGFuR3JvdXAsXG4gICAgICAgICAgICB0YWJsZTogdGhpcy50YWJsZSxcbiAgICAgICAgICAgIGNsYXNzUm93R3JvdXA6IHRoaXMuX2NsYXNzUm93R3JvdXAsXG4gICAgICAgICAgICBpY29uVG9nZ2xlUm93R3JvdXA6IHRoaXMuaWNvblRvZ2dsZVJvd0dyb3VwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbnRleHRDZWxsKHJvd0RhdGEsIHJvd0luZGV4LCBjb2wsIGV4cGFuZGVkLCAkdGhpcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3J1ZExpc3Q6ICR0aGlzLFxuICAgICAgICAgICAgcm93RGF0YSxcbiAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgICAgaWNvblRvZ2dsZVJvd0RhdGE6IHRoaXMuaWNvblRvZ2dsZVJvd0RhdGFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2xhc3NSb3dEYXRhT2ZHcm91cChyb3dEYXRhKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuY29udGFpblNlbGVjdEl0ZW0ocm93RGF0YSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIHVpLXN0YXRlLWhpZ2hsaWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2dyb3VwRmllbGQgIT09ICcnKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyBpcy1jaGlsZC1ncm91cCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0RhdGEuY2xhc3MpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyByb3dEYXRhLmNsYXNzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb250YWluU2VsZWN0SXRlbShpdGVtKSB7XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuZmluZEluZGV4KHggPT4geCAmJiB4W3RoaXMuc2V0dGluZy5lbnRpdHlLZXldID09PSBpdGVtW3RoaXMuc2V0dGluZy5lbnRpdHlLZXldKSA+IC0xO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9wKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbGJhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsYmFyLnNjcm9sbFRvVG9wKDAsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzY3JvbGxUb0JvdHRvbSgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxiYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbGJhci5zY3JvbGxUb0JvdHRvbSgwLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChldmVudCkge1xuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlICsgMTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9wKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJldihldmVudCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PbGRlc3QoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSBNYXRoLmNlaWwodGhpcy5tb2RlbC50b3RhbCAvIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSk7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvcCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkxhdGVzdChldmVudCkge1xuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IDE7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvcCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5VG9vbGJhcihlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBub2RlcyA9IGVsZW1lbnQuY2hpbGROb2RlcztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLml0ZW0oaSk7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gOCAmJiBub2Rlcy5pdGVtKGkpLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRW1wdHlGdW5jdGlvbkJ1dHRvbnMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSBlbGVtZW50LmNoaWxkTm9kZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5pdGVtKGkpO1xuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IDggJiYgbm9kZXMuaXRlbShpKS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kVGVtcGxhdGUodGVtcGxhdGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21tb25TZXJ2aWNlLmZpbmRUZW1wbGF0ZUZyb21MaXN0KHRoaXMuY2hpbGRyZW4sIHRlbXBsYXRlTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc1RlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlW3RlbXBsYXRlTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdID0gdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdICE9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbXBvbmVudEJ5VHlwZShjb250cm9sVHlwZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChjb250cm9sVHlwZSA9PSAndHJhbmdUaGFpVjUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVRyYW5nVGhhaVY1O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sVHlwZSA9PSAnX192aWV3SGlzdG9yeScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlQ29sVmlld0hpc3Rvcnk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9jb21tb25TZXJ2aWNlLmZpbmRUZW1wbGF0ZUZyb21MaXN0KHRoaXMuY2hpbGRyZW4sIGNvbnRyb2xUeXBlKTtcbiAgICAgICAgaWYgKCFpdGVtICYmIHRoaXMudGVtcGxhdGVzKSB7XG4gICAgICAgICAgICBpdGVtID0gdGhpcy5fY29tbW9uU2VydmljZS5maW5kVGVtcGxhdGVGcm9tTGlzdCh0aGlzLnRlbXBsYXRlcywgY29udHJvbFR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlW3RlbXBsYXRlTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdID0gdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSb3dHcm91cE1ldGFEYXRhKGRhdGFTb3VyY2U6IGFueSkge1xuICAgICAgICB0aGlzLnJvd0dyb3VwTWV0YWRhdGEgPSB7fTtcbiAgICAgICAgbGV0IGluZGV4R3JvdXAgPSAwO1xuICAgICAgICBjb25zdCBncm91cEZpZWxkTmFtZTogc3RyaW5nID0gdGhpcy5fZ3JvdXBGaWVsZDtcbiAgICAgICAgLy8gVOG6oW8gYuG7q2EgMSBncm91cCB2YWx1ZSBiZWZvcmVcbiAgICAgICAgbGV0IHByZXZpb3VzR3JvdXBWYWx1ZSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xuICAgICAgICBpZiAoZ3JvdXBGaWVsZE5hbWUgJiYgZ3JvdXBGaWVsZE5hbWUgIT0gJycpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSBkYXRhU291cmNlW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwVmFsdWUgPSByb3dEYXRhW2dyb3VwRmllbGROYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBWYWx1ZSAhPT0gcHJldmlvdXNHcm91cFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93R3JvdXBNZXRhZGF0YVtncm91cFZhbHVlXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLCBpbmRleEdyb3VwOiBpbmRleEdyb3VwKyssIHNpemU6IDEsIGl0ZW1Sb290OiByb3dEYXRhLCBpdGVtczogW3Jvd0RhdGFdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzW2dyb3VwVmFsdWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNHcm91cFZhbHVlID0gZ3JvdXBWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IHRoaXMucm93R3JvdXBNZXRhZGF0YVtncm91cFZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUdyb3VwLnNpemUrKztcbiAgICAgICAgICAgICAgICAgICAgaXRlbUdyb3VwLml0ZW1zLnB1c2gocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJvd0RhdGFbdGhpcy5maWVsZE9yZGVyXSA9IHRoaXMucm93R3JvdXBNZXRhZGF0YVtncm91cFZhbHVlXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dTZXR0aW5ncygpIHtcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlQ29sb3JTZXR0aW5ncyhkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLmNvbG9yRmlsdGVyVGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lQXJyID0gZGF0YS5jb2xvckZpbHRlclRhYmxlLnNsaWNlKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY2xvbmVBcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY2xvbmVBcnJbaV0uZmlsdGVyVmFsdWUgPT0gJycgfHwgY2xvbmVBcnJbaV0uZmlsdGVyVmFsdWUgPT0gbnVsbCB8fCBjbG9uZUFycltpXS5maWx0ZXJWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5jb2xvckZpbHRlclRhYmxlLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZCA9IGRhdGEuY29sb3JGaWx0ZXJGaWVsZDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGUgPSBkYXRhLmNvbG9yRmlsdGVyVGFibGU7XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1Jvd0NvbG9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FjaGVDb2xvclNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRDb2xvclNldHRpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlU2V0dGluZ3MoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzID0gZXZlbnQuZGV0YWlscztcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCA9IGV2ZW50LnNvcnRGaWVsZDtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPSBldmVudC5zb3J0RGlyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydERpciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkID0gZXZlbnQuZ3JvdXBGaWVsZDtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwSW5DbGllbnQgPSBldmVudC5ncm91cEluQ2xpZW50O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbiA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbmQocCA9PiBwLmZpZWxkID09IGV2ZW50Lmdyb3VwRmllbGQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZvcmNlR2V0RGF0YSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2F2ZUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kQ29sdW1ucyh0aGlzLnNldHRpbmcuY29scyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdENvbHVtbnModGhpcy5zZXR0aW5nLmNvbHMpO1xuICAgICAgICAgICAgdGhpcy5hcHBseUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5ncyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRlbGV0ZVNldHRpbmdzKCkge1xuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcgPSBuZXcgQ29sdW1uU2V0dGluZygpO1xuICAgICAgICB0aGlzLmRlbGV0ZUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5leHRlbmRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5hcHBseUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5Q29sdW1uU2V0dGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbiA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbmQocCA9PiBwLmZpZWxkID09IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5mb3JjZUdldERhdGEgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ3JvdXBGaWVsZCA9IHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ncm91cEZpZWxkID0gdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2dyb3VwRmllbGQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZ3JvdXBJbkNsaWVudCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwSW5DbGllbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ncm91cEZpZWxkID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NvcnRGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZDtcbiAgICAgICAgdGhpcy5fc29ydERpciA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXI7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwgJiYgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nICYmIHRoaXMuX3NvcnRGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5zb3J0SGlzdG9yeSA9IFt7IGZpZWxkOiB0aGlzLl9zb3J0RmllbGQsIGRpcjogdGhpcy5fc29ydERpciA/IHRoaXMuX3NvcnREaXIgOiAwIH1dO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zb3J0SGlzdG9yeSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDZWxsQ2xhc3NIZWFkZXIoY29sKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgaWYgKGNvbC5jZWxsQ2xhc3MpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBjb2wuY2VsbENsYXNzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29sLnNvcnQpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIE5vU29ydENvbHVtbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5maWVsZCA9PSB0aGlzLl9zb3J0RmllbGQpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIHAtc29ydGFibGUtY29sdW1uJztcbiAgICAgICAgICAgIGlmICh0aGlzLl9zb3J0RGlyICE9IDApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyBwLWhpZ2hsaWdodCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uU3R5bGUoY29sOiBhbnksIGZvckhlYWRlciA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKGNvbC5maWVsZCA9PSAnbWV0YWRhdGFTdGF0dXMnKSB7XG4gICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2NlbnRlcic7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ySGVhZGVyKSB7XG4gICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2NlbnRlcic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29sLnRleHRBbGlnbiA9PSBUZXh0QWxpZ24uTGVmdCkge1xuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnbGVmdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2wudGV4dEFsaWduID09IFRleHRBbGlnbi5DZW50ZXIpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2NlbnRlcic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2wudGV4dEFsaWduID09IFRleHRBbGlnbi5SaWdodCkge1xuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAncmlnaHQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5hbGlnbkNlbnRlckNvbHVtbihjb2wpKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdjZW50ZXInO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5hbGlnblJpZ2h0Q29sdW1uKGNvbCkpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ3JpZ2h0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnbGVmdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cblxuXG4gICAgcHVibGljIGdldEJvb2ttYXJrQ29sb3Iocm93RGF0YSwgY29sdW1ucykge1xuICAgICAgICBjb25zdCByOiBhbnkgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQgJiYgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGUpIHtcbiAgICAgICAgICAgIGxldCBjb2w7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgaW4gY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5zW2NdLmZpZWxkID09IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbCA9IGNvbHVtbnNbY107XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGZvckRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBmb3JOdW1iZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBmb3JCb29sID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSByb3dEYXRhW3RoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkXTtcbiAgICAgICAgICAgIGlmIChjb2wpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRhdGUgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRhdGV0aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jb252ZXJ0VG9EYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yRGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5pbnQgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRlY2ltYWxcbiAgICAgICAgICAgICAgICAgICAgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmludFdpdGhvdXRNYXNrIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGZvck51bWJlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5ib29sZWFuKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKC90cnVlL2kpLnRlc3QodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBmb3JCb29sID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9jb2xvckZpbHRlclRhYmxlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2NvbG9yRmlsdGVyVGFibGVbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVR5cGUgPSBpdGVtWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gaXRlbVs1XTtcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyVmFsdWU6IGFueSA9IGl0ZW1bMV07XG4gICAgICAgICAgICAgICAgaWYgKGZvckRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBpdGVtWzJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUgPT0gbnVsbCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvck51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IGl0ZW1bM107XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJWYWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JCb29sKSBmaWx0ZXJWYWx1ZSA9IGl0ZW1bNF07XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyZVR5cGUgPT0gJ3JlZ2V4Jykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSArICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGZpbHRlclZhbHVlLCAnaScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1hdGNoKHJlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wYXJlVHlwZSA9PSAnZXF1YWxzJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gZmlsdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ25vdEVxdWFscycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IGZpbHRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdjb250YWlucycpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSArICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoZmlsdGVyVmFsdWUsICdpJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaChyZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ25vdENvbnRhaW5zJykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChmaWx0ZXJWYWx1ZSwgJ2knKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaChyZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ2dyZWF0ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IGZpbHRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdsaXR0ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IGZpbHRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFRvRGF0ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICd7bm93fScpIHJldHVybiBEYXRlKCk7XG5cbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ3snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnZH0nKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCdkfScsICcnKSk7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ3snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnaH0nKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCdofScsICcnKSk7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpICsgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgneycpICYmIHZhbHVlLmVuZHNXaXRoKCdtfScpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ219JywgJycpKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpICsgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignLycpID4gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHBhcnRzWzJdICsgJy0nICsgcGFydHNbMV0gKyAnLScgKyBwYXJ0c1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNOYU4oZGF0ZS5nZXREYXRlKCkpKSByZXR1cm4gZGF0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEdyYWRpZW50Q29sb3IoY29sb3IpIHtcbiAgICAgICAgcmV0dXJuIGBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICR7Y29sb3J9IDAlLCAke2NvbG9yfTRkIDM1JSwgJHtjb2xvcn0xYSA2MCUsIHRyYW5zcGFyZW50IDEwMCUpYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFsaWduQ2VudGVyQ29sdW1uKGNvbCkge1xuICAgICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRhdGV0aW1lIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5kYXRlIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5ib29sZWFuIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5lbnVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWxpZ25SaWdodENvbHVtbihjb2wpIHtcbiAgICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5pbnQgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRlY2ltYWwgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmludFdpdGhvdXRNYXNrIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5jdXJyZW5jeTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29sU3Bhbkdyb3VwID0gKG51bU9mQ29sQ3VzdG9tOiBudW1iZXIgPSAwKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIoeCA9PiB4LnZpc2libGUgPT09IG51bGwgfHwgeC52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgeC52aXNpYmxlID09PSB0cnVlKS5sZW5ndGhcbiAgICAgICAgICAgICsgKHRoaXMuc2V0dGluZy5oaWRkZW5PcmRlckNvbHVtbiA/IDAgOiAxKVxuICAgICAgICAgICAgKyAodGhpcy5zZXR0aW5nLmhpZGRlbkZ1bmN0aW9uQ29sdW1uID8gMCA6IDEpXG4gICAgICAgICAgICAtIG51bU9mQ29sQ3VzdG9tO1xuICAgIH07XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVLZXlwcmVzc0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQgJiYgdGhpcy5jb250ZXh0LnJvb3QuZGF0YS5saXN0UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0UXVldWUgPSB0aGlzLmNvbnRleHQucm9vdC5kYXRhLmxpc3RRdWV1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGxpc3RRdWV1ZS5pbmRleE9mKHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RRdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZU11bHRpcGxlRGVsZXRlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlRGVsZXRlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlRWRpdChyb3dEYXRhKSB7XG4gICAgICAgIGlmIChyb3dEYXRhLl9fZGlzYWJsZUVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhpZGRlbkVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dEYXRhWydtZXRhZGF0YVN0YXR1cyddICYmIHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gIT0gJzAnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVEZWxldGUocm93RGF0YSkge1xuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVEZWxldGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhpZGRlbkRlbGV0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gJiYgcm93RGF0YVsnbWV0YWRhdGFTdGF0dXMnXSAhPSAnMCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0hpc3Rvcnkocm93RGF0YSkge1xuICAgICAgICB0aGlzLnNldHRpbmcuc2hvd0hpc3RvcnkgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldHRpbmcuaGlzdG9yeSA9IHJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dMaXN0VmVyc2lvbihyb3dEYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy52ZXJzaW9uTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnZlcnNpb25Nb2RlbC5pdGVtRGF0YSA9IHJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXaWR0aEZ1bmN0aW9uKHRhYmxlKSB7XG4gICAgICAgIGlmICh0aGlzLndpZHRoRnVuY3Rpb25Db2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB3aWR0aEluUGl4ZWwgPSB0aGlzLl9kZWZhdWx0V2l0aEZ1bmN0aW9uQ29sdW1uO1xuICAgICAgICBjb25zdCB0ZCA9IHRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGRbY2xhc3MqPVwiY29sdW1uLWZ1bmN0aW9uXCJdJyk7XG4gICAgICAgIGlmICh0ZCkge1xuICAgICAgICAgICAgY29uc3QgZW1Ub1BpeGNlbCA9IHRoaXMuZ2V0Rm9udFNpemVJblBpeGVsKHRkKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJyk7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGJ1dHRvbnMubGVuZ3RoICogMi40OyAvLyBidXR0b24gd2lkdGg6IDIuNHJlbVxuICAgICAgICAgICAgY29uc3QgdG1wV2lkdGhJblBpeGVsID0gd2lkdGggKiBlbVRvUGl4Y2VsICsgNjsgLy8gNiBsYSB0b25nIHBhZGRpbmcgbGVmdCwgcmlnaHQgY3VhIHRoXG4gICAgICAgICAgICBpZiAod2lkdGhJblBpeGVsIDwgdG1wV2lkdGhJblBpeGVsKSB7XG4gICAgICAgICAgICAgICAgd2lkdGhJblBpeGVsID0gdG1wV2lkdGhJblBpeGVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGggPSB0YWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RoW2NsYXNzKj1cInNldHRpbmctY2VsbFwiXScpO1xuICAgICAgICBpZiAodGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtVG9QaXhjZWwgPSB0aGlzLmdldEZvbnRTaXplSW5QaXhlbCh0aCk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25zID0gdGguZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBidXR0b25zLmxlbmd0aCAqIDIuNCAvIDAuODU7IC8vIGJ1dHRvbiB3aWR0aDogMi40cmVtLCBmb250LXNpemUgdGggMC44NXJlbVxuICAgICAgICAgICAgY29uc3QgdG1wV2lkdGhJblBpeGVsID0gd2lkdGggKiBlbVRvUGl4Y2VsICsgNjsgLy8gNiBsYSB0b25nIHBhZGRpbmcgbGVmdCwgcmlnaHQgY3VhIHRoXG4gICAgICAgICAgICBpZiAod2lkdGhJblBpeGVsIDwgdG1wV2lkdGhJblBpeGVsKSB7XG4gICAgICAgICAgICAgICAgd2lkdGhJblBpeGVsID0gdG1wV2lkdGhJblBpeGVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fd2lkdGhGdW5jdGlvbkNvbHVtbiA9IGAke3dpZHRoSW5QaXhlbH1weGA7XG4gICAgICAgIHRoaXMud2lkdGhGdW5jdGlvbkNvbHVtbkNoYW5nZS5lbWl0KHRoaXMuX3dpZHRoRnVuY3Rpb25Db2x1bW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9udFNpemVJblBpeGVsKGVsKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoZ2V0Q29tcHV0ZWRTdHlsZShlbCwgJycpLmZvbnRTaXplLm1hdGNoKC8oKFxcZHwuKSspcHgvKVsxXSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJvY2Vzc0Jhc2VEYXRhKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnByZVByb2Nlc3NEYXRhKHRoaXMuX3Jhd0RhdGFTb3VyY2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcHJlUHJvY2Vzc0RhdGEoZGF0YVNvdXJjZSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGNvbEhhc1BpcGUgPSB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIoeCA9PiB4LnBpcGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xIYXNQaXBlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKDxQaXBlVHJhbnNmb3JtPmNvbC5waXBlLCBjb2wuYXN5bmNQaXBlLCBpdGVtW2NvbC5maWVsZF0pLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtW2BwaXBlX18ke2NvbC5maWVsZH0gYF0gPSBycztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdHJhbnNmb3JtKHBpcGU6IFBpcGVUcmFuc2Zvcm0sIGFzeW5jUGlwZTogYm9vbGVhbiwgdmFsdWUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy5jYWNoZWRUcmFuc2Zvcm1zW3ZhbHVlXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkVHJhbnNmb3Jtc1t2YWx1ZV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXN5bmNQaXBlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBhd2FpdCBwaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRyYW5zZm9ybXNbdmFsdWVdID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVHJhbnNmb3Jtc1t2YWx1ZV0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZVJvd09yZGVyZWQoZXZ0KSB7XG4gICAgICAgIHRoaXMub25SZW9yZGVyZWQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93U2V0dGluZ1Jvd0NvbG9yKCkge1xuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NSb3dDb2xvciA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlQnVpbGRGaWx0ZXJDb2x1bW4oY29sczogQ29sdW1uU2NoZW1hQmFzZVtdKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVGaWx0ZXIgPSBbXTtcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlckNvbHVtbihjb2xzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGRGaWx0ZXJDb2x1bW4oY29sczogQ29sdW1uU2NoZW1hQmFzZVtdKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlRmlsdGVyID0gdGhpcy50ZW1wbGF0ZUZpbHRlcjtcbiAgICAgICAgY29scy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29sLmNvbnRyb2xUeXBlID09IENvbnRyb2xUeXBlLmRyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbC5iYXNlU2VydmljZSB8fCAoY29sLmRhdGFTb3VyY2UgJiYgY29sLmRhdGFTb3VyY2UubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGNvbC5zaW5nbGUgPyBPcGVyYXRvci5lcXVhbCA6IE9wZXJhdG9yLmluLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBcnJheUZpZWxkOiBjb2wuaXNBcnJheUZpZWxkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kcm9wZG93bltjb2wuZmllbGRdID0gbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbzogJ2JvZHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGBDaOG7jW4gJHtjb2wubGFiZWx9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE9uSW5pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VydmVyTG9hZDogY29sLmlzU2VydmVyTG9hZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ2jGsGEgY+G6pXUgaMOsbmggYmFzZVNlcnZpY2UgaG/hurdjIGRhdGFTb3VyY2UgY2hvIGPhu5l0ICR7Y29sLmZpZWxkfTogJHtjb2wubGFiZWx9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoY29sLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5ib29sZWFuOlxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZ2V0RmllbGRGaWx0ZXIoY29sKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5pbnQ6XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5pbnRXaXRob3V0TWFzazpcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRlY2ltYWw6XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5jdXJyZW5jeTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbC5vcGVyYXRvciA9PT0gT3BlcmF0b3IuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5lcXVhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0dldFZhbHVlOiAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbC5tYXggJiYgaXRlbSA+IGNvbC5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sLm1heDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2wubWluICYmIGl0ZW0gPCBjb2wubWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbC5taW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaCguLi50aGlzLmdldFJhbmdlRmlsdGVyKGNvbCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGF0ZVJhbmdlRmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZSkgPT4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZSkgPT4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICsgMSwgMCwgMCwgLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kYXRldGltZTpcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGF0ZVJhbmdlRmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZSkgPT4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGUpID0+IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5nZXRGaWVsZEZpbHRlcihjb2wpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGVSYW5nZUZpbHRlcihjb2w6IENvbHVtblNjaGVtYUJhc2UsIHBhcnNlRGF0ZUZyb206IChkYXRlOiBEYXRlKSA9PiBEYXRlLCBwYXJzZURhdGVUbzogKGRhdGU6IERhdGUpID0+IERhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFuZ2VGaWx0ZXIoY29sLFxuICAgICAgICAgICAgaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1bMF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bMF0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZURhdGVGcm9tKGRhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtWzFdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtWzFdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VEYXRlVG8oZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSYW5nZUZpbHRlcihjb2w6IENvbHVtblNjaGVtYUJhc2UsIGZ1bmNHZXRWYWx1ZUZyb206IChpdGVtKSA9PiBhbnkgPSBudWxsLCBmdW5jR2V0VmFsdWVUbzogKGl0ZW0pID0+IGFueSA9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWwsXG4gICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgICAgICAgICBzdWJGaWVsZDogMCxcbiAgICAgICAgICAgICAgICBmdW5jR2V0VmFsdWU6IGZ1bmNHZXRWYWx1ZUZyb20gPyBmdW5jR2V0VmFsdWVGcm9tIDogKGl0ZW0pID0+IGl0ZW1bMF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmxvd2VyVGhhbkVxdWFsLFxuICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgc3ViRmllbGQ6IDEsXG4gICAgICAgICAgICAgICAgZnVuY0dldFZhbHVlOiBmdW5jR2V0VmFsdWVUbyA/IGZ1bmNHZXRWYWx1ZVRvIDogKGl0ZW0pID0+IGl0ZW1bMV0sXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmllbGRGaWx0ZXIoY29sOiBDb2x1bW5TY2hlbWFCYXNlKSB7XG4gICAgICAgIHJldHVybiBjb2wuZmllbGRGaWx0ZXIgPz8gY29sLmZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250ZXh0Q3VzdG9tRmlsdGVyKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIHNldEluaXRGaWx0ZXIoZGVmYXVsdEZpbHRlcjogS2V5VmFsdWVUeXBlKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0RmlsdGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2tleV0gPSBkZWZhdWx0RmlsdGVyW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyX2NvbHVtbiA9IHRoaXMuX2NydWRTZXJ2aWNlLmdldEZpbHRlckZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlRmlsdGVyLCB0aGlzLmdldE1pbmltaXplRGF0YSh0aGlzLmZpbHRlckRhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblNlYXJjaCA9IChub2RlPykgPT4ge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5sb2FkaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyQm94Rm9jdXMobm9kZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyX2NvbHVtbiA9IHRoaXMuX2NydWRTZXJ2aWNlLmdldEZpbHRlckZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlRmlsdGVyLCB0aGlzLmdldE1pbmltaXplRGF0YSh0aGlzLmZpbHRlckRhdGEpKTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBnZXRNaW5pbWl6ZURhdGEobW9kZWwpIHtcbiAgICAgICAgaWYgKGlzTGl0ZXJhbE9iamVjdChtb2RlbCkpIHtcbiAgICAgICAgICAgIGlmIChtb2RlbC5fZHJvcGRvd252YWx1ZSAhPSBudWxsICYmIG1vZGVsLl9kcm9wZG93bnZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbFttb2RlbC5fZHJvcGRvd252YWx1ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1vZGVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPSAnX3N0YXR1cycgJiYga2V5ICE9ICdfZXJyb3JzJyAmJiBrZXkgIT0gJ19zb3VyY2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRNaW5pbWl6ZURhdGEobW9kZWxba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KG1vZGVsKSkge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbW9kZWwpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmdldE1pbmltaXplRGF0YShpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBtb2RlbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyU2VhcmNoKG5vZGUsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmxvYWRpbmcpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0gIT0gbnVsbCAmJiB0aGlzLmZpbHRlckRhdGFbZmllbGRdICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2ZpZWxkXSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyTnVtYmVyU2VhcmNoKG5vZGUsIGNvbnRyb2wpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwubG9hZGluZykgcmV0dXJuO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wuY2xlYXIoKSkge1xuICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgY2xlYXIgZGF0YSBiZWNhdXNlIGl0J3MgMiB3YXlzIGJpbmRpbmdcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyRGF0ZVNlYXJjaChub2RlLCBjb250cm9sLCBmaWVsZCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5sb2FkaW5nKSByZXR1cm47XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbC5jbGVhcigpKSB7XG4gICAgICAgICAgICAgICAgLy8gbmVlZCBjbGVhciBkYXRhIGJlY2F1c2Ugbm90IDIgd2F5cyBiaW5kaW5nXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2ZpZWxkXSA9IFt1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlYXJjaChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyQm94Rm9jdXMobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGFuZ2VEYXRlVGltZShldnQsIGZpZWxkKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0gPSBldnQudmFsdWU7XG4gICAgICAgIHRoaXMub25TZWFyY2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGFuZ2VCb29sZWFuKGV2dCwgZmllbGQpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0ubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0uc3BsaWNlKDAsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25TZWFyY2goKTtcbiAgICB9XG5cbiAgICBzaG93Q2hlY2tCb3hGaWx0ZXJNZW51KGV2dCwgZmllbGQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RmllbGRGaWx0ZXIgPSBmaWVsZDtcbiAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cyA9IFsuLi50aGlzLmNoZWNrQm94Q29udGV4dE1lbnVdO1xuICAgICAgICB0aGlzLl9zaG93Q29udGV4dE1lbnUoZXZ0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlRmlsdGVyQm9vbGVhbih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVt0aGlzLmN1cnJlbnRGaWVsZEZpbHRlcl0gPSBbdmFsdWVdO1xuICAgICAgICAgICAgdGhpcy5jaGVja0JveENvbnRleHRNZW51LmZvckVhY2gobWVudSA9PiBtZW51LnN0eWxlQ2xhc3MgPSBudWxsKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tCb3hDb250ZXh0TWVudVswXS5zdHlsZUNsYXNzID0gJ2FjdGl2ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQm94Q29udGV4dE1lbnVbMV0uc3R5bGVDbGFzcyA9ICdhY3RpdmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW3RoaXMuY3VycmVudEZpZWxkRmlsdGVyXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblNlYXJjaCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVFbDogYW55ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5TYW1lQm94ID0gdGhpcy5jaGVja0luTm9kZShhY3RpdmVFbCwgbm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpblNhbWVCb3ggfHwgKGFjdGl2ZUVsICYmIGFjdGl2ZUVsLm5vZGVOYW1lICE9ICdJTlBVVCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gbm9kZS5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQpIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpblNhbWVCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlRWwuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNob3dGaWx0ZXJEcm9wZG93blBhbmVsKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHJvcGRvd24gPSBldmVudC5jb21wb25lbnQuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2VsbEhlYWRlckZpbHRlciA9IGRyb3Bkb3duLmNsb3Nlc3QoJ3RoJyk7XG5cbiAgICAgICAgLy8gdGhlbSBjbGFzcyBmb2N1cy13aXRoaW4gZGUgZHJvcGRvd24gaW5wdXQgbHVjIGZvY3VzIGtob25nIGJpIGRlIGJvaSBjYWMgc3RpY2t5IGNvbHVtblxuICAgICAgICBjZWxsSGVhZGVyRmlsdGVyICYmIGNlbGxIZWFkZXJGaWx0ZXIuY2xhc3NMaXN0LmFkZCgnZm9jdXMtd2l0aGluJyk7XG4gICAgfVxuXG4gICAgb25IaWRlRmlsdGVyRHJvcGRvd25QYW5lbChldmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5jb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyb3Bkb3duID0gZXZlbnQuY29tcG9uZW50LmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNlbGxIZWFkZXJGaWx0ZXIgPSBkcm9wZG93bi5jbG9zZXN0KCd0aCcpO1xuICAgICAgICBjZWxsSGVhZGVyRmlsdGVyICYmIGNlbGxIZWFkZXJGaWx0ZXIuY2xhc3NMaXN0LnJlbW92ZSgnZm9jdXMtd2l0aGluJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRGaWx0ZXJCb3hGb2N1cyhub2RlKSB7XG4gICAgICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZS5vZmZzZXRXaWR0aCA8IDI1MCkge1xuICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZCgnc2hvcnQtZmlsdGVyLWJveCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdzaG9ydC1maWx0ZXItYm94Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSW5Ob2RlKGNoaWxkLCBwYXJlbnQpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gY2hpbGQ7XG4gICAgICAgIHdoaWxlIChzdGFydCAmJiBzdGFydC5wYXJlbnROb2RlICE9IHBhcmVudCkge1xuICAgICAgICAgICAgc3RhcnQgPSBzdGFydC5wYXJlbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0YXJ0ICE9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmVQYWdlU2l6ZSgpIHtcbiAgICAgICAgdGhpcy5zYXZlUGFnZVNldHRpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFuZGxlVGFibGVSZW5kZXJlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZnRlclJlbmRlcmVkKHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy50cmVlVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZnRlclJlbmRlcmVkKHRoaXMudHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlCdXR0b25GdW5jdGlvbkluUm93KCk7XG4gICAgICAgIHRoaXMub25SZWxvYWRlZC5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Byb2Nlc3NBZnRlclJlbmRlcmVkKHRhYmxlRWxlbWVudDogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5zdG9wQ2FsY3VsYXRpbmdGdW5jdGlvbkNvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZSkgdGhpcy5nZXRXaWR0aEZ1bmN0aW9uKHRoaXMudGFibGUpO1xuXG4gICAgICAgICAgICB0aGlzLnN0b3BDYWxjdWxhdGluZ0Z1bmN0aW9uQ29sdW1uV2lkdGggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0ICR0aEZpcnN0ID0gdGFibGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkJyk7XG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9ICR0aEZpcnN0Lm9mZnNldFRvcDtcbiAgICAgICAgY29uc3QgJHRocyA9IHRhYmxlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0aGVhZCB0cjpub3QoOmZpcnN0LWNoaWxkKSB0aCcpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR0aHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICR0aHNbaV0uc3R5bGUudG9wID0gYCR7JHRoc1tpXS5vZmZzZXRUb3AgLSBvZmZzZXRUb3B9cHhgO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlbGVjdCBs4bqhaSBpdGVtIGN14buRaSBjw7luZyDEkcaw4bujYyBzZWxlY3QgdHLGsOG7m2MgxJHDs1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnJlU2VsZWN0TGFzdEl0ZW0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkdHIgPSB0aGlzLmdldFRyQnlSb3dEYXRhKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtTGFzdCk7XG4gICAgICAgICAgICAgICAgaWYgKCR0cikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhc3QgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3Q7XG4gICAgICAgICAgICAgICAgICAgICR0ci5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbW9kaWZ5QnV0dG9uRnVuY3Rpb25JblJvdygpIHtcbiAgICAgICAgZm9yIChsZXQgcm93RGF0YSBvZiB0aGlzLm1vZGVsLmRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcm93RGF0YS5kaXNhYmxlRnVuY3Rpb25Sb3cgPSAoYXdhaXQgdGhpcy5nZXRNZW51QnV0dG9uQXV0aG9yaXplZChhd2FpdCB0aGlzLm1lbnVCdXR0b25zKHJvd0RhdGEpID8/IFtdKSkubGVuZ3RoIDwgMSAmJiB0aGlzLnNldHRpbmcuZGlzYWJsZVNoYXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRkZW5CdG5GdW5jdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGlkZGVuQnRuRnVuY3Rpb24gPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZXZlcnkocCA9PiBwLmRpc2FibGVGdW5jdGlvblJvdyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUckJ5Um93RGF0YShyb3dEYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVUYWJsZSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9yYXdEYXRhU291cmNlLmZpbmRJbmRleChwID0+IHAuaWQgPT0gcm93RGF0YS5pZCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmVlVGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGB0Ym9keSB0cltyb3dJbmRleD1cIiR7aW5kZXh9XCJdYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fcmF3RGF0YVNvdXJjZS5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ciA9IHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGB0Ym9keSB0cltyb3dJbmRleD1cIiR7aW5kZXh9XCJdYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlU2VhcmNoU2NoZW1hKCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4gY2jGsGEgY+G6pXUgaMOsbmggY+G7mXQgY2hvIGRhbmggc8OhY2gnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0aW5nU2VhcmNoSW5mbyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSBuZXcgU2VhcmNoSW5mbygpO1xuICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYSA9IDxGb3JtQ29udHJvbEJhc2VbXT5bXTtcbiAgICAgICAgc2VhcmNoSW5mby5maWVsZERyb3Bkb3duID0ge307XG4gICAgICAgIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuc2V0dGluZy5jb2xzKSB7XG4gICAgICAgICAgICBpZiAoY29sLmFsbG93RmlsdGVyICE9IGZhbHNlICYmIGNvbC5yYXdDb2x1bW4gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2wuZnVsbFRleHRTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LmluZGV4T2YoY29sLmZpZWxkKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5maWVsZFNlYXJjaFRleHQucHVzaChjb2wuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCA9ICdUw6xtIGtp4bq/bSB0aGVvIGPDoWMgdHLGsOG7nW5nOic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0ICs9IGAgXCIke2NvbC5sYWJlbCA/IGNvbC5sYWJlbCA6IGNvbC5maWVsZH1cIixgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBhd2FpdCB0aGlzLnNldHRpbmcuZnVuY3Rpb24uZ2V0U2VhcmNoQ29udHJvbChjb2wuZmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaCguLi5jb250cm9sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2wuYmFzZVNlcnZpY2UgfHwgKGNvbC5kYXRhU291cmNlICYmIGNvbC5kYXRhU291cmNlLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLmZpZWxkRHJvcGRvd25bY29sLmZpZWxkXSA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBjb2wubXVsdGlwbGUgPyBPcGVyYXRvci5pbiA6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IGNvbC5tZFdpZHRoID8gY29sLm1kV2lkdGggOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkT25Jbml0OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5maWVsZERyb3Bkb3duW2NvbC5maWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09ICdpbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOdW1iZXJSYW5nZUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrVHlwZTogJ2ludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IDZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZGF0YVR5cGUgPT0gJ2RlY2ltYWwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOdW1iZXJSYW5nZUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrVHlwZTogJ2RlY2ltYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiA2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09ICdkYXRlJyB8fCBjb2wuZGF0YVR5cGUgPT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kYXRhVHlwZSA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENoZWNrQm94TGlzdENvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiB0cnVlLCBsYWJlbDogYEPDs2AgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IGZhbHNlLCBsYWJlbDogYEtow7RuZ2AgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiBjb2wubWRXaWR0aCA/IGNvbC5tZFdpZHRoIDogMTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2wuZmllbGQgIT0gY29sLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRleHRDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiBjb2wubWRXaWR0aCA/IGNvbC5tZFdpZHRoIDogMTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LmluZGV4T2YoZmllbGQpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LnB1c2goZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQgPSAnVMOsbSBraeG6v20gdGhlbyBjw6FjIHRyxrDhu51uZzonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMuZmluZChwID0+IHAuZmllbGQgPT0gZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQgKz0gYCBcIiR7Y29sLm5hbWV9XCIsYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0ID0gc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dC5zdWJzdHJpbmcoMCwgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaEluZm8gPSBzZWFyY2hJbmZvO1xuICAgICAgICB0aGlzLmNyZWF0aW5nU2VhcmNoSW5mbyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNoZWNrUGVybWlzc2lvblRvVXNlQnV0dG9uKGJ1dHRvblBlcm1pc3Npb25Db2RlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgICAgICBpZiAodGVtcCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcbiAgICAgICAgICAgIHx8ICh0aGlzLmN1cnJlbnRVc2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnICYmIHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuaWdub3JlQWRtaW4gPT09IGZhbHNlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uUGVybWlzc2lvbk1hcC5nZXQoYCR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlfS8ke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lfS8ke2J1dHRvblBlcm1pc3Npb25Db2RlfWApO1xuICAgIH1cblxuICAgIHNldERyb3Bkb3duRGF0YXNvdXJjZShmaWVsZDogc3RyaW5nLCBkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJTY2hlbWEuZHJvcGRvd25bZmllbGRdKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kcm9wZG93bltmaWVsZF0uZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SXRlbVdvcmtmbG93U2V0dGluZyhzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEpIHtcbiAgICAgICAgbGV0IHdvcmtmbG93U2V0dGluZyA9IHNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3O1xuICAgICAgICBpZiAoc2V0dGluZy5pc1dvcmtmbG93VHJlZVxuICAgICAgICAgICAgJiYgc2V0dGluZy53b3JrZmxvd0NvbmZpZ0FkdmFuY2VcbiAgICAgICAgICAgICYmIHNldHRpbmcud29ya2Zsb3dDb25maWdBZHZhbmNlLmdldFdvcmtmbG93U2V0dGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHNldHRpbmcud29ya2Zsb3dDb25maWdBZHZhbmNlLmdldFdvcmtmbG93U2V0dGluZyhyb3dEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXdvcmtmbG93U2V0dGluZyB8fCB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCfEkOG7kWkgdMaw4bujbmcgY2jGsGEgxJHGsOG7o2MgY+G6pXUgaMOsbmggcXV5IHRyw6xuaCBuZ2hp4buHcCB24bulJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmtmbG93U2V0dGluZztcbiAgICB9XG5cbiAgICBhc3luYyBzaG93Rm9ybVN0YXJ0V29ya2Zsb3cocm93RGF0YSkge1xuICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuZ2V0SXRlbVdvcmtmbG93U2V0dGluZyh0aGlzLnNldHRpbmcsIHJvd0RhdGEpO1xuICAgICAgICBpZiAoIXdvcmtmbG93U2V0dGluZykge1xuICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBO4bq/dSBjcmVhdGUgdGFzayB0aGF5IHbDrCBjaOG6oXkgcXV5IHRyw6xuaCB24bubaSDEkeG7kWkgdMaw4bujbmcgY2jDrW5oIHRow6wgbeG7nyBmb3JtIHRow6ptIGPDtG5nIHZp4buHY1xuICAgICAgICBpZiAod29ya2Zsb3dTZXR0aW5nLmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XG4gICAgICAgICAgICAvLyBLaeG7g20gdHJhIMSRw6MgdOG6oW8gY8O0bmcgdmnhu4djIGfhuq9uIHbhu5tpIGLhuqNuIGdoaSBjaMawYVxuICAgICAgICAgICAgLy8gTuG6v3UgY8OzIHLhu5NpIHRow6wgYsOhb1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0Q2hlY2tFeGlzdCA9IChhd2FpdCB0aGlzLl9jb25nVmllY1NlcnZpY2UuY2hlY2tFeGlzdEJ5RmlsdGVyKFtcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignc2VydmljZUNvZGUnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlKSxcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5JywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lKSxcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5S2V5JywgT3BlcmF0b3IuZXF1YWwsIHJvd0RhdGEuaWQpXG4gICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdENoZWNrRXhpc3Quc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBraeG7g20gdHJhIHRy4bqhbmcgdGjDoWkgxJHDoyB04bqhbyBjw7RuZyB2aeG7h2MgaGF5IGNoxrBhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0Q2hlY2tFeGlzdC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdC4bqjbiBnaGkgxJHDoyDEkcaw4bujYyB04bqhbyBjw7RuZyB2aeG7h2MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcubW9kaWZ5Um93RGF0YUZvclRhc2spIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmcubW9kaWZ5Um93RGF0YUZvclRhc2socm93RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtb2RlbFRhc2sgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpLCAvLyBJZCBuw6B5IGPhuqduIHRoaeG6v3QgdsOsIHPhur0gZMO5bmcgdHJvbmcgaMOgbSBpbnNlcnRUYXNrQW5kUmVsb2FkXG4gICAgICAgICAgICAgICAgY2hlY2tVbmlxdWVUYXNrRm9yRW50aXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgIC8vIGF1dG9OZXh0U3RlcDogd29ya2Zsb3dTZXR0aW5nLmF1dG9OZXh0U3RlcCxcbiAgICAgICAgICAgICAgICBpZExvYWlDb25nVmllYzogd29ya2Zsb3dTZXR0aW5nLmlkTG9haUNvbmdWaWVjRGVmYXVsdCxcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlLFxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgICAgICAgZW50aXR5S2V5OiByb3dEYXRhLmlkLFxuICAgICAgICAgICAgICAgIHRlbjogdGhpcy5nZXRUZW5Db25nVmllYyh3b3JrZmxvd1NldHRpbmcudGVtcGxhdGVUYXNrTmFtZSwgcm93RGF0YSksXG4gICAgICAgICAgICAgICAgZGluaEtlbU5naGllcFZ1RHRvczogW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFThu5VuZyBo4bujcCBtb2RlbCDEkcOtbmgga8OobSBuZ2hp4buHcCB24bulIGVudGl0eVxuICAgICAgICAgICAgY29uc3QgY29udGVudExpbmsgPSBhd2FpdCB0aGlzLmdldENvcHlQYXRoKHRoaXMuc2V0dGluZywgcm93RGF0YSk7XG4gICAgICAgICAgICBpZiAoY29udGVudExpbmspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbEVudGl0eSA9IHRoaXMucGFyc2VBdHRhY2hMaW5rKGNvbnRlbnRMaW5rKTtcbiAgICAgICAgICAgICAgICBtb2RlbFRhc2suZGluaEtlbU5naGllcFZ1RHRvcyA9IG1vZGVsRW50aXR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5tb2RpZnlJdGVtVGFzaykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZy5tb2RpZnlJdGVtVGFzayhtb2RlbFRhc2ssIHJvd0RhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBLaeG7g20gdHJhIG7hur91IGPDsyBj4bqldSBow6xuaCB04buxIMSR4buZbmcgYuG6r3QgxJHhuqd1IHRhc2ssIHbDoCBwaOG6o2kgY8OzIGxv4bqhaSBjw7RuZyB2aeG7h2MgbeG6t2MgxJHhu4tuaFxuICAgICAgICAgICAgaWYgKHdvcmtmbG93U2V0dGluZy5hdXRvU3RhcnRUYXNrXG4gICAgICAgICAgICAgICAgJiYgd29ya2Zsb3dTZXR0aW5nLmlkTG9haUNvbmdWaWVjRGVmYXVsdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gPT4gVGjDrCBs4bqleSB0aMOqbSB0aMO0bmcgdGluIHF1eSB0csOsbmggbeG6t2MgxJHhu4tuaCBjaG8gdGFza1xuICAgICAgICAgICAgICAgIC8vIE7hur91IGzhuqV5IMSRxrDhu6NjIHRow6wgdOG7sSDEkeG7mW5nIGLhuq90IMSR4bqndSwgbuG6v3Uga2jDtG5nIHRow6wgduG6q24gcGjhuqNpIG3hu58gbMOqbiBmb3JtIGPDtG5nIHZp4buHY1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tXb3JrZmxvd1NldHRpbmcgPSBhd2FpdCB0aGlzLl9kbUxvYWlDb25nVmllY1NlcnZpY2UuZ2V0V29ya2Zsb3dTZXR0aW5nQnlJZExvYWlDb25nVmllYyh3b3JrZmxvd1NldHRpbmcuaWRMb2FpQ29uZ1ZpZWNEZWZhdWx0KTtcbiAgICAgICAgICAgICAgICBpZiAodGFza1dvcmtmbG93U2V0dGluZyAhPSBudWxsICYmIHRhc2tXb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsVGFza1tGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dID0gdGFza1dvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFza0FuZFJlbG9hZChtb2RlbFRhc2ssIHJvd0RhdGEsIHRhc2tXb3JrZmxvd1NldHRpbmcpO1xuICAgICAgICAgICAgICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb25nVmllY01vZGVsLmRhdGEuY29uZ1ZpZWNTZXR0aW5nLmlzV29ya2Zsb3dUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY29uZ1ZpZWNNb2RlbC5kYXRhLm1vZGVsID0ge1xuICAgICAgICAgICAgICAgIGZvcm1TdGF0ZTogRm9ybVN0YXRlLkFERCxcbiAgICAgICAgICAgICAgICBkYXRhOiBtb2RlbFRhc2tcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmNvbmdWaWVjTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFdvcmtmbG93KHJvd0RhdGEsIHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3NbMF0pO1xuICAgICAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5kYXRhLndvcmtmbG93cyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3M7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5kYXRhLmRlZmF1bHRXb3JrZmxvdyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGU7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5kYXRhLml0ZW0gPSByb3dEYXRhO1xuICAgICAgICAgICAgdGhpcy5zdGFydFdvcmtmbG93TW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRUZW5Db25nVmllYyh0ZW1wbGF0ZVRleHQ6IHN0cmluZywgcm93RGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiByZW5kZXJUZXh0VGVtcGxhdGUoXG4gICAgICAgICAgICBnZXRSZWdleFJlc3VsdCh0ZW1wbGF0ZVRleHQsIFJlZ2V4U3BsaXRGaWVsZEJ5SXRlbSwgZXhlY1Jlc3VsdCA9PiBleGVjUmVzdWx0WzFdKSxcbiAgICAgICAgICAgIHRlbXBsYXRlVGV4dCwgcm93RGF0YVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9uZ0hvcFdvcmtmbG93SGlzdG9yeUZvck5leHRGaXJzdFN0ZXAoXG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSwgaXRlbVRhc2s6IGFueSwgd29ya2Zsb3dTZXR0aW5nOiBXb3JrZmxvd1NldHRpbmdOZXcsIHdvcmtmbG93Q29kZTogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGlmIChpdGVtV29ya2Zsb3dIaXN0b3J5ID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuaWdub3JlVmFsaWRhdGVCYXNlSW5CdXNzaW5lc3MgPSB0cnVlO1xuICAgICAgICBjb25zdCB3b3JrZmxvdyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3MuZmluZChxID0+IHEuY29kZSA9PSB3b3JrZmxvd0NvZGUpO1xuICAgICAgICBpZiAod29ya2Zsb3cgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHN0YXRlU3RhcnQgPSB3b3JrZmxvdy5kYXRhLm1hY2hpbmVzLmZpbmQocSA9PiBxLnR5cGUgPT0gRW51bVN0YXRlVHlwZS5TVEFSVCk7XG4gICAgICAgIGlmIChzdGF0ZVN0YXJ0ID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBhY3Rpb25Db2RlID0gaXRlbVdvcmtmbG93SGlzdG9yeS5hY3Rpb25Db2RlO1xuICAgICAgICBjb25zdCBleGlzdEFjdGlvbiA9IHdvcmtmbG93LmRhdGEuY29ubmVjdGlvbnMuc29tZSh4ID0+IHguc291cmNlID09IHN0YXRlU3RhcnQuaWRcbiAgICAgICAgICAgICYmIHguY29kZSA9PSBhY3Rpb25Db2RlXG4gICAgICAgICk7XG4gICAgICAgIGlmICghZXhpc3RBY3Rpb24pIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBjcnVkTGlzdFNldHRpbmc6IENydWRMaXN0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmFkanVzdFNldHRpbmdXb3JrZmxvd0ZvckNydWRMaXN0KGNydWRMaXN0U2V0dGluZyk7XG4gICAgICAgIGxldCBuYW1lID0gJyc7XG4gICAgICAgIGlmICh0eXBlb2YgY3J1ZExpc3RTZXR0aW5nLmRpc3BsYXlGaWVsZCA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbmFtZSA9IGl0ZW1UYXNrWzxzdHJpbmc+KGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5hbWUgPSAoPEZ1bmN0aW9uPihjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkKSkoaXRlbVRhc2spO1xuICAgICAgICB9XG4gICAgICAgIG5hbWUgPSBgJHtjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2Uub2JqZWN0TmFtZX0gJHtuYW1lfWA7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkudGFibGVOYW1lID0gdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmVudGl0eU5hbWU7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnkub2JqZWN0RnVsbE5hbWUgPSBuYW1lO1xuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5Lm9iamVjdE5hbWUgPSBjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2Uub2JqZWN0TmFtZTtcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS53b3JrZmxvd0NvZGUgPSB3b3JrZmxvd0NvZGU7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuaXRlbUlkID0gaXRlbVRhc2suaWQ7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnkuc291cmNlU3RhdHVzQ29kZSA9IHN0YXRlU3RhcnQuY29kZTtcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5hY3Rpb25Db2RlID0gYWN0aW9uQ29kZTtcbiAgICAgICAgcmV0dXJuIGl0ZW1Xb3JrZmxvd0hpc3Rvcnk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBpbnNlcnRUYXNrQW5kUmVsb2FkKG1vZGVsVGFzaywgcm93RGF0YSwgd29ya2Zsb3dTZXR0aW5nOiBXb3JrZmxvd1NldHRpbmdOZXcpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5nZXREYXRhRm9yTmV4dEZpcnN0U3RlcFRhc2spIHtcbiAgICAgICAgICAgIG1vZGVsVGFzay5pdGVtV29ya2Zsb3dIaXN0b3J5ID0gYXdhaXQgdGhpcy5zZXR0aW5nLmdldERhdGFGb3JOZXh0Rmlyc3RTdGVwVGFzayhyb3dEYXRhKTtcbiAgICAgICAgICAgIG1vZGVsVGFzay5pdGVtV29ya2Zsb3dIaXN0b3J5ID0gdGhpcy50b25nSG9wV29ya2Zsb3dIaXN0b3J5Rm9yTmV4dEZpcnN0U3RlcChcbiAgICAgICAgICAgICAgICBtb2RlbFRhc2suaXRlbVdvcmtmbG93SGlzdG9yeSwgbW9kZWxUYXNrLCB3b3JrZmxvd1NldHRpbmcsIG1vZGVsVGFza1tGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbmdWaWVjU2VydmljZS5wb3N0KG1vZGVsVGFzaylcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJycsIGYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25TdGFydGVkV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjYWxsIGJhY2sga2hpIOG6pW4gbMawdSB0csOqbiBmb3JtIGLhuq90IMSR4bqndSBxdXkgdHLDrG5oXG4gICAgICogY3J1ZC1saXN0IHPhur0gZ+G7jWkgaMOgbSBsxrB1IGNo4bupIGZvcm0gc3RhcnQgd29ya2Zsb3cgayBsw6BtIGfDrCBj4bqjXG4gICAgICogxJDhu4IgVOG6rE4gROG7pE5HIEzhuqBJIEjDgE0gc3RhcnRXb3JrZmxvdyBj4bunYSBjcnVkLWxpc3RcbiAgICAgKi9cbiAgICBoYW5kbGVTdGFydFdvcmtmbG93RnJvbURpYWxvZyh3b3JrZmxvdzogV2ZJdGVtKSB7XG4gICAgICAgIHRoaXMuc3RhcnRXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3codGhpcy5zdGFydFdvcmtmbG93TW9kZWwuZGF0YS5pdGVtLCB3b3JrZmxvdyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNob3dBY3Rpb25Xb3JrZmxvdyhldnQsIHJvd0RhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd2luZ0FjdGlvbldvcmtmbG93KSByZXR1cm47XG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMgPSBhd2FpdCB0aGlzLmdldEJ1dHRvbkNvbnRleHQocm93RGF0YSk7XG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbkNvbnRleHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3dDb250ZXh0TWVudShldnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRCdXR0b25Db250ZXh0KHJvd0RhdGEpIHtcbiAgICAgICAgdGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgICBsZXQgcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cgPSBudWxsO1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5pc1dvcmtmbG93VHJlZSAmJiB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XG4gICAgICAgICAgICByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdyA9IGF3YWl0IHRoaXMuZ2V0QWN0aW9uV29ya2Zsb3dCeVRhc2socm93RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdyA9IGF3YWl0IHRoaXMuZ2V0QWN0aW9uV29ya2Zsb3cocm93RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdEdldEFjdGlvbldvcmtmbG93KSkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgY8OzIGjDoG5oIMSR4buZbmcga2jhuqMgZOG7pW5nJyk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnV0dG9uQ29udGV4dHMgPSByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdztcbiAgICAgICAgLy8gTuG6v3UgbMOgIGLhuqNuIGdoaSBuZ2hp4buHcCB24bulIG3DoCBjw7MgZ+G6r24gdGjDtG5nIHRpbiB0YXNrIHRow6wgYuG7lSBzdW5nIHRow6ptIG1lbnUgeGVtIGPDtG5nIHZp4buHY1xuICAgICAgICBpZiAocm93RGF0YVtGaWVsZERlZmluZUhhc1Rhc2tdKSB7XG4gICAgICAgICAgICBidXR0b25Db250ZXh0cy51bnNoaWZ0KFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGBYZW0gY8O0bmcgdmnhu4djYCxcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudmlld1Rhc2tEZXRhaWwocm93RGF0YSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidXR0b25Db250ZXh0cztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRBY3Rpb25Xb3JrZmxvdyhyb3dEYXRhKTogUHJvbWlzZTxhbnlbXSB8IHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgdGhpcy5nZXRJdGVtV29ya2Zsb3dTZXR0aW5nKHRoaXMuc2V0dGluZywgcm93RGF0YSk7XG4gICAgICAgIGlmICghd29ya2Zsb3dTZXR0aW5nKSByZXR1cm47XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBY3Rpb25Xb3JrZmxvd0Jhc2UodGhpcy5zZXR0aW5nLCByb3dEYXRhLCB3b3JrZmxvd1NldHRpbmcpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEFjdGlvbldvcmtmbG93QnlUYXNrKHJvd0RhdGEpOiBQcm9taXNlPGFueVtdIHwgdm9pZD4ge1xuICAgICAgICBpZiAoIXJvd0RhdGEuX19pc0dvdENvbmdWaWVjKSB7XG4gICAgICAgICAgICByb3dEYXRhLl9faXRlbUNvbmdWaWVjID0gKGF3YWl0IHRoaXMuX2NvbmdWaWVjU2VydmljZS5nZXREZXRhaWxCeUZpbHRlcihcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdzZXJ2aWNlQ29kZScsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5JywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2VudGl0eUtleScsIE9wZXJhdG9yLmVxdWFsLCByb3dEYXRhLmlkKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICkpLmRhdGE7XG4gICAgICAgICAgICByb3dEYXRhLl9faXNHb3RDb25nVmllYyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcm93RGF0YSA9IHJvd0RhdGEuX19pdGVtQ29uZ1ZpZWM7XG4gICAgICAgIGlmICghcm93RGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY8O0bmcgdmnhu4djIGfhuq9uIHbhu5tpIGLhuqNuIGdoaScpO1xuICAgICAgICB9XG4gICAgICAgIHJvd0RhdGEuX193b3JrZmxvd0NvZGUgPSByb3dEYXRhLndvcmtmbG93Q29kZTtcblxuICAgICAgICBjb25zdCB3b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UpO1xuICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UuY2hhbmdlRW5kcG9pbnQodGhpcy5fY29uZ1ZpZWNTZXJ2aWNlKVxuICAgICAgICAgICAgLmFwcGVuZEluZm9Gb3JXb3JrZmxvdyhcbiAgICAgICAgICAgICAgICB1c2VyU2VydmljZS5nZXRVc2VySWRDb21iaW5lKCksIFtyb3dEYXRhXSwgJ2lkJywgdGhpcy5zZXR0aW5nLmlnbm9yZVdvcmtmbG93XG4gICAgICAgICAgICApO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZS5nZXRXb3JrZmxvd1NldHRpbmdCeUlkTG9haUNvbmdWaWVjKHJvd0RhdGEuaWRMb2FpQ29uZ1ZpZWMpO1xuXG4gICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZS5hZGp1c3RTZXR0aW5nV29ya2Zsb3dGb3JDcnVkTGlzdChjcnVkTGlzdFNldHRpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QWN0aW9uV29ya2Zsb3dCYXNlKGNydWRMaXN0U2V0dGluZywgcm93RGF0YSwgd29ya2Zsb3dTZXR0aW5nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRBY3Rpb25Xb3JrZmxvd0Jhc2UoY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEsIHdvcmtmbG93U2V0dGluZzogV29ya2Zsb3dTZXR0aW5nTmV3KTogUHJvbWlzZTxhbnlbXSB8IHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IHJvd0RhdGE7XG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMgPSBbXTtcbiAgICAgICAgY29uc3QgYnV0dG9uQ29udGV4dHMgPSBbXTtcbiAgICAgICAgLy8gTuG6v3UgayBjw7Mgd29ya2Zsb3cgY29kZSBuZ2jEqWEgbMOgIGNoxrBhIGNo4bqheSBxdXkgdHLDrG5oIGhv4bq3YyBxdXkgdHLDrG5oIGzhu5dpID0+IENobyBjaOG6oXkgbOG6oWlcbiAgICAgICAgaWYgKCFyb3dEYXRhLl9fd29ya2Zsb3dDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtV29ya2Zsb3dTZXR0aW5nID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cy5maW5kKHEgPT4gcS5jb2RlID09IHJvd0RhdGEuX193b3JrZmxvd0NvZGUpO1xuICAgICAgICAgICAgaWYgKCFpdGVtV29ya2Zsb3dTZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgS2jDtG5nIHTDrG0gdGjhuqV5IHF1eSB0csOsbmggY8OzIG3DoyAke3Jvd0RhdGEuX193b3JrZmxvd0NvZGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gaXRlbVdvcmtmbG93U2V0dGluZy5kYXRhLmFjdGlvbnNbcm93RGF0YS5fX3RyYW5nVGhhaV07XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25BbGxvd3MgPSAoYXdhaXQgY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEFjdGlvbkFsbG93KHJvd0RhdGEuaWQpKS5kYXRhO1xuICAgICAgICAgICAgaWYgKGFjdGlvbkFsbG93cykge1xuICAgICAgICAgICAgICAgIGFjdGlvbkFsbG93cy5mb3JFYWNoKGFjdGlvbkNvZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25zLmZpbmQocSA9PiBxLmNvZGUgPT0gYWN0aW9uQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbkNvbnRleHRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvVGh1VHU6IGFjdGlvbi5zb1RodVR1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkNvZGU6IGFjdGlvbi5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246IHRoaXMuc291cmNlSWNvblthY3Rpb24uaWNvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGFjdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMucHJvY2Vzc1dvcmtmbG93KGNydWRMaXN0U2V0dGluZywgaXRlbVdvcmtmbG93U2V0dGluZywgYWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEzhu5dpIGsgbOG6pXkgxJHGsOG7o2MgYWN0aW9uIGFsbG93XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidXR0b25Db250ZXh0cy5zb3J0KG11bHRpcGxlU29ydCgnc29UaHVUdScpKTtcbiAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgbmfGsOG7nWkgY3Xhu5FpIGPDuW5nIHRo4buxYyBoaeG7h24gY8OzIHBo4bqjaSBuZ8aw4budaSBoaeG7h24gdOG6oWkga2jDtG5nIHRow6wgY2hvIHBow6lwIHJvbGxiYWNrXG4gICAgICAgICAgICBjb25zdCB3b3JrZmxvd0hpc3RvcnlTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93SGlzdG9yeVNlcnZpY2UpO1xuICAgICAgICAgICAgd29ya2Zsb3dIaXN0b3J5U2VydmljZS5jaGFuZ2VFbmRwb2ludCh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xuICAgICAgICAgICAgY29uc3QgdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xuICAgICAgICAgICAgY29uc3QgdXNlcklkID0gdXNlclNlcnZpY2UuZ2V0SWQoKTtcbiAgICAgICAgICAgIGxldCB1c2VySWRTdHJpbmdVcHBlciA9ICcnO1xuICAgICAgICAgICAgaWYgKHVzZXJJZCkge1xuICAgICAgICAgICAgICAgIHVzZXJJZFN0cmluZ1VwcGVyID0gdXNlcklkLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Xb3JrZmxvd0hpc3RvcnlMYXN0ID0gKGF3YWl0IHdvcmtmbG93SGlzdG9yeVNlcnZpY2UuY2hhbmdlRW5kcG9pbnQoY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlKS5nZXRMYXN0QnlJdGVtSWQocm93RGF0YS5pZCkpLmRhdGE7XG4gICAgICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeUxhc3RcbiAgICAgICAgICAgICAgICAmJiBpdGVtV29ya2Zsb3dIaXN0b3J5TGFzdC5hY3Rpb25Db2RlICE9IE1hQWN0aW9uQmF0RGF1UXV5VHJpbmhcbiAgICAgICAgICAgICAgICAmJiBpdGVtV29ya2Zsb3dIaXN0b3J5TGFzdC51c2VySWRDcmVhdGVkLnRvVXBwZXJDYXNlKCkgPT0gdXNlcklkU3RyaW5nVXBwZXJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuc2hvd0J1dHRvblRodUhvaVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgYnV0dG9uQ29udGV4dHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXJlcGxheScsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1RodSBo4buTaScsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnJvbGxiYWNrV29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1dHRvbkNvbnRleHRzLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAncGkgcGktY29tbWVudHMnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NobyDDvSBraeG6v24nLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnNob3dGb3JtQ2hvWUtpZW4oY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAncGkgcGktY2FsZW5kYXInLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogQnV0dG9uVGV4dEFjdGlvbkNvbmdWaWVjLlhFTV9MSUNIX1NVLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnZpZXdIaXN0b3J5V29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1dHRvbkNvbnRleHRzO1xuICAgIH1cblxuICAgIGFzeW5jIHZpZXdUYXNrRGV0YWlsKHJvd0RhdGEpIHtcbiAgICAgICAgY29uc3QgaXRlbVRhc2sgPSAoYXdhaXQgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmdldERldGFpbEJ5RmlsdGVyKFtcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHlLZXknLCBPcGVyYXRvci5lcXVhbCwgcm93RGF0YS5pZClcbiAgICAgICAgXSkpLmRhdGE7XG4gICAgICAgIGlmIChpdGVtVGFzayA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgY8O0bmcgdmnhu4djIGfhuq9uIHbhu5tpIGLhuqNuIGdoaScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhc2tGb3JtTW9kZWw6IGFueSA9IHt9O1xuICAgICAgICB0YXNrRm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xuICAgICAgICB0YXNrRm9ybU1vZGVsLmRhdGEgPSBpdGVtVGFzaztcbiAgICAgICAgdGhpcy5kZXRhaWxUYXNrTW9kZWwuZGF0YS50YXNrRm9ybU1vZGVsID0gdGFza0Zvcm1Nb2RlbDtcbiAgICAgICAgdGhpcy5kZXRhaWxUYXNrTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByb2xsYmFja1dvcmtmbG93KGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGtow7RpIHBo4bulYyB0cuG6oW5nIHRow6FpIHRyxrDhu5tjIMSRw7MnKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSByb3dEYXRhWzxzdHJpbmc+KGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSAoPEZ1bmN0aW9uPihjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkKSkocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNydWRMaXN0U2V0dGluZy5iYXNlU2VydmljZS5yb2xsYmFjayhyb3dEYXRhLCBbY3J1ZExpc3RTZXR0aW5nLm9iamVjdE5hbWUsIG5hbWVdKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICdLaMO0aSBwaOG7pWMgdHLhuqFuZyB0aMOhaSB0csaw4bubYyB0aMOgbmggY8O0bmcnLCBmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Sb2xsYmFja2VkV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkU3RhdHVzV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyB2aWV3SGlzdG9yeVdvcmtmbG93KGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgdGhpcy5nZXRJdGVtV29ya2Zsb3dTZXR0aW5nKGNydWRMaXN0U2V0dGluZywgcm93RGF0YSk7XG4gICAgICAgIGlmICghd29ya2Zsb3dTZXR0aW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSByb3dEYXRhO1xuICAgICAgICB0aGlzLndvcmtmbG93SGlzdG9yeU1vZGVsLmRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy53b3JrZmxvd0hpc3RvcnlNb2RlbC5kYXRhLnNldHRpbmcgPSBjcnVkTGlzdFNldHRpbmc7XG4gICAgICAgIHRoaXMud29ya2Zsb3dIaXN0b3J5TW9kZWwuZGF0YS53b3JrZmxvd1NldHRpbmcgPSB3b3JrZmxvd1NldHRpbmc7XG4gICAgICAgIHRoaXMud29ya2Zsb3dIaXN0b3J5TW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVIaWRlSGlzdG9yeVdvcmtmbG93KCkge1xuICAgICAgICB0aGlzLnNob3dIaXN0b3J5V29ya2Zsb3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBwcm9jZXNzV29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIGl0ZW1Xb3JrZmxvd1NldHRpbmc6IGFueSwgd29ya2Zsb3dBY3Rpb246IFdmQWN0aW9uKSB7XG4gICAgICAgIGlmICh3b3JrZmxvd0FjdGlvbi5vcGVuTmV3VGFiKSB7XG4gICAgICAgICAgICBsZXQgZG9tYWluTmV3VGFiID0gd29ya2Zsb3dBY3Rpb24uZG9tYWluTmV3VGFiO1xuICAgICAgICAgICAgaWYgKCFkb21haW5OZXdUYWIpIGRvbWFpbk5ld1RhYiA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICAgICAgICB3aW5kb3cub3BlbihgJHtkb21haW5OZXdUYWJ9LyR7d29ya2Zsb3dBY3Rpb24ubGlua05ld1RhYn0jX2l0ZW1JZD0ke3RoaXMuY3VycmVudEl0ZW0uaWR9YCwgJ19ibGFuaycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghd29ya2Zsb3dBY3Rpb24ub3BlblBvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dXYWl0Qm94KCk7XG4gICAgICAgICAgICBjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2UuY2hhbmdlU3RhdGVCYXNlQnlBY3Rpb24odGhpcy5jdXJyZW50SXRlbS5pZCwgd29ya2Zsb3dBY3Rpb24uY29kZSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZVdpdGhXYWl0Qm94KHJlcywgJycsIGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVByb2Nlc3NlZFdvcmtmbG93QmFzZSgpO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5oaWRlV2FpdEJveCgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuaGVhZGVyID0gd29ya2Zsb3dBY3Rpb24ubmFtZTtcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5kYXRhLnNldHRpbmcgPSBjcnVkTGlzdFNldHRpbmc7XG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuZGF0YS5hY3Rpb24gPSB3b3JrZmxvd0FjdGlvbjtcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5kYXRhLndvcmtmbG93ID0gaXRlbVdvcmtmbG93U2V0dGluZztcbiAgICB9XG5cbiAgICBhc3luYyBzaG93Rm9ybUNob1lLaWVuKGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jaG9ZS2llbk1vZGVsLmRhdGEucm93RGF0YSA9IHJvd0RhdGE7XG4gICAgICAgIHRoaXMuY2hvWUtpZW5Nb2RlbC5kYXRhLnNldHRpbmcgPSBjcnVkTGlzdFNldHRpbmc7XG4gICAgICAgIHRoaXMuY2hvWUtpZW5Nb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0V29ya2Zsb3cocm93RGF0YSwgd29ya2Zsb3c6IFdmSXRlbSkge1xuICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc3RhcnRXb3JrZmxvdyhyb3dEYXRhLmlkLCB3b3JrZmxvdy5jb2RlKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzLCAnQ2jhuqF5IHF1eSB0csOsbmggdGjDoG5oIGPDtG5nJywgZiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblN0YXJ0ZWRXb3JrZmxvdy5lbWl0KHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkU3RhdHVzV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBoYW5kbGVQcm9jZXNzZWRXb3JrZmxvd0Jhc2UoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25Qcm9jZXNzZWRXb3JrZmxvdy5lbWl0KHRoaXMuY3VycmVudEl0ZW0uaWQpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZFN0YXR1c1dvcmtmbG93LmVtaXQodGhpcy5jdXJyZW50SXRlbS5pZCk7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5TGluayhyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkNvcHlMaW5rLmVtaXQocm93RGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHlMaW5rTXVsdGlwbGUoKSB7XG4gICAgICAgIHRoaXMub25Db3B5TGlua011bHRpcGxlLmVtaXQodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKTtcbiAgICB9XG5cbiAgICBzaG93U2hhcmVMaW5rRm9ybShsc3RJdGVtKSB7XG4gICAgICAgIHRoaXMuc2hhcmVMaW5rTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaGFyZUxpbmtNb2RlbC5kYXRhLmxzdEl0ZW0gPSBsc3RJdGVtO1xuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZVNoYXJlTGluaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuY2hlY2tSZWFkeVRvVHJpbmhLeSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCfEkGFuZyB04bqjaSBk4buvIGxp4buHdSBkYW5oIHPDoWNoLCBjaOG7nSBt4buZdCBsw7pjIHLhu5NpIHRo4butIGzhuqFpJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMucm93RGF0YUN1cnJlbnQ7XG4gICAgICAgIHRoaXMuc2hvd1NoYXJlTGlua0Zvcm0oW3Jvd0RhdGFdKTtcbiAgICB9XG5cbiAgICBhc3luYyBjcmVhdGVTaGFyZUxpbmtNdWx0aXBsZSgpIHtcbiAgICAgICAgdGhpcy5zaG93U2hhcmVMaW5rRm9ybSh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlTXVsdGlwbGVDb3B5TGluaygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZUNvcHlMaW5rKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlQ29weUxpbmsocm93RGF0YSkge1xuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVDb3B5TGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuQ29weUxpbmspIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dEYXRhWydtZXRhZGF0YVN0YXR1cyddICYmIHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gIT0gJzAnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNob3dTZXR0aW5nc1Blcm1pc3Npb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNyZWF0aW5nU2VhcmNoSW5mbykgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd1NldHRpbmdzV29ya2Zsb3coKSB7XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1dvcmtmbG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd1NldHRpbmdzV29ya2Zsb3dOZXcoKSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dTZXR0aW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0xpbmtTaGFyaW5nKCkge1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25TaGFyaW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBzaG93QXR0YWNoZWRUYXNrKCkge1xuICAgICAgICB0aGlzLmF0dGFjaGVkVGFza01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dMaXN0UGVybWlzc2lvbkJ5SXRlbSgpIHtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uTGlzdE1vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZVdvcmtmbG93U2V0dGluZ3MoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZyA9IGV2ZW50O1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLnJlbG9hZFBhZ2UoKTtcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZVdvcmtmbG93U2V0dGluZ3NOZXcoZXZ0KSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dTZXR0aW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UucmVsb2FkUGFnZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZVdvcmtmbG93U2V0dGluZ3MoZXZ0KSB7XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIGdvVG9UYXNrKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ2jhu6ljIG7Eg25nIHhlbSBjaGkgdGnhur90IGPDtG5nIHZp4buHYyB44butIGzDvSB04budIHRyw6xuaCDEkWFuZyDEkcaw4bujYyBob8OgbiB0aGnhu4duLi4uJyk7XG4gICAgfVxuXG4gICAgYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzaygpIHtcbiAgICB9XG59XG4iXX0=
|
|
3077
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb21wb25lbnQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3RueC1zaGFyZWQvc3JjL2xpYi9jbGFzc2VzL2Jhc2UvbGlzdC1jb21wb25lbnQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFSCxZQUFZLEVBQ1osZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RSxPQUFPLEVBQXFCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRixPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsV0FBVyxFQUNYLGNBQWMsRUFDZCxZQUFZ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RUFBRTt1QkFDekMsWUFBWSxTQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7OEJBQ3pDLFlBQVksU0FBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7dUJBQ2hELGVBQWUsU0FBQyxXQUFXO29CQUUzQixLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsS0FBSzttQkFDTCxLQUFLOzRCQUdMLEtBQUs7K0JBQ0wsS0FBSztrQ0FHTCxLQUFLOzRCQUVMLEtBQUs7NEJBU0wsS0FBSzsrQkFDTCxLQUFLO2lDQUNMLEtBQUs7eUJBQ0wsS0FBSzttQ0FDTCxLQUFLOzBCQUNMLEtBQUs7NEJBQ0wsS0FBSzsrQkFDTCxLQUFLOzhCQU1MLEtBQUs7bUNBQ0wsS0FBSzs4QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzsyQkFDTCxLQUFLO3lCQUNMLEtBQUs7NkJBQ0wsS0FBSzt5QkFDTCxLQUFLO3FDQUNMLEtBQUs7MkJBQ0wsS0FBSztxQkFDTCxLQUFLOzRCQUNMLEtBQUs7cUJBQ0wsS0FBSzsrQkFDTCxLQUFLO3dCQUNMLEtBQUs7a0NBQ0wsS0FBSztpQ0FDTCxLQUFLOzBCQUNMLEtBQUs7eUJBQ0wsS0FBSztvQkFHTCxLQUFLO3lCQU1MLEtBQUs7NEJBV0wsS0FBSzt5QkFhTCxLQUFLOzZCQVlMLEtBQUs7MEJBRUwsTUFBTTswQkFDTixNQUFNO3lCQUNOLE1BQU07dUJBQ04sTUFBTTt5QkFDTixNQUFNO3NCQUNOLE1BQU07NEJBQ04sTUFBTTtvQkFDTixNQUFNO3FCQUNOLE1BQU07eUJBQ04sTUFBTTtpQ0FDTixNQUFNO3FCQUNOLE1BQU07dUJBQ04sTUFBTTsrQkFDTixNQUFNO2dDQUNOLE1BQU07NkJBQ04sTUFBTTtnQ0FDTixNQUFNO2tDQUNOLE1BQU07bUNBQ04sTUFBTTtzQ0FDTixNQUFNO3dDQUNOLE1BQU07eUJBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7XG4gICAgQWZ0ZXJDb250ZW50SW5pdCxcbiAgICBDb250ZW50Q2hpbGQsXG4gICAgQ29udGVudENoaWxkcmVuLFxuICAgIERpcmVjdGl2ZSxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbmplY3RvcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBQaXBlVHJhbnNmb3JtLFxuICAgIFF1ZXJ5TGlzdCxcbiAgICBUZW1wbGF0ZVJlZixcbiAgICBWaWV3Q2hpbGRcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xuaW1wb3J0IHsgQ29udGV4dE1lbnUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9jb250ZXh0bWVudSc7XG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL3RhYmxlJztcbmltcG9ydCB7IFRyZWVUYWJsZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL3RyZWV0YWJsZSc7XG5cbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xuaW1wb3J0IHsgSUxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvaS1saXN0LWNvbXBvbmVudCc7XG5pbXBvcnQgeyBCdXR0b25UZXh0QWN0aW9uQ29uZ1ZpZWMsIEZvcm1TdGF0ZSB9IGZyb20gJy4uLy4uL2NsYXNzZXMvY29uc3RhbnRzJztcbmltcG9ydCB7IEVudmlyb25tZW50U2NoZW1hLCBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XG5pbXBvcnQge1xuICAgIENoZWNrQm94TGlzdENvbnRyb2xTY2hlbWEsXG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcbiAgICBDb2x1bW5TZXR0aW5nLFxuICAgIENvbnRyb2xUeXBlLFxuICAgIENydWRMaXN0Q29uZmlnLFxuICAgIENydWRMaXN0RGF0YSxcbiAgICBDcnVkTGlzdFNldHRpbmcsXG4gICAgRGF0YVR5cGUsXG4gICAgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEsXG4gICAgRGlhbG9nTW9kZWwsXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxuICAgIEV4cG9ydEl0ZW1zTW9kZSxcbiAgICBGaWxlVXBsb2FkTW9kZSxcbiAgICBGb3JtQ29udHJvbEJhc2UsXG4gICAgSGVpZ2h0VHlwZSxcbiAgICBOdW1iZXJSYW5nZUNvbnRyb2xTY2hlbWEsXG4gICAgT3BlcmF0b3IsXG4gICAgUG9wdXBTaXplLFxuICAgIFJlZkZpZWxkLFxuICAgIFRleHRBbGlnbixcbiAgICBUZXh0Q29udHJvbFNjaGVtYVxufSBmcm9tICcuLi8uLi9jbGFzc2VzL2Zvcm0tc2NoZW1hJztcbmltcG9ydCB7IFRuTWVudUl0ZW0gfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RuLW1lbnUtaXRlbSc7XG5pbXBvcnQgeyBBY3Rpb24sIFdvcmtmbG93U2V0dGluZ05ldyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvd29ya2Zsb3ctc2NoZW1hJztcbmltcG9ydCB7IGdldFJlZ2V4UmVzdWx0LCByZW5kZXJUZXh0VGVtcGxhdGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL2NydWQvdXRpbHMnO1xuaW1wb3J0IHsgU2VhcmNoSW5mbyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9kZWxzL3NlYXJjaCc7XG5pbXBvcnQgeyBFbnVtU3RhdGVUeXBlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdGF0ZW1hY2hpbmVzL21vZGVscy9lbnVtcyc7XG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmVzU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvc3RhdGVtYWNoaW5lcy9zZXJ2aWNlcy9zdGF0ZW1hY2hpbmVzLnNlcnZpY2UnO1xuaW1wb3J0IHsgVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3RuLWN1c3RvbS1zY3JvbGxiYXIvdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQnO1xuaW1wb3J0IHsgRmllbGREZWZpbmVIYXNUYXNrLCBNYUFjdGlvbkJhdERhdVF1eVRyaW5oIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9tb2RlbHMvY29uc3QnO1xuaW1wb3J0IHsgV2ZBY3Rpb24sIFdmSXRlbSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvbW9kZWxzL21vZGVscyc7XG5pbXBvcnQgeyBDYW5Cb19Ib1NvU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvY2FuYm8taG9zby5zZXJ2aWNlJztcbmltcG9ydCB7IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2VudGl0eS13b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UnO1xuaW1wb3J0IHsgV29ya2Zsb3dIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvd29ya2Zsb3ctaGlzdG9yeS5zZXJ2aWNlJztcbmltcG9ydCB7IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL3dvcmtmbG93LXBlcm1pc3Npb24tZGV0YWlsLnNlcnZpY2UnO1xuaW1wb3J0IHsgZGF0YVNvdXJjZUljb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3dvcmtmbG93LXNldHRpbmcvd29ya2Zsb3ctc2V0dGluZy5jb21wb25lbnQnO1xuaW1wb3J0IHsgQnV0dG9uUGVybWlzc2lvbiB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRhbnRzJztcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xuaW1wb3J0IHsgQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uZ3ZpZWMvY29uZ3ZpZWMvc2VydmljZXMvY29uZ3ZpZWMuc2VydmljZSc7XG5pbXBvcnQgeyBEbUxvYWlDb25nVmllY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25ndmllYy9kbS1sb2FpLWNvbmd2aWVjL3NlcnZpY2VzL2RtLWxvYWktY29uZ3ZpZWMuc2VydmljZSc7XG5pbXBvcnQgeyBGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm0sIFJlZ2V4U3BsaXRGaWVsZEJ5SXRlbSB9IGZyb20gJy4uLy4uL2NvbnN0L2NvbW1vbic7XG5pbXBvcnQge1xuICAgIEZpZWxkQ2hlY2tib3hDcnVkTGlzdCxcbiAgICBGaWVsZENvbEV4cGFuZENydWRMaXN0LFxuICAgIEZpZWxkQ29sUmVvcmRlckNydWRMaXN0LFxuICAgIEZpZWxkRnVuY3Rpb25DcnVkTGlzdCxcbiAgICBGaWVsZEluZGV4SW5EYXRhU291cmNlLFxuICAgIEZpZWxkT3JkZXJDcnVkTGlzdFxufSBmcm9tICcuLi8uLi9lbnVtcy9jb21tb24nO1xuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbywgU29ydCB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RuLXVzZXInO1xuaW1wb3J0IHsgS2V5VmFsdWVUeXBlIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3R5cGVzJztcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XG5pbXBvcnQgeyBDdXN0b21Sb3V0ZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3VzdG9tLXJvdXRlci5zZXJ2aWNlJztcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XG5pbXBvcnQgeyBMb2dnZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbG9nZ2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcbmltcG9ydCB7IFBlcm1pc3Npb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcGVybWlzc2lvbi5zZXJ2aWNlJztcbmltcG9ydCB7IFByaW50U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3ByaW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy90ZW1wbGF0ZWluc3RhbmNlLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy91c2VyLnNlcnZpY2UnO1xuaW1wb3J0IHsgbXVsdGlwbGVTb3J0IH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXknO1xuXG4vLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tdW51c2VkLXZhcnNcbmRlY2xhcmUgbGV0ICQ6IGFueTtcblxuQERpcmVjdGl2ZSgpXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGlzdENvbXBvbmVudEJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgSUxpc3RDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcbiAgICBAVmlld0NoaWxkKCd0cmVldGFibGUnKSB0cmVlVGFibGU6IFRyZWVUYWJsZTtcbiAgICB0YWJsZTogVGFibGU7XG5cbiAgICBAVmlld0NoaWxkKFRhYmxlLCB7IHN0YXRpYzogZmFsc2UgfSkgc2V0IF90YWJsZSh2OiBUYWJsZSkge1xuICAgICAgICB0aGlzLnRhYmxlID0gdjtcbiAgICAgICAgdGhpcy50YWJsZVJlYWR5Lm5leHQodGhpcyk7XG4gICAgfVxuXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyOiBFbGVtZW50UmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgnaWNvblRvZ2dsZVJvd0dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgaWNvblRvZ2dsZVJvd0dyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ2ljb25Ub2dnbGVSb3dEYXRhJywgeyBzdGF0aWM6IHRydWUgfSkgaWNvblRvZ2dsZVJvd0RhdGE6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQFZpZXdDaGlsZCgndHJhbmdUaGFpVjUnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZVRyYW5nVGhhaVY1OiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBWaWV3Q2hpbGQoJ3ZpZXdIaXN0b3J5JywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGVDb2xWaWV3SGlzdG9yeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCd3b3JrZmxvd0NvcmVTdGF0dXMnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZVdvcmtmbG93Q29yZVN0YXR1czogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAVmlld0NoaWxkKCdzY3JvbGxiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzY3JvbGxiYXI6IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50O1xuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbnRleHRNZW51OiBDb250ZXh0TWVudTtcbiAgICBAQ29udGVudENoaWxkKCdwYWdpbmF0aW9uJywgeyBzdGF0aWM6IHRydWUgfSkgcGFnaW5hdGlvblRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ3NlYXJjaEN1c3RvbScsIHsgc3RhdGljOiB0cnVlIH0pIHNlYXJjaEN1c3RvbTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBoZWFkZXI6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnaGVhZGVyRmlsdGVyJywgeyBzdGF0aWM6IHRydWUgfSkgaGVhZGVyRmlsdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ3Jvd0V4cGFuc2lvbicsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0V4cGFuc2lvbjogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdzdW1tYXJ5JywgeyBzdGF0aWM6IHRydWUgfSkgc3VtbWFyeTogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdmb290ZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBmb290ZXI6IFRlbXBsYXRlUmVmPGFueT47XG4gICAgQENvbnRlbnRDaGlsZCgnY29sZ3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb2xncm91cDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkKCdyb3dHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0dyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xuICAgIEBDb250ZW50Q2hpbGQoJ2NvbnRlbnRSb3dHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRlbnRSb3dHcm91cDogVGVtcGxhdGVSZWY8YW55PjtcbiAgICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlUmVmKSBjaGlsZHJlbjogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xuXG4gICAgQElucHV0KCkgbW9kZWw6IENydWRMaXN0RGF0YSA9IG5ldyBDcnVkTGlzdERhdGEoKTtcbiAgICBASW5wdXQoKSBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgQElucHV0KCkgZmlsZU5hbWUgPSAnZXhwb3J0JztcbiAgICBASW5wdXQoKSBsYXp5ID0gdHJ1ZTsgLy8gxJHhurd0IGdpw6EgdHLhu4sgbsOgeSBi4bqxbmcgZmFsc2UgdGjDrCBz4bq9IGZpbHRlciDEkWMgY2xpZW50XG5cbiAgICAvLyBkdW5nIGRvbiB2aSByZW0gZGUgd2lkdGgga2hvbmcgYmkgYW5oIGh1b25nIGJvaSBmb250IHNpemUgY3VhIHRoLCBubyBzZSBsYXkgdGhlbyBmb250IHNpemUgY3VhIHRoZSBodG1sXG4gICAgQElucHV0KCkgd2lkdGhDaGVja2JveCA9ICcyLjVyZW0nO1xuICAgIEBJbnB1dCgpIHdpZHRoT3JkZXJDb2x1bW4gPSAnMy41cmVtJztcbiAgICBfZGVmYXVsdFdpdGhGdW5jdGlvbkNvbHVtbiA9IDgxO1xuICAgIF93aWR0aEZ1bmN0aW9uQ29sdW1uID0gYCR7dGhpcy5fZGVmYXVsdFdpdGhGdW5jdGlvbkNvbHVtbn1weGA7XG4gICAgQElucHV0KCkgd2lkdGhGdW5jdGlvbkNvbHVtbjogc3RyaW5nO1xuICAgIF9jbGFzc1Jvd0dyb3VwID0gJ25vLXBhZGRpbmcnO1xuICAgIEBJbnB1dCgpIHNldCBjbGFzc1Jvd0dyb3VwKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICB0aGlzLl9jbGFzc1Jvd0dyb3VwID0gYG5vLXBhZGRpbmcgJHt2YWx1ZX1gO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fY2xhc3NSb3dHcm91cCA9IGBuby1wYWRkaW5nYDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIHNob3dTY3JvbGxCYXIgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHBUYWJsZVNjcm9sbGFibGUgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBwVGFibGVTY3JvbGxIZWlnaHQ6IHN0cmluZyA9IG51bGw7XG4gICAgQElucHV0KCkgcmVzcG9uc2l2ZSA9IHRydWU7XG4gICAgQElucHV0KCkgZW5hYmxlQmFzaWNBdXRob3JpemU6IGJvb2xlYW4gPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZTogc3RyaW5nO1xuICAgIEBJbnB1dCgpIGF1dGhvcml6ZVBhdGg6IHN0cmluZztcbiAgICBASW5wdXQoKSBhdXRob3JpemVCdXR0b25zOiBzdHJpbmdbXSA9IFtcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5BREQsXG4gICAgICAgIENvbUN0eENvbnN0YW50cy5DT01NT04uRURJVCxcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5ERUxFVEUsXG4gICAgICAgIENvbUN0eENvbnN0YW50cy5DT01NT04uREVMRVRFX01VTFRJUExFXG4gICAgXTtcbiAgICBASW5wdXQoKSBjb25maWdTY3JvbGxCYXI6IGFueSA9IHsgc3VwcHJlc3NTY3JvbGxYOiB0cnVlLCBzdXBwcmVzc1Njcm9sbFk6IGZhbHNlIH07XG4gICAgQElucHV0KCkgc2hvd1Njcm9sbEhvcml6b250YWwgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBzaG93TWVudUJ1dHRvbnMgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNob3dSYWRpbyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlbkFkZCA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlbkRlbGV0ZSA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlbkVkaXQgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBoaWRkZW5Db3B5TGluayA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIGhpZGRlblZpZXcgPSBmYWxzZTtcbiAgICBASW5wdXQoKSBkaXNhYmxlS2V5cHJlc3NDb250cm9sID0gZmFsc2U7XG4gICAgQElucHV0KCkgY2FuY2VsQnViYmxlID0gdHJ1ZTtcbiAgICBASW5wdXQoKSBlc2NhcGUgPSB0cnVlO1xuICAgIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IHN0cmluZztcbiAgICBASW5wdXQoKSBjb25maWc6IENydWRMaXN0Q29uZmlnID0gbmV3IENydWRMaXN0Q29uZmlnKCk7XG4gICAgQElucHV0KCkgZW5hYmxlUmVvcmRlclJvdyA9IGZhbHNlO1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xuICAgIEBJbnB1dCgpIHRlbXBsYXRlc0Zyb21QYXJlbnQ6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcbiAgICBASW5wdXQoKSBjaGlsZHJlbkZyb21QYXJlbnQ6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcbiAgICBASW5wdXQoKSBtZW51QnV0dG9uczogKHJvd0RhdGEpID0+IFRuTWVudUl0ZW1bXSB8IFByb21pc2U8VG5NZW51SXRlbVtdPjtcbiAgICBASW5wdXQoKSBmaWVsZE9yZGVyOiBzdHJpbmcgPSBGaWVsZE9yZGVyQ3J1ZExpc3Q7XG5cbiAgICBfc3R5bGU6IGFueSA9IHt9O1xuICAgIEBJbnB1dCgpIHNldCBzdHlsZSh2YWx1ZTogYW55KSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB0YWJsZUNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcbiAgICAgICAgdGhpcy5fdGFibGVDbGFzcyA9IHRoaXMuX2RlZmF1bHRUYWJsZUNsYXNzO1xuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS50cmltKCkgIT0gJycpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gYCAke3ZhbHVlfWA7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHVwVGFibGVDbGFzcygpO1xuICAgIH1cblxuICAgIF9yYXdEYXRhU291cmNlOiBhbnlbXSA9IFtdO1xuXG4gICAgQElucHV0KCkgc2V0IGFsbERhdGFTb3VyY2UodmFsdWU6IGFueSkge1xuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdLFxuICAgICAgICAgICAgcmF3RGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUucmF3KSB7XG4gICAgICAgICAgICBkYXRhU291cmNlID0gdmFsdWUuZGF0YTtcbiAgICAgICAgICAgIHJhd0RhdGFTb3VyY2UgPSB2YWx1ZS5yYXc7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzRGF0YVNvdXJjZShyYXdEYXRhU291cmNlKTtcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UgPSByYXdEYXRhU291cmNlO1xuICAgIH1cblxuICAgIF9kYXRhU291cmNlOiBhbnlbXSA9IFtdO1xuICAgIEBJbnB1dCgpIHNldCBkYXRhU291cmNlKHZhbHVlOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5pc1RyZWVUYWJsZSkgcmV0dXJuO1xuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdO1xuICAgICAgICBpZiAodmFsdWUpIHtcbiAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB2YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcbiAgICAgICAgdGhpcy5fcmF3RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgfVxuXG4gICAgLy8gZmlsdGVyIG3hurdjIMSR4buLbmggY2hvIGRldiBjb2RlXG4gICAgQElucHV0KCkgZmlsdGVyX2RlZmF1bHQ6IEZpbHRlcltdID0gW107XG5cbiAgICBAT3V0cHV0KCkgb25Sb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25SZW9yZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25DaGVja0FsbCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJlbG9hZGVkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db250ZW50SW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkFkZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Db3B5TGluayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNvcHlMaW5rTXVsdGlwbGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25WaWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uRGVsZXRlTXVsdGlwbGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25JbnZhbGlkV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25BZnRlclRyaW5oS3kgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25TdGFydGVkV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBAT3V0cHV0KCkgb25Qcm9jZXNzZWRXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvblJvbGxiYWNrZWRXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSBvbkNoYW5nZWRTdGF0dXNXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAgIEBPdXRwdXQoKSB3aWR0aEZ1bmN0aW9uQ29sdW1uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XG4gICAgQE91dHB1dCgpIG9uU2VhcmNoZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgICBwcml2YXRlIGlzVHJlZVRhYmxlID0gZmFsc2U7XG4gICAgcHJpdmF0ZSB0YWJsZVJlYWR5ID0gbmV3IFN1YmplY3Q8YW55PigpO1xuICAgIHRhYmxlUmVhZHlTb3VyY2UkID0gdGhpcy50YWJsZVJlYWR5LmFzT2JzZXJ2YWJsZSgpO1xuICAgIGZpZWxkQ2hlY2tib3ggPSBGaWVsZENoZWNrYm94Q3J1ZExpc3Q7XG4gICAgZmllbGRDb2xFeHBhbmQgPSBGaWVsZENvbEV4cGFuZENydWRMaXN0O1xuICAgIGZpZWxkQ29sUmVvcmRlciA9IEZpZWxkQ29sUmVvcmRlckNydWRMaXN0O1xuICAgIGZpZWxkRnVuY3Rpb24gPSBGaWVsZEZ1bmN0aW9uQ3J1ZExpc3Q7XG4gICAgZmllbGRJbmRleEluRGF0YVNvdXJjZSA9IEZpZWxkSW5kZXhJbkRhdGFTb3VyY2U7XG5cbiAgICBjaGVja2VkQWxsID0gbnVsbDtcbiAgICBkYXRhU2VhcmNoQ29tbW9uOiBhbnkgPSB7fTtcbiAgICByb3dHcm91cENoZWNrZWQ6IGFueSA9IHt9O1xuICAgIHJvd0dyb3VwTWV0YWRhdGE6IGFueSA9IHt9O1xuICAgIGRhdGFTb3VyY2VJbnRlcm5hbDogYW55W107XG4gICAgY2xhc3NUb29sYmFyID0gJyc7XG4gICAgaXRlbVNldHRpbmdzOiBhbnkgPSB7fTtcbiAgICBzb3J0SGlzdG9yeTogU29ydFtdID0gW107XG4gICAgc29ydENsaWVudEhpc3Rvcnk6IGFueSA9IHt9O1xuICAgIF9ncm91cEZpZWxkOiBzdHJpbmcgPSBudWxsO1xuICAgIF9ncm91cEluQ2xpZW50ID0gZmFsc2U7XG4gICAgZW5hYmxlZFdmMSA9IHVuZGVmaW5lZDtcbiAgICBzaG93aW5nQWN0aW9uV29ya2Zsb3cgPSBmYWxzZTtcbiAgICBidXR0b25Db250ZXh0czogTWVudUl0ZW1bXSA9IFtdO1xuICAgIGF1dGhvcml6ZVBhdGhzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xuICAgIGJ1dHRvbkFwcGx5QXV0aG9yaXplOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW47IH0gPSB7fTtcbiAgICBjb21tb25Db25zdCA9IENvbUN0eENvbnN0YW50cy5DT01NT047XG5cbiAgICBfZGVmYXVsdFRhYmxlQ2xhc3MgPSAnbmV3LXRhYmxlIHNjci10YWJsZSBjcnVkLWxpc3QtdGFibGUnO1xuICAgIF90YWJsZUNsYXNzID0gJyc7XG4gICAgX3Nob3dTZXR0aW5nc1Jvd0NvbG9yID0gZmFsc2U7XG4gICAgX3Nob3dTZXR0aW5ncyA9IGZhbHNlO1xuICAgIF9zaG93U2V0dGluZ3NXb3JrZmxvdyA9IGZhbHNlO1xuICAgIF9zaG93U2V0dGluZ3NQZXJtaXNzaW9uID0gZmFsc2U7XG4gICAgX2NvbG9yRmlsdGVyVGFibGUgPSBbXTtcbiAgICBfc29ydEZpZWxkID0gJyc7XG4gICAgX3NvcnREaXI6IC0xIHwgMCB8IDEgfCAyID0gLTE7XG5cbiAgICB0ZW1wbGF0ZTogYW55ID0ge307XG4gICAgdGVtcGxhdGVGaWx0ZXI6IEZpbHRlcltdID0gW107XG4gICAgdGVtcGxhdGVIZWFkZXJDb250ZW50OiBhbnkgPSB7fTtcblxuICAgIGNhY2hlZFRyYW5zZm9ybXMgPSB7fTtcblxuICAgIGZpbHRlclNjaGVtYTogYW55ID0ge307XG4gICAgZmlsdGVyRGF0YTogYW55ID0ge307XG4gICAgY3VycmVudEZpZWxkRmlsdGVyOiBzdHJpbmc7XG4gICAgY2hlY2tCb3hDb250ZXh0TWVudTogTWVudUl0ZW1bXSA9IFtcbiAgICAgICAgeyBsYWJlbDogYEPDs2AsIGljb246ICdwaSBwaS1jaGVjaycsIGNvbW1hbmQ6ICgpID0+IHRoaXMuY2hhbmdlRmlsdGVyQm9vbGVhbih0cnVlKSB9LFxuICAgICAgICB7IGxhYmVsOiBgS2jDtG5nYCwgaWNvbjogJ3BpIHBpLXRpbWVzJywgY29tbWFuZDogKCkgPT4gdGhpcy5jaGFuZ2VGaWx0ZXJCb29sZWFuKGZhbHNlKSB9LFxuICAgICAgICB7IGxhYmVsOiBgSOG7p3kgYuG7j2AsIGljb246ICdwaSBwaS11bmRvJywgY29tbWFuZDogKCkgPT4gdGhpcy5jaGFuZ2VGaWx0ZXJCb29sZWFuKG51bGwpIH1cbiAgICBdO1xuICAgIHNlYXJjaEluZm86IFNlYXJjaEluZm8gPSBuZXcgU2VhcmNoSW5mbygpO1xuICAgIGNyZWF0aW5nU2VhcmNoSW5mbyA9IGZhbHNlO1xuXG4gICAgZmlsdGVyX2N1c3RvbTogRmlsdGVyW10gPSBbXTtcbiAgICAvLyBmaWx0ZXIgY+G7p2EgYWR2YW5jZSBzZWFyY2ggdHLhuqMgduG7gVxuICAgIGZpbHRlcl9hZHZhbmNlU2VhcmNoOiBGaWx0ZXJbXSA9IFtdO1xuICAgIGZpbHRlcl9jb21tb25TZWFyY2g6IEZpbHRlcltdID0gW107XG4gICAgLy8gZmlsdGVyIHRoZW8gY8OhYyBmaWx0ZXIgaGnhu4NuIHRo4buLIHRyb25nIGPhu5l0IGPhu6dhIGdyaWRcbiAgICBmaWx0ZXJfY29sdW1uOiBGaWx0ZXJbXSA9IFtdO1xuXG4gICAgdGltZW91dDogYW55O1xuICAgIGludGVydmFsOiBhbnk7XG4gICAgZGF0YUFkdmFuY2U6IGFueSA9IHt9O1xuICAgIHNlYXJjaE1vZGVsOiBhbnkgPSB7fTtcblxuICAgIGN1cnJlbnRJdGVtOiBhbnk7XG4gICAgc2hvd0Zvcm1Xb3JrZmxvdyA9IGZhbHNlO1xuICAgIGhlYWRlcldvcmtmbG93ID0gJyc7XG4gICAgYWN0aW9uV29ya2Zsb3c6IEFjdGlvbjtcbiAgICBwb3B1cFNpemVXb3JrZmxvdzogUG9wdXBTaXplID0gbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiA5NTAsIGhlaWdodDogNTQwIH0pO1xuICAgIHNob3dIaXN0b3J5V29ya2Zsb3cgPSBmYWxzZTtcbiAgICBoaWRkZW5CdG5GdW5jdGlvbiA9IGZhbHNlO1xuICAgIC8vIEJp4bq/biDEkeG7gyBraeG7g20gdHJhIGzhuqduIGNsaWNrIMSR4bqndSB0acOqbiBj4bunYSB1c2VyIHbDoG8gZMOybmcgdHLDqm4gZ3JpZFxuICAgIC8vIFPhu60gZOG7pW5nIMSR4buDIGZpeCBidWcgc2V0IHNlbGVjdGVkIHJvdyB04burIGZvcm0gY2hhLCBuaMawbmcgdsOgbyBmb3JtIGNvbiDhuqVuIHNhbmcgcm93IGtow6FjIG7DsyBrIGLhu48gc2VsZWN0ZWQgcm93IMSRw6Mgc2V0IHThu6sgYsOqbiBuZ2/DoGlcbiAgICBmaXJzdFJvd0NsaWNrID0gdHJ1ZTtcblxuICAgIHN0YXJ0V29ya2Zsb3dNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdDaOG7jW4gcXV5IHRyw6xuaCBuZ2hp4buHcCB24bulIHPhu60gZOG7pW5nJ1xuICAgIH0pO1xuICAgIHByb2Nlc3NXb3JrZmxvd01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCgpO1xuICAgIGNob1lLaWVuTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ2hvIMO9IGtp4bq/bicsXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiAxMTAwLCBoZWlnaHQ6IDY1MCB9KVxuICAgIH0pO1xuICAgIHdvcmtmbG93U2V0dGluZ01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCgpO1xuICAgIHdvcmtmbG93SGlzdG9yeU1vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ1hlbSBs4buLY2ggc+G7rSdcbiAgICB9KTtcbiAgICBwZXJtaXNzaW9uU2hhcmluZ01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ1hlbSBkYW5oIHPDoWNoIGxpbmsgY2hpYSBz4bq7JyxcbiAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDExMDAsIGhlaWdodDogNjUwIH0pLFxuICAgIH0pO1xuICAgIHBlcm1pc3Npb25MaXN0TW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnWGVtIGRhbmggc8OhY2ggY8OzIHF1eeG7gW4nLFxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogMTEwMCwgaGVpZ2h0OiA2NTAgfSksXG4gICAgfSk7XG4gICAgY29uZ1ZpZWNNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xuICAgICAgICBoZWFkZXI6ICdDaOG6oXkgcXV5IHRyw6xuaCBjw7RuZyB2aeG7h2MnLFxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogMTEwMCwgaGVpZ2h0OiA2NTAgfSksXG4gICAgICAgIGRhdGE6IHtcbiAgICAgICAgICAgIGNvbmdWaWVjU2V0dGluZzogbmV3IENydWRMaXN0U2V0dGluZygpXG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBkZXRhaWxUYXNrTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ2hpIHRp4bq/dCBjw7RuZyB2aeG7h2MnXG4gICAgfSk7XG4gICAgc2hhcmVMaW5rTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcbiAgICAgICAgaGVhZGVyOiAnQ2hpYSBz4bq7IHF1eeG7gW4nLFxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogNjUwLCBoZWlnaHQ6IDMxMCB9KVxuICAgIH0pO1xuICAgIGF0dGFjaGVkVGFza01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XG4gICAgICAgIGhlYWRlcjogJ0Rhbmggc8OhY2ggY8O0bmcgdmnhu4djIMSRw61uaCBrw6htJ1xuICAgIH0pO1xuXG4gICAgQlVUVE9OX1BIQU5fUVVZRU4gPSBCdXR0b25QZXJtaXNzaW9uLkJVVFRPTl9QSEFOX1FVWUVOO1xuICAgIEJVVFRPTl9DQVVfSElOSF9RVVlfVFJJTkggPSBCdXR0b25QZXJtaXNzaW9uLkJVVFRPTl9DQVVfSElOSF9RVVlfVFJJTkg7XG4gICAgbHN0QnV0dG9uUGVybWlzc2lvbiA9IFtdO1xuICAgIGJ1dHRvblBlcm1pc3Npb25NYXA6IE1hcDxzdHJpbmcsIGJvb2xlYW4+ID0gbmV3IE1hcCgpO1xuXG4gICAgZW50aXR5TWV0YWRhdGFTZXJ2aWNlOiBFbnRpdHlNZXRhZGF0YVNlcnZpY2U7XG4gICAgZW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZTogRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZTtcblxuICAgIHN0YXRlTWFjaGluZXNTZXJ2aWNlOiBTdGF0ZU1hY2hpbmVzU2VydmljZTtcblxuICAgIGNhbkJvX0hvU29TZXJ2aWNlOiBDYW5Cb19Ib1NvU2VydmljZTtcblxuICAgIHNvdXJjZUljb246IGFueSA9IHt9O1xuICAgIHN0b3BDYWxjdWxhdGluZ0Z1bmN0aW9uQ29sdW1uV2lkdGggPSBmYWxzZTtcbiAgICBzZWxlY3RlZEl0ZW1MYXN0OiBhbnk7XG5cbiAgICByb3dEYXRhQ3VycmVudDogYW55O1xuICAgIGVudmlyb25tZW50OiBFbnZpcm9ubWVudFNjaGVtYTtcbiAgICBGaWxlVXBsb2FkTW9kZSA9IEZpbGVVcGxvYWRNb2RlO1xuICAgIGN1cnJlbnRVc2VyOiBUblVzZXI7XG4gICAgT3BlcmF0b3IgPSBPcGVyYXRvcjtcblxuICAgIHB1YmxpYyBfcm91dGVyOiBSb3V0ZXI7XG4gICAgcHVibGljIF9hY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGU7XG4gICAgcHVibGljIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBfdW5TdWJzY3JpYmVBbGwgPSBuZXcgU3ViamVjdDxhbnk+KCk7XG4gICAgcHVibGljIF9ub3RpZmllclNlcnZpY2U6IE5vdGlmaWVyU2VydmljZTtcbiAgICBwdWJsaWMgX2V4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2U7XG4gICAgcHVibGljIF9sb2dnZXJTZXJ2aWNlOiBMb2dnZXJTZXJ2aWNlO1xuICAgIHB1YmxpYyBfY29uZ1ZpZWNTZXJ2aWNlOiBDb25nVmllY1NlcnZpY2U7XG4gICAgcHVibGljIF9kbUxvYWlDb25nVmllY1NlcnZpY2U6IERtTG9haUNvbmdWaWVjU2VydmljZTtcbiAgICBwdWJsaWMgX2NvbW1vblNlcnZpY2U6IENvbW1vblNlcnZpY2U7XG4gICAgcHVibGljIF9jcnVkU2VydmljZTogQ3J1ZFNlcnZpY2U7XG4gICAgcHVibGljIF9zYW50aWxpemVyOiBEb21TYW5pdGl6ZXI7XG4gICAgcHVibGljIF9kYXRlUGlwZTogRGF0ZVBpcGU7XG5cbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xuICAgIHByaXZhdGUgX21vZHVsZUNvbmZpZ1NlcnZpY2U6IE1vZHVsZUNvbmZpZ1NlcnZpY2U7XG4gICAgcHJpdmF0ZSBfcGVybWlzc2lvblNlcnZpY2U6IFBlcm1pc3Npb25TZXJ2aWNlO1xuICAgIHByaXZhdGUgX3RlbXBsYXRlSW5zdGFuY2VTZXJ2aWNlOiBUZW1wbGF0ZUluc3RhbmNlU2VydmljZTtcbiAgICBwcml2YXRlIF9wcmludFNlcnZpY2U6IFByaW50U2VydmljZTtcblxuICAgIGNvbnN0cnVjdG9yKFxuICAgICAgICBwdWJsaWMgX2luamVjdG9yOiBJbmplY3RvcixcbiAgICAgICAgX2lzVHJlZVRhYmxlOiBib29sZWFuXG4gICAgKSB7XG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XG4gICAgICAgIHRoaXMuaXNUcmVlVGFibGUgPSBfaXNUcmVlVGFibGU7XG4gICAgICAgIHRoaXMuX2FjdGl2YXRlZFJvdXRlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEFjdGl2YXRlZFJvdXRlKTtcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XG4gICAgICAgIHRoaXMuX2N1c3RvbVJvdXRlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3VzdG9tUm91dGVyU2VydmljZSk7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChOb3RpZmllclNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEV4cG9ydFNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9sb2dnZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KExvZ2dlclNlcnZpY2UpO1xuICAgICAgICB0aGlzLmVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSk7XG4gICAgICAgIHRoaXMuc3RhdGVNYWNoaW5lc1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoU3RhdGVNYWNoaW5lc1NlcnZpY2UpO1xuICAgICAgICB0aGlzLmNhbkJvX0hvU29TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENhbkJvX0hvU29TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENvbmdWaWVjU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChEbUxvYWlDb25nVmllY1NlcnZpY2UpO1xuXG4gICAgICAgIHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVHJhbnNsYXRlU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XG4gICAgICAgIHRoaXMuX2NydWRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KENydWRTZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fc2FudGlsaXplciA9IHRoaXMuX2luamVjdG9yLmdldChEb21TYW5pdGl6ZXIpO1xuICAgICAgICB0aGlzLl9kYXRlUGlwZSA9IHRoaXMuX2luamVjdG9yLmdldChEYXRlUGlwZSk7XG4gICAgICAgIHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTW9kdWxlQ29uZmlnU2VydmljZSk7XG4gICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFBlcm1pc3Npb25TZXJ2aWNlKTtcbiAgICAgICAgdGhpcy5fdGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVGVtcGxhdGVJbnN0YW5jZVNlcnZpY2UpO1xuICAgICAgICB0aGlzLl9wcmludFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoUHJpbnRTZXJ2aWNlKTtcblxuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrQWxsID0gdGhpcy5oYW5kbGVDaGVja0FsbC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrQWxsX0dyb3VwID0gdGhpcy5oYW5kbGVDaGVja0FsbF9Hcm91cC5iaW5kKHRoaXMpO1xuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcbiAgICB9XG5cbiAgICBuZ09uSW5pdCgpIHtcbiAgICAgICAgdGhpcy5zdWJzY3JpYmUoQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FTlRJVFlfTUVUQURBVEFfUkVMT0FERUQsIHNlcnZpY2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5lbnRpdHlNZXRhZGF0YVNlcnZpY2UgPSBzZXJ2aWNlO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kYXRlUmFuZ2UgPSBuZXcgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEoeyBhcHBlbmRUbzogJ2JvZHknIH0pO1xuICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kYXRlVGltZVJhbmdlID0gbmV3IERhdGVUaW1lUmFuZ2VDb250cm9sU2NoZW1hKHsgYXBwZW5kVG86ICdib2R5Jywgc2hvd1RpbWU6IHRydWUgfSk7XG4gICAgICAgIHRoaXMuZmlsdGVyU2NoZW1hLmRyb3Bkb3duID0ge307XG5cbiAgICAgICAgZGF0YVNvdXJjZUljb24uZm9yRWFjaChzb3VyY2UgPT4ge1xuICAgICAgICAgICAgdGhpcy5zb3VyY2VJY29uW3NvdXJjZS5pZF0gPSBzb3VyY2UudGVuO1xuICAgICAgICB9KTtcblxuICAgICAgICB0aGlzLnRlbXBsYXRlRmlsdGVyID0gW107XG5cbiAgICAgICAgaWYgKCF0aGlzLl90YWJsZUNsYXNzKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzID0gdGhpcy5fZGVmYXVsdFRhYmxlQ2xhc3M7XG5cbiAgICAgICAgICAgIHRoaXMuc2V0dXBUYWJsZUNsYXNzKCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbml0Q29sdW1uU2NoZW1hKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5jcmVhdGVTZWFyY2hTY2hlbWEoKTtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuaGlkZGVuRmlsdGVyUm93KSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuaGlkZGVuRmlsdGVyUm93ID0gdGhpcy5zZXR0aW5nLnVzZUNvbW1vblNlYXJjaDtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5UcmluaEt5IHx8ICF0aGlzLnNldHRpbmcuZGlzYWJsZVNoYXJlKSB7XG4gICAgICAgICAgICBpZiAoIXRoaXMubWVudUJ1dHRvbnMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1lbnVCdXR0b25zID0gYXN5bmMgKCkgPT4gW107XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBO4bq/dSBtw6Ag4bqpbiBhZHZhbmNlc2VhcmNoID0+IHPhur0ga2jDtG5nIGPDsyB0cmlnZ2VyIGxvYWQgZGF0YSB04burIGFkdmFuY2Ugc2VhcmNoID0+IHBo4bqjaSB04buxIGfhu41pIGdldERhdGEg4bufIE9uSW5pdFxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmhpZGRlbkFkdmFuY2VTZWFyY2gpIHtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2VDb2RlICYmIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSkge1xuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlQ29kZSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLmF1dGhvcml6ZVBhdGgpIHtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5BRERdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9BRERgO1xuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkVESVRdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9FRElUYDtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5ERUxFVEVdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9ERUxFVEVgO1xuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkRFTEVURV9NVUxUSVBMRV0gPSBgJHt0aGlzLmF1dGhvcml6ZVBhdGh9L0RFTEVURV9NVUxUSVBMRWA7XG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6ZVBhdGhzW0NvbUN0eENvbnN0YW50cy5DT01NT04uRVhQT1JUX0VYQ0VMXSA9IGAke3RoaXMuYXV0aG9yaXplUGF0aH0vRVhQT1JUX0VYQ0VMYDtcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FWFBPUlRfQUxMX0VYQ0VMXSA9IGAke3RoaXMuYXV0aG9yaXplUGF0aH0vRVhQT1JUX0FMTF9FWENFTGA7XG5cbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplQnV0dG9ucy5mb3JFYWNoKGJ1dHRvbiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25BcHBseUF1dGhvcml6ZVtidXR0b25dID0gdHJ1ZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG5cblxuICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XG4gICAgICAgIGNvbnN0IHRlbXAgPSB1c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xuICAgICAgICBpZiAodGVtcCAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gbmV3IFRuVXNlcih1c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlciA9PSBudWxsKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvblBlcm1pc3Npb25Db2RlIG9mIHRoaXMubHN0QnV0dG9uUGVybWlzc2lvbikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvblBlcm1pc3Npb24gPSBgJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGV9LyR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWV9LyR7YnV0dG9uUGVybWlzc2lvbkNvZGV9YC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uUGVybWlzc2lvbk1hcC5zZXQoYnV0dG9uUGVybWlzc2lvbiwgZmFsc2UpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHNraXAgY2hlY2sgcGVybWlzc2lvbiBpZiBjdXJyZW50IHVzZXIgaXMgc3VwZXJ1c2VyIG9yIChpZ25vcmVBZG1pbiA9PSBmYWxzZSBhbmQgdXNlciBpcyBhZG1pbilcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSAhPT0gJ3RydWUnXG4gICAgICAgICAgICAmJiAodGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5pZ25vcmVBZG1pbiA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgIHx8IHRoaXMuY3VycmVudFVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpICE9PSAndHJ1ZSdcbiAgICAgICAgICAgIClcbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5nZXRTZXJ2aWNlUGVybWlzc2lvbih0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUpLnRoZW4ocmVzdWx0ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBsc3RCYXNlUGVybWlzc2lvbiA9IHJlc3VsdDtcbiAgICAgICAgICAgICAgICB0aGlzLmxzdEJ1dHRvblBlcm1pc3Npb24gPSB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50LmJ1dHRvblBlcm1pc3Npb25zIGFzIHN0cmluZ1tdID8/IFtdO1xuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYnV0dG9uUGVybWlzc2lvbkNvZGUgb2YgdGhpcy5sc3RCdXR0b25QZXJtaXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvblBlcm1pc3Npb24gPSBgJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGV9LyR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWV9LyR7YnV0dG9uUGVybWlzc2lvbkNvZGV9YC50b1VwcGVyQ2FzZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvblBlcm1pc3Npb25NYXAuc2V0KGJ1dHRvblBlcm1pc3Npb24sIGxzdEJhc2VQZXJtaXNzaW9uLmluY2x1ZGVzKGJ1dHRvblBlcm1pc3Npb24pKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC5maWVsZCkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRlbXBsYXRlID0gdGhpcy5maW5kVGVtcGxhdGUoYGhlYWRlciR7Y29sLmZpZWxkLnN1YnN0cmluZygwLCAxKS50b1VwcGVyQ2FzZSgpfSR7Y29sLmZpZWxkLnN1YnN0cmluZygxKX1gKTtcbiAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUhlYWRlckNvbnRlbnRbY29sLmZpZWxkXSA9IHRlbXBsYXRlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25Db250ZW50SW5pdC5lbWl0KHRoaXMpO1xuICAgIH1cblxuICAgIHNldHVwVGFibGVDbGFzcygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93IHx8ICF0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3gpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBtdWx0aS1jaGVjayc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzICs9ICcgc2luZ2xlLWNoZWNrJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuc3RpY2t5Q29sdW1uKSB7XG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzICs9ICcgc3RpY2t5LWNvbHVtbnMtYWN0aXZlJztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3gpIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBoaWRkZW4tY29sdW1uLWNoZWNrYm94JztcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGlkZGVuT3JkZXJDb2x1bW4pIHtcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBoaWRkZW4tY29sdW1uLW9yZGVyJztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGluaXRDb2x1bW5TY2hlbWEoY29sczogQ29sdW1uU2NoZW1hQmFzZVtdKSB7XG4gICAgICAgIGlmICghY29scyB8fCAhY29scy5sZW5ndGgpIHJldHVybjtcbiAgICAgICAgbGV0IGNvbEZ1bmN0aW9uID0gbnVsbCwgY29sR3JvdXAgPSBudWxsLCBjb2xIYXNUb2dnbGVJY29uID0gbnVsbDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKGNvbC5zaG93VG9nZ2xlSWNvbikge1xuICAgICAgICAgICAgICAgIGNvbEhhc1RvZ2dsZUljb24gPSBjb2w7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoY29sLmZpZWxkID09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBjb2xGdW5jdGlvbiA9IGNvbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5ncm91cCkge1xuICAgICAgICAgICAgICAgIGNvbC5ncm91cCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIGNvbEdyb3VwID0gY29sO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGNvbEZ1bmN0aW9uICYmICFjb2xGdW5jdGlvbi53aWR0aCkge1xuICAgICAgICAgICAgdGhpcy5fd2lkdGhGdW5jdGlvbkNvbHVtbiA9IGNvbEZ1bmN0aW9uLndpZHRoO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29sSGFzVG9nZ2xlSWNvbikge1xuICAgICAgICAgICAgY29sSGFzVG9nZ2xlSWNvbiA9IHRoaXMuc2V0dGluZy5jb2xzWzBdO1xuICAgICAgICB9XG4gICAgICAgIGNvbEhhc1RvZ2dsZUljb24uY29sSGFzVG9nZ2xlSWNvbiA9IHRydWU7XG4gICAgICAgIHRoaXMuZ2V0Q29sb3JTZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuZ2V0Q29sdW1uU2V0dGluZyhjb2xHcm91cCk7XG4gICAgICAgIHRoaXMuZ2V0UGFnZVNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5leHRlbmRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5hcHBseUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlckNvbHVtbih0aGlzLnNldHRpbmcuY29scyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBleHRlbmRDb2x1bW5zKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSwgYXBwZW5kQ29sID0gdHJ1ZSk6IHZvaWQge1xuICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmID0gW107XG4gICAgICAgIGlmICghY29scykge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGVtcDogQ29sdW1uU2NoZW1hQmFzZVtdID0gW107XG4gICAgICAgIGNvbnN0IHRtcENvbHMgPSBbLi4uY29sc107XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzLmZvckVhY2goY29sUmVvcmRlciA9PiB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2xzW2ldLmZpZWxkID09IGNvbFJlb3JkZXIuY29sdW1uQ29kZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKGNvbHNbaV0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29scy5zcGxpY2UoaSwgMSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gQ8OybiBs4bqhaSBuaOG7r25nIGNvZGUgbcOgIGtow7RuZyDEkcaw4bujYyBj4bqldSBow6xuaCB0aMOsIGdow6lwIGzhuqFpIHRoZW8gaW5kZXggxJHGsOG7o2Mga2hhaSBiw6FvXG4gICAgICAgICAgICBsZXQgdGVtcENvbHM6IENvbHVtblNjaGVtYUJhc2VbXSA9IFtdO1xuICAgICAgICAgICAgY29scy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IGluZGV4Q29sT2xkID0gdG1wQ29scy5maW5kSW5kZXgocCA9PiBwLmZpZWxkID09IGNvbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgaWYgKGluZGV4Q29sT2xkID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcC5zcGxpY2UoMCwgMCwgY29sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIFTDrG0gduG7iyB0csOtIGPhu6dhIGPhu5l0IHBow61hIHRyxrDhu5tjIHRyb25nIGxpc3QgcmVvcmRlciBt4bubaVxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXhDb2xCZWZvcmVOZXcgPSB0ZW1wLmZpbmRJbmRleChwID0+IHAuZmllbGQgPT0gdG1wQ29sc1tpbmRleENvbE9sZCAtIDFdLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4Q29sQmVmb3JlTmV3ID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wQ29scy5zcGxpY2UoMCwgMCwgY29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFTDrG0gduG7iyB0csOtIGPhu6dhIGPhu5l0IHRyxrDhu5tjIGPhu5l0IMSRYW5nIGtp4buDbSB0cmEgdHJvbmcgbGlzdCBj4buZdCBn4buRY1xuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb2xPbGQgPSB0bXBDb2xzLmZpbmRJbmRleChwID0+IHAuZmllbGQgPT0gdG1wQ29sc1tpbmRleENvbE9sZCAtIDFdLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Q29sQmVmb3JlTmV3ID0gdGVtcC5maW5kSW5kZXgocCA9PiBwLmZpZWxkID09IHRtcENvbHNbaW5kZXhDb2xPbGQgLSAxXS5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgLy8gPT4gxJDhur9uIGtoaSB0aOG6pXkgdGjDrCBhZGQgY+G7mXQgaGnhu4duIHThuqFpIHbDoCBsaXN0IHThuqFtIHbDoG8gduG7iyB0csOtIGNow6huXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRleENvbEJlZm9yZU5ldyA9PSB0ZW1wLmxlbmd0aCAtIDEpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaChjb2wsIC4uLnRlbXBDb2xzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuc3BsaWNlKGluZGV4Q29sQmVmb3JlTmV3ICsgMSwgMCwgY29sLCAuLi50ZW1wQ29scyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGVtcENvbHMgPSBbXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgfVxuICAgICAgICBjb2xzLnNwbGljZSgwLCBjb2xzLmxlbmd0aCk7XG4gICAgICAgIGNvbHMuc3BsaWNlKDAsIDAsIC4uLnRlbXApO1xuXG4gICAgICAgIGxldCBmaXJzdENvbFZpc2libGUgPSBudWxsO1xuICAgICAgICBsZXQgZm91bmRJdGVtU2hvd0VkaXRMaW5rID0gZmFsc2U7XG4gICAgICAgIHRlbXAuc3BsaWNlKDAsIHRlbXAubGVuZ3RoKTtcbiAgICAgICAgbGV0IHRtcENvbDogQ29sdW1uU2NoZW1hQmFzZSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBjb2xzKSB7XG4gICAgICAgICAgICBpZiAoZWxlbWVudC5yYXdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRlbXAucHVzaChlbGVtZW50KTtcbiAgICAgICAgICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmRldGFpbHMuZmluZChwID0+IHAuY29sdW1uQ29kZSA9PSBlbGVtZW50LmZpZWxkKTtcblxuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcudmlzaWJsZSAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy52aXNpYmxlICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gY29uZmlnLnZpc2libGU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbGVtZW50LmxhYmVsKSB7XG4gICAgICAgICAgICAgICAgZWxlbWVudC5sYWJlbCA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlbGVtZW50LmxhYmVsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcudGV4dEFsaWduICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLnRleHRBbGlnbiAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGVsZW1lbnQudGV4dEFsaWduID0gY29uZmlnLnRleHRBbGlnbjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcud2lkdGggIT09IHVuZGVmaW5lZCAmJiBjb25maWcud2lkdGggIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LndpZHRoID0gY29uZmlnLndpZHRoO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5kYXRhVHlwZSA9PSBudWxsIHx8IGVsZW1lbnQuZGF0YVR5cGUgPT0gdW5kZWZpbmVkIHx8IGVsZW1lbnQuZGF0YVR5cGUgPT0gJycpIHtcbiAgICAgICAgICAgICAgICBlbGVtZW50LmRhdGFUeXBlID0gRGF0YVR5cGUuc3RyaW5nO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoZWxlbWVudC52aXNpYmxlXG4gICAgICAgICAgICAgICAgfHwgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtblxuICAgICAgICAgICAgICAgICAgICAmJiBlbGVtZW50LmZpZWxkID09IHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5maWVsZFxuICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmJhc2VTZXJ2aWNlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cm9sVHlwZSA9IENvbnRyb2xUeXBlLmRyb3Bkb3duO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQucmF3Q29sdW1uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLnB1c2gobmV3IFJlZkZpZWxkKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbGVtZW50XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZUZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlRmllbGQgPSAnaWQnO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheUZpZWxkID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRpc3BsYXlGaWVsZCA9ICd0ZW4nO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ29sID0gbmV3IENvbHVtblNjaGVtYUJhc2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNSZWZGaWVsZDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdDb2x1bW46IGVsZW1lbnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBlbGVtZW50LmRhdGFUeXBlUmVmRmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgZWxlbWVudC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZWxlbWVudC5hbGxvd0ZpbHRlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ1JlZkZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscy5maW5kKHAgPT4gcC5jb2x1bW5Db2RlID09IHRtcENvbC5maWVsZCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnUmVmRmllbGQgJiYgY29uZmlnUmVmRmllbGQudmlzaWJsZSAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ29sLnZpc2libGUgPSBjb25maWdSZWZGaWVsZC52aXNpYmxlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKHRtcENvbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RDb2xWaXNpYmxlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb2xWaXNpYmxlID0gdG1wQ29sO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuZGF0YVNvdXJjZSAmJiBlbGVtZW50LmRhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmNvbnRyb2xUeXBlID0gQ29udHJvbFR5cGUuZHJvcGRvd247XG4gICAgICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5yYXdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYucHVzaCh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0bXBDb2wgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc1JlZkZpZWxkOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhd0NvbHVtbjogZWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGVsZW1lbnQuZGF0YVR5cGVSZWZGaWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlU2VydmljZTogbnVsbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBlbGVtZW50LmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBlbGVtZW50LmFsbG93RmlsdGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnUmVmRmllbGQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzLmZpbmQocCA9PiBwLmNvbHVtbkNvZGUgPT0gdG1wQ29sLmZpZWxkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdSZWZGaWVsZCAmJiBjb25maWdSZWZGaWVsZC52aXNpYmxlICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDb2wudmlzaWJsZSA9IGNvbmZpZ1JlZkZpZWxkLnZpc2libGU7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2godG1wQ29sKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdENvbFZpc2libGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENvbFZpc2libGUgPSB0bXBDb2w7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWZpcnN0Q29sVmlzaWJsZSkge1xuICAgICAgICAgICAgICAgICAgICBmaXJzdENvbFZpc2libGUgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuZm9yY2VHZXREYXRhKSB7XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYmFzZVNlcnZpY2UgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWxlbWVudFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWVGaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlRmllbGQgPSAnaWQnO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXlGaWVsZCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRpc3BsYXlGaWVsZCA9ICd0ZW4nO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChlbGVtZW50LnNob3dFZGl0TGluaykge1xuICAgICAgICAgICAgICAgIGZvdW5kSXRlbVNob3dFZGl0TGluayA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmb3VuZEl0ZW1TaG93RWRpdExpbmsgJiYgZmlyc3RDb2xWaXNpYmxlKSB7XG4gICAgICAgICAgICBmaXJzdENvbFZpc2libGUuc2hvd0VkaXRMaW5rID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBjb2xzLmxlbmd0aCA9IDA7XG4gICAgICAgIGNvbHMucHVzaCguLi50ZW1wKTtcblxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtTGVuZ3RoID0gW107XG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZEhhc01heGltdW1Xb3JkID0gW107XG4gICAgICAgIGNvbHMuZm9yRWFjaChjb2wgPT4ge1xuICAgICAgICAgICAgaWYgKCFjb2wudmlzaWJsZSkgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKGNvbC5tYXhXb3JkRGlzcGxheSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZEhhc01heGltdW1Xb3JkLnB1c2goY29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5tYXhMZW5ndGhEaXNwbGF5KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bUxlbmd0aC5wdXNoKGNvbCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBmb3JtYXRDb2x1bW5zKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSk6IHZvaWQge1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XG4gICAgICAgICAgICBpZiAoY29sLmRhdGFUeXBlID09ICdkYXRlJykge1xuICAgICAgICAgICAgICAgIGlmICghY29sLmZvcm1hdCkgY29sLmZvcm1hdCA9ICdub3JtYWwnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29sLmV4dGVuZERhdGEuc3R5bGUgPSB0aGlzLmdldENvbHVtblN0eWxlKGNvbCk7XG4gICAgICAgICAgICBjb2wuZXh0ZW5kRGF0YS5oZWFkZXJTdHlsZSA9IHRoaXMuZ2V0Q29sdW1uU3R5bGUoY29sLCB0cnVlKTtcbiAgICAgICAgICAgIGNvbC5leHRlbmREYXRhLmhlYWRlckNsYXNzID0gdGhpcy5nZXRDZWxsQ2xhc3NIZWFkZXIoY29sKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uU2V0dGluZyhjb2xHcm91cDogQ29sdW1uU2NoZW1hQmFzZSkge1xuICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gPSBjb2xHcm91cDtcbiAgICAgICAgY29uc3QgZGF0YVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xVTU5fU0VUVElORyk7XG4gICAgICAgIGlmIChkYXRhU2V0dGluZykge1xuICAgICAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcbiAgICAgICAgICAgICAgICBwYXRoTmFtZSArPSAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhU2V0dGluZyk7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2Ygc2V0dGluZ3MpIHtcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBlbGVtZW50ID0gc2V0dGluZ3NbaV07XG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHBhdGhOYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCA9IGVsZW1lbnQuc2V0dGluZy5zb3J0RmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPSBlbGVtZW50LnNldHRpbmcuc29ydERpciA/IGVsZW1lbnQuc2V0dGluZy5zb3J0RGlyIDogMDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkID0gZWxlbWVudC5zZXR0aW5nLmdyb3VwRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwSW5DbGllbnQgPSBlbGVtZW50LnNldHRpbmcuZ3JvdXBJbkNsaWVudDtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkICYmIGNvbEdyb3VwICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0R3JvdXBGaWVsZChjb2xHcm91cCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscyA9IGVsZW1lbnQuc2V0dGluZy5kZXRhaWxzO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAoY29sR3JvdXApIHtcbiAgICAgICAgICAgIHRoaXMuc2V0R3JvdXBGaWVsZChjb2xHcm91cCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNldEdyb3VwRmllbGQoY29sR3JvdXApIHtcbiAgICAgICAgaWYgKChjb2xHcm91cC5kYXRhU291cmNlICYmIGNvbEdyb3VwLmRhdGFTb3VyY2UubGVuZ3RoID4gMClcbiAgICAgICAgICAgIHx8IGNvbEdyb3VwLmJhc2VTZXJ2aWNlKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkID0gYHN0ciR7Y29sR3JvdXAuZmllbGR9YDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQgPSBjb2xHcm91cC5maWVsZDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2F2ZUNvbHVtblNldHRpbmcoKSB7XG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcbiAgICAgICAgICAgIHBhdGhOYW1lICs9ICcvJyArIHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5O1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb2x1bW5TZXR0aW5nID0gW107XG4gICAgICAgIGxldCBjaGVja0V4aXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRhdGFTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcpO1xuICAgICAgICBpZiAoZGF0YVNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbHVtblNldHRpbmcgPSBKU09OLnBhcnNlKGRhdGFTZXR0aW5nKTtcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1TZXR0aW5nID0gY29sdW1uU2V0dGluZy5maW5kKHEgPT4gcS5wYXRobmFtZSA9PSBwYXRoTmFtZSk7XG4gICAgICAgICAgICBpZiAoaXRlbVNldHRpbmcpIHtcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLnNvcnRGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZDtcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLnNvcnREaXIgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RGlyO1xuICAgICAgICAgICAgICAgIGl0ZW1TZXR0aW5nLnNldHRpbmcuZ3JvdXBGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQ7XG4gICAgICAgICAgICAgICAgaXRlbVNldHRpbmcuc2V0dGluZy5ncm91cEluQ2xpZW50ID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBJbkNsaWVudDtcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLmRldGFpbHMgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzO1xuICAgICAgICAgICAgICAgIGNoZWNrRXhpc3QgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFjaGVja0V4aXN0KSB7XG4gICAgICAgICAgICBjb2x1bW5TZXR0aW5nLnB1c2goeyBwYXRobmFtZTogcGF0aE5hbWUsIHNldHRpbmc6IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nIH0pO1xuICAgICAgICB9XG5cbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcsIEpTT04uc3RyaW5naWZ5KGNvbHVtblNldHRpbmcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlbGV0ZUNvbHVtblNldHRpbmcoKSB7XG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcbiAgICAgICAgICAgIHBhdGhOYW1lICs9ICcvJyArIHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5O1xuICAgICAgICB9XG4gICAgICAgIGxldCBjb2x1bW5TZXR0aW5nID0gW107XG4gICAgICAgIGNvbnN0IGRhdGFTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcpO1xuICAgICAgICBpZiAoZGF0YVNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbHVtblNldHRpbmcgPSBKU09OLnBhcnNlKGRhdGFTZXR0aW5nKTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY29sdW1uU2V0dGluZy5maW5kSW5kZXgocSA9PiBxLnBhdGhuYW1lID09IHBhdGhOYW1lKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSBjb2x1bW5TZXR0aW5nLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xVTU5fU0VUVElORywgSlNPTi5zdHJpbmdpZnkoY29sdW1uU2V0dGluZykpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sb3JTZXR0aW5nKCkge1xuICAgICAgICBjb25zdCBkYXRhUGFnZVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xPUl9TRVRUSU5HKTtcbiAgICAgICAgaWYgKGRhdGFQYWdlU2V0dGluZykge1xuICAgICAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcbiAgICAgICAgICAgICAgICBwYXRoTmFtZSArPSAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhUGFnZVNldHRpbmcpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5ncy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBzZXR0aW5nc1tpXTtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gcGF0aE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQgPSBlbGVtZW50LmNvbG9yRmlsdGVyRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlID0gZWxlbWVudC5jb2xvckZpbHRlclRhYmxlO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jYWNoZUNvbG9yU2V0dGluZygpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2FjaGVDb2xvclNldHRpbmcoKSB7XG4gICAgICAgIHRoaXMuX2NvbG9yRmlsdGVyVGFibGUgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGVbaV07XG4gICAgICAgICAgICBjb25zdCBpdGVtVmFsdWVzID0gW107XG4gICAgICAgICAgICBpdGVtVmFsdWVzWzBdID0gaXRlbS5jb21wYXJlVHlwZTtcbiAgICAgICAgICAgIGl0ZW1WYWx1ZXNbMV0gPSBpdGVtLmZpbHRlclZhbHVlO1xuICAgICAgICAgICAgaXRlbVZhbHVlc1syXSA9IHRoaXMuY29udmVydFRvRGF0ZShpdGVtLmZpbHRlclZhbHVlKTtcbiAgICAgICAgICAgIGl0ZW1WYWx1ZXNbM10gPSBOdW1iZXIoaXRlbS5maWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICBpdGVtVmFsdWVzWzRdID0gKC90cnVlL2kpLnRlc3QoaXRlbS5maWx0ZXJWYWx1ZSk7XG4gICAgICAgICAgICBpdGVtVmFsdWVzWzVdID0gaXRlbS5jb2xvcjtcbiAgICAgICAgICAgIHRoaXMuX2NvbG9yRmlsdGVyVGFibGUucHVzaChpdGVtVmFsdWVzKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgc2V0Q29sb3JTZXR0aW5nKCkge1xuICAgICAgICBsZXQgcGF0aE5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5KSB7XG4gICAgICAgICAgICBwYXRoTmFtZSArPSAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgY29sb3JTZXR0aW5nID0gW107XG4gICAgICAgIGxldCBjaGVja0V4aXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRhdGFDb2xvclNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xPUl9TRVRUSU5HKTtcbiAgICAgICAgaWYgKGRhdGFDb2xvclNldHRpbmcpIHtcbiAgICAgICAgICAgIGNvbG9yU2V0dGluZyA9IEpTT04ucGFyc2UoZGF0YUNvbG9yU2V0dGluZyk7XG4gICAgICAgICAgICBjb2xvclNldHRpbmcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gcGF0aE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb2xvckZpbHRlckZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQ7XG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29sb3JGaWx0ZXJUYWJsZSA9IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlO1xuICAgICAgICAgICAgICAgICAgICBjaGVja0V4aXN0ID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghY2hlY2tFeGlzdCkge1xuICAgICAgICAgICAgY29sb3JTZXR0aW5nLnB1c2goe1xuICAgICAgICAgICAgICAgIHBhdGhuYW1lOiBwYXRoTmFtZSxcbiAgICAgICAgICAgICAgICBjb2xvckZpbHRlckZpZWxkOiB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZCxcbiAgICAgICAgICAgICAgICBjb2xvckZpbHRlclRhYmxlOiB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJUYWJsZVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xPUl9TRVRUSU5HLCBKU09OLnN0cmluZ2lmeShjb2xvclNldHRpbmcpKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldFBhZ2VTZXR0aW5nKCkge1xuICAgICAgICBjb25zdCBkYXRhUGFnZVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5QQUdFX1NFVFRJTkcpO1xuICAgICAgICBpZiAoZGF0YVBhZ2VTZXR0aW5nKSB7XG4gICAgICAgICAgICBsZXQgcGF0aE5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2V0dGluZ0tleSkge1xuICAgICAgICAgICAgICAgIHBhdGhOYW1lICs9ICcvJyArIHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcGFnZVNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhUGFnZVNldHRpbmcpO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwYWdlU2V0dGluZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gcGFnZVNldHRpbmdzW2ldO1xuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhdGhuYW1lID09PSBwYXRoTmFtZSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgPSBlbGVtZW50LnBhZ2VTaXplO1xuICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIHNhdmVQYWdlU2V0dGluZygpIHtcbiAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2V0dGluZ0tleSkge1xuICAgICAgICAgICAgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IHBhZ2VTZXR0aW5nID0gW107XG4gICAgICAgIGxldCBjaGVja0V4aXN0ID0gZmFsc2U7XG4gICAgICAgIGNvbnN0IGRhdGFQYWdlU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLlBBR0VfU0VUVElORyk7XG4gICAgICAgIGlmIChkYXRhUGFnZVNldHRpbmcpIHtcbiAgICAgICAgICAgIHBhZ2VTZXR0aW5nID0gSlNPTi5wYXJzZShkYXRhUGFnZVNldHRpbmcpO1xuICAgICAgICAgICAgcGFnZVNldHRpbmcuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gcGF0aE5hbWUpIHtcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYWdlU2l6ZSA9IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZTtcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tFeGlzdCA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIWNoZWNrRXhpc3QpIHtcbiAgICAgICAgICAgIHBhZ2VTZXR0aW5nLnB1c2goeyBwYXRobmFtZTogcGF0aE5hbWUsIHBhZ2VTaXplOiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5QQUdFX1NFVFRJTkcsIEpTT04uc3RyaW5naWZ5KHBhZ2VTZXR0aW5nKSk7XG4gICAgfVxuXG4gICAgY2hlY2tJc0luc2lkZURpYWxvZygpIHtcbiAgICAgICAgY29uc3QgJGRpYWxvZyA9IHRoaXMuY29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuY2xvc2VzdCgnLnAtZGlhbG9nJyk7XG4gICAgICAgIHJldHVybiAhISRkaWFsb2c7XG4gICAgfVxuXG4gICAgaGFuZGxlUmVhZHkoKSB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZml4SGVpZ2h0VHlwZUluRGlhbG9nKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5jaGVja0lzSW5zaWRlRGlhbG9nKCkpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuaGVpZ2h0VHlwZSA9IEhlaWdodFR5cGUuY3VzdG9tO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMub25SZWFkeS5lbWl0KHRoaXMpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY2hlY2tBbGxvd1NlbGVjdFJvdyhldnQsIHJvd0RhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRpc2FibGVSb3dTZWxlY3RXaGVuQ2xpY2tBY3Rpb25cbiAgICAgICAgICAgICYmIChldnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygnLmxpbmstb3ItYWN0aW9uJylcbiAgICAgICAgICAgICAgICB8fCBldnQudGFyZ2V0LmNsb3Nlc3QoJy5saW5rLW9yLWFjdGlvbicpXG4gICAgICAgICAgICApXG4gICAgICAgICkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIC8vIENsaWNrIHbDoG8gY2hlY2tib3hcbiAgICAgICAgaWYgKGV2dC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdwLWNoZWNrYm94LWJveCcpIHx8IGV2dC50YXJnZXQuY2xvc2VzdCgnLnAtY2hlY2tib3gtYm94JykpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNoZWNrQWxsb3dTZWxlY3RSb3cgJiYgIXRoaXMuc2V0dGluZy5jaGVja0FsbG93U2VsZWN0Um93KHJvd0RhdGEsIGV2dCkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVTZWxlY3RSb3cgPSAoZXZ0LCBkYXRhKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGFzQ3VzdG9tSGFuZGxlQ2xpY2tSb3cpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmICghdGhpcy5jaGVja0FsbG93U2VsZWN0Um93KGV2dCwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBvbGRDaGVja2VkID0gZGF0YS5fY2hlY2tlZDtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcubXVsdGlwbGVDaGVja1doZW5DbGlja1Jvdykge1xuICAgICAgICAgICAgbGV0IGRhdGFUb0NsZWFyQ2hlY2tlZCA9IG51bGw7XG4gICAgICAgICAgICBpZiAodGhpcy5maXJzdFJvd0NsaWNrKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdFJvd0NsaWNrID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZGF0YVRvQ2xlYXJDaGVja2VkID0gdGhpcy5fcmF3RGF0YVNvdXJjZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGRhdGFUb0NsZWFyQ2hlY2tlZCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRhdGFUb0NsZWFyQ2hlY2tlZC5mb3JFYWNoKChwLCBpbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHAuX2NoZWNrZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgIH1cbiAgICAgICAgZGF0YS5fY2hlY2tlZCA9ICFvbGRDaGVja2VkO1xuICAgICAgICBsZXQgZmlyZUV2ZW50ID0gdHJ1ZTtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuZmlyZUV2ZW50V2hlblJlU2VsZWN0KSB7XG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZEl0ZW1MYXN0ICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhc3QgPSBudWxsO1xuICAgICAgICAgICAgICAgIGZpcmVFdmVudCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhKGRhdGEsIGV2dC50YXJnZXQuY2xvc2VzdCgndHInKSwgZmlyZUV2ZW50KTtcbiAgICB9O1xuXG4gICAgaGFuZGxlU2VsZWN0Um93R3JvdXAgPSAoZXZ0LCBkYXRhKSA9PiB7XG4gICAgICAgIGlmICghdGhpcy5jaGVja0FsbG93U2VsZWN0Um93KGV2dCwgZGF0YSkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93KSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtc01vZGlmaWVkID0gWy4uLnRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc107XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCgocCwgaW5kZXgpID0+IHtcbiAgICAgICAgICAgICAgICBwLl9jaGVja2VkID0gZmFsc2U7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIGlmICghaXRlbXNNb2RpZmllZC5zb21lKHEgPT4gcS5pZCA9PSBkYXRhLmlkKSkge1xuICAgICAgICAgICAgICAgIGl0ZW1zTW9kaWZpZWQucHVzaChkYXRhKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGl0ZW1zTW9kaWZpZWQuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoZWNrUm93RGF0YV9Hcm91cChpdGVtLCBudWxsLCBmYWxzZSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgICBkYXRhLl9jaGVja2VkID0gIWRhdGEuX2NoZWNrZWQ7XG5cbiAgICAgICAgbGV0IGZpcmVFdmVudCA9IHRydWU7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmZpcmVFdmVudFdoZW5SZVNlbGVjdCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtTGFzdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1MYXN0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBmaXJlRXZlbnQgPSBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLmhhbmRsZUNoZWNrUm93RGF0YV9Hcm91cChkYXRhLCBldnQudGFyZ2V0LmNsb3Nlc3QoJ3RyJyksIGZpcmVFdmVudCk7XG4gICAgfTtcblxuICAgIHByaXZhdGUgc2V0TGFzdEl0ZW1TZWxlY3RlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3QgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXNbdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1MYXN0ID0gbnVsbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgX2VtaXRSb3dTZWxlY3QodHJFbGVtZW50LCBkYXRhKSB7XG4gICAgICAgIHRoaXMub25Sb3dTZWxlY3QuZW1pdCh7XG4gICAgICAgICAgICBlbGVtZW50OiB0ckVsZW1lbnQsXG4gICAgICAgICAgICBkYXRhXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVUb2dnbGVSb3cocm93RGF0YSwgZXZ0KSB7XG4gICAgICAgIHRoaXMudGFibGUudG9nZ2xlUm93KHJvd0RhdGEsIGV2dCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBfc2hvd0NvbnRleHRNZW51KGV2dCkge1xuICAgICAgICAvLyBzZXRUaW1lb3V0IMSR4buDIGZpeCBidWcgaGnhu4NuIHRo4buLIGNvbnRleHQgbWVudSB0csOgbiByYSBuZ2/DoGkgbcOgbiBow6xuaFxuICAgICAgICBzZXRUaW1lb3V0KGYgPT4ge1xuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS5zaG93KGV2dCk7XG4gICAgICAgIH0sIDEwKTtcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEZpbHRlcnMoKTogRmlsdGVyW10ge1xuICAgICAgICBjb25zdCByZXN1bHQgPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2RlZmF1bHQpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmlsdGVyX2RlZmF1bHQpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9jb21tb25TZWFyY2gpIHtcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmlsdGVyX2NvbW1vblNlYXJjaCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2N1c3RvbSkge1xuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfY3VzdG9tKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5maWx0ZXJfY29sdW1uKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9jb2x1bW4pO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9hZHZhbmNlU2VhcmNoKSB7XG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9hZHZhbmNlU2VhcmNoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIGdldEdyaWRJbmZvKCkge1xuICAgICAgICBjb25zdCBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XG4gICAgICAgICAgICBwYWdlSW5mbzoge1xuICAgICAgICAgICAgICAgIHBhZ2U6IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlLFxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemVcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBmaWx0ZXJzOiB0aGlzLmdldEZpbHRlcnMoKSxcbiAgICAgICAgICAgIHNvcnRzOiBbXSxcbiAgICAgICAgfSk7XG4gICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkICYmICF0aGlzLl9ncm91cEluQ2xpZW50KSB7XG4gICAgICAgICAgICBncmlkSW5mby5zb3J0cy51bnNoaWZ0KHsgZmllbGQ6IHRoaXMuX2dyb3VwRmllbGQsIGRpcjogMSB9KTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fc29ydEZpZWxkICYmIHRoaXMuX3NvcnREaXIgIT09IDApIHtcbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzLnB1c2goeyBmaWVsZDogdGhpcy5fc29ydEZpZWxkLCBkaXI6IHRoaXMuX3NvcnREaXIgfSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZ3JpZEluZm87XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZVNlYXJjaEFkdnMoZmlsdGVyczogRmlsdGVyW10pIHtcbiAgICAgICAgdGhpcy5maWx0ZXJfYWR2YW5jZVNlYXJjaCA9IGZpbHRlcnM7XG4gICAgICAgIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlID0gMTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIGhhbmRsZVNlYXJjaChkYXRhKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyX2NvbW1vblNlYXJjaCA9IGRhdGEuZmlsdGVycztcbiAgICAgICAgdGhpcy5kYXRhU2VhcmNoQ29tbW9uID0gZGF0YS5kYXRhRm9ybTtcbiAgICAgICAgYXdhaXQgdGhpcy5vblNlYXJjaGVkLmVtaXQoZGF0YSk7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIGhhbmRsZUluaXRBZHZhbmNlU2VhcmNoKGZpbHRlcnM6IEZpbHRlcltdKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyX2FkdmFuY2VTZWFyY2ggPSBmaWx0ZXJzO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0RGF0YSgpIHtcbiAgICAgICAgY29uc3QgaW5mb0dldERhdGEgPSB7XG4gICAgICAgICAgICBncmlkSW5mbzogdGhpcy5nZXRHcmlkSW5mbygpLFxuICAgICAgICAgICAgZGF0YVNlYXJjaENvbW1vbjogdGhpcy5kYXRhU2VhcmNoQ29tbW9uXG4gICAgICAgIH07XG4gICAgICAgIHRoaXMub25SZWxvYWQuZW1pdChpbmZvR2V0RGF0YSk7XG4gICAgfVxuXG4gICAgcmVsb2FkKGZpbHRlcl9jdXN0b20/OiBGaWx0ZXJbXSwgcGFnZSA9IDEpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJfY3VzdG9tID0gZmlsdGVyX2N1c3RvbTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSBwYWdlO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGFuaFNvVGh1VHVHcm91cExhc3Rlc3QoKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zb3J0R3JvdXBMYXN0TW9kZWxCYXNlKCkudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICfEkMOhbmggbOG6oWkgc+G7kSB0aOG7qSB04buxIHRow6BuaCBjw7RuZycsIGYgPT4ge1xuXG4gICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYWRkKCkge1xuICAgICAgICB0aGlzLm9uQWRkLmVtaXQoKTtcbiAgICB9XG5cbiAgICBhc3luYyB4dWF0Q2FjTXVjRGFDaG9uKCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNob3dDb25maXJtRXhwb3J0KSB7XG4gICAgICAgICAgICBjb25zdCBycyA9IGF3YWl0IHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIHh14bqldCBi4bqjbiBnaGkgxJHDoyBjaOG7jW4gKFbDoCBjw6FjIGLhuqNuIGdoaSBjb24gdMawxqFuZyDhu6luZyknLCAnWMOhYyBuaOG6rW4geHXhuqV0IGZpbGUnKTtcbiAgICAgICAgICAgIGlmICghcnMpIHtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgc3dpdGNoICh0aGlzLnNldHRpbmcuZXhwb3J0SXRlbXNNb2RlKSB7XG4gICAgICAgICAgICBjYXNlIEV4cG9ydEl0ZW1zTW9kZS5Gcm9tSHRtbDpcbiAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydEJ5UmVhZGluZ0h0bWwoKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0SXRlbXNNb2RlLk1hbnVhbEdldERhdGE6XG4gICAgICAgICAgICBjYXNlIEV4cG9ydEl0ZW1zTW9kZS5BdXRvR2V0RGF0YTpcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdUaGUgZnVuY3Rpb24gaGF2ZW5cXCd0IHN1cHBvcnRlZCB5ZXQnKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFzeW5jIHByaW50QnlSZWFkaW5nSHRtbCgpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zaG93Q29uZmlybUV4cG9ydCkge1xuICAgICAgICAgICAgY29uc3QgcnMgPSBhd2FpdCB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd0NvbmZpcm0oJ0LhuqFuIGPDsyBjaOG6r2MgY2jhuq9uIG114buRbiBpbiBi4bqjbiBnaGkgxJHDoyBjaOG7jW4gKFbDoCBjw6FjIGLhuqNuIGdoaSBjb24gdMawxqFuZyDhu6luZyknLCAnWMOhYyBuaOG6rW4gaW4gZmlsZScpO1xuICAgICAgICAgICAgaWYgKCFycykge1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBjb25zdCBoZWFkZXIgPSAnRGFuaCBzw6FjaCAnICsgdGhpcy5zZXR0aW5nLm9iamVjdE5hbWU7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IHRhYmxlRWxlID0gZWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0YWJsZScpO1xuICAgICAgICBjb25zdCBoZWFkRWxlID0gdGFibGVFbGUucXVlcnlTZWxlY3RvcigndGhlYWQnKTtcbiAgICAgICAgY29uc3QgYm9keUVsZSA9IHRhYmxlRWxlLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5Jyk7XG5cbiAgICAgICAgY29uc3QgYXJySGVhZEVsZSA9IHRoaXMuZ2V0QXJySGVhZEJ5SHRtbChoZWFkRWxlKTtcbiAgICAgICAgY29uc3QgYXJyUm93RGF0YSA9IHRoaXMuZ2V0QXJyUm93RGF0YUJ5SHRtbChib2R5RWxlLCBhcnJIZWFkRWxlKTtcblxuICAgICAgICBjb25zdCBzdHJIZWFkRWxlID0gdGhpcy5oZWFkSHRtbFRvU3RyaW5nKGFyckhlYWRFbGUpO1xuICAgICAgICBjb25zdCBzdHJCb2R5RWxlID0gdGhpcy5yb3dEYXRhSHRtbFRvU3RyaW5nKGFyclJvd0RhdGEpO1xuICAgICAgICBjb25zdCBjc3MgPSAnPHN0eWxlIHR5cGU9XCJ0ZXh0L2Nzc1wiPnRhYmxlIHRoLCB0YWJsZSB0ZCB7Ym9yZGVyOjFweCBzb2xpZCAjMDAwO30gdGFibGUgdGgge3RleHQtYWxpZ246IGNlbnRlcjt9IHRhYmxlIHt3aWR0aDogMTAwJTtib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlO30gdGFibGUgdGQ6Zmlyc3QtY2hpbGQge3RleHQtYWxpZ246IGNlbnRlcjt9PC9zdHlsZT4nO1xuICAgICAgICBjb25zdCB0YWJsZSA9IGAke2Nzc308dGFibGU+JHtzdHJIZWFkRWxlfSR7c3RyQm9keUVsZX08L3RhYmxlPmA7XG4gICAgICAgIHRoaXMuX3ByaW50U2VydmljZS5wcmludEh0bWxDb250ZW50KHRhYmxlLCBoZWFkZXIudG9VcHBlckNhc2UoKSk7XG4gICAgfVxuXG4gICAgcHVibGljIHByaW50QnlSZWFkaW5nSHRtbEhhc1Jvd1NwYW4oKSB7XG4gICAgICAgIGNvbnN0IGhlYWRlciA9ICdEYW5oIHPDoWNoICcgKyB0aGlzLnNldHRpbmcub2JqZWN0TmFtZTtcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgdGFibGVFbGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XG4gICAgICAgIGNvbnN0IGhlYWRFbGUgPSB0YWJsZUVsZS5xdWVyeVNlbGVjdG9yKCd0aGVhZCcpO1xuICAgICAgICBjb25zdCBib2R5RWxlID0gdGFibGVFbGUucXVlcnlTZWxlY3RvcigndGJvZHknKTtcblxuICAgICAgICBjb25zdCBhcnJIZWFkRWxlID0gdGhpcy5nZXRBcnJIZWFkQnlIdG1sKGhlYWRFbGUpO1xuICAgICAgICBjb25zdCBhcnJSb3dEYXRhID0gdGhpcy5nZXRBcnJSb3dEYXRhSGFzUm93U3BhbkJ5SHRtbChib2R5RWxlLCBhcnJIZWFkRWxlKTtcblxuICAgICAgICBjb25zdCBzdHJIZWFkRWxlID0gdGhpcy5oZWFkSHRtbFRvU3RyaW5nKGFyckhlYWRFbGUpO1xuICAgICAgICBjb25zdCBzdHJCb2R5RWxlID0gdGhpcy5yb3dEYXRhSHRtbEhhc1Jvd1NwYW5Ub1N0cmluZyhhcnJSb3dEYXRhKTtcbiAgICAgICAgY29uc3QgY3NzID0gJzxzdHlsZSB0eXBlPVwidGV4dC9jc3NcIj50YWJsZSB0aCwgdGFibGUgdGQge2JvcmRlcjoxcHggc29saWQgIzAwMDt9IHRhYmxlIHRoIHt0ZXh0LWFsaWduOiBjZW50ZXI7fSB0YWJsZSB7d2lkdGg6IDEwMCU7Ym9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTt9IHRhYmxlIHRkOmZpcnN0LWNoaWxkIHt0ZXh0LWFsaWduOiBjZW50ZXI7fTwvc3R5bGU+JztcbiAgICAgICAgY29uc3QgdGFibGUgPSBgJHtjc3N9PHRhYmxlPiR7c3RySGVhZEVsZX0ke3N0ckJvZHlFbGV9PC90YWJsZT5gO1xuICAgICAgICB0aGlzLl9wcmludFNlcnZpY2UucHJpbnRIdG1sQ29udGVudCh0YWJsZSwgaGVhZGVyLnRvVXBwZXJDYXNlKCkpO1xuICAgIH1cblxuICAgIHB1YmxpYyBleHBvcnRBbGwoKSB7XG4gICAgICAgIHRoaXMuZXhwb3J0QnlSZWFkaW5nSHRtbCh0cnVlKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZXhwb3J0QnlSZWFkaW5nSHRtbChleHBvcnRBbGwgPSBmYWxzZSkge1xuICAgICAgICBpZiAodGhpcy5fZ3JvdXBGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDaMawYSBo4buXIHRy4bujIHh14bqldCBjw7MgbmjDs20gZOG7ryBsaeG7h3UhJyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy50YWJsZS5lbC5uYXRpdmVFbGVtZW50O1xuICAgICAgICBjb25zdCB0YWJsZUVsZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcigndGFibGUnKTtcbiAgICAgICAgY29uc3QgaGVhZEVsZSA9IHRhYmxlRWxlLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJyk7XG4gICAgICAgIGNvbnN0IGJvZHlFbGUgPSB0YWJsZUVsZS5xdWVyeVNlbGVjdG9yKCd0Ym9keScpO1xuXG4gICAgICAgIC8vIGhlYWRlci5cbiAgICAgICAgY29uc3QgYXJySGVhZCA9IHRoaXMuZ2V0QXJySGVhZEJ5SHRtbChoZWFkRWxlKTtcbiAgICAgICAgaWYgKCFhcnJIZWFkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBib2R5LlxuICAgICAgICBjb25zdCBhcnJSb3dEYXRhID0gdGhpcy5nZXRBcnJSb3dEYXRhQnlIdG1sKGJvZHlFbGUsIGFyckhlYWQsIGV4cG9ydEFsbCk7XG5cbiAgICAgICAgLy8gZXhwb3J0LlxuICAgICAgICBjb25zdCBkYXRhRXhwb3J0ID0gW2FyckhlYWQubWFwKGkgPT4gaS52YWx1ZSksIC4uLmFyclJvd0RhdGFdO1xuICAgICAgICBjb25zdCBmaWxlTmFtZSA9IGBEYW5oIHPDoWNoICR7dGhpcy5zZXR0aW5nLm9iamVjdE5hbWV9YDtcbiAgICAgICAgdGhpcy5fZXhwb3J0U2VydmljZS5vYmplY3RUb0V4Y2VsKGRhdGFFeHBvcnQsIGZpbGVOYW1lKTtcblxuICAgIH1cblxuICAgIHB1YmxpYyBoZWFkSHRtbFRvU3RyaW5nKGFyckhlYWRFbGUpIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xuICAgICAgICBhcnJIZWFkRWxlLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICByZXN1bHQgKz0gYDx0aD4ke2VsZW1lbnQudmFsdWV9PC90aD5gO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG5cbiAgICBwdWJsaWMgcm93RGF0YUh0bWxUb1N0cmluZyhyb3dEYXRhcykge1xuICAgICAgICBjb25zdCBhcnJSb3dEYXRhID0gW107XG4gICAgICAgIHJvd0RhdGFzLmZvckVhY2goYXJyUm93RGF0YUNoaWxkID0+IHtcbiAgICAgICAgICAgIGxldCByb3dEYXRhID0gJzx0cj4nO1xuICAgICAgICAgICAgYXJyUm93RGF0YUNoaWxkLmZvckVhY2goZWxlbWVudCA9PiB7XG4gICAgICAgICAgICAgICAgcm93RGF0YSArPSBgPHRkPiR7ZWxlbWVudH08L3RkPmA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJvd0RhdGEgKz0gJzwvdHI+JztcbiAgICAgICAgICAgIGFyclJvd0RhdGEucHVzaChyb3dEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhcnJSb3dEYXRhLmpvaW4oJyAnKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0QXJySGVhZEJ5SHRtbChoZWFkZXIpIHtcbiAgICAgICAgY29uc3QgZmlyc3RSb3cgPSBoZWFkZXIucXVlcnlTZWxlY3RvcigndHInKTtcbiAgICAgICAgaWYgKCFmaXJzdFJvdykge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYXJyVGggPSBmaXJzdFJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpO1xuXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3ggPyAwIDogMTtcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBhcnJUaC5sZW5ndGggLSAodGhpcy5zZXR0aW5nLmhpZGRlbkZ1bmN0aW9uQ29sdW1uID8gMCA6IDEpIC0gMTtcbiAgICAgICAgaWYgKHN0YXJ0SW5kZXggPiBlbmRJbmRleCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBhcnJIZWFkZXIgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7IGkrKykge1xuICAgICAgICAgICAgaWYgKGFyclRoW2ldLmlubmVyVGV4dCkge1xuICAgICAgICAgICAgICAgIGFyckhlYWRlci5wdXNoKHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBhcnJUaFtpXS5pbm5lclRleHRcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhcnJIZWFkZXI7XG4gICAgfVxuXG4gICAgcHVibGljIGdldEFyclJvd0RhdGFIYXNSb3dTcGFuQnlIdG1sKGJvZHlFbGUsIGFyckhlYWQsIGV4cG9ydEFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGFyclJvdyA9IGV4cG9ydEFsbCA/IGJvZHlFbGUucXVlcnlTZWxlY3RvckFsbCgndHInKSA6IGJvZHlFbGUucXVlcnlTZWxlY3RvckFsbCgndHIudWktc3RhdGUtaGlnaGxpZ2h0Jyk7XG4gICAgICAgIGlmICghYXJyUm93Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyUm93RGF0YSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyUm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBhcnJSb3dbaV07XG4gICAgICAgICAgICBjb25zdCBhcnJUZCA9IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpO1xuICAgICAgICAgICAgYXJyUm93RGF0YS5wdXNoKFsuLi5hcnJUZF0uZmlsdGVyKHggPT4gIXguY2xhc3NOYW1lLmluY2x1ZGVzKCdjaGtib3ggbGluay1vci1hY3Rpb24gY2VsbC1jaGVja2JveCcpKS5tYXAoeCA9PiAoeyB2YWx1ZTogeC5pbm5lclRleHQsIHJvd1NwYW46IHgucm93U3BhbiB9KSkpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGFyclJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHJvd0RhdGFIdG1sSGFzUm93U3BhblRvU3RyaW5nKHJvd0RhdGFzKSB7XG4gICAgICAgIGNvbnN0IGFyclJvd0RhdGEgPSBbXTtcbiAgICAgICAgcm93RGF0YXMuZm9yRWFjaChhcnJSb3dEYXRhQ2hpbGQgPT4ge1xuICAgICAgICAgICAgbGV0IHJvd0RhdGEgPSAnPHRyPic7XG4gICAgICAgICAgICBhcnJSb3dEYXRhQ2hpbGQuZm9yRWFjaChlbGVtZW50ID0+IHtcbiAgICAgICAgICAgICAgICByb3dEYXRhICs9IGA8dGQgcm93U3Bhbj1cIiR7ZWxlbWVudC5yb3dTcGFufVwiPiR7ZWxlbWVudC52YWx1ZX08L3RkPmA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHJvd0RhdGEgKz0gJzwvdHI+JztcbiAgICAgICAgICAgIGFyclJvd0RhdGEucHVzaChyb3dEYXRhKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBhcnJSb3dEYXRhLmpvaW4oJyAnKTtcbiAgICB9XG5cblxuICAgIHB1YmxpYyBnZXRBcnJSb3dEYXRhQnlIdG1sKGJvZHlFbGUsIGFyckhlYWQsIGV4cG9ydEFsbCA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IGFyclJvdyA9IGV4cG9ydEFsbCA/IGJvZHlFbGUucXVlcnlTZWxlY3RvckFsbCgndHInKSA6IGJvZHlFbGUucXVlcnlTZWxlY3RvckFsbCgndHIudWktc3RhdGUtaGlnaGxpZ2h0Jyk7XG4gICAgICAgIGlmICghYXJyUm93Lmxlbmd0aCkge1xuICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgYXJyUm93RGF0YSA9IFtdO1xuXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyUm93Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCByb3cgPSBhcnJSb3dbaV07XG4gICAgICAgICAgICBjb25zdCBhcnJUZCA9IHJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0ZCcpO1xuICAgICAgICAgICAgbGV0IGN1cnJlbnRUZDtcbiAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSBbXTtcblxuICAgICAgICAgICAgYXJySGVhZC5mb3JFYWNoKGhlYWQgPT4ge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRUZCA9IGFyclRkW2hlYWQuaW5kZXhdO1xuICAgICAgICAgICAgICAgIGlmIChjdXJyZW50VGQuaW5uZXJUZXh0ID09PSAnJykge1xuICAgICAgICAgICAgICAgICAgICByb3dEYXRhLnB1c2godGhpcy5nZXRWYWx1ZUNoZWNrYm94Rm9ybWF0KGN1cnJlbnRUZCkpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5wdXNoKGN1cnJlbnRUZC5pbm5lclRleHQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBhcnJSb3dEYXRhLnB1c2gocm93RGF0YSk7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gYXJyUm93RGF0YTtcbiAgICB9XG5cbiAgICBnZXRWYWx1ZUNoZWNrYm94Rm9ybWF0KGRhdGEpIHtcbiAgICAgICAgY29uc3QgY2hlY2tCb3ggPSBkYXRhLnF1ZXJ5U2VsZWN0b3IoJ3AtY2hlY2tib3gnKTtcbiAgICAgICAgaWYgKGNoZWNrQm94KSB7XG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEucXVlcnlTZWxlY3Rvcignc3Bhbi5waS1jaGVjaycpO1xuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdDw7MnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICdLaMO0bmcnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBwdWJsaWMgdmlldyhyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vblZpZXcuZW1pdChyb3dEYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZWRpdChyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkVkaXQuZW1pdChyb3dEYXRhKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGVsZXRlKHJvd0RhdGE6IGFueSkge1xuICAgICAgICB0aGlzLm9uRGVsZXRlLmVtaXQocm93RGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGRlbGV0ZU11dGlwbGUoKSB7XG4gICAgICAgIHRoaXMub25EZWxldGVNdWx0aXBsZS5lbWl0KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyk7XG4gICAgfVxuXG4gICAgYXN5bmMgc2hvd0NvbnRleHRNZW51KGV2dCwgcm93RGF0YSkge1xuICAgICAgICB0aGlzLnJvd0RhdGFDdXJyZW50ID0gcm93RGF0YTtcbiAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cyA9IGF3YWl0IHRoaXMuZ2V0TWVudUJ1dHRvbkF1dGhvcml6ZWQoYXdhaXQgdGhpcy5tZW51QnV0dG9ucyhyb3dEYXRhKSk7XG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmRpc2FibGVTaGFyZSkge1xuICAgICAgICAgICAgY29uc3Qgc2hhcmVCdXR0b25zID0gW1xuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdDaGlhIHPhursnLCBpY29uOiAncGkgcGktbGluaycsIGNvbW1hbmQ6IHRoaXMuY3JlYXRlU2hhcmVMaW5rLmJpbmQodGhpcykgfSxcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnRGFuaCBzw6FjaCBjaGlhIHPhursnLCBpY29uOiAncGkgcGktbGlzdCcsIGNvbW1hbmQ6IHRoaXMuc2hvd0xpbmtTaGFyaW5nLmJpbmQodGhpcykgfSxcbiAgICAgICAgICAgICAgICAvLyB7IGxhYmVsOiAnRGFuaCBzw6FjaCBuaMOsbiB0aOG6pXknLCBpY29uOiAncGkgcGktbGlzdCcsIGNvbW1hbmQ6IHRoaXMuc2hvd0xpc3RQZXJtaXNzaW9uQnlJdGVtLmJpbmQodGhpcykgfVxuICAgICAgICAgICAgXTtcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMucHVzaCguLi5zaGFyZUJ1dHRvbnMpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHNob3dXb3JrZmxvd0F0dGFjaCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKCdfX3Nob3dXb3JrZmxvd0F0dGFjaCcpO1xuICAgICAgICBpZiAoc2hvd1dvcmtmbG93QXR0YWNoID09ICd0cnVlJykge1xuICAgICAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cy5wdXNoKFxuICAgICAgICAgICAgICAgIHsgbGFiZWw6ICdEYW5oIHPDoWNoIGPDtG5nIHZp4buHYycsIGljb246ICdwaSBwaS1saXN0JywgY29tbWFuZDogdGhpcy5zaG93QXR0YWNoZWRUYXNrLmJpbmQodGhpcykgfSxcbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uQ29udGV4dHMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5fc2hvd0NvbnRleHRNZW51KGV2dCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyBjw7MgaMOgbmggxJHhu5luZyBraOG6oyBk4bulbmcnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgZ2V0TWVudUJ1dHRvbkF1dGhvcml6ZWQobWVudUJ1dHRvbnM6IFRuTWVudUl0ZW1bXSkge1xuICAgICAgICBjb25zdCBhdXRob3JpemVkQnV0dG9uczogVG5NZW51SXRlbVtdID0gW107XG4gICAgICAgIGNvbnN0IHNlcnZpY2VDb2RlQnlCYXNlID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICE9IG51bGwgPyB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUgOiAnJztcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1lbnVCdXR0b25zKSB7XG4gICAgICAgICAgICBpZiAoIWl0ZW0uYXV0aG9yaXphdGlvblBlcm1pc3Npb24pIHtcbiAgICAgICAgICAgICAgICBhdXRob3JpemVkQnV0dG9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvZGUgPSBpdGVtLmF1dGhvcml6YXRpb25TZXJ2aWNlQ29kZSA/IGl0ZW0uYXV0aG9yaXphdGlvblNlcnZpY2VDb2RlIDogc2VydmljZUNvZGVCeUJhc2U7XG4gICAgICAgICAgICBwcm9taXNlcy5wdXNoKFxuICAgICAgICAgICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZChzZXJ2aWNlQ29kZSwgaXRlbS5hdXRob3JpemF0aW9uUGVybWlzc2lvbiwgdHJ1ZSkudGhlbihhdXRob3JpemVkID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml6ZWQgIT09IHRydWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBhdXRob3JpemVkQnV0dG9ucy5wdXNoKGl0ZW0pO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcbiAgICAgICAgcmV0dXJuIGF1dGhvcml6ZWRCdXR0b25zO1xuICAgIH1cblxuICAgIGhhbmRsZUNoZWNrQWxsX0dyb3VwID0gKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5jaGVja2VkQWxsID09PSB0cnVlKSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5fcmF3RGF0YVNvdXJjZV07XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgPSBbXTtcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZEFsbCA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRMYXN0SXRlbVNlbGVjdGVkKCk7XG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcbiAgICAgICAgICAgIGl0ZW0uX2NoZWNrZWQgPSB0aGlzLmNoZWNrZWRBbGw7XG4gICAgICAgICAgICB0aGlzLnJvd0dyb3VwQ2hlY2tlZFtpdGVtW3RoaXMuX2dyb3VwRmllbGRdXSA9IHRoaXMuY2hlY2tlZEFsbDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25DaGVja0FsbC5lbWl0KHRoaXMuY2hlY2tlZEFsbCk7XG4gICAgfTtcblxuICAgIGhhbmRsZUNoZWNrUm93R3JvdXAgPSAocm93RGF0YSkgPT4ge1xuICAgICAgICBjb25zdCBncm91cENoZWNrZWQgPSB0aGlzLnJvd0dyb3VwQ2hlY2tlZFtyb3dEYXRhW3RoaXMuX2dyb3VwRmllbGRdXSA/IHRydWUgOiBmYWxzZTtcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV1bdGhpcy5fZ3JvdXBGaWVsZF0gPT0gcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV0uX2NoZWNrZWQgPSBncm91cENoZWNrZWQ7XG4gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZm91bmQpIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gW107XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV0uX2NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLl9yYXdEYXRhU291cmNlW2ldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNldExhc3RJdGVtU2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2VkQWxsKCk7XG4gICAgfTtcblxuICAgIGhhbmRsZUNoZWNrUm93RGF0YV9Hcm91cCA9IChyb3dEYXRhLCB0ckVsZW1lbnQgPSBudWxsLCBmaXJlRXZlbnQgPSB0cnVlKSA9PiB7XG4gICAgICAgIGlmICghcm93RGF0YS5fY2hlY2tlZCkge1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW0gPSBudWxsO1xuICAgICAgICAgICAgdGhpcy5yb3dHcm91cENoZWNrZWRbcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXV0gPSBmYWxzZTtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmZpbmRJbmRleChwID0+IHAuaWQgPT0gcm93RGF0YS5pZCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgbGV0IGNoZWNrR3JvdXAgPSB0cnVlO1xuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnB1c2gocm93RGF0YSk7XG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbSA9IHJvd0RhdGE7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX3Jhd0RhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3Jhd0RhdGFTb3VyY2VbaV0uX2NoZWNrZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV1bdGhpcy5fZ3JvdXBGaWVsZF0gPT0gcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY2hlY2tHcm91cCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5yb3dHcm91cENoZWNrZWRbcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXV0gPSBjaGVja0dyb3VwO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuc2V0TGFzdEl0ZW1TZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrZWRBbGwoKTtcbiAgICAgICAgaWYgKGZpcmVFdmVudCkge1xuICAgICAgICAgICAgaWYgKCF0ckVsZW1lbnQpIHRyRWxlbWVudCA9IHRoaXMuZ2V0VHJCeVJvd0RhdGEocm93RGF0YSk7XG4gICAgICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0KHRyRWxlbWVudCwgcm93RGF0YSk7XG4gICAgICAgIH1cbiAgICB9O1xuXG4gICAgaGFuZGxlQ2hlY2tBbGwgPSAoKSA9PiB7XG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWRBbGwgPT09IHRydWUpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLl9yYXdEYXRhU291cmNlXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFtdO1xuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc2V0TGFzdEl0ZW1TZWxlY3RlZCgpO1xuICAgICAgICB0aGlzLl9yYXdEYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICAgICAgICBpdGVtLl9jaGVja2VkID0gdGhpcy5jaGVja2VkQWxsID09PSB0cnVlO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5vbkNoZWNrQWxsLmVtaXQodGhpcy5jaGVja2VkQWxsKTtcbiAgICB9O1xuXG4gICAgaGFuZGxlQ2hlY2tSb3dEYXRhID0gKHJvd0RhdGEsIHRyRWxlbWVudCA9IG51bGwsIGZpcmVFdmVudCA9IHRydWUpID0+IHtcbiAgICAgICAgY29uc3QgaW5kZXhIYXNSb3dTcGFuID0gdGhpcy5fY29tbW9uU2VydmljZS5maW5kTGFzdEluZGV4KHRoaXMubW9kZWwuZGF0YVNvdXJjZSwgKHgsIGkpID0+IE9iamVjdC52YWx1ZXMoeC5yb3dTcGFuKS5sZW5ndGggPiAwICYmIGkgPD0gcm93RGF0YS5faW5kZXhJbkRhdGFTb3VyY2UpO1xuICAgICAgICBpZiAoIXJvd0RhdGEuX2NoZWNrZWQpIHtcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtID0gbnVsbDtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4SGFzUm93U3BhblVuQ2hlY2tlZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZmluZExhc3RJbmRleCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMsICh4LCBpKSA9PiBPYmplY3QudmFsdWVzKHgucm93U3BhbikubGVuZ3RoID4gMCAmJiBpIDw9IHJvd0RhdGEuX2luZGV4SW5EYXRhU291cmNlKTtcbiAgICAgICAgICAgIGlmIChpbmRleEhhc1Jvd1NwYW5VbkNoZWNrZWQgPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd1NwYW4gPSBPYmplY3QudmFsdWVzKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc1tpbmRleEhhc1Jvd1NwYW5VbkNoZWNrZWRdLnJvd1NwYW4pO1xuICAgICAgICAgICAgICAgIGlmIChyb3dTcGFuLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4Um93U3BhbjogYW55ID0gcm93U3Bhbi5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKGFjY3VtdWxhdG9yID4gZWxlbWVudCkgPyBhY2N1bXVsYXRvciA6IGVsZW1lbnQ7XG4gICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IGluZGV4SGFzUm93U3BhbjsgaSA8IG1heFJvd1NwYW4gKyBpbmRleEhhc1Jvd1NwYW47IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZGF0YVNvdXJjZVtpXS5fY2hlY2tlZCA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnNwbGljZShpbmRleEhhc1Jvd1NwYW5VbkNoZWNrZWQsIG1heFJvd1NwYW4pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICghcm93RGF0YS5oaWRkZW5DaGVja0JveCkge1xuICAgICAgICAgICAgICAgIGlmIChpbmRleEhhc1Jvd1NwYW4gPiAtMSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByb3dTcGFuID0gT2JqZWN0LnZhbHVlcyh0aGlzLm1vZGVsLmRhdGFTb3VyY2VbaW5kZXhIYXNSb3dTcGFuXS5yb3dTcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJvd1NwYW4ubGVuZ3RoID4gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWF4Um93U3BhbjogYW55ID0gcm93U3Bhbi5yZWR1Y2UoZnVuY3Rpb24gKGFjY3VtdWxhdG9yLCBlbGVtZW50KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChhY2N1bXVsYXRvciA+IGVsZW1lbnQpID8gYWNjdW11bGF0b3IgOiBlbGVtZW50O1xuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gaW5kZXhIYXNSb3dTcGFuOyBpIDwgbWF4Um93U3BhbiArIGluZGV4SGFzUm93U3BhbjsgaSsrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5kYXRhU291cmNlW2ldLl9jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5jb25jYXQodGhpcy5tb2RlbC5kYXRhU291cmNlLnNsaWNlKGluZGV4SGFzUm93U3BhbiwgaW5kZXhIYXNSb3dTcGFuICsgbWF4Um93U3BhbikpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW0gPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2Uuc2xpY2UoaW5kZXhIYXNSb3dTcGFuLCBpbmRleEhhc1Jvd1NwYW4gKyBtYXhSb3dTcGFuKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghcm93RGF0YS5oaWRkZW5DaGVja0JveCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnB1c2gocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbSA9IHJvd0RhdGE7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldExhc3RJdGVtU2VsZWN0ZWQoKTtcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2VkQWxsKCk7XG4gICAgICAgIGlmICghdHJFbGVtZW50KSB7XG4gICAgICAgICAgICB0ckVsZW1lbnQgPSB0aGlzLmdldFRyQnlSb3dEYXRhKHJvd0RhdGEpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChmaXJlRXZlbnQpIHtcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSb3dTZWxlY3QodHJFbGVtZW50LCByb3dEYXRhKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBwcml2YXRlIHVwZGF0ZUNoZWNrZWRBbGwoKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID09IHRoaXMuX3Jhd0RhdGFTb3VyY2UubGVuZ3RoICYmIHRoaXMuX3Jhd0RhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNlbGVjdFJvdyhkYXRhczogYW55W10gPSBbXSkge1xuICAgICAgICBpZiAoIWRhdGFzIHx8IGRhdGFzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCkge1xuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBkYXRhc1tkYXRhcy5sZW5ndGggLSAxXTtcbiAgICAgICAgICAgIGxhc3RJdGVtLl9jaGVja2VkID0gdHJ1ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGFfR3JvdXAobGFzdEl0ZW0sIHRoaXMuZ2V0VHJCeVJvd0RhdGEobGFzdEl0ZW0pLCB0cnVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhKGxhc3RJdGVtLCB0aGlzLmdldFRyQnlSb3dEYXRhKGxhc3RJdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBkYXRhcy5mb3JFYWNoKGRhdGEgPT4ge1xuICAgICAgICAgICAgICAgIGRhdGEuX2NoZWNrZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhX0dyb3VwKGRhdGEsIHRoaXMuZ2V0VHJCeVJvd0RhdGEoZGF0YSksIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGEoZGF0YSwgdGhpcy5nZXRUckJ5Um93RGF0YShkYXRhKSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25Tb3J0KGV2ZW50OiBhbnksIF90YWJsZTogVGFibGUpIHtcbiAgICAgICAgdGhpcy5zb3J0V2l0aEFwaShldmVudCwgX3RhYmxlKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNvcnRXaXRoQXBpKGV2ZW50OiBhbnksIF90YWJsZTogVGFibGUpIHtcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmxvYWRpbmcpIHtcbiAgICAgICAgICAgIF90YWJsZS5yZXNldCgpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc29ydEhpc3RvcnkubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSBldmVudC5maWVsZDtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RGlyID0gMTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc29ydEhpc3RvcnlbMF0uZmllbGQgPT0gZXZlbnQuZmllbGQpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSBldmVudC5maWVsZDtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fc29ydERpciA9PT0gMSkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RGlyID0gLTE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuX3NvcnREaXIgPT09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnREaXIgPSAwO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydERpciA9IDE7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQuZmllbGQgIT0gdGhpcy5zb3J0SGlzdG9yeVswXS5maWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRGaWVsZCA9IGV2ZW50LmZpZWxkO1xuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnREaXIgPSAxO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgICAgICB0aGlzLnNvcnRIaXN0b3J5LnVuc2hpZnQoeyBmaWVsZDogdGhpcy5fc29ydEZpZWxkLCBkaXI6IHRoaXMuX3NvcnREaXIgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgcHJvY2Vzc0RhdGFTb3VyY2UoZGF0YVNvdXJjZSkge1xuICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xuICAgICAgICB0aGlzLnJvd0dyb3VwQ2hlY2tlZCA9IHt9O1xuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIHJldHVybjtcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB7XG4gICAgICAgICAgICBpZiAoc291cmNlLmlkID09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5pZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3MgPSB7fTtcbiAgICAgICAgICAgIGlmICghc291cmNlLmNvbFNwYW4pIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UuY29sU3BhbiA9IHt9O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFzb3VyY2Uucm93U3Bhbikge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5yb3dTcGFuID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoIXNvdXJjZS5oaWRkZW4pIHtcbiAgICAgICAgICAgICAgICBzb3VyY2UuaGlkZGVuID0ge307XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAoc291cmNlLmlzTmV3KSB7XG4gICAgICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3MuaXNOZXcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZS5pc0V4cGlyaW5nKSB7XG4gICAgICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3MuZXhwaXJpbmcgPSB0cnVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNvdXJjZS5jbGFzcykge1xuICAgICAgICAgICAgICAgIHNvdXJjZS5jbGFzcy5zcGxpdCgnICcpLmZpbHRlcihwID0+IHApLmZvckVhY2goY2xzID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3NbY2xzXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzb3VyY2UuYm9va21hcmtTdHlsZSA9IHRoaXMuZ2V0Qm9va21hcmtDb2xvcihzb3VyY2UsIHRoaXMuc2V0dGluZy5jb2xzKTtcblxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bUxlbmd0aCAmJiB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtTGVuZ3RoLmZvckVhY2goX2NvbCA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgY29sID0gPENvbHVtblNjaGVtYUJhc2U+X2NvbDtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHNvdXJjZVtjb2wuZmllbGRdO1xuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5zdWJzdHJpbmcgJiYgdmFsdWUubGVuZ3RoID4gY29sLm1heExlbmd0aERpc3BsYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Y6IHNob3J0IHZhbHVlXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVtgJHtjb2wuZmllbGR9X19zdmBdID0gYCR7dmFsdWUuc3Vic3RyaW5nKDAsIGNvbC5tYXhMZW5ndGhEaXNwbGF5KX1gO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtV29yZCAmJiB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtV29yZC5mb3JFYWNoKF9jb2wgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IDxDb2x1bW5TY2hlbWFCYXNlPl9jb2w7XG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWVTaG9ydFdvcmQgPSB0aGlzLnN1YldvcmQoc291cmNlW2NvbC5maWVsZF0sIGNvbC5tYXhXb3JkRGlzcGxheSk7XG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlU2hvcnRXb3JkKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHN2OiBzaG9ydCB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VbYCR7Y29sLmZpZWxkfV9fc3ZgXSA9IGAke3ZhbHVlU2hvcnRXb3JkfWA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnVwZGF0ZVJvd0dyb3VwTWV0YURhdGEoZGF0YVNvdXJjZSk7XG4gICAgfVxuXG4gICAgcHVibGljIHN1YldvcmQodmFsdWU6IHN0cmluZywgd29yZENvdW50OiBudW1iZXIpIHtcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUudHJpbSkgcmV0dXJuIHZhbHVlO1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgICAgICAgbGV0IGluZGV4ID0gLTEsIGJlZm9yZUNoYXIgPSAnYSc7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmICh2YWx1ZVtpXSA9PSAnJyAmJiBiZWZvcmVDaGFyICE9ICcnKSB7XG4gICAgICAgICAgICAgICAgd29yZENvdW50LS07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBiZWZvcmVDaGFyID0gdmFsdWVbaV07XG4gICAgICAgICAgICBpZiAod29yZENvdW50ID09IDApIHtcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGluZGV4ID4gLTEpIHJldHVybiB2YWx1ZS5zdWJzdHJpbmcoMCwgaW5kZXgpO1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICB0b2dnbGVTaG93RnVsbChyb3dEYXRhLCBmaWVsZCkge1xuICAgICAgICByb3dEYXRhW2ZpZWxkICsgJ19fc2hvd0Z1bGwnXSA9ICFyb3dEYXRhW2ZpZWxkICsgJ19fc2hvd0Z1bGwnXTtcbiAgICB9XG5cbiAgICBwdWJsaWMgbWVyZ2VDbGFzc09iaihzb3VyY2UsIG90aGVyT2JqID0ge30pIHtcbiAgICAgICAgY29uc3Qgb2JqID0gc291cmNlLm9ialN0eWxlQ2xhc3M7XG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG90aGVyT2JqKSB7XG4gICAgICAgICAgICBvYmpba2V5XSA9IG90aGVyT2JqW2tleV07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG9iajtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGV4dFJvd0dyb3VwKHJvd0RhdGEpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHJvd0RhdGEsXG4gICAgICAgICAgICByb3dHcm91cE1ldGFkYXRhOiB0aGlzLnJvd0dyb3VwTWV0YWRhdGEsXG4gICAgICAgICAgICBncm91cENvbDogdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLFxuICAgICAgICAgICAgZ3JvdXBGaWVsZDogdGhpcy5fZ3JvdXBGaWVsZCxcbiAgICAgICAgICAgIGdyb3VwSW5DbGllbnQ6IHRoaXMuX2dyb3VwSW5DbGllbnRcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29udGV4dFJvd0dyb3VwUm9vdChyb3dEYXRhLCBleHBhbmRlZCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgLi4udGhpcy5nZXRDb250ZXh0Um93R3JvdXAocm93RGF0YSksXG4gICAgICAgICAgICBleHBhbmRlZCxcbiAgICAgICAgICAgIGhhbmRsZUNoZWNrUm93R3JvdXA6IHRoaXMuaGFuZGxlQ2hlY2tSb3dHcm91cCxcbiAgICAgICAgICAgIGdldENvbFNwYW5Hcm91cDogdGhpcy5nZXRDb2xTcGFuR3JvdXAsXG4gICAgICAgICAgICB0YWJsZTogdGhpcy50YWJsZSxcbiAgICAgICAgICAgIGNsYXNzUm93R3JvdXA6IHRoaXMuX2NsYXNzUm93R3JvdXAsXG4gICAgICAgICAgICBpY29uVG9nZ2xlUm93R3JvdXA6IHRoaXMuaWNvblRvZ2dsZVJvd0dyb3VwXG4gICAgICAgIH07XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbnRleHRDZWxsKHJvd0RhdGEsIHJvd0luZGV4LCBjb2wsIGV4cGFuZGVkLCAkdGhpcykge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgY3J1ZExpc3Q6ICR0aGlzLFxuICAgICAgICAgICAgcm93RGF0YSxcbiAgICAgICAgICAgIHJvd0luZGV4LFxuICAgICAgICAgICAgY29sLFxuICAgICAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgICAgIGV4cGFuZGVkLFxuICAgICAgICAgICAgaWNvblRvZ2dsZVJvd0RhdGE6IHRoaXMuaWNvblRvZ2dsZVJvd0RhdGFcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q2xhc3NSb3dEYXRhT2ZHcm91cChyb3dEYXRhKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgaWYgKHRoaXMuY29udGFpblNlbGVjdEl0ZW0ocm93RGF0YSkpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIHVpLXN0YXRlLWhpZ2hsaWdodCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuX2dyb3VwRmllbGQgIT09ICcnKSB7XG4gICAgICAgICAgICByZXN1bHQgKz0gJyBpcy1jaGlsZC1ncm91cCc7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0RhdGEuY2xhc3MpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyByb3dEYXRhLmNsYXNzO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb250YWluU2VsZWN0SXRlbShpdGVtKSB7XG4gICAgICAgIGlmICghaXRlbSkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuZmluZEluZGV4KHggPT4geCAmJiB4W3RoaXMuc2V0dGluZy5lbnRpdHlLZXldID09PSBpdGVtW3RoaXMuc2V0dGluZy5lbnRpdHlLZXldKSA+IC0xO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2Nyb2xsVG9wKCkge1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbGJhcikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsYmFyLnNjcm9sbFRvVG9wKDAsIDApO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBzY3JvbGxUb0JvdHRvbSgpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxiYXIpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbGJhci5zY3JvbGxUb0JvdHRvbSgwLCAwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uTmV4dChldmVudCkge1xuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlICsgMTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgICAgIHRoaXMuc2Nyb2xsVG9wKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uUHJldihldmVudCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPiAxKSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25PbGRlc3QoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSBNYXRoLmNlaWwodGhpcy5tb2RlbC50b3RhbCAvIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSk7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvcCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkxhdGVzdChldmVudCkge1xuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IDE7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB0aGlzLnNjcm9sbFRvcCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBpc0VtcHR5VG9vbGJhcihlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xuICAgICAgICBjb25zdCBub2RlcyA9IGVsZW1lbnQuY2hpbGROb2RlcztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLml0ZW0oaSk7XG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gOCAmJiBub2Rlcy5pdGVtKGkpLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggIT09IDApIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIGlzRW1wdHlGdW5jdGlvbkJ1dHRvbnMoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcbiAgICAgICAgY29uc3Qgbm9kZXMgPSBlbGVtZW50LmNoaWxkTm9kZXM7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5pdGVtKGkpO1xuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IDggJiYgbm9kZXMuaXRlbShpKS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoICE9PSAwKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1YmxpYyBmaW5kVGVtcGxhdGUodGVtcGxhdGVOYW1lKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9jb21tb25TZXJ2aWNlLmZpbmRUZW1wbGF0ZUZyb21MaXN0KHRoaXMuY2hpbGRyZW4sIHRlbXBsYXRlTmFtZSk7XG4gICAgfVxuXG4gICAgcHVibGljIGhhc1RlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlW3RlbXBsYXRlTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdID0gdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdICE9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIGdldENvbXBvbmVudEJ5VHlwZShjb250cm9sVHlwZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChjb250cm9sVHlwZSA9PSAndHJhbmdUaGFpVjUnKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVRyYW5nVGhhaVY1O1xuICAgICAgICB9XG4gICAgICAgIGlmIChjb250cm9sVHlwZSA9PSAnX192aWV3SGlzdG9yeScpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlQ29sVmlld0hpc3Rvcnk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9jb21tb25TZXJ2aWNlLmZpbmRUZW1wbGF0ZUZyb21MaXN0KHRoaXMuY2hpbGRyZW4sIGNvbnRyb2xUeXBlKTtcbiAgICAgICAgaWYgKCFpdGVtICYmIHRoaXMudGVtcGxhdGVzKSB7XG4gICAgICAgICAgICBpdGVtID0gdGhpcy5fY29tbW9uU2VydmljZS5maW5kVGVtcGxhdGVGcm9tTGlzdCh0aGlzLnRlbXBsYXRlcywgY29udHJvbFR5cGUpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGl0ZW07XG4gICAgfVxuXG4gICAgcHVibGljIGdldFRlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlW3RlbXBsYXRlTmFtZV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdID0gdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVOYW1lKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdO1xuICAgIH1cblxuICAgIHB1YmxpYyB1cGRhdGVSb3dHcm91cE1ldGFEYXRhKGRhdGFTb3VyY2U6IGFueSkge1xuICAgICAgICB0aGlzLnJvd0dyb3VwTWV0YWRhdGEgPSB7fTtcbiAgICAgICAgbGV0IGluZGV4R3JvdXAgPSAwO1xuICAgICAgICBjb25zdCBncm91cEZpZWxkTmFtZTogc3RyaW5nID0gdGhpcy5fZ3JvdXBGaWVsZDtcbiAgICAgICAgLy8gVOG6oW8gYuG7q2EgMSBncm91cCB2YWx1ZSBiZWZvcmVcbiAgICAgICAgbGV0IHByZXZpb3VzR3JvdXBWYWx1ZSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xuICAgICAgICBpZiAoZ3JvdXBGaWVsZE5hbWUgJiYgZ3JvdXBGaWVsZE5hbWUgIT0gJycpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSBkYXRhU291cmNlW2ldO1xuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwVmFsdWUgPSByb3dEYXRhW2dyb3VwRmllbGROYW1lXTtcbiAgICAgICAgICAgICAgICBpZiAoZ3JvdXBWYWx1ZSAhPT0gcHJldmlvdXNHcm91cFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93R3JvdXBNZXRhZGF0YVtncm91cFZhbHVlXSA9IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLCBpbmRleEdyb3VwOiBpbmRleEdyb3VwKyssIHNpemU6IDEsIGl0ZW1Sb290OiByb3dEYXRhLCBpdGVtczogW3Jvd0RhdGFdXG4gICAgICAgICAgICAgICAgICAgIH07XG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzW2dyb3VwVmFsdWVdID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNHcm91cFZhbHVlID0gZ3JvdXBWYWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IHRoaXMucm93R3JvdXBNZXRhZGF0YVtncm91cFZhbHVlXTtcbiAgICAgICAgICAgICAgICAgICAgaXRlbUdyb3VwLnNpemUrKztcbiAgICAgICAgICAgICAgICAgICAgaXRlbUdyb3VwLml0ZW1zLnB1c2gocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJvd0RhdGFbdGhpcy5maWVsZE9yZGVyXSA9IHRoaXMucm93R3JvdXBNZXRhZGF0YVtncm91cFZhbHVlXS5zaXplO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dTZXR0aW5ncygpIHtcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlQ29sb3JTZXR0aW5ncyhkYXRhKSB7XG4gICAgICAgIGlmIChkYXRhLmNvbG9yRmlsdGVyVGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGNsb25lQXJyID0gZGF0YS5jb2xvckZpbHRlclRhYmxlLnNsaWNlKCk7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gY2xvbmVBcnIubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgICAgICBpZiAoY2xvbmVBcnJbaV0uZmlsdGVyVmFsdWUgPT0gJycgfHwgY2xvbmVBcnJbaV0uZmlsdGVyVmFsdWUgPT0gbnVsbCB8fCBjbG9uZUFycltpXS5maWx0ZXJWYWx1ZSA9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5jb2xvckZpbHRlclRhYmxlLnNwbGljZShpLCAxKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZCA9IGRhdGEuY29sb3JGaWx0ZXJGaWVsZDtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGUgPSBkYXRhLmNvbG9yRmlsdGVyVGFibGU7XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1Jvd0NvbG9yID0gZmFsc2U7XG4gICAgICAgIHRoaXMuY2FjaGVDb2xvclNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5zZXRDb2xvclNldHRpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25TYXZlU2V0dGluZ3MoZXZlbnQpIHtcbiAgICAgICAgaWYgKGV2ZW50KSB7XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzID0gZXZlbnQuZGV0YWlscztcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCA9IGV2ZW50LnNvcnRGaWVsZDtcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPSBldmVudC5zb3J0RGlyO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydERpciA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkID0gZXZlbnQuZ3JvdXBGaWVsZDtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwSW5DbGllbnQgPSBldmVudC5ncm91cEluQ2xpZW50O1xuXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbiA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbmQocCA9PiBwLmZpZWxkID09IGV2ZW50Lmdyb3VwRmllbGQpO1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnZpc2libGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZvcmNlR2V0RGF0YSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uID0gbnVsbDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMuc2F2ZUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kQ29sdW1ucyh0aGlzLnNldHRpbmcuY29scyk7XG4gICAgICAgICAgICB0aGlzLmZvcm1hdENvbHVtbnModGhpcy5zZXR0aW5nLmNvbHMpO1xuICAgICAgICAgICAgdGhpcy5hcHBseUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5ncyA9IGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBvbkRlbGV0ZVNldHRpbmdzKCkge1xuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3MgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcgPSBuZXcgQ29sdW1uU2V0dGluZygpO1xuICAgICAgICB0aGlzLmRlbGV0ZUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5leHRlbmRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcbiAgICAgICAgdGhpcy5hcHBseUNvbHVtblNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIGFwcGx5Q29sdW1uU2V0dGluZygpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpIHtcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbiA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbmQocCA9PiBwLmZpZWxkID09IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpO1xuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtbikge1xuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5mb3JjZUdldERhdGEgPSB0cnVlO1xuXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ3JvdXBGaWVsZCA9IHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4uZmllbGQ7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ncm91cEZpZWxkID0gdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZpZWxkO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuX2dyb3VwRmllbGQgPSBudWxsO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5fZ3JvdXBJbkNsaWVudCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwSW5DbGllbnQ7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICB0aGlzLl9ncm91cEZpZWxkID0gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX3NvcnRGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZDtcbiAgICAgICAgdGhpcy5fc29ydERpciA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXI7XG5cbiAgICAgICAgaWYgKHRoaXMubW9kZWwgJiYgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nICYmIHRoaXMuX3NvcnRGaWVsZCkge1xuICAgICAgICAgICAgdGhpcy5zb3J0SGlzdG9yeSA9IFt7IGZpZWxkOiB0aGlzLl9zb3J0RmllbGQsIGRpcjogdGhpcy5fc29ydERpciA/IHRoaXMuX3NvcnREaXIgOiAwIH1dO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5zb3J0SGlzdG9yeSA9IFtdO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRDZWxsQ2xhc3NIZWFkZXIoY29sKSB7XG4gICAgICAgIGxldCByZXN1bHQgPSAnJztcbiAgICAgICAgaWYgKGNvbC5jZWxsQ2xhc3MpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSBjb2wuY2VsbENsYXNzO1xuICAgICAgICB9XG4gICAgICAgIGlmICghY29sLnNvcnQpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIE5vU29ydENvbHVtbic7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGNvbC5maWVsZCA9PSB0aGlzLl9zb3J0RmllbGQpIHtcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIHAtc29ydGFibGUtY29sdW1uJztcbiAgICAgICAgICAgIGlmICh0aGlzLl9zb3J0RGlyICE9IDApIHtcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyBwLWhpZ2hsaWdodCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Q29sdW1uU3R5bGUoY29sOiBhbnksIGZvckhlYWRlciA9IGZhbHNlKSB7XG4gICAgICAgIGNvbnN0IHN0eWxlOiBhbnkgPSB7fTtcbiAgICAgICAgaWYgKGNvbC5maWVsZCA9PSAnbWV0YWRhdGFTdGF0dXMnKSB7XG4gICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2NlbnRlcic7XG4gICAgICAgICAgICByZXR1cm4gc3R5bGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZm9ySGVhZGVyKSB7XG4gICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2NlbnRlcic7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoY29sLnRleHRBbGlnbiA9PSBUZXh0QWxpZ24uTGVmdCkge1xuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnbGVmdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2wudGV4dEFsaWduID09IFRleHRBbGlnbi5DZW50ZXIpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2NlbnRlcic7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChjb2wudGV4dEFsaWduID09IFRleHRBbGlnbi5SaWdodCkge1xuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAncmlnaHQnO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5hbGlnbkNlbnRlckNvbHVtbihjb2wpKSB7XG4gICAgICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdjZW50ZXInO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5hbGlnblJpZ2h0Q29sdW1uKGNvbCkpIHtcbiAgICAgICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ3JpZ2h0JztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnbGVmdCc7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0eWxlO1xuICAgIH1cblxuXG4gICAgcHVibGljIGdldEJvb2ttYXJrQ29sb3Iocm93RGF0YSwgY29sdW1ucykge1xuICAgICAgICBjb25zdCByOiBhbnkgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQgJiYgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGUpIHtcbiAgICAgICAgICAgIGxldCBjb2w7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgaW4gY29sdW1ucykge1xuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5zW2NdLmZpZWxkID09IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbCA9IGNvbHVtbnNbY107XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGZvckRhdGUgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBmb3JOdW1iZXIgPSBmYWxzZTtcbiAgICAgICAgICAgIGxldCBmb3JCb29sID0gZmFsc2U7XG4gICAgICAgICAgICBsZXQgdmFsdWUgPSByb3dEYXRhW3RoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkXTtcbiAgICAgICAgICAgIGlmIChjb2wpIHtcbiAgICAgICAgICAgICAgICBpZiAoY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRhdGUgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRhdGV0aW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jb252ZXJ0VG9EYXRlKHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgZm9yRGF0ZSA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5pbnQgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRlY2ltYWxcbiAgICAgICAgICAgICAgICAgICAgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmludFdpdGhvdXRNYXNrIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5jdXJyZW5jeVxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGZvck51bWJlciA9IHRydWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5ib29sZWFuKSB7XG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gKC90cnVlL2kpLnRlc3QodmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBmb3JCb29sID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9jb2xvckZpbHRlclRhYmxlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuX2NvbG9yRmlsdGVyVGFibGVbaV07XG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVR5cGUgPSBpdGVtWzBdO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gaXRlbVs1XTtcbiAgICAgICAgICAgICAgICBsZXQgZmlsdGVyVmFsdWU6IGFueSA9IGl0ZW1bMV07XG4gICAgICAgICAgICAgICAgaWYgKGZvckRhdGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBpdGVtWzJdO1xuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyVmFsdWUgPT0gbnVsbCkgY29udGludWU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvck51bWJlcikge1xuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IGl0ZW1bM107XG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJWYWx1ZSkpIGNvbnRpbnVlO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3JCb29sKSBmaWx0ZXJWYWx1ZSA9IGl0ZW1bNF07XG5cbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyZVR5cGUgPT0gJ3JlZ2V4Jykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSArICcnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGZpbHRlclZhbHVlLCAnaScpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1hdGNoKHJlKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wYXJlVHlwZSA9PSAnZXF1YWxzJykge1xuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPT0gZmlsdGVyVmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ25vdEVxdWFscycpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IGZpbHRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdjb250YWlucycpIHtcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSArICcnO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoZmlsdGVyVmFsdWUsICdpJyk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaChyZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ25vdENvbnRhaW5zJykge1xuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyc7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlID0gbmV3IFJlZ0V4cChmaWx0ZXJWYWx1ZSwgJ2knKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaChyZSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ2dyZWF0ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IGZpbHRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdsaXR0ZXInKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IGZpbHRlclZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29udmVydFRvRGF0ZSh2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgPT09ICd7bm93fScpIHJldHVybiBEYXRlKCk7XG5cbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ3snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnZH0nKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCdkfScsICcnKSk7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHZhbHVlKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ3snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnaH0nKSkge1xuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCdofScsICcnKSk7XG4gICAgICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xuICAgICAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpICsgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgneycpICYmIHZhbHVlLmVuZHNXaXRoKCdtfScpKSB7XG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ219JywgJycpKTtcbiAgICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpICsgdmFsdWUpO1xuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignLycpID4gLTEpIHtcbiAgICAgICAgICAgIGNvbnN0IHBhcnRzID0gdmFsdWUuc3BsaXQoJy8nKTtcbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHBhcnRzWzJdICsgJy0nICsgcGFydHNbMV0gKyAnLScgKyBwYXJ0c1swXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XG4gICAgICAgIGlmICghaXNOYU4oZGF0ZS5nZXREYXRlKCkpKSByZXR1cm4gZGF0ZTtcbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBidWlsZEdyYWRpZW50Q29sb3IoY29sb3IpIHtcbiAgICAgICAgcmV0dXJuIGBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICR7Y29sb3J9IDAlLCAke2NvbG9yfTRkIDM1JSwgJHtjb2xvcn0xYSA2MCUsIHRyYW5zcGFyZW50IDEwMCUpYDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFsaWduQ2VudGVyQ29sdW1uKGNvbCkge1xuICAgICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRhdGV0aW1lIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5kYXRlIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5ib29sZWFuIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5lbnVtO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWxpZ25SaWdodENvbHVtbihjb2wpIHtcbiAgICAgICAgcmV0dXJuIGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5pbnQgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRlY2ltYWwgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmludFdpdGhvdXRNYXNrIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5jdXJyZW5jeTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZ2V0Q29sU3Bhbkdyb3VwID0gKG51bU9mQ29sQ3VzdG9tOiBudW1iZXIgPSAwKSA9PiB7XG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIoeCA9PiB4LnZpc2libGUgPT09IG51bGwgfHwgeC52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgeC52aXNpYmxlID09PSB0cnVlKS5sZW5ndGhcbiAgICAgICAgICAgICsgKHRoaXMuc2V0dGluZy5oaWRkZW5PcmRlckNvbHVtbiA/IDAgOiAxKVxuICAgICAgICAgICAgKyAodGhpcy5zZXR0aW5nLmhpZGRlbkZ1bmN0aW9uQ29sdW1uID8gMCA6IDEpXG4gICAgICAgICAgICAtIG51bU9mQ29sQ3VzdG9tO1xuICAgIH07XG5cbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVLZXlwcmVzc0NvbnRyb2wpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbnRleHQgJiYgdGhpcy5jb250ZXh0LnJvb3QuZGF0YS5saXN0UXVldWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0UXVldWUgPSB0aGlzLmNvbnRleHQucm9vdC5kYXRhLmxpc3RRdWV1ZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGxpc3RRdWV1ZS5pbmRleE9mKHRoaXMpO1xuICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIGxpc3RRdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy50aW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgZGlzYWJsZU11bHRpcGxlRGVsZXRlKCkge1xuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlRGVsZXRlKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlRWRpdChyb3dEYXRhKSB7XG4gICAgICAgIGlmIChyb3dEYXRhLl9fZGlzYWJsZUVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhpZGRlbkVkaXQpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dEYXRhWydtZXRhZGF0YVN0YXR1cyddICYmIHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gIT0gJzAnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGRpc2FibGVEZWxldGUocm93RGF0YSkge1xuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVEZWxldGUpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmhpZGRlbkRlbGV0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gJiYgcm93RGF0YVsnbWV0YWRhdGFTdGF0dXMnXSAhPSAnMCcpIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0hpc3Rvcnkocm93RGF0YSkge1xuICAgICAgICB0aGlzLnNldHRpbmcuc2hvd0hpc3RvcnkgPSB0cnVlO1xuICAgICAgICB0aGlzLnNldHRpbmcuaGlzdG9yeSA9IHJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dMaXN0VmVyc2lvbihyb3dEYXRhKSB7XG4gICAgICAgIHRoaXMuc2V0dGluZy52ZXJzaW9uTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnZlcnNpb25Nb2RlbC5pdGVtRGF0YSA9IHJvd0RhdGE7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRXaWR0aEZ1bmN0aW9uKHRhYmxlKSB7XG4gICAgICAgIGlmICh0aGlzLndpZHRoRnVuY3Rpb25Db2x1bW4pIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGxldCB3aWR0aEluUGl4ZWwgPSB0aGlzLl9kZWZhdWx0V2l0aEZ1bmN0aW9uQ29sdW1uO1xuICAgICAgICBjb25zdCB0ZCA9IHRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGRbY2xhc3MqPVwiY29sdW1uLWZ1bmN0aW9uXCJdJyk7XG4gICAgICAgIGlmICh0ZCkge1xuICAgICAgICAgICAgY29uc3QgZW1Ub1BpeGNlbCA9IHRoaXMuZ2V0Rm9udFNpemVJblBpeGVsKHRkKTtcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJyk7XG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGJ1dHRvbnMubGVuZ3RoICogMi40OyAvLyBidXR0b24gd2lkdGg6IDIuNHJlbVxuICAgICAgICAgICAgY29uc3QgdG1wV2lkdGhJblBpeGVsID0gd2lkdGggKiBlbVRvUGl4Y2VsICsgNjsgLy8gNiBsYSB0b25nIHBhZGRpbmcgbGVmdCwgcmlnaHQgY3VhIHRoXG4gICAgICAgICAgICBpZiAod2lkdGhJblBpeGVsIDwgdG1wV2lkdGhJblBpeGVsKSB7XG4gICAgICAgICAgICAgICAgd2lkdGhJblBpeGVsID0gdG1wV2lkdGhJblBpeGVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgdGggPSB0YWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RoW2NsYXNzKj1cInNldHRpbmctY2VsbFwiXScpO1xuICAgICAgICBpZiAodGgpIHtcbiAgICAgICAgICAgIGNvbnN0IGVtVG9QaXhjZWwgPSB0aGlzLmdldEZvbnRTaXplSW5QaXhlbCh0aCk7XG4gICAgICAgICAgICBjb25zdCBidXR0b25zID0gdGguZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpO1xuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBidXR0b25zLmxlbmd0aCAqIDIuNCAvIDAuODU7IC8vIGJ1dHRvbiB3aWR0aDogMi40cmVtLCBmb250LXNpemUgdGggMC44NXJlbVxuICAgICAgICAgICAgY29uc3QgdG1wV2lkdGhJblBpeGVsID0gd2lkdGggKiBlbVRvUGl4Y2VsICsgNjsgLy8gNiBsYSB0b25nIHBhZGRpbmcgbGVmdCwgcmlnaHQgY3VhIHRoXG4gICAgICAgICAgICBpZiAod2lkdGhJblBpeGVsIDwgdG1wV2lkdGhJblBpeGVsKSB7XG4gICAgICAgICAgICAgICAgd2lkdGhJblBpeGVsID0gdG1wV2lkdGhJblBpeGVsO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5fd2lkdGhGdW5jdGlvbkNvbHVtbiA9IGAke3dpZHRoSW5QaXhlbH1weGA7XG4gICAgICAgIHRoaXMud2lkdGhGdW5jdGlvbkNvbHVtbkNoYW5nZS5lbWl0KHRoaXMuX3dpZHRoRnVuY3Rpb25Db2x1bW4pO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0Rm9udFNpemVJblBpeGVsKGVsKSB7XG4gICAgICAgIHJldHVybiBOdW1iZXIoZ2V0Q29tcHV0ZWRTdHlsZShlbCwgJycpLmZvbnRTaXplLm1hdGNoKC8oKFxcZHwuKSspcHgvKVsxXSk7XG4gICAgfVxuXG4gICAgYXN5bmMgcHJvY2Vzc0Jhc2VEYXRhKCkge1xuICAgICAgICBhd2FpdCB0aGlzLnByZVByb2Nlc3NEYXRhKHRoaXMuX3Jhd0RhdGFTb3VyY2UpO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgcHJlUHJvY2Vzc0RhdGEoZGF0YVNvdXJjZSk6IFByb21pc2U8YW55PiB7XG4gICAgICAgIGNvbnN0IGNvbEhhc1BpcGUgPSB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIoeCA9PiB4LnBpcGUpO1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xIYXNQaXBlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgZGF0YVNvdXJjZSkge1xuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKDxQaXBlVHJhbnNmb3JtPmNvbC5waXBlLCBjb2wuYXN5bmNQaXBlLCBpdGVtW2NvbC5maWVsZF0pLnRoZW4ocnMgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpdGVtW2BwaXBlX18ke2NvbC5maWVsZH0gYF0gPSBycztcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgdHJhbnNmb3JtKHBpcGU6IFBpcGVUcmFuc2Zvcm0sIGFzeW5jUGlwZTogYm9vbGVhbiwgdmFsdWUpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgICAgICBpZiAodGhpcy5jYWNoZWRUcmFuc2Zvcm1zW3ZhbHVlXSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkVHJhbnNmb3Jtc1t2YWx1ZV07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoYXN5bmNQaXBlKSB7XG4gICAgICAgICAgICBjb25zdCB2YWwgPSBhd2FpdCBwaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XG4gICAgICAgICAgICB0aGlzLmNhY2hlZFRyYW5zZm9ybXNbdmFsdWVdID0gdmFsO1xuICAgICAgICAgICAgcmV0dXJuIHZhbDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBpcGUudHJhbnNmb3JtKHZhbHVlKTtcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVHJhbnNmb3Jtc1t2YWx1ZV0gPSB2YWw7XG4gICAgICAgICAgICByZXR1cm4gdmFsO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZVJvd09yZGVyZWQoZXZ0KSB7XG4gICAgICAgIHRoaXMub25SZW9yZGVyZWQuZW1pdChldnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBzaG93U2V0dGluZ1Jvd0NvbG9yKCkge1xuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NSb3dDb2xvciA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHJlQnVpbGRGaWx0ZXJDb2x1bW4oY29sczogQ29sdW1uU2NoZW1hQmFzZVtdKSB7XG4gICAgICAgIHRoaXMudGVtcGxhdGVGaWx0ZXIgPSBbXTtcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlckNvbHVtbihjb2xzKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYnVpbGRGaWx0ZXJDb2x1bW4oY29sczogQ29sdW1uU2NoZW1hQmFzZVtdKSB7XG4gICAgICAgIGNvbnN0IHRlbXBsYXRlRmlsdGVyID0gdGhpcy50ZW1wbGF0ZUZpbHRlcjtcbiAgICAgICAgY29scy5mb3JFYWNoKGNvbCA9PiB7XG4gICAgICAgICAgICBpZiAoY29sLmNvbnRyb2xUeXBlID09IENvbnRyb2xUeXBlLmRyb3Bkb3duKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNvbC5iYXNlU2VydmljZSB8fCAoY29sLmRhdGFTb3VyY2UgJiYgY29sLmRhdGFTb3VyY2UubGVuZ3RoID4gMCkpIHtcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IGNvbC5zaW5nbGUgPyBPcGVyYXRvci5lcXVhbCA6IE9wZXJhdG9yLmluLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNBcnJheUZpZWxkOiBjb2wuaXNBcnJheUZpZWxkID8gdHJ1ZSA6IGZhbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kcm9wZG93bltjb2wuZmllbGRdID0gbmV3IERyb3Bkb3duQ29udHJvbFNjaGVtYSh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb2wsXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbzogJ2JvZHknLFxuICAgICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IGBDaOG7jW4gJHtjb2wubGFiZWx9YCxcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE9uSW5pdDogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzU2VydmVyTG9hZDogY29sLmlzU2VydmVyTG9hZFxuICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ2jGsGEgY+G6pXUgaMOsbmggYmFzZVNlcnZpY2UgaG/hurdjIGRhdGFTb3VyY2UgY2hvIGPhu5l0ICR7Y29sLmZpZWxkfTogJHtjb2wubGFiZWx9YCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHN3aXRjaCAoY29sLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5ib29sZWFuOlxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZ2V0RmllbGRGaWx0ZXIoY29sKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogY29sLnNpbmdsZSA/IE9wZXJhdG9yLmVxdWFsIDogT3BlcmF0b3IuaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5pbnQ6XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5pbnRXaXRob3V0TWFzazpcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRlY2ltYWw6XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5jdXJyZW5jeTpcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbC5vcGVyYXRvciA9PT0gT3BlcmF0b3IuZXF1YWwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbHRlcih7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5lcXVhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY0dldFZhbHVlOiAoaXRlbSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbC5tYXggJiYgaXRlbSA+IGNvbC5tYXgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY29sLm1heDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2wubWluICYmIGl0ZW0gPCBjb2wubWluKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNvbC5taW47XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXRlbTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaCguLi50aGlzLmdldFJhbmdlRmlsdGVyKGNvbCkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZGF0ZTpcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGF0ZVJhbmdlRmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZSkgPT4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZSkgPT4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICsgMSwgMCwgMCwgLTEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kYXRldGltZTpcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGF0ZVJhbmdlRmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZSkgPT4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGUpID0+IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCkpLFxuICAgICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5nZXRGaWVsZEZpbHRlcihjb2wpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGRcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGdldERhdGVSYW5nZUZpbHRlcihjb2w6IENvbHVtblNjaGVtYUJhc2UsIHBhcnNlRGF0ZUZyb206IChkYXRlOiBEYXRlKSA9PiBEYXRlLCBwYXJzZURhdGVUbzogKGRhdGU6IERhdGUpID0+IERhdGUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFuZ2VGaWx0ZXIoY29sLFxuICAgICAgICAgICAgaXRlbSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1bMF0gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bMF0pO1xuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZURhdGVGcm9tKGRhdGUpO1xuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIGl0ZW0gPT4ge1xuICAgICAgICAgICAgICAgIGlmIChpdGVtWzFdID09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtWzFdKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VEYXRlVG8oZGF0ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRSYW5nZUZpbHRlcihjb2w6IENvbHVtblNjaGVtYUJhc2UsIGZ1bmNHZXRWYWx1ZUZyb206IChpdGVtKSA9PiBhbnkgPSBudWxsLCBmdW5jR2V0VmFsdWVUbzogKGl0ZW0pID0+IGFueSA9IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIFtcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWwsXG4gICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZCxcbiAgICAgICAgICAgICAgICBzdWJGaWVsZDogMCxcbiAgICAgICAgICAgICAgICBmdW5jR2V0VmFsdWU6IGZ1bmNHZXRWYWx1ZUZyb20gPyBmdW5jR2V0VmFsdWVGcm9tIDogKGl0ZW0pID0+IGl0ZW1bMF0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xuICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmxvd2VyVGhhbkVxdWFsLFxuICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgc3ViRmllbGQ6IDEsXG4gICAgICAgICAgICAgICAgZnVuY0dldFZhbHVlOiBmdW5jR2V0VmFsdWVUbyA/IGZ1bmNHZXRWYWx1ZVRvIDogKGl0ZW0pID0+IGl0ZW1bMV0sXG4gICAgICAgICAgICB9KVxuICAgICAgICBdO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0RmllbGRGaWx0ZXIoY29sOiBDb2x1bW5TY2hlbWFCYXNlKSB7XG4gICAgICAgIHJldHVybiBjb2wuZmllbGRGaWx0ZXIgPz8gY29sLmZpZWxkO1xuICAgIH1cblxuICAgIHB1YmxpYyBnZXRDb250ZXh0Q3VzdG9tRmlsdGVyKCkge1xuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgcHVibGljIHNldEluaXRGaWx0ZXIoZGVmYXVsdEZpbHRlcjogS2V5VmFsdWVUeXBlKSB7XG4gICAgICAgIGlmIChkZWZhdWx0RmlsdGVyKSB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0RmlsdGVyKS5mb3JFYWNoKGtleSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2tleV0gPSBkZWZhdWx0RmlsdGVyW2tleV07XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyX2NvbHVtbiA9IHRoaXMuX2NydWRTZXJ2aWNlLmdldEZpbHRlckZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlRmlsdGVyLCB0aGlzLmdldE1pbmltaXplRGF0YSh0aGlzLmZpbHRlckRhdGEpKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvblNlYXJjaCA9IChub2RlPykgPT4ge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5sb2FkaW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyQm94Rm9jdXMobm9kZSk7XG4gICAgICAgIHRoaXMuZmlsdGVyX2NvbHVtbiA9IHRoaXMuX2NydWRTZXJ2aWNlLmdldEZpbHRlckZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlRmlsdGVyLCB0aGlzLmdldE1pbmltaXplRGF0YSh0aGlzLmZpbHRlckRhdGEpKTtcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSAxO1xuICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICB9O1xuXG4gICAgcHJpdmF0ZSBnZXRNaW5pbWl6ZURhdGEobW9kZWwpIHtcbiAgICAgICAgaWYgKGlzTGl0ZXJhbE9iamVjdChtb2RlbCkpIHtcbiAgICAgICAgICAgIGlmIChtb2RlbC5fZHJvcGRvd252YWx1ZSAhPSBudWxsICYmIG1vZGVsLl9kcm9wZG93bnZhbHVlICE9PSAnJykge1xuICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbFttb2RlbC5fZHJvcGRvd252YWx1ZV07XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1vZGVsKSB7XG4gICAgICAgICAgICAgICAgaWYgKGtleSAhPSAnX3N0YXR1cycgJiYga2V5ICE9ICdfZXJyb3JzJyAmJiBrZXkgIT0gJ19zb3VyY2UnKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRNaW5pbWl6ZURhdGEobW9kZWxba2V5XSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSBkYXRhW2tleV0gPSB2YWx1ZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KG1vZGVsKSkge1xuICAgICAgICAgICAgY29uc3QgYXJyID0gW107XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbW9kZWwpIHtcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmdldE1pbmltaXplRGF0YShpdGVtKSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKG1vZGVsICE9IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBtb2RlbDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyU2VhcmNoKG5vZGUsIGZpZWxkKSB7XG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmxvYWRpbmcpIHJldHVybjtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0gIT0gbnVsbCAmJiB0aGlzLmZpbHRlckRhdGFbZmllbGRdICE9PSAnJykge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2ZpZWxkXSA9IG51bGw7XG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoKG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyTnVtYmVyU2VhcmNoKG5vZGUsIGNvbnRyb2wpIHtcbiAgICAgICAgaWYgKHRoaXMubW9kZWwubG9hZGluZykgcmV0dXJuO1xuICAgICAgICBpZiAoY29udHJvbCkge1xuICAgICAgICAgICAgaWYgKGNvbnRyb2wuY2xlYXIoKSkge1xuICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgY2xlYXIgZGF0YSBiZWNhdXNlIGl0J3MgMiB3YXlzIGJpbmRpbmdcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoKG5vZGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHB1YmxpYyBvbkNsZWFyRGF0ZVNlYXJjaChub2RlLCBjb250cm9sLCBmaWVsZCkge1xuICAgICAgICBpZiAodGhpcy5tb2RlbC5sb2FkaW5nKSByZXR1cm47XG4gICAgICAgIGlmIChjb250cm9sKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbC5jbGVhcigpKSB7XG4gICAgICAgICAgICAgICAgLy8gbmVlZCBjbGVhciBkYXRhIGJlY2F1c2Ugbm90IDIgd2F5cyBiaW5kaW5nXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2ZpZWxkXSA9IFt1bmRlZmluZWQsIHVuZGVmaW5lZF07XG4gICAgICAgICAgICAgICAgdGhpcy5vblNlYXJjaChub2RlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyQm94Rm9jdXMobm9kZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGFuZ2VEYXRlVGltZShldnQsIGZpZWxkKSB7XG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0gPSBldnQudmFsdWU7XG4gICAgICAgIHRoaXMub25TZWFyY2goKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgb25DaGFuZ2VCb29sZWFuKGV2dCwgZmllbGQpIHtcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0ubGVuZ3RoID09IDIpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0uc3BsaWNlKDAsIDEpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25TZWFyY2goKTtcbiAgICB9XG5cbiAgICBzaG93Q2hlY2tCb3hGaWx0ZXJNZW51KGV2dCwgZmllbGQpIHtcbiAgICAgICAgdGhpcy5jdXJyZW50RmllbGRGaWx0ZXIgPSBmaWVsZDtcbiAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cyA9IFsuLi50aGlzLmNoZWNrQm94Q29udGV4dE1lbnVdO1xuICAgICAgICB0aGlzLl9zaG93Q29udGV4dE1lbnUoZXZ0KTtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2hhbmdlRmlsdGVyQm9vbGVhbih2YWx1ZSkge1xuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVt0aGlzLmN1cnJlbnRGaWVsZEZpbHRlcl0gPSBbdmFsdWVdO1xuICAgICAgICAgICAgdGhpcy5jaGVja0JveENvbnRleHRNZW51LmZvckVhY2gobWVudSA9PiBtZW51LnN0eWxlQ2xhc3MgPSBudWxsKTtcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tCb3hDb250ZXh0TWVudVswXS5zdHlsZUNsYXNzID0gJ2FjdGl2ZSc7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQm94Q29udGV4dE1lbnVbMV0uc3R5bGVDbGFzcyA9ICdhY3RpdmUnO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW3RoaXMuY3VycmVudEZpZWxkRmlsdGVyXSA9IG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5vblNlYXJjaCgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBoYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKSB7XG4gICAgICAgIGlmIChub2RlKSB7XG4gICAgICAgICAgICBjb25zdCBhY3RpdmVFbDogYW55ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcblxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaW5TYW1lQm94ID0gdGhpcy5jaGVja0luTm9kZShhY3RpdmVFbCwgbm9kZSk7XG4gICAgICAgICAgICAgICAgaWYgKCFpblNhbWVCb3ggfHwgKGFjdGl2ZUVsICYmIGFjdGl2ZUVsLm5vZGVOYW1lICE9ICdJTlBVVCcpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0ID0gbm9kZS5xdWVyeVNlbGVjdG9yKCdpbnB1dCcpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQpIGlucHV0LnNlbGVjdCgpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChpblNhbWVCb3gpIHtcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlRWwuc2VsZWN0KCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBvblNob3dGaWx0ZXJEcm9wZG93blBhbmVsKGV2ZW50KSB7XG4gICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmNvbXBvbmVudCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZHJvcGRvd24gPSBldmVudC5jb21wb25lbnQuZWwubmF0aXZlRWxlbWVudDtcbiAgICAgICAgY29uc3QgY2VsbEhlYWRlckZpbHRlciA9IGRyb3Bkb3duLmNsb3Nlc3QoJ3RoJyk7XG5cbiAgICAgICAgLy8gdGhlbSBjbGFzcyBmb2N1cy13aXRoaW4gZGUgZHJvcGRvd24gaW5wdXQgbHVjIGZvY3VzIGtob25nIGJpIGRlIGJvaSBjYWMgc3RpY2t5IGNvbHVtblxuICAgICAgICBjZWxsSGVhZGVyRmlsdGVyICYmIGNlbGxIZWFkZXJGaWx0ZXIuY2xhc3NMaXN0LmFkZCgnZm9jdXMtd2l0aGluJyk7XG4gICAgfVxuXG4gICAgb25IaWRlRmlsdGVyRHJvcGRvd25QYW5lbChldmVudCkge1xuICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5jb21wb25lbnQpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGRyb3Bkb3duID0gZXZlbnQuY29tcG9uZW50LmVsLm5hdGl2ZUVsZW1lbnQ7XG4gICAgICAgIGNvbnN0IGNlbGxIZWFkZXJGaWx0ZXIgPSBkcm9wZG93bi5jbG9zZXN0KCd0aCcpO1xuICAgICAgICBjZWxsSGVhZGVyRmlsdGVyICYmIGNlbGxIZWFkZXJGaWx0ZXIuY2xhc3NMaXN0LnJlbW92ZSgnZm9jdXMtd2l0aGluJyk7XG4gICAgfVxuXG4gICAgcHVibGljIGluaXRGaWx0ZXJCb3hGb2N1cyhub2RlKSB7XG4gICAgICAgIGlmIChub2RlICYmIG5vZGUucGFyZW50Tm9kZSkge1xuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZS5vZmZzZXRXaWR0aCA8IDI1MCkge1xuICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZCgnc2hvcnQtZmlsdGVyLWJveCcpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdzaG9ydC1maWx0ZXItYm94Jyk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrSW5Ob2RlKGNoaWxkLCBwYXJlbnQpIHtcbiAgICAgICAgbGV0IHN0YXJ0ID0gY2hpbGQ7XG4gICAgICAgIHdoaWxlIChzdGFydCAmJiBzdGFydC5wYXJlbnROb2RlICE9IHBhcmVudCkge1xuICAgICAgICAgICAgc3RhcnQgPSBzdGFydC5wYXJlbnROb2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN0YXJ0ICE9IG51bGw7XG4gICAgfVxuXG4gICAgcHVibGljIHNhdmVQYWdlU2l6ZSgpIHtcbiAgICAgICAgdGhpcy5zYXZlUGFnZVNldHRpbmcoKTtcbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgaGFuZGxlVGFibGVSZW5kZXJlZCgpIHtcbiAgICAgICAgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZnRlclJlbmRlcmVkKHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodGhpcy50cmVlVGFibGUpIHtcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZnRlclJlbmRlcmVkKHRoaXMudHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB9XG5cbiAgICAgICAgYXdhaXQgdGhpcy5tb2RpZnlCdXR0b25GdW5jdGlvbkluUm93KCk7XG4gICAgICAgIHRoaXMub25SZWxvYWRlZC5lbWl0KHRydWUpO1xuICAgIH1cblxuICAgIHByaXZhdGUgX3Byb2Nlc3NBZnRlclJlbmRlcmVkKHRhYmxlRWxlbWVudDogYW55KSB7XG4gICAgICAgIGlmICghdGhpcy5zdG9wQ2FsY3VsYXRpbmdGdW5jdGlvbkNvbHVtbldpZHRoKSB7XG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZSkgdGhpcy5nZXRXaWR0aEZ1bmN0aW9uKHRoaXMudGFibGUpO1xuXG4gICAgICAgICAgICB0aGlzLnN0b3BDYWxjdWxhdGluZ0Z1bmN0aW9uQ29sdW1uV2lkdGggPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0ICR0aEZpcnN0ID0gdGFibGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkIHRyOmZpcnN0LWNoaWxkIHRoOmZpcnN0LWNoaWxkJyk7XG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9ICR0aEZpcnN0Lm9mZnNldFRvcDtcbiAgICAgICAgY29uc3QgJHRocyA9IHRhYmxlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0aGVhZCB0cjpub3QoOmZpcnN0LWNoaWxkKSB0aCcpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8ICR0aHMubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgICAgICR0aHNbaV0uc3R5bGUudG9wID0gYCR7JHRoc1tpXS5vZmZzZXRUb3AgLSBvZmZzZXRUb3B9cHhgO1xuICAgICAgICB9XG4gICAgICAgIC8vIFNlbGVjdCBs4bqhaSBpdGVtIGN14buRaSBjw7luZyDEkcaw4bujYyBzZWxlY3QgdHLGsOG7m2MgxJHDs1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnJlU2VsZWN0TGFzdEl0ZW0pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3QpIHtcbiAgICAgICAgICAgICAgICBjb25zdCAkdHIgPSB0aGlzLmdldFRyQnlSb3dEYXRhKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtTGFzdCk7XG4gICAgICAgICAgICAgICAgaWYgKCR0cikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhc3QgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3Q7XG4gICAgICAgICAgICAgICAgICAgICR0ci5jbGljaygpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgbW9kaWZ5QnV0dG9uRnVuY3Rpb25JblJvdygpIHtcbiAgICAgICAgZm9yIChsZXQgcm93RGF0YSBvZiB0aGlzLm1vZGVsLmRhdGFTb3VyY2UpIHtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgcm93RGF0YS5kaXNhYmxlRnVuY3Rpb25Sb3cgPSAoYXdhaXQgdGhpcy5nZXRNZW51QnV0dG9uQXV0aG9yaXplZChhd2FpdCB0aGlzLm1lbnVCdXR0b25zKHJvd0RhdGEpID8/IFtdKSkubGVuZ3RoIDwgMSAmJiB0aGlzLnNldHRpbmcuZGlzYWJsZVNoYXJlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oaWRkZW5CdG5GdW5jdGlvbiA9IHRydWU7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHRoaXMuaGlkZGVuQnRuRnVuY3Rpb24gPSB0aGlzLm1vZGVsLmRhdGFTb3VyY2UuZXZlcnkocCA9PiBwLmRpc2FibGVGdW5jdGlvblJvdyk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRUckJ5Um93RGF0YShyb3dEYXRhKSB7XG4gICAgICAgIGlmICh0aGlzLnRyZWVUYWJsZSkge1xuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9yYXdEYXRhU291cmNlLmZpbmRJbmRleChwID0+IHAuaWQgPT0gcm93RGF0YS5pZCk7XG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHRyID0gdGhpcy50cmVlVGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGB0Ym9keSB0cltyb3dJbmRleD1cIiR7aW5kZXh9XCJdYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHRoaXMudGFibGUpIHtcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fcmF3RGF0YVNvdXJjZS5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgICAgICAgICAgICBjb25zdCB0ciA9IHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGB0Ym9keSB0cltyb3dJbmRleD1cIiR7aW5kZXh9XCJdYCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlU2VhcmNoU2NoZW1hKCkge1xuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHMgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4gY2jGsGEgY+G6pXUgaMOsbmggY+G7mXQgY2hvIGRhbmggc8OhY2gnKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmNyZWF0aW5nU2VhcmNoSW5mbyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSBuZXcgU2VhcmNoSW5mbygpO1xuICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYSA9IDxGb3JtQ29udHJvbEJhc2VbXT5bXTtcbiAgICAgICAgc2VhcmNoSW5mby5maWVsZERyb3Bkb3duID0ge307XG4gICAgICAgIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0ID0gW107XG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuc2V0dGluZy5jb2xzKSB7XG4gICAgICAgICAgICBpZiAoY29sLmFsbG93RmlsdGVyICE9IGZhbHNlICYmIGNvbC5yYXdDb2x1bW4gPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGlmIChjb2wuZnVsbFRleHRTZWFyY2gpIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LmluZGV4T2YoY29sLmZpZWxkKSA9PSAtMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5maWVsZFNlYXJjaFRleHQucHVzaChjb2wuZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCA9ICdUw6xtIGtp4bq/bSB0aGVvIGPDoWMgdHLGsOG7nW5nOic7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0ICs9IGAgXCIke2NvbC5sYWJlbCA/IGNvbC5sYWJlbCA6IGNvbC5maWVsZH1cIixgO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBhd2FpdCB0aGlzLnNldHRpbmcuZnVuY3Rpb24uZ2V0U2VhcmNoQ29udHJvbChjb2wuZmllbGQpO1xuICAgICAgICAgICAgICAgIGlmIChjb250cm9sICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaCguLi5jb250cm9sKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2wuYmFzZVNlcnZpY2UgfHwgKGNvbC5kYXRhU291cmNlICYmIGNvbC5kYXRhU291cmNlLmxlbmd0aCA+IDApKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLmZpZWxkRHJvcGRvd25bY29sLmZpZWxkXSA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNvbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBjb2wubXVsdGlwbGUgPyBPcGVyYXRvci5pbiA6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IGNvbC5tZFdpZHRoID8gY29sLm1kV2lkdGggOiAxMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkT25Jbml0OiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5maWVsZERyb3Bkb3duW2NvbC5maWVsZF1cbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09ICdpbnQnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOdW1iZXJSYW5nZUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrVHlwZTogJ2ludCcsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IDZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZGF0YVR5cGUgPT0gJ2RlY2ltYWwnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOdW1iZXJSYW5nZUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrVHlwZTogJ2RlY2ltYWwnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiA2XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09ICdkYXRlJyB8fCBjb2wuZGF0YVR5cGUgPT0gJ2RhdGV0aW1lJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogNlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kYXRhVHlwZSA9PSAnYm9vbGVhbicpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENoZWNrQm94TGlzdENvbnRyb2xTY2hlbWEoe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBbXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiB0cnVlLCBsYWJlbDogYEPDs2AgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IGZhbHNlLCBsYWJlbDogYEtow7RuZ2AgfSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmVxdWFsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiBjb2wubWRXaWR0aCA/IGNvbC5tZFdpZHRoIDogMTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb2wuZmllbGQgIT0gY29sLmRhdGFUeXBlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaChcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRleHRDb250cm9sU2NoZW1hKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiBjb2wubWRXaWR0aCA/IGNvbC5tZFdpZHRoIDogMTBcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICAgICAgaWYgKHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LmluZGV4T2YoZmllbGQpID09IC0xKSB7XG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LnB1c2goZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQgPSAnVMOsbSBraeG6v20gdGhlbyBjw6FjIHRyxrDhu51uZzonO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMuZmluZChwID0+IHAuZmllbGQgPT0gZmllbGQpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY29sICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQgKz0gYCBcIiR7Y29sLm5hbWV9XCIsYDtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0KSB7XG4gICAgICAgICAgICBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0ID0gc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dC5zdWJzdHJpbmcoMCwgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dC5sZW5ndGggLSAxKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnNlYXJjaEluZm8gPSBzZWFyY2hJbmZvO1xuICAgICAgICB0aGlzLmNyZWF0aW5nU2VhcmNoSW5mbyA9IGZhbHNlO1xuICAgIH1cblxuICAgIGNoZWNrUGVybWlzc2lvblRvVXNlQnV0dG9uKGJ1dHRvblBlcm1pc3Npb25Db2RlOiBzdHJpbmcpIHtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIgPT0gbnVsbCkge1xuICAgICAgICAgICAgY29uc3QgdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XG4gICAgICAgICAgICBpZiAodGVtcCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHRlbXA7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcbiAgICAgICAgICAgIHx8ICh0aGlzLmN1cnJlbnRVc2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSA9PT0gJ3RydWUnICYmIHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuaWdub3JlQWRtaW4gPT09IGZhbHNlKVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uUGVybWlzc2lvbk1hcC5nZXQoYCR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlfS8ke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lfS8ke2J1dHRvblBlcm1pc3Npb25Db2RlfWApO1xuICAgIH1cblxuICAgIHNldERyb3Bkb3duRGF0YXNvdXJjZShmaWVsZDogc3RyaW5nLCBkYXRhU291cmNlOiBhbnlbXSkge1xuICAgICAgICBpZiAodGhpcy5maWx0ZXJTY2hlbWEuZHJvcGRvd25bZmllbGRdKSB7XG4gICAgICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kcm9wZG93bltmaWVsZF0uZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgYXN5bmMgZ2V0SXRlbVdvcmtmbG93U2V0dGluZyhzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEpIHtcbiAgICAgICAgbGV0IHdvcmtmbG93U2V0dGluZyA9IHNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3O1xuICAgICAgICBpZiAoc2V0dGluZy5pc1dvcmtmbG93VHJlZVxuICAgICAgICAgICAgJiYgc2V0dGluZy53b3JrZmxvd0NvbmZpZ0FkdmFuY2VcbiAgICAgICAgICAgICYmIHNldHRpbmcud29ya2Zsb3dDb25maWdBZHZhbmNlLmdldFdvcmtmbG93U2V0dGluZ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHNldHRpbmcud29ya2Zsb3dDb25maWdBZHZhbmNlLmdldFdvcmtmbG93U2V0dGluZyhyb3dEYXRhKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXdvcmtmbG93U2V0dGluZyB8fCB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCfEkOG7kWkgdMaw4bujbmcgY2jGsGEgxJHGsOG7o2MgY+G6pXUgaMOsbmggcXV5IHRyw6xuaCBuZ2hp4buHcCB24bulJyk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHdvcmtmbG93U2V0dGluZztcbiAgICB9XG5cbiAgICBhc3luYyBzaG93Rm9ybVN0YXJ0V29ya2Zsb3cocm93RGF0YSkge1xuICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IHRydWU7XG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuZ2V0SXRlbVdvcmtmbG93U2V0dGluZyh0aGlzLnNldHRpbmcsIHJvd0RhdGEpO1xuICAgICAgICBpZiAoIXdvcmtmbG93U2V0dGluZykge1xuICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyBO4bq/dSBjcmVhdGUgdGFzayB0aGF5IHbDrCBjaOG6oXkgcXV5IHRyw6xuaCB24bubaSDEkeG7kWkgdMaw4bujbmcgY2jDrW5oIHRow6wgbeG7nyBmb3JtIHRow6ptIGPDtG5nIHZp4buHY1xuICAgICAgICBpZiAod29ya2Zsb3dTZXR0aW5nLmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XG4gICAgICAgICAgICAvLyBLaeG7g20gdHJhIMSRw6MgdOG6oW8gY8O0bmcgdmnhu4djIGfhuq9uIHbhu5tpIGLhuqNuIGdoaSBjaMawYVxuICAgICAgICAgICAgLy8gTuG6v3UgY8OzIHLhu5NpIHRow6wgYsOhb1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0Q2hlY2tFeGlzdCA9IChhd2FpdCB0aGlzLl9jb25nVmllY1NlcnZpY2UuY2hlY2tFeGlzdEJ5RmlsdGVyKFtcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignc2VydmljZUNvZGUnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlKSxcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5JywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lKSxcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5S2V5JywgT3BlcmF0b3IuZXF1YWwsIHJvd0RhdGEuaWQpXG4gICAgICAgICAgICBdKSk7XG4gICAgICAgICAgICBpZiAoIXJlc3VsdENoZWNrRXhpc3Quc3VjY2Vzcykge1xuICAgICAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBraeG7g20gdHJhIHRy4bqhbmcgdGjDoWkgxJHDoyB04bqhbyBjw7RuZyB2aeG7h2MgaGF5IGNoxrBhJyk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpZiAocmVzdWx0Q2hlY2tFeGlzdC5kYXRhKSB7XG4gICAgICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdC4bqjbiBnaGkgxJHDoyDEkcaw4bujYyB04bqhbyBjw7RuZyB2aeG7h2MnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcubW9kaWZ5Um93RGF0YUZvclRhc2spIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmcubW9kaWZ5Um93RGF0YUZvclRhc2socm93RGF0YSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBtb2RlbFRhc2sgPSB7XG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpLCAvLyBJZCBuw6B5IGPhuqduIHRoaeG6v3QgdsOsIHPhur0gZMO5bmcgdHJvbmcgaMOgbSBpbnNlcnRUYXNrQW5kUmVsb2FkXG4gICAgICAgICAgICAgICAgY2hlY2tVbmlxdWVUYXNrRm9yRW50aXR5OiB0cnVlLFxuICAgICAgICAgICAgICAgIC8vIGF1dG9OZXh0U3RlcDogd29ya2Zsb3dTZXR0aW5nLmF1dG9OZXh0U3RlcCxcbiAgICAgICAgICAgICAgICBpZExvYWlDb25nVmllYzogd29ya2Zsb3dTZXR0aW5nLmlkTG9haUNvbmdWaWVjRGVmYXVsdCxcbiAgICAgICAgICAgICAgICBzZXJ2aWNlQ29kZTogdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlLFxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWUsXG4gICAgICAgICAgICAgICAgZW50aXR5S2V5OiByb3dEYXRhLmlkLFxuICAgICAgICAgICAgICAgIHRlbjogdGhpcy5nZXRUZW5Db25nVmllYyh3b3JrZmxvd1NldHRpbmcudGVtcGxhdGVUYXNrTmFtZSwgcm93RGF0YSksXG4gICAgICAgICAgICAgICAgZGluaEtlbU5naGllcFZ1RHRvczogW11cbiAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgIC8vIFThu5VuZyBo4bujcCBtb2RlbCDEkcOtbmgga8OobSBuZ2hp4buHcCB24bulIGVudGl0eVxuICAgICAgICAgICAgY29uc3QgY29udGVudExpbmsgPSBhd2FpdCB0aGlzLmdldENvcHlQYXRoKHRoaXMuc2V0dGluZywgcm93RGF0YSk7XG4gICAgICAgICAgICBpZiAoY29udGVudExpbmspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbEVudGl0eSA9IHRoaXMucGFyc2VBdHRhY2hMaW5rKGNvbnRlbnRMaW5rKTtcbiAgICAgICAgICAgICAgICBtb2RlbFRhc2suZGluaEtlbU5naGllcFZ1RHRvcyA9IG1vZGVsRW50aXR5O1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5tb2RpZnlJdGVtVGFzaykge1xuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZy5tb2RpZnlJdGVtVGFzayhtb2RlbFRhc2ssIHJvd0RhdGEpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBLaeG7g20gdHJhIG7hur91IGPDsyBj4bqldSBow6xuaCB04buxIMSR4buZbmcgYuG6r3QgxJHhuqd1IHRhc2ssIHbDoCBwaOG6o2kgY8OzIGxv4bqhaSBjw7RuZyB2aeG7h2MgbeG6t2MgxJHhu4tuaFxuICAgICAgICAgICAgaWYgKHdvcmtmbG93U2V0dGluZy5hdXRvU3RhcnRUYXNrXG4gICAgICAgICAgICAgICAgJiYgd29ya2Zsb3dTZXR0aW5nLmlkTG9haUNvbmdWaWVjRGVmYXVsdFxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgLy8gPT4gVGjDrCBs4bqleSB0aMOqbSB0aMO0bmcgdGluIHF1eSB0csOsbmggbeG6t2MgxJHhu4tuaCBjaG8gdGFza1xuICAgICAgICAgICAgICAgIC8vIE7hur91IGzhuqV5IMSRxrDhu6NjIHRow6wgdOG7sSDEkeG7mW5nIGLhuq90IMSR4bqndSwgbuG6v3Uga2jDtG5nIHRow6wgduG6q24gcGjhuqNpIG3hu58gbMOqbiBmb3JtIGPDtG5nIHZp4buHY1xuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tXb3JrZmxvd1NldHRpbmcgPSBhd2FpdCB0aGlzLl9kbUxvYWlDb25nVmllY1NlcnZpY2UuZ2V0V29ya2Zsb3dTZXR0aW5nQnlJZExvYWlDb25nVmllYyh3b3JrZmxvd1NldHRpbmcuaWRMb2FpQ29uZ1ZpZWNEZWZhdWx0KTtcbiAgICAgICAgICAgICAgICBpZiAodGFza1dvcmtmbG93U2V0dGluZyAhPSBudWxsICYmIHRhc2tXb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlKSB7XG4gICAgICAgICAgICAgICAgICAgIG1vZGVsVGFza1tGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dID0gdGFza1dvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGU7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFza0FuZFJlbG9hZChtb2RlbFRhc2ssIHJvd0RhdGEsIHRhc2tXb3JrZmxvd1NldHRpbmcpO1xuICAgICAgICAgICAgICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IGZhbHNlO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgdGhpcy5jb25nVmllY01vZGVsLmRhdGEuY29uZ1ZpZWNTZXR0aW5nLmlzV29ya2Zsb3dUcmVlID0gdHJ1ZTtcbiAgICAgICAgICAgIHRoaXMuY29uZ1ZpZWNNb2RlbC5kYXRhLm1vZGVsID0ge1xuICAgICAgICAgICAgICAgIGZvcm1TdGF0ZTogRm9ybVN0YXRlLkFERCxcbiAgICAgICAgICAgICAgICBkYXRhOiBtb2RlbFRhc2tcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0aGlzLmNvbmdWaWVjTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLmxlbmd0aCA9PSAxKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFdvcmtmbG93KHJvd0RhdGEsIHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3NbMF0pO1xuICAgICAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5kYXRhLndvcmtmbG93cyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3M7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5kYXRhLmRlZmF1bHRXb3JrZmxvdyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGU7XG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5kYXRhLml0ZW0gPSByb3dEYXRhO1xuICAgICAgICAgICAgdGhpcy5zdGFydFdvcmtmbG93TW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXRUZW5Db25nVmllYyh0ZW1wbGF0ZVRleHQ6IHN0cmluZywgcm93RGF0YTogYW55KSB7XG4gICAgICAgIHJldHVybiByZW5kZXJUZXh0VGVtcGxhdGUoXG4gICAgICAgICAgICBnZXRSZWdleFJlc3VsdCh0ZW1wbGF0ZVRleHQsIFJlZ2V4U3BsaXRGaWVsZEJ5SXRlbSwgZXhlY1Jlc3VsdCA9PiBleGVjUmVzdWx0WzFdKSxcbiAgICAgICAgICAgIHRlbXBsYXRlVGV4dCwgcm93RGF0YVxuICAgICAgICApO1xuICAgIH1cblxuICAgIHByaXZhdGUgdG9uZ0hvcFdvcmtmbG93SGlzdG9yeUZvck5leHRGaXJzdFN0ZXAoXG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSwgaXRlbVRhc2s6IGFueSwgd29ya2Zsb3dTZXR0aW5nOiBXb3JrZmxvd1NldHRpbmdOZXcsIHdvcmtmbG93Q29kZTogc3RyaW5nXG4gICAgKSB7XG4gICAgICAgIGlmIChpdGVtV29ya2Zsb3dIaXN0b3J5ID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuaWdub3JlVmFsaWRhdGVCYXNlSW5CdXNzaW5lc3MgPSB0cnVlO1xuICAgICAgICBjb25zdCB3b3JrZmxvdyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3MuZmluZChxID0+IHEuY29kZSA9PSB3b3JrZmxvd0NvZGUpO1xuICAgICAgICBpZiAod29ya2Zsb3cgPT0gbnVsbCkgcmV0dXJuIG51bGw7XG4gICAgICAgIGNvbnN0IHN0YXRlU3RhcnQgPSB3b3JrZmxvdy5kYXRhLm1hY2hpbmVzLmZpbmQocSA9PiBxLnR5cGUgPT0gRW51bVN0YXRlVHlwZS5TVEFSVCk7XG4gICAgICAgIGlmIChzdGF0ZVN0YXJ0ID09IG51bGwpIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBhY3Rpb25Db2RlID0gaXRlbVdvcmtmbG93SGlzdG9yeS5hY3Rpb25Db2RlO1xuICAgICAgICBjb25zdCBleGlzdEFjdGlvbiA9IHdvcmtmbG93LmRhdGEuY29ubmVjdGlvbnMuc29tZSh4ID0+IHguc291cmNlID09IHN0YXRlU3RhcnQuaWRcbiAgICAgICAgICAgICYmIHguY29kZSA9PSBhY3Rpb25Db2RlXG4gICAgICAgICk7XG4gICAgICAgIGlmICghZXhpc3RBY3Rpb24pIHJldHVybiBudWxsO1xuICAgICAgICBjb25zdCBjcnVkTGlzdFNldHRpbmc6IENydWRMaXN0U2V0dGluZyA9IG5ldyBDcnVkTGlzdFNldHRpbmcoKTtcbiAgICAgICAgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmFkanVzdFNldHRpbmdXb3JrZmxvd0ZvckNydWRMaXN0KGNydWRMaXN0U2V0dGluZyk7XG4gICAgICAgIGxldCBuYW1lID0gJyc7XG4gICAgICAgIGlmICh0eXBlb2YgY3J1ZExpc3RTZXR0aW5nLmRpc3BsYXlGaWVsZCA9PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgbmFtZSA9IGl0ZW1UYXNrWzxzdHJpbmc+KGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQpXTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIG5hbWUgPSAoPEZ1bmN0aW9uPihjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkKSkoaXRlbVRhc2spO1xuICAgICAgICB9XG4gICAgICAgIG5hbWUgPSBgJHtjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2Uub2JqZWN0TmFtZX0gJHtuYW1lfWA7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkudGFibGVOYW1lID0gdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmVudGl0eU5hbWU7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnkub2JqZWN0RnVsbE5hbWUgPSBuYW1lO1xuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5Lm9iamVjdE5hbWUgPSBjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2Uub2JqZWN0TmFtZTtcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS53b3JrZmxvd0NvZGUgPSB3b3JrZmxvd0NvZGU7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuaXRlbUlkID0gaXRlbVRhc2suaWQ7XG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnkuc291cmNlU3RhdHVzQ29kZSA9IHN0YXRlU3RhcnQuY29kZTtcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5hY3Rpb25Db2RlID0gYWN0aW9uQ29kZTtcbiAgICAgICAgcmV0dXJuIGl0ZW1Xb3JrZmxvd0hpc3Rvcnk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhc3luYyBpbnNlcnRUYXNrQW5kUmVsb2FkKG1vZGVsVGFzaywgcm93RGF0YSwgd29ya2Zsb3dTZXR0aW5nOiBXb3JrZmxvd1NldHRpbmdOZXcpIHtcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5nZXREYXRhRm9yTmV4dEZpcnN0U3RlcFRhc2spIHtcbiAgICAgICAgICAgIG1vZGVsVGFzay5pdGVtV29ya2Zsb3dIaXN0b3J5ID0gYXdhaXQgdGhpcy5zZXR0aW5nLmdldERhdGFGb3JOZXh0Rmlyc3RTdGVwVGFzayhyb3dEYXRhKTtcbiAgICAgICAgICAgIG1vZGVsVGFzay5pdGVtV29ya2Zsb3dIaXN0b3J5ID0gdGhpcy50b25nSG9wV29ya2Zsb3dIaXN0b3J5Rm9yTmV4dEZpcnN0U3RlcChcbiAgICAgICAgICAgICAgICBtb2RlbFRhc2suaXRlbVdvcmtmbG93SGlzdG9yeSwgbW9kZWxUYXNrLCB3b3JrZmxvd1NldHRpbmcsIG1vZGVsVGFza1tGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIGF3YWl0IHRoaXMuX2NvbmdWaWVjU2VydmljZS5wb3N0KG1vZGVsVGFzaylcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJycsIGYgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMub25TdGFydGVkV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBjYWxsIGJhY2sga2hpIOG6pW4gbMawdSB0csOqbiBmb3JtIGLhuq90IMSR4bqndSBxdXkgdHLDrG5oXG4gICAgICogY3J1ZC1saXN0IHPhur0gZ+G7jWkgaMOgbSBsxrB1IGNo4bupIGZvcm0gc3RhcnQgd29ya2Zsb3cgayBsw6BtIGfDrCBj4bqjXG4gICAgICogxJDhu4IgVOG6rE4gROG7pE5HIEzhuqBJIEjDgE0gc3RhcnRXb3JrZmxvdyBj4bunYSBjcnVkLWxpc3RcbiAgICAgKi9cbiAgICBoYW5kbGVTdGFydFdvcmtmbG93RnJvbURpYWxvZyh3b3JrZmxvdzogV2ZJdGVtKSB7XG4gICAgICAgIHRoaXMuc3RhcnRXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3codGhpcy5zdGFydFdvcmtmbG93TW9kZWwuZGF0YS5pdGVtLCB3b3JrZmxvdyk7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNob3dBY3Rpb25Xb3JrZmxvdyhldnQsIHJvd0RhdGEpIHtcbiAgICAgICAgaWYgKHRoaXMuc2hvd2luZ0FjdGlvbldvcmtmbG93KSByZXR1cm47XG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMgPSBhd2FpdCB0aGlzLmdldEJ1dHRvbkNvbnRleHQocm93RGF0YSk7XG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbkNvbnRleHRzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX3Nob3dDb250ZXh0TWVudShldnQpO1xuICAgIH1cblxuICAgIHB1YmxpYyBhc3luYyBnZXRCdXR0b25Db250ZXh0KHJvd0RhdGEpIHtcbiAgICAgICAgdGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cgPSB0cnVlO1xuICAgICAgICBsZXQgcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cgPSBudWxsO1xuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5pc1dvcmtmbG93VHJlZSAmJiB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XG4gICAgICAgICAgICByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdyA9IGF3YWl0IHRoaXMuZ2V0QWN0aW9uV29ya2Zsb3dCeVRhc2socm93RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdyA9IGF3YWl0IHRoaXMuZ2V0QWN0aW9uV29ya2Zsb3cocm93RGF0YSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KHJlc3VsdEdldEFjdGlvbldvcmtmbG93KSkge1xuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgY8OzIGjDoG5oIMSR4buZbmcga2jhuqMgZOG7pW5nJyk7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgYnV0dG9uQ29udGV4dHMgPSByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdztcbiAgICAgICAgLy8gTuG6v3UgbMOgIGLhuqNuIGdoaSBuZ2hp4buHcCB24bulIG3DoCBjw7MgZ+G6r24gdGjDtG5nIHRpbiB0YXNrIHRow6wgYuG7lSBzdW5nIHRow6ptIG1lbnUgeGVtIGPDtG5nIHZp4buHY1xuICAgICAgICBpZiAocm93RGF0YVtGaWVsZERlZmluZUhhc1Rhc2tdKSB7XG4gICAgICAgICAgICBidXR0b25Db250ZXh0cy51bnNoaWZ0KFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGBYZW0gY8O0bmcgdmnhu4djYCxcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLW1hcCcsXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudmlld1Rhc2tEZXRhaWwocm93RGF0YSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBidXR0b25Db250ZXh0cztcbiAgICB9XG5cbiAgICBhc3luYyBnZXRBY3Rpb25Xb3JrZmxvdyhyb3dEYXRhKTogUHJvbWlzZTxhbnlbXSB8IHZvaWQ+IHtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgdGhpcy5nZXRJdGVtV29ya2Zsb3dTZXR0aW5nKHRoaXMuc2V0dGluZywgcm93RGF0YSk7XG4gICAgICAgIGlmICghd29ya2Zsb3dTZXR0aW5nKSByZXR1cm47XG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBY3Rpb25Xb3JrZmxvd0Jhc2UodGhpcy5zZXR0aW5nLCByb3dEYXRhLCB3b3JrZmxvd1NldHRpbmcpO1xuICAgIH1cblxuICAgIGFzeW5jIGdldEFjdGlvbldvcmtmbG93QnlUYXNrKHJvd0RhdGEpOiBQcm9taXNlPGFueVtdIHwgdm9pZD4ge1xuICAgICAgICBpZiAoIXJvd0RhdGEuX19pc0dvdENvbmdWaWVjKSB7XG4gICAgICAgICAgICByb3dEYXRhLl9faXRlbUNvbmdWaWVjID0gKGF3YWl0IHRoaXMuX2NvbmdWaWVjU2VydmljZS5nZXREZXRhaWxCeUZpbHRlcihcbiAgICAgICAgICAgICAgICBbXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdzZXJ2aWNlQ29kZScsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUpLFxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5JywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lKSxcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2VudGl0eUtleScsIE9wZXJhdG9yLmVxdWFsLCByb3dEYXRhLmlkKVxuICAgICAgICAgICAgICAgIF1cbiAgICAgICAgICAgICkpLmRhdGE7XG4gICAgICAgICAgICByb3dEYXRhLl9faXNHb3RDb25nVmllYyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgcm93RGF0YSA9IHJvd0RhdGEuX19pdGVtQ29uZ1ZpZWM7XG4gICAgICAgIGlmICghcm93RGF0YSkge1xuICAgICAgICAgICAgdGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY8O0bmcgdmnhu4djIGfhuq9uIHbhu5tpIGLhuqNuIGdoaScpO1xuICAgICAgICB9XG4gICAgICAgIHJvd0RhdGEuX193b3JrZmxvd0NvZGUgPSByb3dEYXRhLndvcmtmbG93Q29kZTtcblxuICAgICAgICBjb25zdCB3b3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UpO1xuICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UuY2hhbmdlRW5kcG9pbnQodGhpcy5fY29uZ1ZpZWNTZXJ2aWNlKVxuICAgICAgICAgICAgLmFwcGVuZEluZm9Gb3JXb3JrZmxvdyhcbiAgICAgICAgICAgICAgICB1c2VyU2VydmljZS5nZXRVc2VySWRDb21iaW5lKCksIFtyb3dEYXRhXSwgJ2lkJywgdGhpcy5zZXR0aW5nLmlnbm9yZVdvcmtmbG93XG4gICAgICAgICAgICApO1xuICAgICAgICBpZiAocmVzdWx0ICE9PSB0cnVlKSByZXR1cm47XG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZS5nZXRXb3JrZmxvd1NldHRpbmdCeUlkTG9haUNvbmdWaWVjKHJvd0RhdGEuaWRMb2FpQ29uZ1ZpZWMpO1xuXG4gICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcgPT0gbnVsbCkgcmV0dXJuO1xuICAgICAgICBjb25zdCBjcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZS5hZGp1c3RTZXR0aW5nV29ya2Zsb3dGb3JDcnVkTGlzdChjcnVkTGlzdFNldHRpbmcpO1xuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QWN0aW9uV29ya2Zsb3dCYXNlKGNydWRMaXN0U2V0dGluZywgcm93RGF0YSwgd29ya2Zsb3dTZXR0aW5nKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGFzeW5jIF9nZXRBY3Rpb25Xb3JrZmxvd0Jhc2UoY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEsIHdvcmtmbG93U2V0dGluZzogV29ya2Zsb3dTZXR0aW5nTmV3KTogUHJvbWlzZTxhbnlbXSB8IHZvaWQ+IHtcbiAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IHJvd0RhdGE7XG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMgPSBbXTtcbiAgICAgICAgY29uc3QgYnV0dG9uQ29udGV4dHMgPSBbXTtcbiAgICAgICAgLy8gTuG6v3UgayBjw7Mgd29ya2Zsb3cgY29kZSBuZ2jEqWEgbMOgIGNoxrBhIGNo4bqheSBxdXkgdHLDrG5oIGhv4bq3YyBxdXkgdHLDrG5oIGzhu5dpID0+IENobyBjaOG6oXkgbOG6oWlcbiAgICAgICAgaWYgKCFyb3dEYXRhLl9fd29ya2Zsb3dDb2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBpdGVtV29ya2Zsb3dTZXR0aW5nID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cy5maW5kKHEgPT4gcS5jb2RlID09IHJvd0RhdGEuX193b3JrZmxvd0NvZGUpO1xuICAgICAgICAgICAgaWYgKCFpdGVtV29ya2Zsb3dTZXR0aW5nKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgS2jDtG5nIHTDrG0gdGjhuqV5IHF1eSB0csOsbmggY8OzIG3DoyAke3Jvd0RhdGEuX193b3JrZmxvd0NvZGV9YCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gaXRlbVdvcmtmbG93U2V0dGluZy5kYXRhLmFjdGlvbnNbcm93RGF0YS5fX3RyYW5nVGhhaV07XG4gICAgICAgICAgICBjb25zdCBhY3Rpb25BbGxvd3MgPSAoYXdhaXQgY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEFjdGlvbkFsbG93KHJvd0RhdGEuaWQpKS5kYXRhO1xuICAgICAgICAgICAgaWYgKGFjdGlvbkFsbG93cykge1xuICAgICAgICAgICAgICAgIGFjdGlvbkFsbG93cy5mb3JFYWNoKGFjdGlvbkNvZGUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25zLmZpbmQocSA9PiBxLmNvZGUgPT0gYWN0aW9uQ29kZSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChhY3Rpb24pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbkNvbnRleHRzLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvVGh1VHU6IGFjdGlvbi5zb1RodVR1LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjdGlvbkNvZGU6IGFjdGlvbi5jb2RlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246IHRoaXMuc291cmNlSWNvblthY3Rpb24uaWNvbl0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGFjdGlvbi5uYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMucHJvY2Vzc1dvcmtmbG93KGNydWRMaXN0U2V0dGluZywgaXRlbVdvcmtmbG93U2V0dGluZywgYWN0aW9uKVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIC8vIEzhu5dpIGsgbOG6pXkgxJHGsOG7o2MgYWN0aW9uIGFsbG93XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBidXR0b25Db250ZXh0cy5zb3J0KG11bHRpcGxlU29ydCgnc29UaHVUdScpKTtcbiAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgbmfGsOG7nWkgY3Xhu5FpIGPDuW5nIHRo4buxYyBoaeG7h24gY8OzIHBo4bqjaSBuZ8aw4budaSBoaeG7h24gdOG6oWkga2jDtG5nIHRow6wgY2hvIHBow6lwIHJvbGxiYWNrXG4gICAgICAgICAgICBjb25zdCB3b3JrZmxvd0hpc3RvcnlTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93SGlzdG9yeVNlcnZpY2UpO1xuICAgICAgICAgICAgd29ya2Zsb3dIaXN0b3J5U2VydmljZS5jaGFuZ2VFbmRwb2ludCh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xuICAgICAgICAgICAgY29uc3QgdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xuICAgICAgICAgICAgY29uc3QgdXNlcklkID0gdXNlclNlcnZpY2UuZ2V0SWQoKTtcbiAgICAgICAgICAgIGxldCB1c2VySWRTdHJpbmdVcHBlciA9ICcnO1xuICAgICAgICAgICAgaWYgKHVzZXJJZCkge1xuICAgICAgICAgICAgICAgIHVzZXJJZFN0cmluZ1VwcGVyID0gdXNlcklkLnRvVXBwZXJDYXNlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Xb3JrZmxvd0hpc3RvcnlMYXN0ID0gKGF3YWl0IHdvcmtmbG93SGlzdG9yeVNlcnZpY2UuY2hhbmdlRW5kcG9pbnQoY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlKS5nZXRMYXN0QnlJdGVtSWQocm93RGF0YS5pZCkpLmRhdGE7XG4gICAgICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeUxhc3RcbiAgICAgICAgICAgICAgICAmJiBpdGVtV29ya2Zsb3dIaXN0b3J5TGFzdC5hY3Rpb25Db2RlICE9IE1hQWN0aW9uQmF0RGF1UXV5VHJpbmhcbiAgICAgICAgICAgICAgICAmJiBpdGVtV29ya2Zsb3dIaXN0b3J5TGFzdC51c2VySWRDcmVhdGVkLnRvVXBwZXJDYXNlKCkgPT0gdXNlcklkU3RyaW5nVXBwZXJcbiAgICAgICAgICAgICAgICAmJiB0aGlzLnNldHRpbmcuc2hvd0J1dHRvblRodUhvaVxuICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgYnV0dG9uQ29udGV4dHMucHVzaChcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXJlcGxheScsXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1RodSBo4buTaScsXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnJvbGxiYWNrV29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGJ1dHRvbkNvbnRleHRzLnB1c2goXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAncGkgcGktY29tbWVudHMnLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NobyDDvSBraeG6v24nLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnNob3dGb3JtQ2hvWUtpZW4oY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKVxuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBpY29uOiAncGkgcGktY2FsZW5kYXInLFxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogQnV0dG9uVGV4dEFjdGlvbkNvbmdWaWVjLlhFTV9MSUNIX1NVLFxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnZpZXdIaXN0b3J5V29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGJ1dHRvbkNvbnRleHRzO1xuICAgIH1cblxuICAgIGFzeW5jIHZpZXdUYXNrRGV0YWlsKHJvd0RhdGEpIHtcbiAgICAgICAgY29uc3QgaXRlbVRhc2sgPSAoYXdhaXQgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmdldERldGFpbEJ5RmlsdGVyKFtcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHlLZXknLCBPcGVyYXRvci5lcXVhbCwgcm93RGF0YS5pZClcbiAgICAgICAgXSkpLmRhdGE7XG4gICAgICAgIGlmIChpdGVtVGFzayA9PSBudWxsKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgY8O0bmcgdmnhu4djIGfhuq9uIHbhu5tpIGLhuqNuIGdoaScpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHRhc2tGb3JtTW9kZWw6IGFueSA9IHt9O1xuICAgICAgICB0YXNrRm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xuICAgICAgICB0YXNrRm9ybU1vZGVsLmRhdGEgPSBpdGVtVGFzaztcbiAgICAgICAgdGhpcy5kZXRhaWxUYXNrTW9kZWwuZGF0YS50YXNrRm9ybU1vZGVsID0gdGFza0Zvcm1Nb2RlbDtcbiAgICAgICAgdGhpcy5kZXRhaWxUYXNrTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICByb2xsYmFja1dvcmtmbG93KGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGtow7RpIHBo4bulYyB0cuG6oW5nIHRow6FpIHRyxrDhu5tjIMSRw7MnKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoIXJlcykgcmV0dXJuO1xuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gJyc7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkID09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSByb3dEYXRhWzxzdHJpbmc+KGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQpXTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSAoPEZ1bmN0aW9uPihjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkKSkocm93RGF0YSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNydWRMaXN0U2V0dGluZy5iYXNlU2VydmljZS5yb2xsYmFjayhyb3dEYXRhLCBbY3J1ZExpc3RTZXR0aW5nLm9iamVjdE5hbWUsIG5hbWVdKVxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICdLaMO0aSBwaOG7pWMgdHLhuqFuZyB0aMOhaSB0csaw4bubYyB0aMOgbmggY8O0bmcnLCBmID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Sb2xsYmFja2VkV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkU3RhdHVzV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgICAgICAgICAgICAgICAgICB9KSk7XG4gICAgICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBhc3luYyB2aWV3SGlzdG9yeVdvcmtmbG93KGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhOiBudW1iZXIpIHtcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgdGhpcy5nZXRJdGVtV29ya2Zsb3dTZXR0aW5nKGNydWRMaXN0U2V0dGluZywgcm93RGF0YSk7XG4gICAgICAgIGlmICghd29ya2Zsb3dTZXR0aW5nKSByZXR1cm47XG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSByb3dEYXRhO1xuICAgICAgICB0aGlzLndvcmtmbG93SGlzdG9yeU1vZGVsLmRhdGEgPSB7fTtcbiAgICAgICAgdGhpcy53b3JrZmxvd0hpc3RvcnlNb2RlbC5kYXRhLnNldHRpbmcgPSBjcnVkTGlzdFNldHRpbmc7XG4gICAgICAgIHRoaXMud29ya2Zsb3dIaXN0b3J5TW9kZWwuZGF0YS53b3JrZmxvd1NldHRpbmcgPSB3b3JrZmxvd1NldHRpbmc7XG4gICAgICAgIHRoaXMud29ya2Zsb3dIaXN0b3J5TW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBoYW5kbGVIaWRlSGlzdG9yeVdvcmtmbG93KCkge1xuICAgICAgICB0aGlzLnNob3dIaXN0b3J5V29ya2Zsb3cgPSBmYWxzZTtcbiAgICB9XG5cbiAgICBhc3luYyBwcm9jZXNzV29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIGl0ZW1Xb3JrZmxvd1NldHRpbmc6IGFueSwgd29ya2Zsb3dBY3Rpb246IFdmQWN0aW9uKSB7XG4gICAgICAgIGlmICh3b3JrZmxvd0FjdGlvbi5vcGVuTmV3VGFiKSB7XG4gICAgICAgICAgICBsZXQgZG9tYWluTmV3VGFiID0gd29ya2Zsb3dBY3Rpb24uZG9tYWluTmV3VGFiO1xuICAgICAgICAgICAgaWYgKCFkb21haW5OZXdUYWIpIGRvbWFpbk5ld1RhYiA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XG4gICAgICAgICAgICB3aW5kb3cub3BlbihgJHtkb21haW5OZXdUYWJ9LyR7d29ya2Zsb3dBY3Rpb24ubGlua05ld1RhYn0jX2l0ZW1JZD0ke3RoaXMuY3VycmVudEl0ZW0uaWR9YCwgJ19ibGFuaycpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICghd29ya2Zsb3dBY3Rpb24ub3BlblBvcHVwKSB7XG4gICAgICAgICAgICB0aGlzLnNob3dXYWl0Qm94KCk7XG4gICAgICAgICAgICBjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2UuY2hhbmdlU3RhdGVCYXNlQnlBY3Rpb24odGhpcy5jdXJyZW50SXRlbS5pZCwgd29ya2Zsb3dBY3Rpb24uY29kZSlcbiAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZVdpdGhXYWl0Qm94KHJlcywgJycsIGYgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVByb2Nlc3NlZFdvcmtmbG93QmFzZSgpO1xuICAgICAgICAgICAgICAgIH0pKVxuICAgICAgICAgICAgICAgIC5jYXRjaChlcnIgPT4gdGhpcy5oaWRlV2FpdEJveCgpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuaGVhZGVyID0gd29ya2Zsb3dBY3Rpb24ubmFtZTtcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5kYXRhLnNldHRpbmcgPSBjcnVkTGlzdFNldHRpbmc7XG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuZGF0YS5hY3Rpb24gPSB3b3JrZmxvd0FjdGlvbjtcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5kYXRhLndvcmtmbG93ID0gaXRlbVdvcmtmbG93U2V0dGluZztcbiAgICB9XG5cbiAgICBhc3luYyBzaG93Rm9ybUNob1lLaWVuKGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5jaG9ZS2llbk1vZGVsLmRhdGEucm93RGF0YSA9IHJvd0RhdGE7XG4gICAgICAgIHRoaXMuY2hvWUtpZW5Nb2RlbC5kYXRhLnNldHRpbmcgPSBjcnVkTGlzdFNldHRpbmc7XG4gICAgICAgIHRoaXMuY2hvWUtpZW5Nb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xuICAgIH1cblxuICAgIGFzeW5jIHN0YXJ0V29ya2Zsb3cocm93RGF0YSwgd29ya2Zsb3c6IFdmSXRlbSkge1xuICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc3RhcnRXb3JrZmxvdyhyb3dEYXRhLmlkLCB3b3JrZmxvdy5jb2RlKVxuICAgICAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzLCAnQ2jhuqF5IHF1eSB0csOsbmggdGjDoG5oIGPDtG5nJywgZiA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5vblN0YXJ0ZWRXb3JrZmxvdy5lbWl0KHJvd0RhdGEuaWQpO1xuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkU3RhdHVzV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcbiAgICAgICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcbiAgICAgICAgICAgIH0pKTtcbiAgICB9XG5cbiAgICBoYW5kbGVQcm9jZXNzZWRXb3JrZmxvd0Jhc2UoKSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMub25Qcm9jZXNzZWRXb3JrZmxvdy5lbWl0KHRoaXMuY3VycmVudEl0ZW0uaWQpO1xuICAgICAgICB0aGlzLm9uQ2hhbmdlZFN0YXR1c1dvcmtmbG93LmVtaXQodGhpcy5jdXJyZW50SXRlbS5pZCk7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBjb3B5TGluayhyb3dEYXRhOiBhbnkpIHtcbiAgICAgICAgdGhpcy5vbkNvcHlMaW5rLmVtaXQocm93RGF0YSk7XG4gICAgfVxuXG4gICAgcHVibGljIGNvcHlMaW5rTXVsdGlwbGUoKSB7XG4gICAgICAgIHRoaXMub25Db3B5TGlua011bHRpcGxlLmVtaXQodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKTtcbiAgICB9XG5cbiAgICBzaG93U2hhcmVMaW5rRm9ybShsc3RJdGVtKSB7XG4gICAgICAgIHRoaXMuc2hhcmVMaW5rTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICAgICAgdGhpcy5zaGFyZUxpbmtNb2RlbC5kYXRhLmxzdEl0ZW0gPSBsc3RJdGVtO1xuICAgIH1cblxuICAgIGFzeW5jIGNyZWF0ZVNoYXJlTGluaygpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuY2hlY2tSZWFkeVRvVHJpbmhLeSgpKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCfEkGFuZyB04bqjaSBk4buvIGxp4buHdSBkYW5oIHPDoWNoLCBjaOG7nSBt4buZdCBsw7pjIHLhu5NpIHRo4butIGzhuqFpJyk7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMucm93RGF0YUN1cnJlbnQ7XG4gICAgICAgIHRoaXMuc2hvd1NoYXJlTGlua0Zvcm0oW3Jvd0RhdGFdKTtcbiAgICB9XG5cbiAgICBhc3luYyBjcmVhdGVTaGFyZUxpbmtNdWx0aXBsZSgpIHtcbiAgICAgICAgdGhpcy5zaG93U2hhcmVMaW5rRm9ybSh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlTXVsdGlwbGVDb3B5TGluaygpIHtcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZUNvcHlMaW5rKGl0ZW0pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cblxuICAgIHB1YmxpYyBkaXNhYmxlQ29weUxpbmsocm93RGF0YSkge1xuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVDb3B5TGluaykge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuQ29weUxpbmspIHtcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmIChyb3dEYXRhWydtZXRhZGF0YVN0YXR1cyddICYmIHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gIT0gJzAnKSB7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuXG4gICAgcHVibGljIGFzeW5jIHNob3dTZXR0aW5nc1Blcm1pc3Npb24oKSB7XG4gICAgICAgIGlmICh0aGlzLmNyZWF0aW5nU2VhcmNoSW5mbykgcmV0dXJuO1xuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NQZXJtaXNzaW9uID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd1NldHRpbmdzV29ya2Zsb3coKSB7XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1dvcmtmbG93ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd1NldHRpbmdzV29ya2Zsb3dOZXcoKSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dTZXR0aW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBwdWJsaWMgc2hvd0xpbmtTaGFyaW5nKCkge1xuICAgICAgICB0aGlzLnBlcm1pc3Npb25TaGFyaW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBhc3luYyBzaG93QXR0YWNoZWRUYXNrKCkge1xuICAgICAgICB0aGlzLmF0dGFjaGVkVGFza01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIHNob3dMaXN0UGVybWlzc2lvbkJ5SXRlbSgpIHtcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uTGlzdE1vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZVdvcmtmbG93U2V0dGluZ3MoZXZlbnQpIHtcbiAgICAgICAgdGhpcy5zZXR0aW5nLndvcmtmbG93U2V0dGluZyA9IGV2ZW50O1xuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLnJlbG9hZFBhZ2UoKTtcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzV29ya2Zsb3cgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XG4gICAgfVxuXG4gICAgcHVibGljIG9uU2F2ZVdvcmtmbG93U2V0dGluZ3NOZXcoZXZ0KSB7XG4gICAgICAgIHRoaXMud29ya2Zsb3dTZXR0aW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UucmVsb2FkUGFnZSgpO1xuICAgIH1cblxuICAgIHB1YmxpYyBvblJlbW92ZVdvcmtmbG93U2V0dGluZ3MoZXZ0KSB7XG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1dvcmtmbG93ID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xuICAgIH1cblxuICAgIGdvVG9UYXNrKGV2ZW50KSB7XG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ2jhu6ljIG7Eg25nIHhlbSBjaGkgdGnhur90IGPDtG5nIHZp4buHYyB44butIGzDvSB04budIHRyw6xuaCDEkWFuZyDEkcaw4bujYyBob8OgbiB0aGnhu4duLi4uJyk7XG4gICAgfVxuXG4gICAgYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzaygpIHtcbiAgICB9XG59XG4iXX0=
|