tnx-shared 5.1.415 → 5.1.416

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.
@@ -481,7 +481,7 @@ export class ListComponentBase extends ComponentBase {
481
481
  if (!this.serviceCode && this.setting.baseService) {
482
482
  this.serviceCode = this.setting.baseService.serviceCode;
483
483
  }
484
- if (!this.authorizePath) {
484
+ if (this.authorizePath) {
485
485
  this.authorizePaths[ComCtxConstants.COMMON.ADD] = `${this.authorizePath}/ADD`;
486
486
  this.authorizePaths[ComCtxConstants.COMMON.EDIT] = `${this.authorizePath}/EDIT`;
487
487
  this.authorizePaths[ComCtxConstants.COMMON.DELETE] = `${this.authorizePath}/DELETE`;
@@ -2878,4 +2878,4 @@ ListComponentBase.propDecorators = {
2878
2878
  onChangedStatusWorkflow: [{ type: Output }],
2879
2879
  widthFunctionColumnChange: [{ type: Output }]
2880
2880
  };
2881
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb21wb25lbnQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjbGFzc2VzL2Jhc2UvbGlzdC1jb21wb25lbnQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFSCxZQUFZLEVBQ1osZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RSxPQUFPLEVBQXFCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRixPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsV0FBVyxFQUNYLGNBQWMsRUFDZCxZQUFZLEVB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QUN6QyxZQUFZLFNBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTs4QkFDekMsWUFBWSxTQUFDLGlCQUFpQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt1QkFDaEQsZUFBZSxTQUFDLFdBQVc7b0JBRTNCLEtBQUs7c0JBQ0wsS0FBSzt1QkFDTCxLQUFLO21CQUNMLEtBQUs7NEJBR0wsS0FBSzsrQkFDTCxLQUFLO2tDQUdMLEtBQUs7NEJBRUwsS0FBSzs0QkFTTCxLQUFLOytCQUNMLEtBQUs7aUNBQ0wsS0FBSzt5QkFDTCxLQUFLO21DQUNMLEtBQUs7MEJBQ0wsS0FBSzs0QkFDTCxLQUFLOytCQUNMLEtBQUs7OEJBTUwsS0FBSzttQ0FDTCxLQUFLOzhCQUNMLEtBQUs7d0JBQ0wsS0FBSzt3QkFDTCxLQUFLOzJCQUNMLEtBQUs7eUJBQ0wsS0FBSzs2QkFDTCxLQUFLO3lCQUNMLEtBQUs7cUNBQ0wsS0FBSzsyQkFDTCxLQUFLO3FCQUNMLEtBQUs7NEJBQ0wsS0FBSztxQkFDTCxLQUFLOytCQUNMLEtBQUs7d0JBQ0wsS0FBSztrQ0FDTCxLQUFLO2lDQUNMLEtBQUs7MEJBQ0wsS0FBSzt5QkFDTCxLQUFLO29CQUdMLEtBQUs7eUJBTUwsS0FBSzs0QkFXTCxLQUFLO3lCQWFMLEtBQUs7NkJBWUwsS0FBSzswQkFFTCxNQUFNOzBCQUNOLE1BQU07eUJBQ04sTUFBTTt1QkFDTixNQUFNO3lCQUNOLE1BQU07c0JBQ04sTUFBTTs0QkFDTixNQUFNO29CQUNOLE1BQU07cUJBQ04sTUFBTTt5QkFDTixNQUFNO2lDQUNOLE1BQU07cUJBQ04sTUFBTTt1QkFDTixNQUFNOytCQUNOLE1BQU07Z0NBQ04sTUFBTTs2QkFDTixNQUFNO2dDQUNOLE1BQU07a0NBQ04sTUFBTTttQ0FDTixNQUFNO3NDQUNOLE1BQU07d0NBQ04sTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERhdGVQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcclxuaW1wb3J0IHtcclxuICAgIEFmdGVyQ29udGVudEluaXQsXHJcbiAgICBDb250ZW50Q2hpbGQsXHJcbiAgICBDb250ZW50Q2hpbGRyZW4sXHJcbiAgICBEaXJlY3RpdmUsXHJcbiAgICBFbGVtZW50UmVmLFxyXG4gICAgRXZlbnRFbWl0dGVyLFxyXG4gICAgSW5qZWN0b3IsXHJcbiAgICBJbnB1dCxcclxuICAgIE9uRGVzdHJveSxcclxuICAgIE9uSW5pdCxcclxuICAgIE91dHB1dCxcclxuICAgIFBpcGVUcmFuc2Zvcm0sXHJcbiAgICBRdWVyeUxpc3QsXHJcbiAgICBUZW1wbGF0ZVJlZixcclxuICAgIFZpZXdDaGlsZFxyXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBEb21TYW5pdGl6ZXIgfSBmcm9tICdAYW5ndWxhci9wbGF0Zm9ybS1icm93c2VyJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcclxuaW1wb3J0IHsgU3ViamVjdCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBNZW51SXRlbSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2FwaSc7XHJcbmltcG9ydCB7IENvbnRleHRNZW51IH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvY29udGV4dG1lbnUnO1xyXG5pbXBvcnQgeyBUYWJsZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL3RhYmxlJztcclxuaW1wb3J0IHsgVHJlZVRhYmxlIH0gZnJvbSAndG4tY3VzdG9tLXByaW1lbmcvdHJlZXRhYmxlJztcclxuXHJcbmltcG9ydCB7IENvbXBvbmVudEJhc2UgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvY29tcG9uZW50LWJhc2UnO1xyXG5pbXBvcnQgeyBJTGlzdENvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NsYXNzZXMvYmFzZS9pLWxpc3QtY29tcG9uZW50JztcclxuaW1wb3J0IHsgQnV0dG9uVGV4dEFjdGlvbkNvbmdWaWVjLCBGb3JtU3RhdGUgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2NvbnN0YW50cyc7XHJcbmltcG9ydCB7IEVudmlyb25tZW50U2NoZW1hLCBpc0FycmF5LCBpc0xpdGVyYWxPYmplY3QgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Vudmlyb25tZW50LXNjaGVtYSc7XHJcbmltcG9ydCB7XHJcbiAgICBDaGVja0JveExpc3RDb250cm9sU2NoZW1hLFxyXG4gICAgQ29sdW1uU2NoZW1hQmFzZSxcclxuICAgIENvbHVtblNldHRpbmcsXHJcbiAgICBDb250cm9sVHlwZSxcclxuICAgIENydWRMaXN0Q29uZmlnLFxyXG4gICAgQ3J1ZExpc3REYXRhLFxyXG4gICAgQ3J1ZExpc3RTZXR0aW5nLFxyXG4gICAgRGF0YVR5cGUsXHJcbiAgICBEYXRlVGltZVJhbmdlQ29udHJvbFNjaGVtYSxcclxuICAgIERpYWxvZ01vZGVsLFxyXG4gICAgRHJvcGRvd25Db250cm9sU2NoZW1hLFxyXG4gICAgRXhwb3J0SXRlbXNNb2RlLFxyXG4gICAgRmlsZVVwbG9hZE1vZGUsXHJcbiAgICBGb3JtQ29udHJvbEJhc2UsXHJcbiAgICBIZWlnaHRUeXBlLFxyXG4gICAgTnVtYmVyUmFuZ2VDb250cm9sU2NoZW1hLFxyXG4gICAgT3BlcmF0b3IsXHJcbiAgICBQb3B1cFNpemUsXHJcbiAgICBSZWZGaWVsZCxcclxuICAgIFRleHRBbGlnbixcclxuICAgIFRleHRDb250cm9sU2NoZW1hXHJcbn0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9mb3JtLXNjaGVtYSc7XHJcbmltcG9ydCB7IFRuTWVudUl0ZW0gfSBmcm9tICcuLi8uLi9jbGFzc2VzL3RuLW1lbnUtaXRlbSc7XHJcbmltcG9ydCB7IEFjdGlvbiwgV29ya2Zsb3dTZXR0aW5nTmV3IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy93b3JrZmxvdy1zY2hlbWEnO1xyXG5pbXBvcnQgeyBnZXRSZWdleFJlc3VsdCwgcmVuZGVyVGV4dFRlbXBsYXRlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9jcnVkL3V0aWxzJztcclxuaW1wb3J0IHsgU2VhcmNoSW5mbyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvbW9kZWxzL3NlYXJjaCc7XHJcbmltcG9ydCB7IEVudW1TdGF0ZVR5cGUgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3N0YXRlbWFjaGluZXMvbW9kZWxzL2VudW1zJztcclxuaW1wb3J0IHsgU3RhdGVNYWNoaW5lc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3N0YXRlbWFjaGluZXMvc2VydmljZXMvc3RhdGVtYWNoaW5lcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgVG5DdXN0b21TY3JvbGxiYXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3RuLWN1c3RvbS1zY3JvbGxiYXIvdG4tY3VzdG9tLXNjcm9sbGJhci5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBGaWVsZERlZmluZUhhc1Rhc2ssIE1hQWN0aW9uQmF0RGF1UXV5VHJpbmggfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L21vZGVscy9jb25zdCc7XHJcbmltcG9ydCB7IFdmQWN0aW9uLCBXZkl0ZW0gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L21vZGVscy9tb2RlbHMnO1xyXG5pbXBvcnQgeyBDYW5Cb19Ib1NvU2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvY2FuYm8taG9zby5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRW50aXR5V29ya2Zsb3dIaXN0b3J5U2VydmljZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvc2VydmljZXMvZW50aXR5LXdvcmtmbG93LWhpc3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93SGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL3dvcmtmbG93LWhpc3Rvcnkuc2VydmljZSc7XHJcbmltcG9ydCB7IFdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL3dvcmtmbG93LXBlcm1pc3Npb24tZGV0YWlsLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBkYXRhU291cmNlSWNvbiB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvd29ya2Zsb3cvd29ya2Zsb3ctc2V0dGluZy93b3JrZmxvdy1zZXR0aW5nLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJ1dHRvblBlcm1pc3Npb24gfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250YW50cyc7XHJcbmltcG9ydCB7IENvbUN0eENvbnN0YW50cyB9IGZyb20gJy4uLy4uL2NvbmZpZ3MvY29tcG9uZW50LWNvbnRleHQuY29uc3RhbnQnO1xyXG5pbXBvcnQgeyBDb25nVmllY1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb25ndmllYy9jb25ndmllYy9zZXJ2aWNlcy9jb25ndmllYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRG1Mb2FpQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uZ3ZpZWMvZG0tbG9haS1jb25ndmllYy9zZXJ2aWNlcy9kbS1sb2FpLWNvbmd2aWVjLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm0sIFJlZ2V4U3BsaXRGaWVsZEJ5SXRlbSB9IGZyb20gJy4uLy4uL2NvbnN0L2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgICBGaWVsZENoZWNrYm94Q3J1ZExpc3QsXHJcbiAgICBGaWVsZENvbEV4cGFuZENydWRMaXN0LFxyXG4gICAgRmllbGRDb2xSZW9yZGVyQ3J1ZExpc3QsXHJcbiAgICBGaWVsZEZ1bmN0aW9uQ3J1ZExpc3QsXHJcbiAgICBGaWVsZEluZGV4SW5EYXRhU291cmNlLFxyXG4gICAgRmllbGRPcmRlckNydWRMaXN0XHJcbn0gZnJvbSAnLi4vLi4vZW51bXMvY29tbW9uJztcclxuaW1wb3J0IHsgRmlsdGVyLCBHcmlkSW5mbywgU29ydCB9IGZyb20gJy4uLy4uL21vZGVscy9ncmlkLWluZm8nO1xyXG5pbXBvcnQgeyBUblVzZXIgfSBmcm9tICcuLi8uLi9tb2RlbHMvdG4tdXNlcic7XHJcbmltcG9ydCB7IEtleVZhbHVlVHlwZSB9IGZyb20gJy4uLy4uL21vZGVscy90eXBlcyc7XHJcbmltcG9ydCB7IENvbW1vblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jb21tb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENydWRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY3J1ZC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgQ3VzdG9tUm91dGVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2N1c3RvbS1yb3V0ZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eU1ldGFkYXRhU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2VudGl0eS1tZXRhZGF0YS5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRXhwb3J0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2V4cG9ydC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTG9nZ2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xvZ2dlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTW9kdWxlQ29uZmlnU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL21vZHVsZS1jb25maWcuc2VydmljZSc7XHJcbmltcG9ydCB7IE5vdGlmaWVyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL25vdGlmaWVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBQZXJtaXNzaW9uU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3Blcm1pc3Npb24uc2VydmljZSc7XHJcbmltcG9ydCB7IFVzZXJTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvdXNlci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgbXVsdGlwbGVTb3J0IH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJyYXknO1xyXG5cclxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXVudXNlZC12YXJzXHJcbmRlY2xhcmUgbGV0ICQ6IGFueTtcclxuXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgYWJzdHJhY3QgY2xhc3MgTGlzdENvbXBvbmVudEJhc2UgZXh0ZW5kcyBDb21wb25lbnRCYXNlIGltcGxlbWVudHMgSUxpc3RDb21wb25lbnQsIE9uSW5pdCwgQWZ0ZXJDb250ZW50SW5pdCwgT25EZXN0cm95IHtcclxuICAgIEBWaWV3Q2hpbGQoJ3RyZWV0YWJsZScpIHRyZWVUYWJsZTogVHJlZVRhYmxlO1xyXG4gICAgdGFibGU6IFRhYmxlO1xyXG5cclxuICAgIEBWaWV3Q2hpbGQoVGFibGUsIHsgc3RhdGljOiBmYWxzZSB9KSBzZXQgX3RhYmxlKHY6IFRhYmxlKSB7XHJcbiAgICAgICAgdGhpcy50YWJsZSA9IHY7XHJcbiAgICAgICAgdGhpcy50YWJsZVJlYWR5Lm5leHQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgQFZpZXdDaGlsZCgnY29udGFpbmVyJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGFpbmVyOiBFbGVtZW50UmVmPGFueT47XHJcbiAgICBAVmlld0NoaWxkKCdpY29uVG9nZ2xlUm93R3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBpY29uVG9nZ2xlUm93R3JvdXA6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAVmlld0NoaWxkKCdpY29uVG9nZ2xlUm93RGF0YScsIHsgc3RhdGljOiB0cnVlIH0pIGljb25Ub2dnbGVSb3dEYXRhOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQFZpZXdDaGlsZCgndHJhbmdUaGFpVjUnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZVRyYW5nVGhhaVY1OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQFZpZXdDaGlsZCgndmlld0hpc3RvcnknLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZW1wbGF0ZUNvbFZpZXdIaXN0b3J5OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQFZpZXdDaGlsZCgnd29ya2Zsb3dDb3JlU3RhdHVzJywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGVXb3JrZmxvd0NvcmVTdGF0dXM6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAVmlld0NoaWxkKCdzY3JvbGxiYXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBzY3JvbGxiYXI6IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50O1xyXG4gICAgQFZpZXdDaGlsZCgnY29udGV4dE1lbnUnLCB7IHN0YXRpYzogZmFsc2UgfSkgY29udGV4dE1lbnU6IENvbnRleHRNZW51O1xyXG4gICAgQENvbnRlbnRDaGlsZCgncGFnaW5hdGlvbicsIHsgc3RhdGljOiB0cnVlIH0pIHBhZ2luYXRpb25UZW1wbGF0ZTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ3NlYXJjaEN1c3RvbScsIHsgc3RhdGljOiB0cnVlIH0pIHNlYXJjaEN1c3RvbTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2hlYWRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGhlYWRlcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2hlYWRlckZpbHRlcicsIHsgc3RhdGljOiB0cnVlIH0pIGhlYWRlckZpbHRlcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ3Jvd0V4cGFuc2lvbicsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0V4cGFuc2lvbjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ3N1bW1hcnknLCB7IHN0YXRpYzogdHJ1ZSB9KSBzdW1tYXJ5OiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnZm9vdGVyJywgeyBzdGF0aWM6IHRydWUgfSkgZm9vdGVyOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnY29sZ3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb2xncm91cDogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ3Jvd0dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgcm93R3JvdXA6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdjb250ZW50Um93R3JvdXAnLCB7IHN0YXRpYzogdHJ1ZSB9KSBjb250ZW50Um93R3JvdXA6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkcmVuKFRlbXBsYXRlUmVmKSBjaGlsZHJlbjogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xyXG5cclxuICAgIEBJbnB1dCgpIG1vZGVsOiBDcnVkTGlzdERhdGEgPSBuZXcgQ3J1ZExpc3REYXRhKCk7XHJcbiAgICBASW5wdXQoKSBzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XHJcbiAgICBASW5wdXQoKSBmaWxlTmFtZSA9ICdleHBvcnQnO1xyXG4gICAgQElucHV0KCkgbGF6eSA9IHRydWU7IC8vIMSR4bq3dCBnacOhIHRy4buLIG7DoHkgYuG6sW5nIGZhbHNlIHRow6wgc+G6vSBmaWx0ZXIgxJFjIGNsaWVudFxyXG5cclxuICAgIC8vIGR1bmcgZG9uIHZpIHJlbSBkZSB3aWR0aCBraG9uZyBiaSBhbmggaHVvbmcgYm9pIGZvbnQgc2l6ZSBjdWEgdGgsIG5vIHNlIGxheSB0aGVvIGZvbnQgc2l6ZSBjdWEgdGhlIGh0bWxcclxuICAgIEBJbnB1dCgpIHdpZHRoQ2hlY2tib3ggPSAnMi41cmVtJztcclxuICAgIEBJbnB1dCgpIHdpZHRoT3JkZXJDb2x1bW4gPSAnMy41cmVtJztcclxuICAgIF9kZWZhdWx0V2l0aEZ1bmN0aW9uQ29sdW1uID0gODE7XHJcbiAgICBfd2lkdGhGdW5jdGlvbkNvbHVtbiA9IGAke3RoaXMuX2RlZmF1bHRXaXRoRnVuY3Rpb25Db2x1bW59cHhgO1xyXG4gICAgQElucHV0KCkgd2lkdGhGdW5jdGlvbkNvbHVtbjogc3RyaW5nO1xyXG4gICAgX2NsYXNzUm93R3JvdXAgPSAnbm8tcGFkZGluZyc7XHJcbiAgICBASW5wdXQoKSBzZXQgY2xhc3NSb3dHcm91cCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2NsYXNzUm93R3JvdXAgPSBgbm8tcGFkZGluZyAke3ZhbHVlfWA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9jbGFzc1Jvd0dyb3VwID0gYG5vLXBhZGRpbmdgO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBASW5wdXQoKSBzaG93U2Nyb2xsQmFyID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHBUYWJsZVNjcm9sbGFibGUgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHBUYWJsZVNjcm9sbEhlaWdodDogc3RyaW5nID0gbnVsbDtcclxuICAgIEBJbnB1dCgpIHJlc3BvbnNpdmUgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgZW5hYmxlQmFzaWNBdXRob3JpemU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHNlcnZpY2VDb2RlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBhdXRob3JpemVQYXRoOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBhdXRob3JpemVCdXR0b25zOiBzdHJpbmdbXSA9IFtcclxuICAgICAgICBDb21DdHhDb25zdGFudHMuQ09NTU9OLkFERCxcclxuICAgICAgICBDb21DdHhDb25zdGFudHMuQ09NTU9OLkVESVQsXHJcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5ERUxFVEUsXHJcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5ERUxFVEVfTVVMVElQTEVcclxuICAgIF07XHJcbiAgICBASW5wdXQoKSBjb25maWdTY3JvbGxCYXI6IGFueSA9IHsgc3VwcHJlc3NTY3JvbGxYOiB0cnVlLCBzdXBwcmVzc1Njcm9sbFk6IGZhbHNlIH07XHJcbiAgICBASW5wdXQoKSBzaG93U2Nyb2xsSG9yaXpvbnRhbCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgc2hvd01lbnVCdXR0b25zID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHNob3dSYWRpbyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgaGlkZGVuQWRkID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBoaWRkZW5EZWxldGUgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGhpZGRlbkVkaXQgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGhpZGRlbkNvcHlMaW5rID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBoaWRkZW5WaWV3ID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBkaXNhYmxlS2V5cHJlc3NDb250cm9sID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBjYW5jZWxCdWJibGUgPSB0cnVlO1xyXG4gICAgQElucHV0KCkgZXNjYXBlID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIHNlbGVjdGlvbk1vZGU6IHN0cmluZztcclxuICAgIEBJbnB1dCgpIGNvbmZpZzogQ3J1ZExpc3RDb25maWcgPSBuZXcgQ3J1ZExpc3RDb25maWcoKTtcclxuICAgIEBJbnB1dCgpIGVuYWJsZVJlb3JkZXJSb3cgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHRlbXBsYXRlczogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gICAgQElucHV0KCkgdGVtcGxhdGVzRnJvbVBhcmVudDogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gICAgQElucHV0KCkgY2hpbGRyZW5Gcm9tUGFyZW50OiBRdWVyeUxpc3Q8VGVtcGxhdGVSZWY8YW55Pj47XHJcbiAgICBASW5wdXQoKSBtZW51QnV0dG9uczogKHJvd0RhdGEpID0+IFRuTWVudUl0ZW1bXSB8IFByb21pc2U8VG5NZW51SXRlbVtdPjtcclxuICAgIEBJbnB1dCgpIGZpZWxkT3JkZXI6IHN0cmluZyA9IEZpZWxkT3JkZXJDcnVkTGlzdDtcclxuXHJcbiAgICBfc3R5bGU6IGFueSA9IHt9O1xyXG4gICAgQElucHV0KCkgc2V0IHN0eWxlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgdGhpcy5fc3R5bGUgPSB2YWx1ZTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgc2V0IHRhYmxlQ2xhc3ModmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgPSB0aGlzLl9kZWZhdWx0VGFibGVDbGFzcztcclxuICAgICAgICBpZiAodmFsdWUgIT0gbnVsbCAmJiB2YWx1ZS50cmltKCkgIT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGFibGVDbGFzcyArPSBgICR7dmFsdWV9YDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dXBUYWJsZUNsYXNzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgX3Jhd0RhdGFTb3VyY2U6IGFueVtdID0gW107XHJcblxyXG4gICAgQElucHV0KCkgc2V0IGFsbERhdGFTb3VyY2UodmFsdWU6IGFueSkge1xyXG4gICAgICAgIGxldCBkYXRhU291cmNlID0gW10sXHJcbiAgICAgICAgICAgIHJhd0RhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUucmF3KSB7XHJcbiAgICAgICAgICAgIGRhdGFTb3VyY2UgPSB2YWx1ZS5kYXRhO1xyXG4gICAgICAgICAgICByYXdEYXRhU291cmNlID0gdmFsdWUucmF3O1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb2Nlc3NEYXRhU291cmNlKHJhd0RhdGFTb3VyY2UpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UgPSByYXdEYXRhU291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIF9kYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG4gICAgQElucHV0KCkgc2V0IGRhdGFTb3VyY2UodmFsdWU6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuaXNUcmVlVGFibGUpIHJldHVybjtcclxuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdO1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvY2Vzc0RhdGFTb3VyY2UoZGF0YVNvdXJjZSk7XHJcbiAgICAgICAgdGhpcy5fZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgdGhpcy5fcmF3RGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZmlsdGVyIG3hurdjIMSR4buLbmggY2hvIGRldiBjb2RlXHJcbiAgICBASW5wdXQoKSBmaWx0ZXJfZGVmYXVsdDogRmlsdGVyW10gPSBbXTtcclxuXHJcbiAgICBAT3V0cHV0KCkgb25Sb3dTZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlb3JkZXJlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ2hlY2tBbGwgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlbG9hZCA9IG5ldyBFdmVudEVtaXR0ZXI8R3JpZEluZm8+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25SZWxvYWRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkNvbnRlbnRJbml0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25BZGQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkVkaXQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkNvcHlMaW5rID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Db3B5TGlua011bHRpcGxlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25WaWV3ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25EZWxldGUgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkRlbGV0ZU11bHRpcGxlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25JbnZhbGlkV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkFmdGVyVHJpbmhLeSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uU3RhcnRlZFdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Qcm9jZXNzZWRXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uUm9sbGJhY2tlZFdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25DaGFuZ2VkU3RhdHVzV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSB3aWR0aEZ1bmN0aW9uQ29sdW1uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBwcml2YXRlIGlzVHJlZVRhYmxlID0gZmFsc2U7XHJcbiAgICBwcml2YXRlIHRhYmxlUmVhZHkgPSBuZXcgU3ViamVjdDxhbnk+KCk7XHJcbiAgICB0YWJsZVJlYWR5U291cmNlJCA9IHRoaXMudGFibGVSZWFkeS5hc09ic2VydmFibGUoKTtcclxuICAgIGZpZWxkQ2hlY2tib3ggPSBGaWVsZENoZWNrYm94Q3J1ZExpc3Q7XHJcbiAgICBmaWVsZENvbEV4cGFuZCA9IEZpZWxkQ29sRXhwYW5kQ3J1ZExpc3Q7XHJcbiAgICBmaWVsZENvbFJlb3JkZXIgPSBGaWVsZENvbFJlb3JkZXJDcnVkTGlzdDtcclxuICAgIGZpZWxkRnVuY3Rpb24gPSBGaWVsZEZ1bmN0aW9uQ3J1ZExpc3Q7XHJcbiAgICBmaWVsZEluZGV4SW5EYXRhU291cmNlID0gRmllbGRJbmRleEluRGF0YVNvdXJjZTtcclxuXHJcbiAgICBjaGVja2VkQWxsID0gbnVsbDtcclxuICAgIHJvd0dyb3VwQ2hlY2tlZDogYW55ID0ge307XHJcbiAgICByb3dHcm91cE1ldGFkYXRhOiBhbnkgPSB7fTtcclxuICAgIGRhdGFTb3VyY2VJbnRlcm5hbDogYW55W107XHJcbiAgICBjbGFzc1Rvb2xiYXIgPSAnJztcclxuICAgIGl0ZW1TZXR0aW5nczogYW55ID0ge307XHJcbiAgICBzb3J0SGlzdG9yeTogU29ydFtdID0gW107XHJcbiAgICBzb3J0Q2xpZW50SGlzdG9yeTogYW55ID0ge307XHJcbiAgICBfZ3JvdXBGaWVsZDogc3RyaW5nID0gbnVsbDtcclxuICAgIF9ncm91cEluQ2xpZW50ID0gZmFsc2U7XHJcbiAgICBlbmFibGVkV2YxID0gdW5kZWZpbmVkO1xyXG4gICAgc2hvd2luZ0FjdGlvbldvcmtmbG93ID0gZmFsc2U7XHJcbiAgICBidXR0b25Db250ZXh0czogTWVudUl0ZW1bXSA9IFtdO1xyXG4gICAgYXV0aG9yaXplUGF0aHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH0gPSB7fTtcclxuICAgIGJ1dHRvbkFwcGx5QXV0aG9yaXplOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSA9IHt9O1xyXG4gICAgY29tbW9uQ29uc3QgPSBDb21DdHhDb25zdGFudHMuQ09NTU9OO1xyXG5cclxuICAgIF9kZWZhdWx0VGFibGVDbGFzcyA9ICduZXctdGFibGUgc2NyLXRhYmxlIGNydWQtbGlzdC10YWJsZSc7XHJcbiAgICBfdGFibGVDbGFzcyA9ICcnO1xyXG4gICAgX3Nob3dTZXR0aW5nc1Jvd0NvbG9yID0gZmFsc2U7XHJcbiAgICBfc2hvd1NldHRpbmdzID0gZmFsc2U7XHJcbiAgICBfc2hvd1NldHRpbmdzV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgIF9zaG93U2V0dGluZ3NQZXJtaXNzaW9uID0gZmFsc2U7XHJcbiAgICBfY29sb3JGaWx0ZXJUYWJsZSA9IFtdO1xyXG4gICAgX3NvcnRGaWVsZCA9ICcnO1xyXG4gICAgX3NvcnREaXI6IC0xIHwgMCB8IDEgfCAyID0gLTE7XHJcblxyXG4gICAgdGVtcGxhdGU6IGFueSA9IHt9O1xyXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZUZpbHRlcjogRmlsdGVyW10gPSBbXTtcclxuICAgIHRlbXBsYXRlSGVhZGVyQ29udGVudDogYW55ID0ge307XHJcblxyXG4gICAgY2FjaGVkVHJhbnNmb3JtcyA9IHt9O1xyXG5cclxuICAgIGZpbHRlclNjaGVtYTogYW55ID0ge307XHJcbiAgICBmaWx0ZXJEYXRhOiBhbnkgPSB7fTtcclxuICAgIGN1cnJlbnRGaWVsZEZpbHRlcjogc3RyaW5nO1xyXG4gICAgY2hlY2tCb3hDb250ZXh0TWVudTogTWVudUl0ZW1bXSA9IFtcclxuICAgICAgICB7IGxhYmVsOiBgQ8OzYCwgaWNvbjogJ3BpIHBpLWNoZWNrJywgY29tbWFuZDogKCkgPT4gdGhpcy5jaGFuZ2VGaWx0ZXJCb29sZWFuKHRydWUpIH0sXHJcbiAgICAgICAgeyBsYWJlbDogYEtow7RuZ2AsIGljb246ICdwaSBwaS10aW1lcycsIGNvbW1hbmQ6ICgpID0+IHRoaXMuY2hhbmdlRmlsdGVyQm9vbGVhbihmYWxzZSkgfSxcclxuICAgICAgICB7IGxhYmVsOiBgSOG7p3kgYuG7j2AsIGljb246ICdwaSBwaS11bmRvJywgY29tbWFuZDogKCkgPT4gdGhpcy5jaGFuZ2VGaWx0ZXJCb29sZWFuKG51bGwpIH1cclxuICAgIF07XHJcbiAgICBzZWFyY2hJbmZvOiBTZWFyY2hJbmZvID0gbmV3IFNlYXJjaEluZm8oKTtcclxuICAgIGNyZWF0aW5nU2VhcmNoSW5mbyA9IGZhbHNlO1xyXG5cclxuICAgIGZpbHRlcl9jdXN0b206IEZpbHRlcltdID0gW107XHJcbiAgICAvLyBmaWx0ZXIgY+G7p2EgYWR2YW5jZSBzZWFyY2ggdHLhuqMgduG7gVxyXG4gICAgZmlsdGVyX2FkdmFuY2VTZWFyY2g6IEZpbHRlcltdID0gW107XHJcbiAgICAvLyBmaWx0ZXIgdGhlbyBjw6FjIGZpbHRlciBoaeG7g24gdGjhu4sgdHJvbmcgY+G7mXQgY+G7p2EgZ3JpZFxyXG4gICAgZmlsdGVyX2NvbHVtbjogRmlsdGVyW10gPSBbXTtcclxuXHJcbiAgICB0aW1lb3V0OiBhbnk7XHJcbiAgICBpbnRlcnZhbDogYW55O1xyXG4gICAgZGF0YUFkdmFuY2U6IGFueSA9IHt9O1xyXG5cclxuICAgIGN1cnJlbnRJdGVtOiBhbnk7XHJcbiAgICBzaG93Rm9ybVdvcmtmbG93ID0gZmFsc2U7XHJcbiAgICBoZWFkZXJXb3JrZmxvdyA9ICcnO1xyXG4gICAgYWN0aW9uV29ya2Zsb3c6IEFjdGlvbjtcclxuICAgIHBvcHVwU2l6ZVdvcmtmbG93OiBQb3B1cFNpemUgPSBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDk1MCwgaGVpZ2h0OiA1NDAgfSk7XHJcbiAgICBzaG93SGlzdG9yeVdvcmtmbG93ID0gZmFsc2U7XHJcbiAgICAvLyBCaeG6v24gxJHhu4Mga2nhu4NtIHRyYSBs4bqnbiBjbGljayDEkeG6p3UgdGnDqm4gY+G7p2EgdXNlciB2w6BvIGTDsm5nIHRyw6puIGdyaWRcclxuICAgIC8vIFPhu60gZOG7pW5nIMSR4buDIGZpeCBidWcgc2V0IHNlbGVjdGVkIHJvdyB04burIGZvcm0gY2hhLCBuaMawbmcgdsOgbyBmb3JtIGNvbiDhuqVuIHNhbmcgcm93IGtow6FjIG7DsyBrIGLhu48gc2VsZWN0ZWQgcm93IMSRw6Mgc2V0IHThu6sgYsOqbiBuZ2/DoGlcclxuICAgIGZpcnN0Um93Q2xpY2sgPSB0cnVlO1xyXG5cclxuICAgIHN0YXJ0V29ya2Zsb3dNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xyXG4gICAgICAgIGhlYWRlcjogJ0No4buNbiBxdXkgdHLDrG5oIG5naGnhu4dwIHbhu6Ugc+G7rSBk4bulbmcnXHJcbiAgICB9KTtcclxuICAgIHByb2Nlc3NXb3JrZmxvd01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCgpO1xyXG4gICAgY2hvWUtpZW5Nb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xyXG4gICAgICAgIGhlYWRlcjogJ0NobyDDvSBraeG6v24nLFxyXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiAxMTAwLCBoZWlnaHQ6IDY1MCB9KVxyXG4gICAgfSk7XHJcbiAgICB3b3JrZmxvd1NldHRpbmdNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoKTtcclxuICAgIHdvcmtmbG93SGlzdG9yeU1vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XHJcbiAgICAgICAgaGVhZGVyOiAnWGVtIGzhu4tjaCBz4butJ1xyXG4gICAgfSk7XHJcbiAgICBwZXJtaXNzaW9uU2hhcmluZ01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XHJcbiAgICAgICAgaGVhZGVyOiAnWGVtIGRhbmggc8OhY2ggbGluayBjaGlhIHPhursnLFxyXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiAxMTAwLCBoZWlnaHQ6IDY1MCB9KSxcclxuICAgIH0pO1xyXG4gICAgcGVybWlzc2lvbkxpc3RNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xyXG4gICAgICAgIGhlYWRlcjogJ1hlbSBkYW5oIHPDoWNoIGPDsyBxdXnhu4FuJyxcclxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogMTEwMCwgaGVpZ2h0OiA2NTAgfSksXHJcbiAgICB9KTtcclxuICAgIGNvbmdWaWVjTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcclxuICAgICAgICBoZWFkZXI6ICdDaOG6oXkgcXV5IHRyw6xuaCBjw7RuZyB2aeG7h2MnLFxyXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiAxMTAwLCBoZWlnaHQ6IDY1MCB9KSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGNvbmdWaWVjU2V0dGluZzogbmV3IENydWRMaXN0U2V0dGluZygpXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBkZXRhaWxUYXNrTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcclxuICAgICAgICBoZWFkZXI6ICdDaGkgdGnhur90IGPDtG5nIHZp4buHYydcclxuICAgIH0pO1xyXG4gICAgc2hhcmVMaW5rTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcclxuICAgICAgICBoZWFkZXI6ICdDaGlhIHPhursgcXV54buBbicsXHJcbiAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDY1MCwgaGVpZ2h0OiAzMTAgfSlcclxuICAgIH0pO1xyXG4gICAgYXR0YWNoZWRUYXNrTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcclxuICAgICAgICBoZWFkZXI6ICdEYW5oIHPDoWNoIGPDtG5nIHZp4buHYyDEkcOtbmgga8OobSdcclxuICAgIH0pO1xyXG5cclxuICAgIEJVVFRPTl9QSEFOX1FVWUVOID0gQnV0dG9uUGVybWlzc2lvbi5CVVRUT05fUEhBTl9RVVlFTjtcclxuICAgIEJVVFRPTl9DQVVfSElOSF9RVVlfVFJJTkggPSBCdXR0b25QZXJtaXNzaW9uLkJVVFRPTl9DQVVfSElOSF9RVVlfVFJJTkg7XHJcbiAgICBsc3RCdXR0b25QZXJtaXNzaW9uID0gW107XHJcbiAgICBidXR0b25QZXJtaXNzaW9uTWFwOiBNYXA8c3RyaW5nLCBib29sZWFuPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBlbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuICAgIGVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U6IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U7XHJcblxyXG4gICAgc3RhdGVNYWNoaW5lc1NlcnZpY2U6IFN0YXRlTWFjaGluZXNTZXJ2aWNlO1xyXG5cclxuICAgIGNhbkJvX0hvU29TZXJ2aWNlOiBDYW5Cb19Ib1NvU2VydmljZTtcclxuXHJcbiAgICBzb3VyY2VJY29uOiBhbnkgPSB7fTtcclxuICAgIHN0b3BDYWxjdWxhdGluZ0Z1bmN0aW9uQ29sdW1uV2lkdGggPSBmYWxzZTtcclxuICAgIHNlbGVjdGVkSXRlbUxhc3Q6IGFueTtcclxuXHJcbiAgICByb3dEYXRhQ3VycmVudDogYW55O1xyXG4gICAgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50U2NoZW1hO1xyXG4gICAgRmlsZVVwbG9hZE1vZGUgPSBGaWxlVXBsb2FkTW9kZTtcclxuICAgIGN1cnJlbnRVc2VyOiBUblVzZXI7XHJcblxyXG4gICAgcHVibGljIF9yb3V0ZXI6IFJvdXRlcjtcclxuICAgIHB1YmxpYyBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xyXG4gICAgcHVibGljIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlO1xyXG4gICAgcHVibGljIF91blN1YnNjcmliZUFsbCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIHB1YmxpYyBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2U7XHJcbiAgICBwdWJsaWMgX2V4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2U7XHJcbiAgICBwdWJsaWMgX2xvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XHJcbiAgICBwdWJsaWMgX2NvbmdWaWVjU2VydmljZTogQ29uZ1ZpZWNTZXJ2aWNlO1xyXG4gICAgcHVibGljIF9kbUxvYWlDb25nVmllY1NlcnZpY2U6IERtTG9haUNvbmdWaWVjU2VydmljZTtcclxuICAgIHB1YmxpYyBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZTtcclxuICAgIHB1YmxpYyBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xyXG4gICAgcHVibGljIF9zYW50aWxpemVyOiBEb21TYW5pdGl6ZXI7XHJcbiAgICBwdWJsaWMgX2RhdGVQaXBlOiBEYXRlUGlwZTtcclxuXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZTtcclxuICAgIHByaXZhdGUgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBfaXNUcmVlVGFibGU6IGJvb2xlYW5cclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5pc1RyZWVUYWJsZSA9IF9pc1RyZWVUYWJsZTtcclxuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuX2luamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XHJcbiAgICAgICAgdGhpcy5fY3VzdG9tUm91dGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDdXN0b21Sb3V0ZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEV4cG9ydFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTG9nZ2VyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5lbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuc3RhdGVNYWNoaW5lc1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoU3RhdGVNYWNoaW5lc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuY2FuQm9fSG9Tb1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ2FuQm9fSG9Tb1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb25nVmllY1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChEbUxvYWlDb25nVmllY1NlcnZpY2UpO1xyXG5cclxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3NhbnRpbGl6ZXIgPSB0aGlzLl9pbmplY3Rvci5nZXQoRG9tU2FuaXRpemVyKTtcclxuICAgICAgICB0aGlzLl9kYXRlUGlwZSA9IHRoaXMuX2luamVjdG9yLmdldChEYXRlUGlwZSk7XHJcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNb2R1bGVDb25maWdTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChQZXJtaXNzaW9uU2VydmljZSk7XHJcblxyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tBbGwgPSB0aGlzLmhhbmRsZUNoZWNrQWxsLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja0FsbF9Hcm91cCA9IHRoaXMuaGFuZGxlQ2hlY2tBbGxfR3JvdXAuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuQ09NTU9OLkVOVElUWV9NRVRBREFUQV9SRUxPQURFRCwgc2VydmljZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gc2VydmljZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJTY2hlbWEuZGF0ZVJhbmdlID0gbmV3IERhdGVUaW1lUmFuZ2VDb250cm9sU2NoZW1hKHsgYXBwZW5kVG86ICdib2R5JyB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kYXRlVGltZVJhbmdlID0gbmV3IERhdGVUaW1lUmFuZ2VDb250cm9sU2NoZW1hKHsgYXBwZW5kVG86ICdib2R5Jywgc2hvd1RpbWU6IHRydWUgfSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJTY2hlbWEuZHJvcGRvd24gPSB7fTtcclxuXHJcbiAgICAgICAgZGF0YVNvdXJjZUljb24uZm9yRWFjaChzb3VyY2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUljb25bc291cmNlLmlkXSA9IHNvdXJjZS50ZW47XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVGaWx0ZXIgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl90YWJsZUNsYXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgPSB0aGlzLl9kZWZhdWx0VGFibGVDbGFzcztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBUYWJsZUNsYXNzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5pdENvbHVtblNjaGVtYSh0aGlzLnNldHRpbmcuY29scyk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTZWFyY2hTY2hlbWEoKTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5UcmluaEt5IHx8ICF0aGlzLnNldHRpbmcuZGlzYWJsZVNoYXJlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5tZW51QnV0dG9ucykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51QnV0dG9ucyA9IGFzeW5jICgpID0+IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBO4bq/dSBtw6Ag4bqpbiBhZHZhbmNlc2VhcmNoID0+IHPhur0ga2jDtG5nIGPDsyB0cmlnZ2VyIGxvYWQgZGF0YSB04burIGFkdmFuY2Ugc2VhcmNoID0+IHBo4bqjaSB04buxIGfhu41pIGdldERhdGEg4bufIE9uSW5pdFxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGlkZGVuQWR2YW5jZVNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlQ29kZSAmJiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlQ29kZSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5hdXRob3JpemVQYXRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5BRERdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9BRERgO1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6ZVBhdGhzW0NvbUN0eENvbnN0YW50cy5DT01NT04uRURJVF0gPSBgJHt0aGlzLmF1dGhvcml6ZVBhdGh9L0VESVRgO1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6ZVBhdGhzW0NvbUN0eENvbnN0YW50cy5DT01NT04uREVMRVRFXSA9IGAke3RoaXMuYXV0aG9yaXplUGF0aH0vREVMRVRFYDtcclxuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkRFTEVURV9NVUxUSVBMRV0gPSBgJHt0aGlzLmF1dGhvcml6ZVBhdGh9L0RFTEVURV9NVUxUSVBMRWA7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FWFBPUlRfRVhDRUxdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9FWFBPUlRfRVhDRUxgO1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6ZVBhdGhzW0NvbUN0eENvbnN0YW50cy5DT01NT04uRVhQT1JUX0FMTF9FWENFTF0gPSBgJHt0aGlzLmF1dGhvcml6ZVBhdGh9L0VYUE9SVF9BTExfRVhDRUxgO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5hdXRob3JpemVCdXR0b25zLmZvckVhY2goYnV0dG9uID0+IHtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25BcHBseUF1dGhvcml6ZVtidXR0b25dID0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgY29uc3QgdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xyXG4gICAgICAgIGNvbnN0IHRlbXAgPSB1c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgIGlmICh0ZW1wICE9IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IG5ldyBUblVzZXIodXNlclNlcnZpY2UuZ2V0Q3VycmVudFVzZXIoKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyID09IG51bGwpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBidXR0b25QZXJtaXNzaW9uQ29kZSBvZiB0aGlzLmxzdEJ1dHRvblBlcm1pc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvblBlcm1pc3Npb24gPSBgJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGV9LyR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWV9LyR7YnV0dG9uUGVybWlzc2lvbkNvZGV9YC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5idXR0b25QZXJtaXNzaW9uTWFwLnNldChidXR0b25QZXJtaXNzaW9uLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBza2lwIGNoZWNrIHBlcm1pc3Npb24gaWYgY3VycmVudCB1c2VyIGlzIHN1cGVydXNlciBvciAoaWdub3JlQWRtaW4gPT0gZmFsc2UgYW5kIHVzZXIgaXMgYWRtaW4pXHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIuaXNzdXBlcnVzZXIudG9Mb3dlckNhc2UoKSAhPT0gJ3RydWUnXHJcbiAgICAgICAgICAgICYmICh0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50Lmlnbm9yZUFkbWluID09PSB0cnVlXHJcbiAgICAgICAgICAgICAgICB8fCB0aGlzLmN1cnJlbnRVc2VyLmlzYWRtaW4udG9Mb3dlckNhc2UoKSAhPT0gJ3RydWUnXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5fcGVybWlzc2lvblNlcnZpY2UuZ2V0U2VydmljZVBlcm1pc3Npb24odGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlKS50aGVuKHJlc3VsdCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsc3RCYXNlUGVybWlzc2lvbiA9IHJlc3VsdDtcclxuICAgICAgICAgICAgICAgIHRoaXMubHN0QnV0dG9uUGVybWlzc2lvbiA9IHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuYnV0dG9uUGVybWlzc2lvbnMgYXMgc3RyaW5nW10gPz8gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvblBlcm1pc3Npb25Db2RlIG9mIHRoaXMubHN0QnV0dG9uUGVybWlzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJ1dHRvblBlcm1pc3Npb24gPSBgJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGV9LyR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWV9LyR7YnV0dG9uUGVybWlzc2lvbkNvZGV9YC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuYnV0dG9uUGVybWlzc2lvbk1hcC5zZXQoYnV0dG9uUGVybWlzc2lvbiwgbHN0QmFzZVBlcm1pc3Npb24uaW5jbHVkZXMoYnV0dG9uUGVybWlzc2lvbikpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgbmdBZnRlckNvbnRlbnRJbml0KCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbC5maWVsZCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGVtcGxhdGUgPSB0aGlzLmZpbmRUZW1wbGF0ZShgaGVhZGVyJHtjb2wuZmllbGQuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJDYXNlKCl9JHtjb2wuZmllbGQuc3Vic3RyaW5nKDEpfWApO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRlbXBsYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZUhlYWRlckNvbnRlbnRbY29sLmZpZWxkXSA9IHRlbXBsYXRlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vbkNvbnRlbnRJbml0LmVtaXQodGhpcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0dXBUYWJsZUNsYXNzKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcubXVsdGlwbGVDaGVja1doZW5DbGlja1JvdyB8fCAhdGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBtdWx0aS1jaGVjayc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzICs9ICcgc2luZ2xlLWNoZWNrJztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuc3RpY2t5Q29sdW1uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBzdGlja3ktY29sdW1ucy1hY3RpdmUnO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oaWRkZW5DaGVja2JveCkge1xyXG4gICAgICAgICAgICB0aGlzLl90YWJsZUNsYXNzICs9ICcgaGlkZGVuLWNvbHVtbi1jaGVja2JveCc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmhpZGRlbk9yZGVyQ29sdW1uKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBoaWRkZW4tY29sdW1uLW9yZGVyJztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgaW5pdENvbHVtblNjaGVtYShjb2xzOiBDb2x1bW5TY2hlbWFCYXNlW10pIHtcclxuICAgICAgICBpZiAoIWNvbHMgfHwgIWNvbHMubGVuZ3RoKSByZXR1cm47XHJcbiAgICAgICAgbGV0IGNvbEZ1bmN0aW9uID0gbnVsbCwgY29sR3JvdXAgPSBudWxsLCBjb2xIYXNUb2dnbGVJY29uID0gbnVsbDtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29scy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2wuc2hvd1RvZ2dsZUljb24pIHtcclxuICAgICAgICAgICAgICAgIGNvbEhhc1RvZ2dsZUljb24gPSBjb2w7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGNvbC5maWVsZCA9PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgICAgICBjb2xGdW5jdGlvbiA9IGNvbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjb2wuZ3JvdXApIHtcclxuICAgICAgICAgICAgICAgIGNvbC5ncm91cCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgY29sR3JvdXAgPSBjb2w7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoY29sRnVuY3Rpb24gJiYgIWNvbEZ1bmN0aW9uLndpZHRoKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3dpZHRoRnVuY3Rpb25Db2x1bW4gPSBjb2xGdW5jdGlvbi53aWR0aDtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCFjb2xIYXNUb2dnbGVJY29uKSB7XHJcbiAgICAgICAgICAgIGNvbEhhc1RvZ2dsZUljb24gPSB0aGlzLnNldHRpbmcuY29sc1swXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29sSGFzVG9nZ2xlSWNvbi5jb2xIYXNUb2dnbGVJY29uID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmdldENvbG9yU2V0dGluZygpO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29sdW1uU2V0dGluZyhjb2xHcm91cCk7XHJcbiAgICAgICAgdGhpcy5nZXRQYWdlU2V0dGluZygpO1xyXG4gICAgICAgIHRoaXMuZXh0ZW5kQ29sdW1ucyh0aGlzLnNldHRpbmcuY29scyk7XHJcbiAgICAgICAgdGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcclxuICAgICAgICB0aGlzLmFwcGx5Q29sdW1uU2V0dGluZygpO1xyXG4gICAgICAgIHRoaXMuYnVpbGRGaWx0ZXJDb2x1bW4odGhpcy5zZXR0aW5nLmNvbHMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZXh0ZW5kQ29sdW1ucyhjb2xzOiBDb2x1bW5TY2hlbWFCYXNlW10sIGFwcGVuZENvbCA9IHRydWUpOiB2b2lkIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmID0gW107XHJcbiAgICAgICAgaWYgKCFjb2xzKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRlbXA6IENvbHVtblNjaGVtYUJhc2VbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHRtcENvbHMgPSBbLi4uY29sc107XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmRldGFpbHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscy5mb3JFYWNoKGNvbFJlb3JkZXIgPT4ge1xyXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBjb2xzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbHNbaV0uZmllbGQgPT0gY29sUmVvcmRlci5jb2x1bW5Db2RlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaChjb2xzW2ldKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29scy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIC8vIEPDsm4gbOG6oWkgbmjhu69uZyBjb2RlIG3DoCBraMO0bmcgxJHGsOG7o2MgY+G6pXUgaMOsbmggdGjDrCBnaMOpcCBs4bqhaSB0aGVvIGluZGV4IMSRxrDhu6NjIGtoYWkgYsOhb1xyXG4gICAgICAgICAgICBsZXQgdGVtcENvbHM6IENvbHVtblNjaGVtYUJhc2VbXSA9IFtdO1xyXG4gICAgICAgICAgICBjb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgICAgIGxldCBpbmRleENvbE9sZCA9IHRtcENvbHMuZmluZEluZGV4KHAgPT4gcC5maWVsZCA9PSBjb2wuZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4Q29sT2xkID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wLnNwbGljZSgwLCAwLCBjb2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gVMOsbSB24buLIHRyw60gY+G7p2EgY+G7mXQgcGjDrWEgdHLGsOG7m2MgdHJvbmcgbGlzdCByZW9yZGVyIG3hu5tpXHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4Q29sQmVmb3JlTmV3ID0gdGVtcC5maW5kSW5kZXgocCA9PiBwLmZpZWxkID09IHRtcENvbHNbaW5kZXhDb2xPbGQgLSAxXS5maWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4Q29sQmVmb3JlTmV3ID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBDb2xzLnNwbGljZSgwLCAwLCBjb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUw6xtIHbhu4sgdHLDrSBj4bunYSBj4buZdCB0csaw4bubYyBj4buZdCDEkWFuZyBraeG7g20gdHJhIHRyb25nIGxpc3QgY+G7mXQgZ+G7kWNcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb2xPbGQgPSB0bXBDb2xzLmZpbmRJbmRleChwID0+IHAuZmllbGQgPT0gdG1wQ29sc1tpbmRleENvbE9sZCAtIDFdLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhDb2xCZWZvcmVOZXcgPSB0ZW1wLmZpbmRJbmRleChwID0+IHAuZmllbGQgPT0gdG1wQ29sc1tpbmRleENvbE9sZCAtIDFdLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gPT4gxJDhur9uIGtoaSB0aOG6pXkgdGjDrCBhZGQgY+G7mXQgaGnhu4duIHThuqFpIHbDoCBsaXN0IHThuqFtIHbDoG8gduG7iyB0csOtIGNow6huXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4Q29sQmVmb3JlTmV3ID09IHRlbXAubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2goY29sLCAuLi50ZW1wQ29scyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnNwbGljZShpbmRleENvbEJlZm9yZU5ldyArIDEsIDAsIGNvbCwgLi4udGVtcENvbHMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0ZW1wQ29scyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbHMuc3BsaWNlKDAsIGNvbHMubGVuZ3RoKTtcclxuICAgICAgICBjb2xzLnNwbGljZSgwLCAwLCAuLi50ZW1wKTtcclxuXHJcbiAgICAgICAgbGV0IGZpcnN0Q29sVmlzaWJsZSA9IG51bGw7XHJcbiAgICAgICAgbGV0IGZvdW5kSXRlbVNob3dFZGl0TGluayA9IGZhbHNlO1xyXG4gICAgICAgIHRlbXAuc3BsaWNlKDAsIHRlbXAubGVuZ3RoKTtcclxuICAgICAgICBsZXQgdG1wQ29sOiBDb2x1bW5TY2hlbWFCYXNlID0gbnVsbDtcclxuICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQgb2YgY29scykge1xyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5yYXdDb2x1bW4pIHtcclxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRlbXAucHVzaChlbGVtZW50KTtcclxuICAgICAgICAgICAgY29uc3QgY29uZmlnID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscy5maW5kKHAgPT4gcC5jb2x1bW5Db2RlID09IGVsZW1lbnQuZmllbGQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcudmlzaWJsZSAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy52aXNpYmxlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBjb25maWcudmlzaWJsZTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQubGFiZWwpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQubGFiZWwgPSB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZWxlbWVudC5sYWJlbCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChjb25maWcgJiYgY29uZmlnLnRleHRBbGlnbiAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy50ZXh0QWxpZ24gIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQudGV4dEFsaWduID0gY29uZmlnLnRleHRBbGlnbjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcud2lkdGggIT09IHVuZGVmaW5lZCAmJiBjb25maWcud2lkdGggIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQud2lkdGggPSBjb25maWcud2lkdGg7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LmRhdGFUeXBlID09IG51bGwgfHwgZWxlbWVudC5kYXRhVHlwZSA9PSB1bmRlZmluZWQgfHwgZWxlbWVudC5kYXRhVHlwZSA9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5kYXRhVHlwZSA9IERhdGFUeXBlLnN0cmluZztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQudmlzaWJsZVxyXG4gICAgICAgICAgICAgICAgfHwgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtblxyXG4gICAgICAgICAgICAgICAgICAgICYmIGVsZW1lbnQuZmllbGQgPT0gdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZpZWxkXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYmFzZVNlcnZpY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29udHJvbFR5cGUgPSBDb250cm9sVHlwZS5kcm9wZG93bjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQucmF3Q29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYucHVzaChuZXcgUmVmRmllbGQoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWxlbWVudFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnZhbHVlRmllbGQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZUZpZWxkID0gJ2lkJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5kaXNwbGF5RmllbGQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kaXNwbGF5RmllbGQgPSAndGVuJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0bXBDb2wgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Q29sdW1uOiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGVsZW1lbnQuZGF0YVR5cGVSZWZGaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiAnc3RyJyArIGVsZW1lbnQuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd0ZpbHRlcjogZWxlbWVudC5hbGxvd0ZpbHRlcixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvcnQ6IGZhbHNlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29uZmlnUmVmRmllbGQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzLmZpbmQocCA9PiBwLmNvbHVtbkNvZGUgPT0gdG1wQ29sLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbmZpZ1JlZkZpZWxkICYmIGNvbmZpZ1JlZkZpZWxkLnZpc2libGUgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdG1wQ29sLnZpc2libGUgPSBjb25maWdSZWZGaWVsZC52aXNpYmxlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaCh0bXBDb2wpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZpc2libGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmaXJzdENvbFZpc2libGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpcnN0Q29sVmlzaWJsZSA9IHRtcENvbDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVsZW1lbnQuZGF0YVNvdXJjZSAmJiBlbGVtZW50LmRhdGFTb3VyY2UubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29udHJvbFR5cGUgPSBDb250cm9sVHlwZS5kcm9wZG93bjtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIWVsZW1lbnQucmF3Q29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0bXBDb2wgPSBuZXcgQ29sdW1uU2NoZW1hQmFzZSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3Q29sdW1uOiBlbGVtZW50LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFR5cGU6IENvbnRyb2xUeXBlLmRyb3Bkb3duLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IGVsZW1lbnQuZGF0YVR5cGVSZWZGaWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VTZXJ2aWNlOiBudWxsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgZWxlbWVudC5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBlbGVtZW50LmFsbG93RmlsdGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdSZWZGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmRldGFpbHMuZmluZChwID0+IHAuY29sdW1uQ29kZSA9PSB0bXBDb2wuZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnUmVmRmllbGQgJiYgY29uZmlnUmVmRmllbGQudmlzaWJsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDb2wudmlzaWJsZSA9IGNvbmZpZ1JlZkZpZWxkLnZpc2libGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKHRtcENvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Q29sVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb2xWaXNpYmxlID0gdG1wQ29sO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoIWZpcnN0Q29sVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpcnN0Q29sVmlzaWJsZSA9IGVsZW1lbnQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5mb3JjZUdldERhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmJhc2VTZXJ2aWNlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZmllbGROZWVkR2V0UmVmLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5lbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWVGaWVsZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmFsdWVGaWVsZCA9ICdpZCc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXlGaWVsZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuZGlzcGxheUZpZWxkID0gJ3Rlbic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnNob3dFZGl0TGluaykge1xyXG4gICAgICAgICAgICAgICAgZm91bmRJdGVtU2hvd0VkaXRMaW5rID0gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWZvdW5kSXRlbVNob3dFZGl0TGluayAmJiBmaXJzdENvbFZpc2libGUpIHtcclxuICAgICAgICAgICAgZmlyc3RDb2xWaXNpYmxlLnNob3dFZGl0TGluayA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbHMubGVuZ3RoID0gMDtcclxuICAgICAgICBjb2xzLnB1c2goLi4udGVtcCk7XHJcblxyXG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZEhhc01heGltdW1MZW5ndGggPSBbXTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtV29yZCA9IFtdO1xyXG4gICAgICAgIGNvbHMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIWNvbC52aXNpYmxlKSByZXR1cm47XHJcbiAgICAgICAgICAgIGlmIChjb2wubWF4V29yZERpc3BsYXkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZEhhc01heGltdW1Xb3JkLnB1c2goY29sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjb2wubWF4TGVuZ3RoRGlzcGxheSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bUxlbmd0aC5wdXNoKGNvbCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZm9ybWF0Q29sdW1ucyhjb2xzOiBDb2x1bW5TY2hlbWFCYXNlW10pOiB2b2lkIHtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xzKSB7XHJcbiAgICAgICAgICAgIGlmIChjb2wuZGF0YVR5cGUgPT0gJ2RhdGUnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWNvbC5mb3JtYXQpIGNvbC5mb3JtYXQgPSAnbm9ybWFsJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb2wuZXh0ZW5kRGF0YS5zdHlsZSA9IHRoaXMuZ2V0Q29sdW1uU3R5bGUoY29sKTtcclxuICAgICAgICAgICAgY29sLmV4dGVuZERhdGEuaGVhZGVyU3R5bGUgPSB0aGlzLmdldENvbHVtblN0eWxlKGNvbCwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIGNvbC5leHRlbmREYXRhLmhlYWRlckNsYXNzID0gdGhpcy5nZXRDZWxsQ2xhc3NIZWFkZXIoY29sKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5TZXR0aW5nKGNvbEdyb3VwOiBDb2x1bW5TY2hlbWFCYXNlKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uID0gY29sR3JvdXA7XHJcbiAgICAgICAgY29uc3QgZGF0YVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xVTU5fU0VUVElORyk7XHJcbiAgICAgICAgaWYgKGRhdGFTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcclxuICAgICAgICAgICAgICAgIHBhdGhOYW1lICs9ICcvJyArIHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbnN0IHNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhU2V0dGluZyk7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBzZXR0aW5ncykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc3QgZWxlbWVudCA9IHNldHRpbmdzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHBhdGhOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkID0gZWxlbWVudC5zZXR0aW5nLnNvcnRGaWVsZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RGlyID0gZWxlbWVudC5zZXR0aW5nLnNvcnREaXIgPyBlbGVtZW50LnNldHRpbmcuc29ydERpciA6IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkID0gZWxlbWVudC5zZXR0aW5nLmdyb3VwRmllbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBJbkNsaWVudCA9IGVsZW1lbnQuc2V0dGluZy5ncm91cEluQ2xpZW50O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCAmJiBjb2xHcm91cCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0R3JvdXBGaWVsZChjb2xHcm91cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmRldGFpbHMgPSBlbGVtZW50LnNldHRpbmcuZGV0YWlscztcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChjb2xHcm91cCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldEdyb3VwRmllbGQoY29sR3JvdXApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldEdyb3VwRmllbGQoY29sR3JvdXApIHtcclxuICAgICAgICBpZiAoKGNvbEdyb3VwLmRhdGFTb3VyY2UgJiYgY29sR3JvdXAuZGF0YVNvdXJjZS5sZW5ndGggPiAwKVxyXG4gICAgICAgICAgICB8fCBjb2xHcm91cC5iYXNlU2VydmljZSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkID0gYHN0ciR7Y29sR3JvdXAuZmllbGR9YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQgPSBjb2xHcm91cC5maWVsZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzYXZlQ29sdW1uU2V0dGluZygpIHtcclxuICAgICAgICBsZXQgcGF0aE5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcclxuICAgICAgICAgICAgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjb2x1bW5TZXR0aW5nID0gW107XHJcbiAgICAgICAgbGV0IGNoZWNrRXhpc3QgPSBmYWxzZTtcclxuICAgICAgICBjb25zdCBkYXRhU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkNPTFVNTl9TRVRUSU5HKTtcclxuICAgICAgICBpZiAoZGF0YVNldHRpbmcpIHtcclxuICAgICAgICAgICAgY29sdW1uU2V0dGluZyA9IEpTT04ucGFyc2UoZGF0YVNldHRpbmcpO1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtU2V0dGluZyA9IGNvbHVtblNldHRpbmcuZmluZChxID0+IHEucGF0aG5hbWUgPT0gcGF0aE5hbWUpO1xyXG4gICAgICAgICAgICBpZiAoaXRlbVNldHRpbmcpIHtcclxuICAgICAgICAgICAgICAgIGl0ZW1TZXR0aW5nLnNldHRpbmcuc29ydEZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkO1xyXG4gICAgICAgICAgICAgICAgaXRlbVNldHRpbmcuc2V0dGluZy5zb3J0RGlyID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydERpcjtcclxuICAgICAgICAgICAgICAgIGl0ZW1TZXR0aW5nLnNldHRpbmcuZ3JvdXBGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQ7XHJcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLmdyb3VwSW5DbGllbnQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEluQ2xpZW50O1xyXG4gICAgICAgICAgICAgICAgaXRlbVNldHRpbmcuc2V0dGluZy5kZXRhaWxzID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscztcclxuICAgICAgICAgICAgICAgIGNoZWNrRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNoZWNrRXhpc3QpIHtcclxuICAgICAgICAgICAgY29sdW1uU2V0dGluZy5wdXNoKHsgcGF0aG5hbWU6IHBhdGhOYW1lLCBzZXR0aW5nOiB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZyB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkNPTFVNTl9TRVRUSU5HLCBKU09OLnN0cmluZ2lmeShjb2x1bW5TZXR0aW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBkZWxldGVDb2x1bW5TZXR0aW5nKCkge1xyXG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2V0dGluZ0tleSkge1xyXG4gICAgICAgICAgICBwYXRoTmFtZSArPSAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNvbHVtblNldHRpbmcgPSBbXTtcclxuICAgICAgICBjb25zdCBkYXRhU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkNPTFVNTl9TRVRUSU5HKTtcclxuICAgICAgICBpZiAoZGF0YVNldHRpbmcpIHtcclxuICAgICAgICAgICAgY29sdW1uU2V0dGluZyA9IEpTT04ucGFyc2UoZGF0YVNldHRpbmcpO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IGNvbHVtblNldHRpbmcuZmluZEluZGV4KHEgPT4gcS5wYXRobmFtZSA9PSBwYXRoTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSBjb2x1bW5TZXR0aW5nLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xVTU5fU0VUVElORywgSlNPTi5zdHJpbmdpZnkoY29sdW1uU2V0dGluZykpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q29sb3JTZXR0aW5nKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFQYWdlU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkNPTE9SX1NFVFRJTkcpO1xyXG4gICAgICAgIGlmIChkYXRhUGFnZVNldHRpbmcpIHtcclxuICAgICAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2V0dGluZ0tleSkge1xyXG4gICAgICAgICAgICAgICAgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGRhdGFQYWdlU2V0dGluZyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc2V0dGluZ3MubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGVsZW1lbnQgPSBzZXR0aW5nc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhdGhuYW1lID09PSBwYXRoTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkID0gZWxlbWVudC5jb2xvckZpbHRlckZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlID0gZWxlbWVudC5jb2xvckZpbHRlclRhYmxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY2FjaGVDb2xvclNldHRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNhY2hlQ29sb3JTZXR0aW5nKCkge1xyXG4gICAgICAgIHRoaXMuX2NvbG9yRmlsdGVyVGFibGUgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlW2ldO1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtVmFsdWVzID0gW107XHJcbiAgICAgICAgICAgIGl0ZW1WYWx1ZXNbMF0gPSBpdGVtLmNvbXBhcmVUeXBlO1xyXG4gICAgICAgICAgICBpdGVtVmFsdWVzWzFdID0gaXRlbS5maWx0ZXJWYWx1ZTtcclxuICAgICAgICAgICAgaXRlbVZhbHVlc1syXSA9IHRoaXMuY29udmVydFRvRGF0ZShpdGVtLmZpbHRlclZhbHVlKTtcclxuICAgICAgICAgICAgaXRlbVZhbHVlc1szXSA9IE51bWJlcihpdGVtLmZpbHRlclZhbHVlKTtcclxuICAgICAgICAgICAgaXRlbVZhbHVlc1s0XSA9ICgvdHJ1ZS9pKS50ZXN0KGl0ZW0uZmlsdGVyVmFsdWUpO1xyXG4gICAgICAgICAgICBpdGVtVmFsdWVzWzVdID0gaXRlbS5jb2xvcjtcclxuICAgICAgICAgICAgdGhpcy5fY29sb3JGaWx0ZXJUYWJsZS5wdXNoKGl0ZW1WYWx1ZXMpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNldENvbG9yU2V0dGluZygpIHtcclxuICAgICAgICBsZXQgcGF0aE5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcclxuICAgICAgICAgICAgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBjb2xvclNldHRpbmcgPSBbXTtcclxuICAgICAgICBsZXQgY2hlY2tFeGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGRhdGFDb2xvclNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xPUl9TRVRUSU5HKTtcclxuICAgICAgICBpZiAoZGF0YUNvbG9yU2V0dGluZykge1xyXG4gICAgICAgICAgICBjb2xvclNldHRpbmcgPSBKU09OLnBhcnNlKGRhdGFDb2xvclNldHRpbmcpO1xyXG4gICAgICAgICAgICBjb2xvclNldHRpbmcuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhdGhuYW1lID09PSBwYXRoTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29sb3JGaWx0ZXJGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQuY29sb3JGaWx0ZXJUYWJsZSA9IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlO1xyXG4gICAgICAgICAgICAgICAgICAgIGNoZWNrRXhpc3QgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY2hlY2tFeGlzdCkge1xyXG4gICAgICAgICAgICBjb2xvclNldHRpbmcucHVzaCh7XHJcbiAgICAgICAgICAgICAgICBwYXRobmFtZTogcGF0aE5hbWUsXHJcbiAgICAgICAgICAgICAgICBjb2xvckZpbHRlckZpZWxkOiB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZCxcclxuICAgICAgICAgICAgICAgIGNvbG9yRmlsdGVyVGFibGU6IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlclRhYmxlXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MT1JfU0VUVElORywgSlNPTi5zdHJpbmdpZnkoY29sb3JTZXR0aW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRQYWdlU2V0dGluZygpIHtcclxuICAgICAgICBjb25zdCBkYXRhUGFnZVNldHRpbmcgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5QQUdFX1NFVFRJTkcpO1xyXG4gICAgICAgIGlmIChkYXRhUGFnZVNldHRpbmcpIHtcclxuICAgICAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2V0dGluZ0tleSkge1xyXG4gICAgICAgICAgICAgICAgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgcGFnZVNldHRpbmdzID0gSlNPTi5wYXJzZShkYXRhUGFnZVNldHRpbmcpO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHBhZ2VTZXR0aW5ncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHBhZ2VTZXR0aW5nc1tpXTtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhdGhuYW1lID09PSBwYXRoTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSA9IGVsZW1lbnQucGFnZVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzYXZlUGFnZVNldHRpbmcoKSB7XHJcbiAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5KSB7XHJcbiAgICAgICAgICAgIHBhdGhOYW1lICs9ICcvJyArIHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgcGFnZVNldHRpbmcgPSBbXTtcclxuICAgICAgICBsZXQgY2hlY2tFeGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGRhdGFQYWdlU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLlBBR0VfU0VUVElORyk7XHJcbiAgICAgICAgaWYgKGRhdGFQYWdlU2V0dGluZykge1xyXG4gICAgICAgICAgICBwYWdlU2V0dGluZyA9IEpTT04ucGFyc2UoZGF0YVBhZ2VTZXR0aW5nKTtcclxuICAgICAgICAgICAgcGFnZVNldHRpbmcuZm9yRWFjaChlbGVtZW50ID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LnBhdGhuYW1lID09PSBwYXRoTmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGVsZW1lbnQucGFnZVNpemUgPSB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tFeGlzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjaGVja0V4aXN0KSB7XHJcbiAgICAgICAgICAgIHBhZ2VTZXR0aW5nLnB1c2goeyBwYXRobmFtZTogcGF0aE5hbWUsIHBhZ2VTaXplOiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemUgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5QQUdFX1NFVFRJTkcsIEpTT04uc3RyaW5naWZ5KHBhZ2VTZXR0aW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgY2hlY2tJc0luc2lkZURpYWxvZygpIHtcclxuICAgICAgICBjb25zdCAkZGlhbG9nID0gdGhpcy5jb250YWluZXIubmF0aXZlRWxlbWVudC5jbG9zZXN0KCcucC1kaWFsb2cnKTtcclxuICAgICAgICByZXR1cm4gISEkZGlhbG9nO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZVJlYWR5KCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZml4SGVpZ2h0VHlwZUluRGlhbG9nKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmNoZWNrSXNJbnNpZGVEaWFsb2coKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmhlaWdodFR5cGUgPSBIZWlnaHRUeXBlLmN1c3RvbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uUmVhZHkuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrQWxsb3dTZWxlY3RSb3coZXZ0LCByb3dEYXRhKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY29uZmlnLmRpc2FibGVSb3dTZWxlY3RXaGVuQ2xpY2tBY3Rpb25cclxuICAgICAgICAgICAgJiYgKGV2dC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCcubGluay1vci1hY3Rpb24nKVxyXG4gICAgICAgICAgICAgICAgfHwgZXZ0LnRhcmdldC5jbG9zZXN0KCcubGluay1vci1hY3Rpb24nKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gQ2xpY2sgdsOgbyBjaGVja2JveFxyXG4gICAgICAgIGlmIChldnQudGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygncC1jaGVja2JveC1ib3gnKSB8fCBldnQudGFyZ2V0LmNsb3Nlc3QoJy5wLWNoZWNrYm94LWJveCcpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jaGVja0FsbG93U2VsZWN0Um93ICYmICF0aGlzLnNldHRpbmcuY2hlY2tBbGxvd1NlbGVjdFJvdyhyb3dEYXRhLCBldnQpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlU2VsZWN0Um93ID0gKGV2dCwgZGF0YSkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGFzQ3VzdG9tSGFuZGxlQ2xpY2tSb3cpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQWxsb3dTZWxlY3RSb3coZXZ0LCBkYXRhKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IG9sZENoZWNrZWQgPSBkYXRhLl9jaGVja2VkO1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLm11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3cpIHtcclxuICAgICAgICAgICAgbGV0IGRhdGFUb0NsZWFyQ2hlY2tlZCA9IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpcnN0Um93Q2xpY2spIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlyc3RSb3dDbGljayA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgZGF0YVRvQ2xlYXJDaGVja2VkID0gdGhpcy5fcmF3RGF0YVNvdXJjZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGRhdGFUb0NsZWFyQ2hlY2tlZCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBkYXRhVG9DbGVhckNoZWNrZWQuZm9yRWFjaCgocCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIHAuX2NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBkYXRhLl9jaGVja2VkID0gIW9sZENoZWNrZWQ7XHJcbiAgICAgICAgbGV0IGZpcmVFdmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuZmlyZUV2ZW50V2hlblJlU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbUxhc3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1MYXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGZpcmVFdmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhKGRhdGEsIGV2dC50YXJnZXQuY2xvc2VzdCgndHInKSwgZmlyZUV2ZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgaGFuZGxlU2VsZWN0Um93R3JvdXAgPSAoZXZ0LCBkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmNoZWNrQWxsb3dTZWxlY3RSb3coZXZ0LCBkYXRhKSkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLm11bHRpcGxlQ2hlY2tXaGVuQ2xpY2tSb3cpIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbXNNb2RpZmllZCA9IFsuLi50aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXNdO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuZm9yRWFjaCgocCwgaW5kZXgpID0+IHtcclxuICAgICAgICAgICAgICAgIHAuX2NoZWNrZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIGlmICghaXRlbXNNb2RpZmllZC5zb21lKHEgPT4gcS5pZCA9PSBkYXRhLmlkKSkge1xyXG4gICAgICAgICAgICAgICAgaXRlbXNNb2RpZmllZC5wdXNoKGRhdGEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGl0ZW1zTW9kaWZpZWQuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhX0dyb3VwKGl0ZW0sIG51bGwsIGZhbHNlKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGEuX2NoZWNrZWQgPSAhZGF0YS5fY2hlY2tlZDtcclxuXHJcbiAgICAgICAgbGV0IGZpcmVFdmVudCA9IHRydWU7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuZmlyZUV2ZW50V2hlblJlU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSXRlbUxhc3QgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEl0ZW1MYXN0ID0gbnVsbDtcclxuICAgICAgICAgICAgICAgIGZpcmVFdmVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhX0dyb3VwKGRhdGEsIGV2dC50YXJnZXQuY2xvc2VzdCgndHInKSwgZmlyZUV2ZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRMYXN0SXRlbVNlbGVjdGVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3QgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXNbdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aCAtIDFdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1MYXN0ID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfZW1pdFJvd1NlbGVjdCh0ckVsZW1lbnQsIGRhdGEpIHtcclxuICAgICAgICB0aGlzLm9uUm93U2VsZWN0LmVtaXQoe1xyXG4gICAgICAgICAgICBlbGVtZW50OiB0ckVsZW1lbnQsXHJcbiAgICAgICAgICAgIGRhdGFcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlVG9nZ2xlUm93KHJvd0RhdGEsIGV2dCkge1xyXG4gICAgICAgIHRoaXMudGFibGUudG9nZ2xlUm93KHJvd0RhdGEsIGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfc2hvd0NvbnRleHRNZW51KGV2dCkge1xyXG4gICAgICAgIC8vIHNldFRpbWVvdXQgxJHhu4MgZml4IGJ1ZyBoaeG7g24gdGjhu4sgY29udGV4dCBtZW51IHRyw6BuIHJhIG5nb8OgaSBtw6BuIGjDrG5oXHJcbiAgICAgICAgc2V0VGltZW91dChmID0+IHtcclxuICAgICAgICAgICAgdGhpcy5jb250ZXh0TWVudS5zaG93KGV2dCk7XHJcbiAgICAgICAgfSwgMTApO1xyXG4gICAgICAgIGV2dC5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgICAgIGV2dC5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEZpbHRlcnMoKTogRmlsdGVyW10ge1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IFtdO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9kZWZhdWx0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmlsdGVyX2RlZmF1bHQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJfY3VzdG9tKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLnRoaXMuZmlsdGVyX2N1c3RvbSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9jb2x1bW4pIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfY29sdW1uKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2FkdmFuY2VTZWFyY2gpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfYWR2YW5jZVNlYXJjaCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0R3JpZEluZm8oKSB7XHJcbiAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBuZXcgR3JpZEluZm8oe1xyXG4gICAgICAgICAgICBwYWdlSW5mbzoge1xyXG4gICAgICAgICAgICAgICAgcGFnZTogdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UsXHJcbiAgICAgICAgICAgICAgICBwYWdlU2l6ZTogdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2VTaXplXHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGZpbHRlcnM6IHRoaXMuZ2V0RmlsdGVycygpLFxyXG4gICAgICAgICAgICBzb3J0czogW10sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKHRoaXMuX2dyb3VwRmllbGQgJiYgIXRoaXMuX2dyb3VwSW5DbGllbnQpIHtcclxuICAgICAgICAgICAgZ3JpZEluZm8uc29ydHMudW5zaGlmdCh7IGZpZWxkOiB0aGlzLl9ncm91cEZpZWxkLCBkaXI6IDEgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9zb3J0RmllbGQgJiYgdGhpcy5fc29ydERpciAhPT0gMCkge1xyXG4gICAgICAgICAgICBncmlkSW5mby5zb3J0cy5wdXNoKHsgZmllbGQ6IHRoaXMuX3NvcnRGaWVsZCwgZGlyOiB0aGlzLl9zb3J0RGlyIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGdyaWRJbmZvO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVTZWFyY2hBZHZzKGZpbHRlcnM6IEZpbHRlcltdKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJfYWR2YW5jZVNlYXJjaCA9IGZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSAxO1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUluaXRBZHZhbmNlU2VhcmNoKGZpbHRlcnM6IEZpbHRlcltdKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJfYWR2YW5jZVNlYXJjaCA9IGZpbHRlcnM7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldERhdGEoKSB7XHJcbiAgICAgICAgY29uc3QgaW5mb0dldERhdGEgPSB0aGlzLmdldEdyaWRJbmZvKCk7XHJcbiAgICAgICAgdGhpcy5vblJlbG9hZC5lbWl0KGluZm9HZXREYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICByZWxvYWQoZmlsdGVyX2N1c3RvbT86IEZpbHRlcltdLCBwYWdlID0gMSkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyX2N1c3RvbSA9IGZpbHRlcl9jdXN0b207XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSBwYWdlO1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkYW5oU29UaHVUdUdyb3VwTGFzdGVzdCgpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc29ydEdyb3VwTGFzdE1vZGVsQmFzZSgpLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzLCAnxJDDoW5oIGzhuqFpIHPhu5EgdGjhu6kgdOG7sSB0aMOgbmggY8O0bmcnLCBmID0+IHtcclxuXHJcbiAgICAgICAgfSkpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhZGQoKSB7XHJcbiAgICAgICAgdGhpcy5vbkFkZC5lbWl0KCk7XHJcbiAgICB9XHJcblxyXG4gICAgeHVhdENhY011Y0RhQ2hvbigpIHtcclxuICAgICAgICBzd2l0Y2ggKHRoaXMuc2V0dGluZy5leHBvcnRJdGVtc01vZGUpIHtcclxuICAgICAgICAgICAgY2FzZSBFeHBvcnRJdGVtc01vZGUuRnJvbUh0bWw6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cG9ydEJ5UmVhZGluZ0h0bWwoKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEV4cG9ydEl0ZW1zTW9kZS5NYW51YWxHZXREYXRhOlxyXG4gICAgICAgICAgICBjYXNlIEV4cG9ydEl0ZW1zTW9kZS5BdXRvR2V0RGF0YTpcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnVGhlIGZ1bmN0aW9uIGhhdmVuXFwndCBzdXBwb3J0ZWQgeWV0Jyk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGV4cG9ydEJ5UmVhZGluZ0h0bWwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuX2dyb3VwRmllbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDaMawYSBo4buXIHRy4bujIHh14bqldCBjw7MgbmjDs20gZOG7ryBsaeG7h3UhJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLnRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgdGFibGVFbGUgPSBlbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RhYmxlJyk7XHJcbiAgICAgICAgY29uc3QgaGVhZEVsZSA9IHRhYmxlRWxlLnF1ZXJ5U2VsZWN0b3IoJ3RoZWFkJyk7XHJcbiAgICAgICAgY29uc3QgYm9keUVsZSA9IHRhYmxlRWxlLnF1ZXJ5U2VsZWN0b3IoJ3Rib2R5Jyk7XHJcblxyXG4gICAgICAgIC8vIGhlYWRlci5cclxuICAgICAgICBjb25zdCBhcnJIZWFkID0gdGhpcy5nZXRBcnJIZWFkQnlIdG1sKGhlYWRFbGUpO1xyXG4gICAgICAgIGlmICghYXJySGVhZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBib2R5LlxyXG4gICAgICAgIGNvbnN0IGFyclJvd0RhdGEgPSB0aGlzLmdldEFyclJvd0RhdGFCeUh0bWwoYm9keUVsZSwgYXJySGVhZCk7XHJcblxyXG4gICAgICAgIC8vIGV4cG9ydC5cclxuICAgICAgICBjb25zdCBkYXRhRXhwb3J0ID0gW2FyckhlYWQubWFwKGkgPT4gaS52YWx1ZSksIC4uLmFyclJvd0RhdGFdO1xyXG4gICAgICAgIGNvbnN0IGZpbGVOYW1lID0gYERhbmggc8OhY2ggJHt0aGlzLnNldHRpbmcub2JqZWN0TmFtZX1gO1xyXG4gICAgICAgIHRoaXMuX2V4cG9ydFNlcnZpY2Uub2JqZWN0VG9FeGNlbChkYXRhRXhwb3J0LCBmaWxlTmFtZSk7XHJcblxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRBcnJIZWFkQnlIdG1sKGhlYWRlcikge1xyXG4gICAgICAgIGNvbnN0IGZpcnN0Um93ID0gaGVhZGVyLnF1ZXJ5U2VsZWN0b3IoJ3RyJyk7XHJcbiAgICAgICAgaWYgKCFmaXJzdFJvdykge1xyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYXJyVGggPSBmaXJzdFJvdy5xdWVyeVNlbGVjdG9yQWxsKCd0aCcpO1xyXG5cclxuICAgICAgICBjb25zdCBzdGFydEluZGV4ID0gdGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94ID8gMCA6IDE7XHJcbiAgICAgICAgY29uc3QgZW5kSW5kZXggPSBhcnJUaC5sZW5ndGggLSAodGhpcy5zZXR0aW5nLmhpZGRlbkZ1bmN0aW9uQ29sdW1uID8gMCA6IDEpIC0gMTtcclxuICAgICAgICBpZiAoc3RhcnRJbmRleCA+IGVuZEluZGV4KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXJySGVhZGVyID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0SW5kZXg7IGkgPD0gZW5kSW5kZXg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAoYXJyVGhbaV0uaW5uZXJUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBhcnJIZWFkZXIucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksXHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGFyclRoW2ldLmlubmVyVGV4dFxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBhcnJIZWFkZXI7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFyclJvd0RhdGFCeUh0bWwoYm9keUVsZSwgYXJySGVhZCkge1xyXG4gICAgICAgIGNvbnN0IGFyclJvdyA9IGJvZHlFbGUucXVlcnlTZWxlY3RvckFsbCgndHIudWktc3RhdGUtaGlnaGxpZ2h0Jyk7XHJcbiAgICAgICAgaWYgKCFhcnJSb3cubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGFyclJvd0RhdGEgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyclJvdy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCByb3cgPSBhcnJSb3dbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IGFyclRkID0gcm93LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RkJyk7XHJcbiAgICAgICAgICAgIGxldCBjdXJyZW50VGQ7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSBbXTtcclxuXHJcbiAgICAgICAgICAgIGFyckhlYWQuZm9yRWFjaChoZWFkID0+IHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRUZCA9IGFyclRkW2hlYWQuaW5kZXhdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRUZC5pbm5lclRleHQgPT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5wdXNoKHRoaXMuZ2V0VmFsdWVDaGVja2JveEZvcm1hdChjdXJyZW50VGQpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGEucHVzaChjdXJyZW50VGQuaW5uZXJUZXh0KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICBhcnJSb3dEYXRhLnB1c2gocm93RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIDtcclxuXHJcbiAgICAgICAgcmV0dXJuIGFyclJvd0RhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0VmFsdWVDaGVja2JveEZvcm1hdChkYXRhKSB7XHJcbiAgICAgICAgY29uc3QgY2hlY2tCb3ggPSBkYXRhLnF1ZXJ5U2VsZWN0b3IoJ3AtY2hlY2tib3gnKTtcclxuICAgICAgICBpZiAoY2hlY2tCb3gpIHtcclxuICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBkYXRhLnF1ZXJ5U2VsZWN0b3IoJ3NwYW4ucGktY2hlY2snKTtcclxuICAgICAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0PDsyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJ0tow7RuZyc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuICcnO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB2aWV3KHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMub25WaWV3LmVtaXQocm93RGF0YSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGVkaXQocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5vbkVkaXQuZW1pdChyb3dEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVsZXRlKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMub25EZWxldGUuZW1pdChyb3dEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGVsZXRlTXV0aXBsZSgpIHtcclxuICAgICAgICB0aGlzLm9uRGVsZXRlTXVsdGlwbGUuZW1pdCh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dDb250ZXh0TWVudShldnQsIHJvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLnJvd0RhdGFDdXJyZW50ID0gcm93RGF0YTtcclxuICAgICAgICB0aGlzLmJ1dHRvbkNvbnRleHRzID0gYXdhaXQgdGhpcy5nZXRNZW51QnV0dG9uQXV0aG9yaXplZChhd2FpdCB0aGlzLm1lbnVCdXR0b25zKHJvd0RhdGEpKTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5kaXNhYmxlU2hhcmUpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2hhcmVCdXR0b25zID0gW1xyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0NoaWEgc+G6uycsIGljb246ICdwaSBwaS1saW5rJywgY29tbWFuZDogdGhpcy5jcmVhdGVTaGFyZUxpbmsuYmluZCh0aGlzKSB9LFxyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0Rhbmggc8OhY2ggY2hpYSBz4bq7JywgaWNvbjogJ3BpIHBpLWxpc3QnLCBjb21tYW5kOiB0aGlzLnNob3dMaW5rU2hhcmluZy5iaW5kKHRoaXMpIH0sXHJcbiAgICAgICAgICAgICAgICAvLyB7IGxhYmVsOiAnRGFuaCBzw6FjaCBuaMOsbiB0aOG6pXknLCBpY29uOiAncGkgcGktbGlzdCcsIGNvbW1hbmQ6IHRoaXMuc2hvd0xpc3RQZXJtaXNzaW9uQnlJdGVtLmJpbmQodGhpcykgfVxyXG4gICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkNvbnRleHRzLnB1c2goLi4uc2hhcmVCdXR0b25zKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgc2hvd1dvcmtmbG93QXR0YWNoID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oJ19fc2hvd1dvcmtmbG93QXR0YWNoJyk7XHJcbiAgICAgICAgaWYgKHNob3dXb3JrZmxvd0F0dGFjaCA9PSAndHJ1ZScpIHtcclxuICAgICAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgeyBsYWJlbDogJ0Rhbmggc8OhY2ggY8O0bmcgdmnhu4djJywgaWNvbjogJ3BpIHBpLWxpc3QnLCBjb21tYW5kOiB0aGlzLnNob3dBdHRhY2hlZFRhc2suYmluZCh0aGlzKSB9LFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5idXR0b25Db250ZXh0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Nob3dDb250ZXh0TWVudShldnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgY8OzIGjDoG5oIMSR4buZbmcga2jhuqMgZOG7pW5nJyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgZ2V0TWVudUJ1dHRvbkF1dGhvcml6ZWQobWVudUJ1dHRvbnM6IFRuTWVudUl0ZW1bXSkge1xyXG4gICAgICAgIGNvbnN0IGF1dGhvcml6ZWRCdXR0b25zOiBUbk1lbnVJdGVtW10gPSBbXTtcclxuICAgICAgICBjb25zdCBzZXJ2aWNlQ29kZUJ5QmFzZSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSAhPSBudWxsID8gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlIDogJyc7XHJcbiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBbXTtcclxuICAgICAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgbWVudUJ1dHRvbnMpIHtcclxuICAgICAgICAgICAgaWYgKCFpdGVtLmF1dGhvcml6YXRpb25QZXJtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICBhdXRob3JpemVkQnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2VydmljZUNvZGUgPSBpdGVtLmF1dGhvcml6YXRpb25TZXJ2aWNlQ29kZSA/IGl0ZW0uYXV0aG9yaXphdGlvblNlcnZpY2VDb2RlIDogc2VydmljZUNvZGVCeUJhc2U7XHJcbiAgICAgICAgICAgIHByb21pc2VzLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5pc0F1dGhvcml6ZWQoc2VydmljZUNvZGUsIGl0ZW0uYXV0aG9yaXphdGlvblBlcm1pc3Npb24sIHRydWUpLnRoZW4oYXV0aG9yaXplZCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGF1dGhvcml6ZWQgIT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBhdXRob3JpemVkQnV0dG9ucy5wdXNoKGl0ZW0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG4gICAgICAgIHJldHVybiBhdXRob3JpemVkQnV0dG9ucztcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVDaGVja0FsbF9Hcm91cCA9ICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja2VkQWxsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLl9yYXdEYXRhU291cmNlXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldExhc3RJdGVtU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLl9yYXdEYXRhU291cmNlLmZvckVhY2goaXRlbSA9PiB7XHJcbiAgICAgICAgICAgIGl0ZW0uX2NoZWNrZWQgPSB0aGlzLmNoZWNrZWRBbGw7XHJcbiAgICAgICAgICAgIHRoaXMucm93R3JvdXBDaGVja2VkW2l0ZW1bdGhpcy5fZ3JvdXBGaWVsZF1dID0gdGhpcy5jaGVja2VkQWxsO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMub25DaGVja0FsbC5lbWl0KHRoaXMuY2hlY2tlZEFsbCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGhhbmRsZUNoZWNrUm93R3JvdXAgPSAocm93RGF0YSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGdyb3VwQ2hlY2tlZCA9IHRoaXMucm93R3JvdXBDaGVja2VkW3Jvd0RhdGFbdGhpcy5fZ3JvdXBGaWVsZF1dID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICAgIGxldCBmb3VuZCA9IGZhbHNlO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmF3RGF0YVNvdXJjZVtpXVt0aGlzLl9ncm91cEZpZWxkXSA9PSByb3dEYXRhW3RoaXMuX2dyb3VwRmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9yYXdEYXRhU291cmNlW2ldLl9jaGVja2VkID0gZ3JvdXBDaGVja2VkO1xyXG4gICAgICAgICAgICAgICAgZm91bmQgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGZvdW5kKSBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fcmF3RGF0YVNvdXJjZVtpXS5fY2hlY2tlZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnB1c2godGhpcy5fcmF3RGF0YVNvdXJjZVtpXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRMYXN0SXRlbVNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2VkQWxsKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGhhbmRsZUNoZWNrUm93RGF0YV9Hcm91cCA9IChyb3dEYXRhLCB0ckVsZW1lbnQgPSBudWxsLCBmaXJlRXZlbnQgPSB0cnVlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFyb3dEYXRhLl9jaGVja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtID0gbnVsbDtcclxuICAgICAgICAgICAgdGhpcy5yb3dHcm91cENoZWNrZWRbcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXV0gPSBmYWxzZTtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuZmluZEluZGV4KHAgPT4gcC5pZCA9PSByb3dEYXRhLmlkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgY2hlY2tHcm91cCA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5wdXNoKHJvd0RhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbSA9IHJvd0RhdGE7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgaWYgKCF0aGlzLl9yYXdEYXRhU291cmNlW2ldLl9jaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV1bdGhpcy5fZ3JvdXBGaWVsZF0gPT0gcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjaGVja0dyb3VwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMucm93R3JvdXBDaGVja2VkW3Jvd0RhdGFbdGhpcy5fZ3JvdXBGaWVsZF1dID0gY2hlY2tHcm91cDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZXRMYXN0SXRlbVNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2VkQWxsKCk7XHJcbiAgICAgICAgaWYgKGZpcmVFdmVudCkge1xyXG4gICAgICAgICAgICBpZiAoIXRyRWxlbWVudCkgdHJFbGVtZW50ID0gdGhpcy5nZXRUckJ5Um93RGF0YShyb3dEYXRhKTtcclxuICAgICAgICAgICAgdGhpcy5fZW1pdFJvd1NlbGVjdCh0ckVsZW1lbnQsIHJvd0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgaGFuZGxlQ2hlY2tBbGwgPSAoKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2hlY2tlZEFsbCA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgPSBbLi4udGhpcy5fcmF3RGF0YVNvdXJjZV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMgPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuc2V0TGFzdEl0ZW1TZWxlY3RlZCgpO1xyXG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaXRlbS5fY2hlY2tlZCA9IHRoaXMuY2hlY2tlZEFsbCA9PT0gdHJ1ZTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm9uQ2hlY2tBbGwuZW1pdCh0aGlzLmNoZWNrZWRBbGwpO1xyXG4gICAgfTtcclxuXHJcbiAgICBoYW5kbGVDaGVja1Jvd0RhdGEgPSAocm93RGF0YSwgdHJFbGVtZW50ID0gbnVsbCwgZmlyZUV2ZW50ID0gdHJ1ZSkgPT4ge1xyXG4gICAgICAgIGlmICghcm93RGF0YS5fY2hlY2tlZCkge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbSA9IG51bGw7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmZpbmRJbmRleChwID0+IHAuaWQgPT0gcm93RGF0YS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKCFyb3dEYXRhLmhpZGRlbkNoZWNrQm94KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMucHVzaChyb3dEYXRhKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtID0gcm93RGF0YTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRMYXN0SXRlbVNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVDaGVja2VkQWxsKCk7XHJcbiAgICAgICAgaWYgKCF0ckVsZW1lbnQpIHtcclxuICAgICAgICAgICAgdHJFbGVtZW50ID0gdGhpcy5nZXRUckJ5Um93RGF0YShyb3dEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGZpcmVFdmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0KHRyRWxlbWVudCwgcm93RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIHVwZGF0ZUNoZWNrZWRBbGwoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPT0gdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGggJiYgdGhpcy5fcmF3RGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZEFsbCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZEFsbCA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNlbGVjdFJvdyhkYXRhczogYW55W10gPSBbXSkge1xyXG4gICAgICAgIGlmICghZGF0YXMgfHwgZGF0YXMubGVuZ3RoID09IDApIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94KSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJdGVtID0gZGF0YXNbZGF0YXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgICAgIGxhc3RJdGVtLl9jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuX2dyb3VwRmllbGQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhX0dyb3VwKGxhc3RJdGVtLCB0aGlzLmdldFRyQnlSb3dEYXRhKGxhc3RJdGVtKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoZWNrUm93RGF0YShsYXN0SXRlbSwgdGhpcy5nZXRUckJ5Um93RGF0YShsYXN0SXRlbSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBkYXRhcy5mb3JFYWNoKGRhdGEgPT4ge1xyXG4gICAgICAgICAgICAgICAgZGF0YS5fY2hlY2tlZCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5fZ3JvdXBGaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhX0dyb3VwKGRhdGEsIHRoaXMuZ2V0VHJCeVJvd0RhdGEoZGF0YSksIHRydWUpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGEoZGF0YSwgdGhpcy5nZXRUckJ5Um93RGF0YShkYXRhKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25Tb3J0KGV2ZW50OiBhbnksIF90YWJsZTogVGFibGUpIHtcclxuICAgICAgICB0aGlzLnNvcnRXaXRoQXBpKGV2ZW50LCBfdGFibGUpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc29ydFdpdGhBcGkoZXZlbnQ6IGFueSwgX3RhYmxlOiBUYWJsZSkge1xyXG4gICAgICAgIGlmICghdGhpcy5tb2RlbC5sb2FkaW5nKSB7XHJcbiAgICAgICAgICAgIF90YWJsZS5yZXNldCgpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zb3J0SGlzdG9yeS5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydEZpZWxkID0gZXZlbnQuZmllbGQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RGlyID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICh0aGlzLnNvcnRIaXN0b3J5WzBdLmZpZWxkID09IGV2ZW50LmZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSBldmVudC5maWVsZDtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9zb3J0RGlyID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydERpciA9IC0xO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5fc29ydERpciA9PT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RGlyID0gMDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnREaXIgPSAxO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGV2ZW50LmZpZWxkICE9IHRoaXMuc29ydEhpc3RvcnlbMF0uZmllbGQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRGaWVsZCA9IGV2ZW50LmZpZWxkO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydERpciA9IDE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydEhpc3RvcnkudW5zaGlmdCh7IGZpZWxkOiB0aGlzLl9zb3J0RmllbGQsIGRpcjogdGhpcy5fc29ydERpciB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHByb2Nlc3NEYXRhU291cmNlKGRhdGFTb3VyY2UpIHtcclxuICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xyXG4gICAgICAgIHRoaXMucm93R3JvdXBDaGVja2VkID0ge307XHJcbiAgICAgICAgaWYgKCFkYXRhU291cmNlKSByZXR1cm47XHJcbiAgICAgICAgZGF0YVNvdXJjZS5mb3JFYWNoKHNvdXJjZSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChzb3VyY2UuaWQgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UuaWQgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBzb3VyY2Uub2JqU3R5bGVDbGFzcyA9IHt9O1xyXG4gICAgICAgICAgICBpZiAoIXNvdXJjZS5jb2xTcGFuKSB7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UuY29sU3BhbiA9IHt9O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICghc291cmNlLnJvd1NwYW4pIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZS5yb3dTcGFuID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFzb3VyY2UuaGlkZGVuKSB7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2UuaGlkZGVuID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNvdXJjZS5pc05ldykge1xyXG4gICAgICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3MuaXNOZXcgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzb3VyY2UuaXNFeHBpcmluZykge1xyXG4gICAgICAgICAgICAgICAgc291cmNlLm9ialN0eWxlQ2xhc3MuZXhwaXJpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChzb3VyY2UuY2xhc3MpIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZS5jbGFzcy5zcGxpdCgnICcpLmZpbHRlcihwID0+IHApLmZvckVhY2goY2xzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2Uub2JqU3R5bGVDbGFzc1tjbHNdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNvdXJjZS5ib29rbWFya1N0eWxlID0gdGhpcy5nZXRCb29rbWFya0NvbG9yKHNvdXJjZSwgdGhpcy5zZXR0aW5nLmNvbHMpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bUxlbmd0aC5mb3JFYWNoKF9jb2wgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sID0gPENvbHVtblNjaGVtYUJhc2U+X2NvbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gc291cmNlW2NvbC5maWVsZF07XHJcbiAgICAgICAgICAgICAgICBpZiAodmFsdWUgJiYgdmFsdWUuc3Vic3RyaW5nICYmIHZhbHVlLmxlbmd0aCA+IGNvbC5tYXhMZW5ndGhEaXNwbGF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Y6IHNob3J0IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlW2Ake2NvbC5maWVsZH1fX3N2YF0gPSBgJHt2YWx1ZS5zdWJzdHJpbmcoMCwgY29sLm1heExlbmd0aERpc3BsYXkpfWA7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bVdvcmQuZm9yRWFjaChfY29sID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IDxDb2x1bW5TY2hlbWFCYXNlPl9jb2w7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZVNob3J0V29yZCA9IHRoaXMuc3ViV29yZChzb3VyY2VbY29sLmZpZWxkXSwgY29sLm1heFdvcmREaXNwbGF5KTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZVNob3J0V29yZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIHN2OiBzaG9ydCB2YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZVtgJHtjb2wuZmllbGR9X19zdmBdID0gYCR7dmFsdWVTaG9ydFdvcmR9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy51cGRhdGVSb3dHcm91cE1ldGFEYXRhKGRhdGFTb3VyY2UpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzdWJXb3JkKHZhbHVlOiBzdHJpbmcsIHdvcmRDb3VudDogbnVtYmVyKSB7XHJcbiAgICAgICAgaWYgKCF2YWx1ZSB8fCAhdmFsdWUudHJpbSkgcmV0dXJuIHZhbHVlO1xyXG4gICAgICAgIHZhbHVlID0gdmFsdWUudHJpbSgpO1xyXG4gICAgICAgIGxldCBpbmRleCA9IC0xLCBiZWZvcmVDaGFyID0gJ2EnO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdmFsdWUubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgaWYgKHZhbHVlW2ldID09ICcnICYmIGJlZm9yZUNoYXIgIT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHdvcmRDb3VudC0tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJlZm9yZUNoYXIgPSB2YWx1ZVtpXTtcclxuICAgICAgICAgICAgaWYgKHdvcmRDb3VudCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICBpbmRleCA9IGk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoaW5kZXggPiAtMSkgcmV0dXJuIHZhbHVlLnN1YnN0cmluZygwLCBpbmRleCk7XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgdG9nZ2xlU2hvd0Z1bGwocm93RGF0YSwgZmllbGQpIHtcclxuICAgICAgICByb3dEYXRhW2ZpZWxkICsgJ19fc2hvd0Z1bGwnXSA9ICFyb3dEYXRhW2ZpZWxkICsgJ19fc2hvd0Z1bGwnXTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgbWVyZ2VDbGFzc09iaihzb3VyY2UsIG90aGVyT2JqID0ge30pIHtcclxuICAgICAgICBjb25zdCBvYmogPSBzb3VyY2Uub2JqU3R5bGVDbGFzcztcclxuICAgICAgICBmb3IgKGNvbnN0IGtleSBpbiBvdGhlck9iaikge1xyXG4gICAgICAgICAgICBvYmpba2V5XSA9IG90aGVyT2JqW2tleV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBvYmo7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbnRleHRSb3dHcm91cChyb3dEYXRhKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgcm93RGF0YSxcclxuICAgICAgICAgICAgcm93R3JvdXBNZXRhZGF0YTogdGhpcy5yb3dHcm91cE1ldGFkYXRhLFxyXG4gICAgICAgICAgICBncm91cENvbDogdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLFxyXG4gICAgICAgICAgICBncm91cEZpZWxkOiB0aGlzLl9ncm91cEZpZWxkLFxyXG4gICAgICAgICAgICBncm91cEluQ2xpZW50OiB0aGlzLl9ncm91cEluQ2xpZW50XHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29udGV4dFJvd0dyb3VwUm9vdChyb3dEYXRhLCBleHBhbmRlZCkge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMuZ2V0Q29udGV4dFJvd0dyb3VwKHJvd0RhdGEpLFxyXG4gICAgICAgICAgICBleHBhbmRlZCxcclxuICAgICAgICAgICAgaGFuZGxlQ2hlY2tSb3dHcm91cDogdGhpcy5oYW5kbGVDaGVja1Jvd0dyb3VwLFxyXG4gICAgICAgICAgICBnZXRDb2xTcGFuR3JvdXA6IHRoaXMuZ2V0Q29sU3Bhbkdyb3VwLFxyXG4gICAgICAgICAgICB0YWJsZTogdGhpcy50YWJsZSxcclxuICAgICAgICAgICAgY2xhc3NSb3dHcm91cDogdGhpcy5fY2xhc3NSb3dHcm91cCxcclxuICAgICAgICAgICAgaWNvblRvZ2dsZVJvd0dyb3VwOiB0aGlzLmljb25Ub2dnbGVSb3dHcm91cFxyXG4gICAgICAgIH07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbnRleHRDZWxsKHJvd0RhdGEsIHJvd0luZGV4LCBjb2wsIGV4cGFuZGVkLCAkdGhpcykge1xyXG4gICAgICAgIHJldHVybiB7XHJcbiAgICAgICAgICAgIGNydWRMaXN0OiAkdGhpcyxcclxuICAgICAgICAgICAgcm93RGF0YSxcclxuICAgICAgICAgICAgcm93SW5kZXgsXHJcbiAgICAgICAgICAgIGNvbCxcclxuICAgICAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcclxuICAgICAgICAgICAgZXhwYW5kZWQsXHJcbiAgICAgICAgICAgIGljb25Ub2dnbGVSb3dEYXRhOiB0aGlzLmljb25Ub2dnbGVSb3dEYXRhXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q2xhc3NSb3dEYXRhT2ZHcm91cChyb3dEYXRhKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5TZWxlY3RJdGVtKHJvd0RhdGEpKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIHVpLXN0YXRlLWhpZ2hsaWdodCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkICE9PSAnJykge1xyXG4gICAgICAgICAgICByZXN1bHQgKz0gJyBpcy1jaGlsZC1ncm91cCc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyb3dEYXRhLmNsYXNzKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSAnICcgKyByb3dEYXRhLmNsYXNzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gcmVzdWx0LnRyaW0oKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29udGFpblNlbGVjdEl0ZW0oaXRlbSkge1xyXG4gICAgICAgIGlmICghaXRlbSkge1xyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgoeCA9PiB4ICYmIHhbdGhpcy5zZXR0aW5nLmVudGl0eUtleV0gPT09IGl0ZW1bdGhpcy5zZXR0aW5nLmVudGl0eUtleV0pID4gLTE7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHNjcm9sbFRvcCgpIHtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2Nyb2xsYmFyKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNjcm9sbGJhci5zY3JvbGxUb1RvcCgwLCAwKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHNjcm9sbFRvQm90dG9tKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxiYXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsYmFyLnNjcm9sbFRvQm90dG9tKDAsIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uTmV4dChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlID0gdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgKyAxO1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUHJldihldmVudCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSAtIDE7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgICAgIHRoaXMuc2Nyb2xsVG9wKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uT2xkZXN0KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSBNYXRoLmNlaWwodGhpcy5tb2RlbC50b3RhbCAvIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSk7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25MYXRlc3QoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IDE7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNFbXB0eVRvb2xiYXIoZWxlbWVudDogSFRNTEVsZW1lbnQpOiBib29sZWFuIHtcclxuICAgICAgICBjb25zdCBub2RlcyA9IGVsZW1lbnQuY2hpbGROb2RlcztcclxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGVzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG5vZGUgPSBub2Rlcy5pdGVtKGkpO1xyXG4gICAgICAgICAgICBpZiAobm9kZS5ub2RlVHlwZSAhPT0gOCAmJiBub2Rlcy5pdGVtKGkpLnRleHRDb250ZW50LnRyaW0oKS5sZW5ndGggIT09IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaXNFbXB0eUZ1bmN0aW9uQnV0dG9ucyhlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IG5vZGVzID0gZWxlbWVudC5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLml0ZW0oaSk7XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSA4ICYmIG5vZGVzLml0ZW0oaSkudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmaW5kVGVtcGxhdGUodGVtcGxhdGVOYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2NvbW1vblNlcnZpY2UuZmluZFRlbXBsYXRlRnJvbUxpc3QodGhpcy5jaGlsZHJlbiwgdGVtcGxhdGVOYW1lKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFzVGVtcGxhdGUodGVtcGxhdGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgICAgICBpZiAodGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdID09PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdID0gdGhpcy5maW5kVGVtcGxhdGUodGVtcGxhdGVOYW1lKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVbdGVtcGxhdGVOYW1lXSAhPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb21wb25lbnRCeVR5cGUoY29udHJvbFR5cGU6IHN0cmluZykge1xyXG4gICAgICAgIGlmIChjb250cm9sVHlwZSA9PSAndHJhbmdUaGFpVjUnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlVHJhbmdUaGFpVjU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb250cm9sVHlwZSA9PSAnX192aWV3SGlzdG9yeScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVDb2xWaWV3SGlzdG9yeTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGl0ZW0gPSB0aGlzLl9jb21tb25TZXJ2aWNlLmZpbmRUZW1wbGF0ZUZyb21MaXN0KHRoaXMuY2hpbGRyZW4sIGNvbnRyb2xUeXBlKTtcclxuICAgICAgICBpZiAoIWl0ZW0gJiYgdGhpcy50ZW1wbGF0ZXMpIHtcclxuICAgICAgICAgICAgaXRlbSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZmluZFRlbXBsYXRlRnJvbUxpc3QodGhpcy50ZW1wbGF0ZXMsIGNvbnRyb2xUeXBlKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBpdGVtO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlW3RlbXBsYXRlTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlW3RlbXBsYXRlTmFtZV0gPSB0aGlzLmZpbmRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyB1cGRhdGVSb3dHcm91cE1ldGFEYXRhKGRhdGFTb3VyY2U6IGFueSkge1xyXG4gICAgICAgIHRoaXMucm93R3JvdXBNZXRhZGF0YSA9IHt9O1xyXG4gICAgICAgIGxldCBpbmRleEdyb3VwID0gMDtcclxuICAgICAgICBjb25zdCBncm91cEZpZWxkTmFtZTogc3RyaW5nID0gdGhpcy5fZ3JvdXBGaWVsZDtcclxuICAgICAgICAvLyBU4bqhbyBi4burYSAxIGdyb3VwIHZhbHVlIGJlZm9yZVxyXG4gICAgICAgIGxldCBwcmV2aW91c0dyb3VwVmFsdWUgPSB0aGlzLl9jb21tb25TZXJ2aWNlLmd1aWQoKTtcclxuICAgICAgICBpZiAoZ3JvdXBGaWVsZE5hbWUgJiYgZ3JvdXBGaWVsZE5hbWUgIT0gJycpIHtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhU291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCByb3dEYXRhID0gZGF0YVNvdXJjZVtpXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGdyb3VwVmFsdWUgPSByb3dEYXRhW2dyb3VwRmllbGROYW1lXTtcclxuICAgICAgICAgICAgICAgIGlmIChncm91cFZhbHVlICE9PSBwcmV2aW91c0dyb3VwVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnJvd0dyb3VwTWV0YWRhdGFbZ3JvdXBWYWx1ZV0gPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4OiBpLCBpbmRleEdyb3VwOiBpbmRleEdyb3VwKyssIHNpemU6IDEsIGl0ZW1Sb290OiByb3dEYXRhLCBpdGVtczogW3Jvd0RhdGFdXHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLmV4cGFuZGVkUm93S2V5c1tncm91cFZhbHVlXSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICAgICAgcHJldmlvdXNHcm91cFZhbHVlID0gZ3JvdXBWYWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW1Hcm91cCA9IHRoaXMucm93R3JvdXBNZXRhZGF0YVtncm91cFZhbHVlXTtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtR3JvdXAuc2l6ZSsrO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Hcm91cC5pdGVtcy5wdXNoKHJvd0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcm93RGF0YVt0aGlzLmZpZWxkT3JkZXJdID0gdGhpcy5yb3dHcm91cE1ldGFkYXRhW2dyb3VwVmFsdWVdLnNpemU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3MgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNhdmVDb2xvclNldHRpbmdzKGRhdGEpIHtcclxuICAgICAgICBpZiAoZGF0YS5jb2xvckZpbHRlclRhYmxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGNsb25lQXJyID0gZGF0YS5jb2xvckZpbHRlclRhYmxlLnNsaWNlKCk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSBjbG9uZUFyci5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNsb25lQXJyW2ldLmZpbHRlclZhbHVlID09ICcnIHx8IGNsb25lQXJyW2ldLmZpbHRlclZhbHVlID09IG51bGwgfHwgY2xvbmVBcnJbaV0uZmlsdGVyVmFsdWUgPT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YS5jb2xvckZpbHRlclRhYmxlLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQgPSBkYXRhLmNvbG9yRmlsdGVyRmllbGQ7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGUgPSBkYXRhLmNvbG9yRmlsdGVyVGFibGU7XHJcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzUm93Q29sb3IgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmNhY2hlQ29sb3JTZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5zZXRDb2xvclNldHRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TYXZlU2V0dGluZ3MoZXZlbnQpIHtcclxuICAgICAgICBpZiAoZXZlbnQpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscyA9IGV2ZW50LmRldGFpbHM7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCA9IGV2ZW50LnNvcnRGaWVsZDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RGlyID0gZXZlbnQuc29ydERpcjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPSAwO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQgPSBldmVudC5ncm91cEZpZWxkO1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEluQ2xpZW50ID0gZXZlbnQuZ3JvdXBJbkNsaWVudDtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gPSB0aGlzLnNldHRpbmcuY29scy5maW5kKHAgPT4gcC5maWVsZCA9PSBldmVudC5ncm91cEZpZWxkKTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4udmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5mb3JjZUdldERhdGEgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNhdmVDb2x1bW5TZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZXh0ZW5kQ29sdW1ucyh0aGlzLnNldHRpbmcuY29scyk7XHJcbiAgICAgICAgICAgIHRoaXMuZm9ybWF0Q29sdW1ucyh0aGlzLnNldHRpbmcuY29scyk7XHJcbiAgICAgICAgICAgIHRoaXMuYXBwbHlDb2x1bW5TZXR0aW5nKCk7XHJcbiAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3MgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25EZWxldGVTZXR0aW5ncygpIHtcclxuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3MgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZyA9IG5ldyBDb2x1bW5TZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5kZWxldGVDb2x1bW5TZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5leHRlbmRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcclxuICAgICAgICB0aGlzLmZvcm1hdENvbHVtbnModGhpcy5zZXR0aW5nLmNvbHMpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlDb2x1bW5TZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFwcGx5Q29sdW1uU2V0dGluZygpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gPSB0aGlzLnNldHRpbmcuY29scy5maW5kKHAgPT4gcC5maWVsZCA9PSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkKTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZvcmNlR2V0RGF0YSA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5yYXdDb2x1bW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ncm91cEZpZWxkID0gdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbi5maWVsZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dyb3VwRmllbGQgPSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4uZmllbGQ7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9ncm91cEZpZWxkID0gbnVsbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLl9ncm91cEluQ2xpZW50ID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBJbkNsaWVudDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2dyb3VwRmllbGQgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5fc29ydEZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkO1xyXG4gICAgICAgIHRoaXMuX3NvcnREaXIgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RGlyO1xyXG5cclxuICAgICAgICBpZiAodGhpcy5tb2RlbCAmJiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcgJiYgdGhpcy5fc29ydEZpZWxkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydEhpc3RvcnkgPSBbeyBmaWVsZDogdGhpcy5fc29ydEZpZWxkLCBkaXI6IHRoaXMuX3NvcnREaXIgPyB0aGlzLl9zb3J0RGlyIDogMCB9XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuc29ydEhpc3RvcnkgPSBbXTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDZWxsQ2xhc3NIZWFkZXIoY29sKSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9ICcnO1xyXG4gICAgICAgIGlmIChjb2wuY2VsbENsYXNzKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSBjb2wuY2VsbENsYXNzO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNvbC5zb3J0KSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIE5vU29ydENvbHVtbic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChjb2wuZmllbGQgPT0gdGhpcy5fc29ydEZpZWxkKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIHAtc29ydGFibGUtY29sdW1uJztcclxuICAgICAgICAgICAgaWYgKHRoaXMuX3NvcnREaXIgIT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9ICcgcC1oaWdobGlnaHQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gcmVzdWx0O1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Q29sdW1uU3R5bGUoY29sOiBhbnksIGZvckhlYWRlciA9IGZhbHNlKSB7XHJcbiAgICAgICAgY29uc3Qgc3R5bGU6IGFueSA9IHt9O1xyXG4gICAgICAgIGlmIChjb2wuZmllbGQgPT0gJ21ldGFkYXRhU3RhdHVzJykge1xyXG4gICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIHJldHVybiBzdHlsZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChmb3JIZWFkZXIpIHtcclxuICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdjZW50ZXInO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGNvbC50ZXh0QWxpZ24gPT0gVGV4dEFsaWduLkxlZnQpIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnbGVmdCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29sLnRleHRBbGlnbiA9PSBUZXh0QWxpZ24uQ2VudGVyKSB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoY29sLnRleHRBbGlnbiA9PSBUZXh0QWxpZ24uUmlnaHQpIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAncmlnaHQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYWxpZ25DZW50ZXJDb2x1bW4oY29sKSkge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdjZW50ZXInO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuYWxpZ25SaWdodENvbHVtbihjb2wpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ3JpZ2h0JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnbGVmdCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHN0eWxlO1xyXG4gICAgfVxyXG5cclxuXHJcbiAgICBwdWJsaWMgZ2V0Qm9va21hcmtDb2xvcihyb3dEYXRhLCBjb2x1bW5zKSB7XHJcbiAgICAgICAgY29uc3QgcjogYW55ID0geyBkaXNwbGF5OiAnbm9uZScgfTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQgJiYgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGUpIHtcclxuICAgICAgICAgICAgbGV0IGNvbDtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBjIGluIGNvbHVtbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2x1bW5zW2NdLmZpZWxkID09IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29sID0gY29sdW1uc1tjXTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGZvckRhdGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgbGV0IGZvck51bWJlciA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgZm9yQm9vbCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgdmFsdWUgPSByb3dEYXRhW3RoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkXTtcclxuICAgICAgICAgICAgaWYgKGNvbCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5kYXRlIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5kYXRldGltZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdGhpcy5jb252ZXJ0VG9EYXRlKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3JEYXRlID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5pbnQgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRlY2ltYWxcclxuICAgICAgICAgICAgICAgICAgICB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuaW50V2l0aG91dE1hc2sgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmN1cnJlbmN5XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yTnVtYmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5ib29sZWFuKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSAoL3RydWUvaSkudGVzdCh2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgZm9yQm9vbCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSB0aGlzLl9jb2xvckZpbHRlclRhYmxlLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5fY29sb3JGaWx0ZXJUYWJsZVtpXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbXBhcmVUeXBlID0gaXRlbVswXTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbG9yID0gaXRlbVs1XTtcclxuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJWYWx1ZTogYW55ID0gaXRlbVsxXTtcclxuICAgICAgICAgICAgICAgIGlmIChmb3JEYXRlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBpdGVtWzJdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJWYWx1ZSA9PSBudWxsKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvck51bWJlcikge1xyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlclZhbHVlID0gaXRlbVszXTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaXNOYU4oZmlsdGVyVmFsdWUpKSBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvckJvb2wpIGZpbHRlclZhbHVlID0gaXRlbVs0XTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoY29tcGFyZVR5cGUgPT0gJ3JlZ2V4Jykge1xyXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGZpbHRlclZhbHVlLCAnaScpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUubWF0Y2gocmUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIHtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wYXJlVHlwZSA9PSAnZXF1YWxzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA9PSBmaWx0ZXJWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ25vdEVxdWFscycpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgIT0gZmlsdGVyVmFsdWUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5iYWNrZ3JvdW5kID0gdGhpcy5idWlsZEdyYWRpZW50Q29sb3IoY29sb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdjb250YWlucycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGZpbHRlclZhbHVlLCAnaScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaChyZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5iYWNrZ3JvdW5kID0gdGhpcy5idWlsZEdyYWRpZW50Q29sb3IoY29sb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdub3RDb250YWlucycpIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IHZhbHVlICsgJyc7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcmUgPSBuZXcgUmVnRXhwKGZpbHRlclZhbHVlLCAnaScpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghdmFsdWUubWF0Y2gocmUpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wYXJlVHlwZSA9PSAnZ3JlYXRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPiBmaWx0ZXJWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ2xpdHRlcicpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUgPCBmaWx0ZXJWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY29udmVydFRvRGF0ZSh2YWx1ZSkge1xyXG4gICAgICAgIGlmICh2YWx1ZSA9PT0gJ3tub3d9JykgcmV0dXJuIERhdGUoKTtcclxuXHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ3snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnZH0nKSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ2R9JywgJycpKTtcclxuICAgICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgZGF0ZS5zZXREYXRlKGRhdGUuZ2V0RGF0ZSgpICsgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgneycpICYmIHZhbHVlLmVuZHNXaXRoKCdofScpKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnaH0nLCAnJykpO1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBkYXRlLnNldEhvdXJzKGRhdGUuZ2V0SG91cnMoKSArIHZhbHVlKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBkYXRlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHZhbHVlLnN0YXJ0c1dpdGgoJ3snKSAmJiB2YWx1ZS5lbmRzV2l0aCgnbX0nKSkge1xyXG4gICAgICAgICAgICB2YWx1ZSA9IE51bWJlcih2YWx1ZS5yZXBsYWNlKCd7JywgJycpLnJlcGxhY2UoJ219JywgJycpKTtcclxuICAgICAgICAgICAgaWYgKCFpc05hTih2YWx1ZSkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICAgICAgZGF0ZS5zZXRNaW51dGVzKGRhdGUuZ2V0TWludXRlcygpICsgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWUuaW5kZXhPZignLycpID4gLTEpIHtcclxuICAgICAgICAgICAgY29uc3QgcGFydHMgPSB2YWx1ZS5zcGxpdCgnLycpO1xyXG4gICAgICAgICAgICBpZiAocGFydHMubGVuZ3RoID4gMikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ldyBEYXRlKHBhcnRzWzJdICsgJy0nICsgcGFydHNbMV0gKyAnLScgKyBwYXJ0c1swXSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUpO1xyXG4gICAgICAgIGlmICghaXNOYU4oZGF0ZS5nZXREYXRlKCkpKSByZXR1cm4gZGF0ZTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcikge1xyXG4gICAgICAgIHJldHVybiBgbGluZWFyLWdyYWRpZW50KDkwZGVnLCAke2NvbG9yfSAwJSwgJHtjb2xvcn00ZCAzNSUsICR7Y29sb3J9MWEgNjAlLCB0cmFuc3BhcmVudCAxMDAlKWA7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhbGlnbkNlbnRlckNvbHVtbihjb2wpIHtcclxuICAgICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRhdGV0aW1lIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5kYXRlIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5ib29sZWFuIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5lbnVtO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYWxpZ25SaWdodENvbHVtbihjb2wpIHtcclxuICAgICAgICByZXR1cm4gY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmludCB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuZGVjaW1hbCB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuaW50V2l0aG91dE1hc2sgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmN1cnJlbmN5O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb2xTcGFuR3JvdXAgPSAobnVtT2ZDb2xDdXN0b206IG51bWJlciA9IDApID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5zZXR0aW5nLmNvbHMuZmlsdGVyKHggPT4geC52aXNpYmxlID09PSBudWxsIHx8IHgudmlzaWJsZSA9PT0gdW5kZWZpbmVkIHx8IHgudmlzaWJsZSA9PT0gdHJ1ZSkubGVuZ3RoXHJcbiAgICAgICAgICAgICsgKHRoaXMuc2V0dGluZy5oaWRkZW5PcmRlckNvbHVtbiA/IDAgOiAxKVxyXG4gICAgICAgICAgICArICh0aGlzLnNldHRpbmcuaGlkZGVuRnVuY3Rpb25Db2x1bW4gPyAwIDogMSlcclxuICAgICAgICAgICAgLSBudW1PZkNvbEN1c3RvbTtcclxuICAgIH07XHJcblxyXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVLZXlwcmVzc0NvbnRyb2wpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY29udGV4dCAmJiB0aGlzLmNvbnRleHQucm9vdC5kYXRhLmxpc3RRdWV1ZSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGlzdFF1ZXVlID0gdGhpcy5jb250ZXh0LnJvb3QuZGF0YS5saXN0UXVldWU7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBpbmRleCA9IGxpc3RRdWV1ZS5pbmRleE9mKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBsaXN0UXVldWUuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy50aW1lb3V0KSBjbGVhclRpbWVvdXQodGhpcy50aW1lb3V0KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZU11bHRpcGxlRGVsZXRlKCkge1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZURlbGV0ZShpdGVtKSkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXNhYmxlRWRpdChyb3dEYXRhKSB7XHJcbiAgICAgICAgaWYgKHJvd0RhdGEuX19kaXNhYmxlRWRpdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuRWRpdCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gJiYgcm93RGF0YVsnbWV0YWRhdGFTdGF0dXMnXSAhPSAnMCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZURlbGV0ZShyb3dEYXRhKSB7XHJcbiAgICAgICAgaWYgKHJvd0RhdGEuX19kaXNhYmxlRGVsZXRlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5oaWRkZW5EZWxldGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyb3dEYXRhWydtZXRhZGF0YVN0YXR1cyddICYmIHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gIT0gJzAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dIaXN0b3J5KHJvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuc2hvd0hpc3RvcnkgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5oaXN0b3J5ID0gcm93RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0xpc3RWZXJzaW9uKHJvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcudmVyc2lvbk1vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnZlcnNpb25Nb2RlbC5pdGVtRGF0YSA9IHJvd0RhdGE7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRXaWR0aEZ1bmN0aW9uKHRhYmxlKSB7XHJcbiAgICAgICAgaWYgKHRoaXMud2lkdGhGdW5jdGlvbkNvbHVtbikge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgd2lkdGhJblBpeGVsID0gdGhpcy5fZGVmYXVsdFdpdGhGdW5jdGlvbkNvbHVtbjtcclxuICAgICAgICBjb25zdCB0ZCA9IHRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGRbY2xhc3MqPVwiY29sdW1uLWZ1bmN0aW9uXCJdJyk7XHJcbiAgICAgICAgaWYgKHRkKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGVtVG9QaXhjZWwgPSB0aGlzLmdldEZvbnRTaXplSW5QaXhlbCh0ZCk7XHJcbiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbnMgPSB0ZC5nZXRFbGVtZW50c0J5VGFnTmFtZSgnYnV0dG9uJyk7XHJcbiAgICAgICAgICAgIGNvbnN0IHdpZHRoID0gYnV0dG9ucy5sZW5ndGggKiAyLjQ7IC8vIGJ1dHRvbiB3aWR0aDogMi40cmVtXHJcbiAgICAgICAgICAgIGNvbnN0IHRtcFdpZHRoSW5QaXhlbCA9IHdpZHRoICogZW1Ub1BpeGNlbCArIDY7IC8vIDYgbGEgdG9uZyBwYWRkaW5nIGxlZnQsIHJpZ2h0IGN1YSB0aFxyXG4gICAgICAgICAgICBpZiAod2lkdGhJblBpeGVsIDwgdG1wV2lkdGhJblBpeGVsKSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aEluUGl4ZWwgPSB0bXBXaWR0aEluUGl4ZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IHRoID0gdGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0aFtjbGFzcyo9XCJzZXR0aW5nLWNlbGxcIl0nKTtcclxuICAgICAgICBpZiAodGgpIHtcclxuICAgICAgICAgICAgY29uc3QgZW1Ub1BpeGNlbCA9IHRoaXMuZ2V0Rm9udFNpemVJblBpeGVsKHRoKTtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRoLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTtcclxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBidXR0b25zLmxlbmd0aCAqIDIuNCAvIDAuODU7IC8vIGJ1dHRvbiB3aWR0aDogMi40cmVtLCBmb250LXNpemUgdGggMC44NXJlbVxyXG4gICAgICAgICAgICBjb25zdCB0bXBXaWR0aEluUGl4ZWwgPSB3aWR0aCAqIGVtVG9QaXhjZWwgKyA2OyAvLyA2IGxhIHRvbmcgcGFkZGluZyBsZWZ0LCByaWdodCBjdWEgdGhcclxuICAgICAgICAgICAgaWYgKHdpZHRoSW5QaXhlbCA8IHRtcFdpZHRoSW5QaXhlbCkge1xyXG4gICAgICAgICAgICAgICAgd2lkdGhJblBpeGVsID0gdG1wV2lkdGhJblBpeGVsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl93aWR0aEZ1bmN0aW9uQ29sdW1uID0gYCR7d2lkdGhJblBpeGVsfXB4YDtcclxuICAgICAgICB0aGlzLndpZHRoRnVuY3Rpb25Db2x1bW5DaGFuZ2UuZW1pdCh0aGlzLl93aWR0aEZ1bmN0aW9uQ29sdW1uKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEZvbnRTaXplSW5QaXhlbChlbCkge1xyXG4gICAgICAgIHJldHVybiBOdW1iZXIoZ2V0Q29tcHV0ZWRTdHlsZShlbCwgJycpLmZvbnRTaXplLm1hdGNoKC8oKFxcZHwuKSspcHgvKVsxXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgcHJvY2Vzc0Jhc2VEYXRhKCkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMucHJlUHJvY2Vzc0RhdGEodGhpcy5fcmF3RGF0YVNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBwcmVQcm9jZXNzRGF0YShkYXRhU291cmNlKTogUHJvbWlzZTxhbnk+IHtcclxuICAgICAgICBjb25zdCBjb2xIYXNQaXBlID0gdGhpcy5zZXR0aW5nLmNvbHMuZmlsdGVyKHggPT4geC5waXBlKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBjb2xIYXNQaXBlKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBkYXRhU291cmNlKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybSg8UGlwZVRyYW5zZm9ybT5jb2wucGlwZSwgY29sLmFzeW5jUGlwZSwgaXRlbVtjb2wuZmllbGRdKS50aGVuKHJzID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpdGVtW2BwaXBlX18ke2NvbC5maWVsZH0gYF0gPSBycztcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgdHJhbnNmb3JtKHBpcGU6IFBpcGVUcmFuc2Zvcm0sIGFzeW5jUGlwZTogYm9vbGVhbiwgdmFsdWUpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNhY2hlZFRyYW5zZm9ybXNbdmFsdWVdKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNhY2hlZFRyYW5zZm9ybXNbdmFsdWVdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGFzeW5jUGlwZSkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBhd2FpdCBwaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVHJhbnNmb3Jtc1t2YWx1ZV0gPSB2YWw7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBjb25zdCB2YWwgPSBwaXBlLnRyYW5zZm9ybSh2YWx1ZSk7XHJcbiAgICAgICAgICAgIHRoaXMuY2FjaGVkVHJhbnNmb3Jtc1t2YWx1ZV0gPSB2YWw7XHJcbiAgICAgICAgICAgIHJldHVybiB2YWw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVSb3dPcmRlcmVkKGV2dCkge1xyXG4gICAgICAgIHRoaXMub25SZW9yZGVyZWQuZW1pdChldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93U2V0dGluZ1Jvd0NvbG9yKCkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1Jvd0NvbG9yID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYnVpbGRGaWx0ZXJDb2x1bW4oY29sczogQ29sdW1uU2NoZW1hQmFzZVtdKSB7XHJcbiAgICAgICAgY29uc3QgdGVtcGxhdGVGaWx0ZXIgPSB0aGlzLnRlbXBsYXRlRmlsdGVyO1xyXG4gICAgICAgIGNvbHMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sLmNvbnRyb2xUeXBlID09IENvbnRyb2xUeXBlLmRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sLmJhc2VTZXJ2aWNlIHx8IChjb2wuZGF0YVNvdXJjZSAmJiBjb2wuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZ2V0RmllbGRGaWx0ZXIoY29sKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5pbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc0FycmF5RmllbGQ6IGNvbC5pc0FycmF5RmllbGQgPyB0cnVlIDogZmFsc2VcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyU2NoZW1hLmRyb3Bkb3duW2NvbC5maWVsZF0gPSBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBhcHBlbmRUbzogJ2JvZHknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjogYENo4buNbiAke2NvbC5sYWJlbH1gLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBtdWx0aXBsZTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE9uSW5pdDogdHJ1ZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgaXNTZXJ2ZXJMb2FkOiBjb2wuaXNTZXJ2ZXJMb2FkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoYENoxrBhIGPhuqV1IGjDrG5oIGJhc2VTZXJ2aWNlIGhv4bq3YyBkYXRhU291cmNlIGNobyBj4buZdCAke2NvbC5maWVsZH06ICR7Y29sLmxhYmVsfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHN3aXRjaCAoY29sLmRhdGFUeXBlKSB7XHJcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmJvb2xlYW46XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5nZXRGaWVsZEZpbHRlcihjb2wpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmludDpcclxuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuaW50V2l0aG91dE1hc2s6XHJcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRlY2ltYWw6XHJcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmN1cnJlbmN5OlxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goLi4udGhpcy5nZXRSYW5nZUZpbHRlcihjb2wpKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZGF0ZTpcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldERhdGVSYW5nZUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlKSA9PiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGUpID0+IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSArIDEsIDAsIDAsIC0xKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKSxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kYXRldGltZTpcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi50aGlzLmdldERhdGVSYW5nZUZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlKSA9PiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkYXRlKSA9PiBuZXcgRGF0ZShkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXREYXRlUmFuZ2VGaWx0ZXIoY29sOiBDb2x1bW5TY2hlbWFCYXNlLCBwYXJzZURhdGVGcm9tOiAoZGF0ZTogRGF0ZSkgPT4gRGF0ZSwgcGFyc2VEYXRlVG86IChkYXRlOiBEYXRlKSA9PiBEYXRlKSB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0UmFuZ2VGaWx0ZXIoY29sLFxyXG4gICAgICAgICAgICBpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtWzBdID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtWzBdKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZURhdGVGcm9tKGRhdGUpO1xyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBpdGVtID0+IHtcclxuICAgICAgICAgICAgICAgIGlmIChpdGVtWzFdID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpdGVtWzFdKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZURhdGVUbyhkYXRlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRSYW5nZUZpbHRlcihjb2w6IENvbHVtblNjaGVtYUJhc2UsIGZ1bmNHZXRWYWx1ZUZyb206IChpdGVtKSA9PiBhbnkgPSBudWxsLCBmdW5jR2V0VmFsdWVUbzogKGl0ZW0pID0+IGFueSA9IG51bGwpIHtcclxuICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXHJcbiAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbCxcclxuICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGQsXHJcbiAgICAgICAgICAgICAgICBzdWJGaWVsZDogMCxcclxuICAgICAgICAgICAgICAgIGZ1bmNHZXRWYWx1ZTogZnVuY0dldFZhbHVlRnJvbSA/IGZ1bmNHZXRWYWx1ZUZyb20gOiAoaXRlbSkgPT4gaXRlbVswXSxcclxuICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZ2V0RmllbGRGaWx0ZXIoY29sKSxcclxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5sb3dlclRoYW5FcXVhbCxcclxuICAgICAgICAgICAgICAgIHNvdXJjZUZpZWxkOiBjb2wuZmllbGQsXHJcbiAgICAgICAgICAgICAgICBzdWJGaWVsZDogMSxcclxuICAgICAgICAgICAgICAgIGZ1bmNHZXRWYWx1ZTogZnVuY0dldFZhbHVlVG8gPyBmdW5jR2V0VmFsdWVUbyA6IChpdGVtKSA9PiBpdGVtWzFdLFxyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgIF07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRGaWVsZEZpbHRlcihjb2wpIHtcclxuICAgICAgICByZXR1cm4gY29sLmZpZWxkRmlsdGVyID8/IGNvbC5maWVsZDtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29udGV4dEN1c3RvbUZpbHRlcigpIHtcclxuICAgICAgICByZXR1cm4ge307XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNldEluaXRGaWx0ZXIoZGVmYXVsdEZpbHRlcjogS2V5VmFsdWVUeXBlKSB7XHJcbiAgICAgICAgaWYgKGRlZmF1bHRGaWx0ZXIpIHtcclxuICAgICAgICAgICAgT2JqZWN0LmtleXMoZGVmYXVsdEZpbHRlcikuZm9yRWFjaChrZXkgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2tleV0gPSBkZWZhdWx0RmlsdGVyW2tleV07XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlcl9jb2x1bW4gPSB0aGlzLl9jcnVkU2VydmljZS5nZXRGaWx0ZXJGcm9tVGVtcGxhdGUodGhpcy50ZW1wbGF0ZUZpbHRlciwgdGhpcy5nZXRNaW5pbWl6ZURhdGEodGhpcy5maWx0ZXJEYXRhKSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNlYXJjaCA9IChub2RlPykgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmxvYWRpbmcpIHJldHVybjtcclxuICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckJveEZvY3VzKG5vZGUpO1xyXG4gICAgICAgIHRoaXMuZmlsdGVyX2NvbHVtbiA9IHRoaXMuX2NydWRTZXJ2aWNlLmdldEZpbHRlckZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlRmlsdGVyLCB0aGlzLmdldE1pbmltaXplRGF0YSh0aGlzLmZpbHRlckRhdGEpKTtcclxuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IDE7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgZ2V0TWluaW1pemVEYXRhKG1vZGVsKSB7XHJcbiAgICAgICAgaWYgKGlzTGl0ZXJhbE9iamVjdChtb2RlbCkpIHtcclxuICAgICAgICAgICAgaWYgKG1vZGVsLl9kcm9wZG93bnZhbHVlICE9IG51bGwgJiYgbW9kZWwuX2Ryb3Bkb3dudmFsdWUgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kZWxbbW9kZWwuX2Ryb3Bkb3dudmFsdWVdO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBkYXRhID0ge307XHJcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IGluIG1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoa2V5ICE9ICdfc3RhdHVzJyAmJiBrZXkgIT0gJ19lcnJvcnMnICYmIGtleSAhPSAnX3NvdXJjZScpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCB2YWx1ZSA9IHRoaXMuZ2V0TWluaW1pemVEYXRhKG1vZGVsW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBudWxsKSBkYXRhW2tleV0gPSB2YWx1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZGF0YTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAoaXNBcnJheShtb2RlbCkpIHtcclxuICAgICAgICAgICAgY29uc3QgYXJyID0gW107XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtb2RlbCkge1xyXG4gICAgICAgICAgICAgICAgYXJyLnB1c2godGhpcy5nZXRNaW5pbWl6ZURhdGEoaXRlbSkpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBhcnI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKG1vZGVsICE9IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG1vZGVsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DbGVhclNlYXJjaChub2RlLCBmaWVsZCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmxvYWRpbmcpIHJldHVybjtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJEYXRhW2ZpZWxkXSAhPSBudWxsICYmIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0gIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLm9uU2VhcmNoKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2xlYXJOdW1iZXJTZWFyY2gobm9kZSwgY29udHJvbCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmxvYWRpbmcpIHJldHVybjtcclxuICAgICAgICBpZiAoY29udHJvbCkge1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbC5jbGVhcigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBubyBuZWVkIGNsZWFyIGRhdGEgYmVjYXVzZSBpdCdzIDIgd2F5cyBiaW5kaW5nXHJcbiAgICAgICAgICAgICAgICB0aGlzLm9uU2VhcmNoKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DbGVhckRhdGVTZWFyY2gobm9kZSwgY29udHJvbCwgZmllbGQpIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5sb2FkaW5nKSByZXR1cm47XHJcbiAgICAgICAgaWYgKGNvbnRyb2wpIHtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2wuY2xlYXIoKSkge1xyXG4gICAgICAgICAgICAgICAgLy8gbmVlZCBjbGVhciBkYXRhIGJlY2F1c2Ugbm90IDIgd2F5cyBiaW5kaW5nXHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckRhdGFbZmllbGRdID0gW3VuZGVmaW5lZCwgdW5kZWZpbmVkXTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2gobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckJveEZvY3VzKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNoYW5nZURhdGVUaW1lKGV2dCwgZmllbGQpIHtcclxuICAgICAgICB0aGlzLmZpbHRlckRhdGFbZmllbGRdID0gZXZ0LnZhbHVlO1xyXG4gICAgICAgIHRoaXMub25TZWFyY2goKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DaGFuZ2VCb29sZWFuKGV2dCwgZmllbGQpIHtcclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJEYXRhW2ZpZWxkXS5sZW5ndGggPT0gMikge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckRhdGFbZmllbGRdLnNwbGljZSgwLCAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vblNlYXJjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHNob3dDaGVja0JveEZpbHRlck1lbnUoZXZ0LCBmaWVsZCkge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEZpZWxkRmlsdGVyID0gZmllbGQ7XHJcbiAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cyA9IFsuLi50aGlzLmNoZWNrQm94Q29udGV4dE1lbnVdO1xyXG4gICAgICAgIHRoaXMuX3Nob3dDb250ZXh0TWVudShldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjaGFuZ2VGaWx0ZXJCb29sZWFuKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVt0aGlzLmN1cnJlbnRGaWVsZEZpbHRlcl0gPSBbdmFsdWVdO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrQm94Q29udGV4dE1lbnUuZm9yRWFjaChtZW51ID0+IG1lbnUuc3R5bGVDbGFzcyA9IG51bGwpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tCb3hDb250ZXh0TWVudVswXS5zdHlsZUNsYXNzID0gJ2FjdGl2ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmNoZWNrQm94Q29udGV4dE1lbnVbMV0uc3R5bGVDbGFzcyA9ICdhY3RpdmUnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlckRhdGFbdGhpcy5jdXJyZW50RmllbGRGaWx0ZXJdID0gbnVsbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vblNlYXJjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVGaWx0ZXJCb3hGb2N1cyhub2RlKSB7XHJcbiAgICAgICAgaWYgKG5vZGUpIHtcclxuICAgICAgICAgICAgY29uc3QgYWN0aXZlRWw6IGFueSA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7XHJcblxyXG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluU2FtZUJveCA9IHRoaXMuY2hlY2tJbk5vZGUoYWN0aXZlRWwsIG5vZGUpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCFpblNhbWVCb3ggfHwgKGFjdGl2ZUVsICYmIGFjdGl2ZUVsLm5vZGVOYW1lICE9ICdJTlBVVCcpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBub2RlLnF1ZXJ5U2VsZWN0b3IoJ2lucHV0Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0KSBpbnB1dC5zZWxlY3QoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluU2FtZUJveCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGFjdGl2ZUVsLnNlbGVjdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgb25TaG93RmlsdGVyRHJvcGRvd25QYW5lbChldmVudCkge1xyXG4gICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkcm9wZG93biA9IGV2ZW50LmNvbXBvbmVudC5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGNlbGxIZWFkZXJGaWx0ZXIgPSBkcm9wZG93bi5jbG9zZXN0KCd0aCcpO1xyXG5cclxuICAgICAgICAvLyB0aGVtIGNsYXNzIGZvY3VzLXdpdGhpbiBkZSBkcm9wZG93biBpbnB1dCBsdWMgZm9jdXMga2hvbmcgYmkgZGUgYm9pIGNhYyBzdGlja3kgY29sdW1uXHJcbiAgICAgICAgY2VsbEhlYWRlckZpbHRlciAmJiBjZWxsSGVhZGVyRmlsdGVyLmNsYXNzTGlzdC5hZGQoJ2ZvY3VzLXdpdGhpbicpO1xyXG4gICAgfVxyXG5cclxuICAgIG9uSGlkZUZpbHRlckRyb3Bkb3duUGFuZWwoZXZlbnQpIHtcclxuICAgICAgICBpZiAoIWV2ZW50IHx8ICFldmVudC5jb21wb25lbnQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZHJvcGRvd24gPSBldmVudC5jb21wb25lbnQuZWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBjb25zdCBjZWxsSGVhZGVyRmlsdGVyID0gZHJvcGRvd24uY2xvc2VzdCgndGgnKTtcclxuICAgICAgICBjZWxsSGVhZGVyRmlsdGVyICYmIGNlbGxIZWFkZXJGaWx0ZXIuY2xhc3NMaXN0LnJlbW92ZSgnZm9jdXMtd2l0aGluJyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGluaXRGaWx0ZXJCb3hGb2N1cyhub2RlKSB7XHJcbiAgICAgICAgaWYgKG5vZGUgJiYgbm9kZS5wYXJlbnROb2RlKSB7XHJcbiAgICAgICAgICAgIGlmIChub2RlLnBhcmVudE5vZGUub2Zmc2V0V2lkdGggPCAyNTApIHtcclxuICAgICAgICAgICAgICAgIG5vZGUuY2xhc3NMaXN0LmFkZCgnc2hvcnQtZmlsdGVyLWJveCcpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QucmVtb3ZlKCdzaG9ydC1maWx0ZXItYm94Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjaGVja0luTm9kZShjaGlsZCwgcGFyZW50KSB7XHJcbiAgICAgICAgbGV0IHN0YXJ0ID0gY2hpbGQ7XHJcbiAgICAgICAgd2hpbGUgKHN0YXJ0ICYmIHN0YXJ0LnBhcmVudE5vZGUgIT0gcGFyZW50KSB7XHJcbiAgICAgICAgICAgIHN0YXJ0ID0gc3RhcnQucGFyZW50Tm9kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBzdGFydCAhPSBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzYXZlUGFnZVNpemUoKSB7XHJcbiAgICAgICAgdGhpcy5zYXZlUGFnZVNldHRpbmcoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaGFuZGxlVGFibGVSZW5kZXJlZCgpIHtcclxuICAgICAgICBpZiAodGhpcy50YWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzQWZ0ZXJSZW5kZXJlZCh0aGlzLnRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnRyZWVUYWJsZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9wcm9jZXNzQWZ0ZXJSZW5kZXJlZCh0aGlzLnRyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5vblJlbG9hZGVkLmVtaXQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBfcHJvY2Vzc0FmdGVyUmVuZGVyZWQodGFibGVFbGVtZW50OiBhbnkpIHtcclxuICAgICAgICBpZiAoIXRoaXMuc3RvcENhbGN1bGF0aW5nRnVuY3Rpb25Db2x1bW5XaWR0aCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy50YWJsZSkgdGhpcy5nZXRXaWR0aEZ1bmN0aW9uKHRoaXMudGFibGUpO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5zdG9wQ2FsY3VsYXRpbmdGdW5jdGlvbkNvbHVtbldpZHRoID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgJHRoRmlyc3QgPSB0YWJsZUVsZW1lbnQucXVlcnlTZWxlY3RvcigndGhlYWQgdHI6Zmlyc3QtY2hpbGQgdGg6Zmlyc3QtY2hpbGQnKTtcclxuICAgICAgICBjb25zdCBvZmZzZXRUb3AgPSAkdGhGaXJzdC5vZmZzZXRUb3A7XHJcbiAgICAgICAgY29uc3QgJHRocyA9IHRhYmxlRWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0aGVhZCB0cjpub3QoOmZpcnN0LWNoaWxkKSB0aCcpO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgJHRocy5sZW5ndGg7ICsraSkge1xyXG4gICAgICAgICAgICAkdGhzW2ldLnN0eWxlLnRvcCA9IGAkeyR0aHNbaV0ub2Zmc2V0VG9wIC0gb2Zmc2V0VG9wfXB4YDtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8gU2VsZWN0IGzhuqFpIGl0ZW0gY3Xhu5FpIGPDuW5nIMSRxrDhu6NjIHNlbGVjdCB0csaw4bubYyDEkcOzXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5yZVNlbGVjdExhc3RJdGVtKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3QpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0ICR0ciA9IHRoaXMuZ2V0VHJCeVJvd0RhdGEodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1MYXN0KTtcclxuICAgICAgICAgICAgICAgIGlmICgkdHIpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhc3QgPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3Q7XHJcbiAgICAgICAgICAgICAgICAgICAgJHRyLmNsaWNrKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRUckJ5Um93RGF0YShyb3dEYXRhKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudHJlZVRhYmxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fcmF3RGF0YVNvdXJjZS5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHIgPSB0aGlzLnRyZWVUYWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoYHRib2R5IHRyW3Jvd0luZGV4PVwiJHtpbmRleH1cIl1gKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmICh0aGlzLnRhYmxlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gdGhpcy5fcmF3RGF0YVNvdXJjZS5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdHIgPSB0aGlzLnRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgdGJvZHkgdHJbcm93SW5kZXg9XCIke2luZGV4fVwiXWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgY3JlYXRlU2VhcmNoU2NoZW1hKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29scyA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0LhuqFuIGNoxrBhIGPhuqV1IGjDrG5oIGPhu5l0IGNobyBkYW5oIHPDoWNoJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY3JlYXRpbmdTZWFyY2hJbmZvID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBzZWFyY2hJbmZvID0gbmV3IFNlYXJjaEluZm8oKTtcclxuICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYSA9IDxGb3JtQ29udHJvbEJhc2VbXT5bXTtcclxuICAgICAgICBzZWFyY2hJbmZvLmZpZWxkRHJvcGRvd24gPSB7fTtcclxuICAgICAgICBzZWFyY2hJbmZvLmZpZWxkU2VhcmNoVGV4dCA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIHRoaXMuc2V0dGluZy5jb2xzKSB7XHJcbiAgICAgICAgICAgIGlmIChjb2wuYWxsb3dGaWx0ZXIgIT0gZmFsc2UgJiYgY29sLnJhd0NvbHVtbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sLmZ1bGxUZXh0U2VhcmNoKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LmluZGV4T2YoY29sLmZpZWxkKSA9PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLmZpZWxkU2VhcmNoVGV4dC5wdXNoKGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCA9ICdUw6xtIGtp4bq/bSB0aGVvIGPDoWMgdHLGsOG7nW5nOic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCArPSBgIFwiJHtjb2wubGFiZWwgPyBjb2wubGFiZWwgOiBjb2wuZmllbGR9XCIsYDtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sID0gYXdhaXQgdGhpcy5zZXR0aW5nLmZ1bmN0aW9uLmdldFNlYXJjaENvbnRyb2woY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgIGlmIChjb250cm9sICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKC4uLmNvbnRyb2wpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvbC5iYXNlU2VydmljZSB8fCAoY29sLmRhdGFTb3VyY2UgJiYgY29sLmRhdGFTb3VyY2UubGVuZ3RoID4gMCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5maWVsZERyb3Bkb3duW2NvbC5maWVsZF0gPSBuZXcgRHJvcGRvd25Db250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmNvbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2wubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogY29sLm11bHRpcGxlID8gT3BlcmF0b3IuaW4gOiBPcGVyYXRvci5lcXVhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IGNvbC5tZFdpZHRoID8gY29sLm1kV2lkdGggOiAxMCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRPbkluaXQ6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLmZpZWxkRHJvcGRvd25bY29sLmZpZWxkXVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZGF0YVR5cGUgPT0gJ2ludCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBOdW1iZXJSYW5nZUNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbC5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrVHlwZTogJ2ludCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogNlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09ICdkZWNpbWFsJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE51bWJlclJhbmdlQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tUeXBlOiAnZGVjaW1hbCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogNlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09ICdkYXRlJyB8fCBjb2wuZGF0YVR5cGUgPT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IERhdGVUaW1lUmFuZ2VDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2wubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmdyZWF0ZXJUaGFuRXF1YWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogNlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09ICdib29sZWFuJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IENoZWNrQm94TGlzdENvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbC5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhU291cmNlOiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IHRydWUsIGxhYmVsOiBgQ8OzYCB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7IHZhbHVlOiBmYWxzZSwgbGFiZWw6IGBLaMO0bmdgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZXF1YWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogY29sLm1kV2lkdGggPyBjb2wubWRXaWR0aCA6IDEwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNvbC5maWVsZCAhPSBjb2wuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IFRleHRDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbC5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmNvbnRhaW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kV2lkdGg6IGNvbC5tZFdpZHRoID8gY29sLm1kV2lkdGggOiAxMFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VhcmNoSW5mby5maWVsZFNlYXJjaFRleHQpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmaWVsZCBvZiBzZWFyY2hJbmZvLmZpZWxkU2VhcmNoVGV4dCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LmluZGV4T2YoZmllbGQpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5maWVsZFNlYXJjaFRleHQucHVzaChmaWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQgPSAnVMOsbSBraeG6v20gdGhlbyBjw6FjIHRyxrDhu51uZzonO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSB0aGlzLnNldHRpbmcubW9kZWxTY2hlbWFzLmZpbmQocCA9PiBwLmZpZWxkID09IGZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCArPSBgIFwiJHtjb2wubmFtZX1cIixgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQpIHtcclxuICAgICAgICAgICAgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCA9IHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQuc3Vic3RyaW5nKDAsIHNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQubGVuZ3RoIC0gMSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2VhcmNoSW5mbyA9IHNlYXJjaEluZm87XHJcbiAgICAgICAgdGhpcy5jcmVhdGluZ1NlYXJjaEluZm8gPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja1Blcm1pc3Npb25Ub1VzZUJ1dHRvbihidXR0b25QZXJtaXNzaW9uQ29kZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHRlbXAgPSB1c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpO1xyXG4gICAgICAgICAgICBpZiAodGVtcCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50VXNlciA9IHRlbXA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZSdcclxuICAgICAgICAgICAgfHwgKHRoaXMuY3VycmVudFVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpID09PSAndHJ1ZScgJiYgdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5pZ25vcmVBZG1pbiA9PT0gZmFsc2UpXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYnV0dG9uUGVybWlzc2lvbk1hcC5nZXQoYCR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlfS8ke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lfS8ke2J1dHRvblBlcm1pc3Npb25Db2RlfWApO1xyXG4gICAgfVxyXG5cclxuICAgIHNldERyb3Bkb3duRGF0YXNvdXJjZShmaWVsZDogc3RyaW5nLCBkYXRhU291cmNlOiBhbnlbXSkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlclNjaGVtYS5kcm9wZG93bltmaWVsZF0pIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJTY2hlbWEuZHJvcGRvd25bZmllbGRdLmRhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgZ2V0SXRlbVdvcmtmbG93U2V0dGluZyhzZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEpIHtcclxuICAgICAgICBsZXQgd29ya2Zsb3dTZXR0aW5nID0gc2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXc7XHJcbiAgICAgICAgaWYgKHNldHRpbmcuaXNXb3JrZmxvd1RyZWVcclxuICAgICAgICAgICAgJiYgc2V0dGluZy53b3JrZmxvd0NvbmZpZ0FkdmFuY2VcclxuICAgICAgICAgICAgJiYgc2V0dGluZy53b3JrZmxvd0NvbmZpZ0FkdmFuY2UuZ2V0V29ya2Zsb3dTZXR0aW5nXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHNldHRpbmcud29ya2Zsb3dDb25maWdBZHZhbmNlLmdldFdvcmtmbG93U2V0dGluZyhyb3dEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF3b3JrZmxvd1NldHRpbmcgfHwgd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCfEkOG7kWkgdMaw4bujbmcgY2jGsGEgxJHGsOG7o2MgY+G6pXUgaMOsbmggcXV5IHRyw6xuaCBuZ2hp4buHcCB24bulJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB3b3JrZmxvd1NldHRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0Zvcm1TdGFydFdvcmtmbG93KHJvd0RhdGEpIHtcclxuICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IHRydWU7XHJcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgdGhpcy5nZXRJdGVtV29ya2Zsb3dTZXR0aW5nKHRoaXMuc2V0dGluZywgcm93RGF0YSk7XHJcbiAgICAgICAgaWYgKCF3b3JrZmxvd1NldHRpbmcpIHtcclxuICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBO4bq/dSBjcmVhdGUgdGFzayB0aGF5IHbDrCBjaOG6oXkgcXV5IHRyw6xuaCB24bubaSDEkeG7kWkgdMaw4bujbmcgY2jDrW5oIHRow6wgbeG7nyBmb3JtIHRow6ptIGPDtG5nIHZp4buHY1xyXG4gICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcuY3JlYXRlVGFza0luc3RlYWQpIHtcclxuICAgICAgICAgICAgLy8gS2nhu4NtIHRyYSDEkcOjIHThuqFvIGPDtG5nIHZp4buHYyBn4bqvbiB24bubaSBi4bqjbiBnaGkgY2jGsGFcclxuICAgICAgICAgICAgLy8gTuG6v3UgY8OzIHLhu5NpIHRow6wgYsOhb1xyXG4gICAgICAgICAgICBjb25zdCByZXN1bHRDaGVja0V4aXN0ID0gKGF3YWl0IHRoaXMuX2NvbmdWaWVjU2VydmljZS5jaGVja0V4aXN0QnlGaWx0ZXIoW1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ3NlcnZpY2VDb2RlJywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZSksXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5JywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lKSxcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHlLZXknLCBPcGVyYXRvci5lcXVhbCwgcm93RGF0YS5pZClcclxuICAgICAgICAgICAgXSkpO1xyXG4gICAgICAgICAgICBpZiAoIXJlc3VsdENoZWNrRXhpc3Quc3VjY2Vzcykge1xyXG4gICAgICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0PDsyBs4buXaSB44bqjeSByYSBraGkga2nhu4NtIHRyYSB0cuG6oW5nIHRow6FpIMSRw6MgdOG6oW8gY8O0bmcgdmnhu4djIGhheSBjaMawYScpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHRDaGVja0V4aXN0LmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdC4bqjbiBnaGkgxJHDoyDEkcaw4bujYyB04bqhbyBjw7RuZyB2aeG7h2MnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLm1vZGlmeVJvd0RhdGFGb3JUYXNrKSB7XHJcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmcubW9kaWZ5Um93RGF0YUZvclRhc2socm93RGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgbW9kZWxUYXNrID0ge1xyXG4gICAgICAgICAgICAgICAgaWQ6IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpLCAvLyBJZCBuw6B5IGPhuqduIHRoaeG6v3QgdsOsIHPhur0gZMO5bmcgdHJvbmcgaMOgbSBpbnNlcnRUYXNrQW5kUmVsb2FkXHJcbiAgICAgICAgICAgICAgICBjaGVja1VuaXF1ZVRhc2tGb3JFbnRpdHk6IHRydWUsXHJcbiAgICAgICAgICAgICAgICAvLyBhdXRvTmV4dFN0ZXA6IHdvcmtmbG93U2V0dGluZy5hdXRvTmV4dFN0ZXAsXHJcbiAgICAgICAgICAgICAgICBpZExvYWlDb25nVmllYzogd29ya2Zsb3dTZXR0aW5nLmlkTG9haUNvbmdWaWVjRGVmYXVsdCxcclxuICAgICAgICAgICAgICAgIHNlcnZpY2VDb2RlOiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUsXHJcbiAgICAgICAgICAgICAgICBlbnRpdHk6IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lLFxyXG4gICAgICAgICAgICAgICAgZW50aXR5S2V5OiByb3dEYXRhLmlkLFxyXG4gICAgICAgICAgICAgICAgdGVuOiB0aGlzLmdldFRlbkNvbmdWaWVjKHdvcmtmbG93U2V0dGluZy50ZW1wbGF0ZVRhc2tOYW1lLCByb3dEYXRhKSxcclxuICAgICAgICAgICAgICAgIGRpbmhLZW1OZ2hpZXBWdUR0b3M6IFtdXHJcbiAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAvLyBU4buVbmcgaOG7o3AgbW9kZWwgxJHDrW5oIGvDqG0gbmdoaeG7h3AgduG7pSBlbnRpdHlcclxuICAgICAgICAgICAgY29uc3QgY29udGVudExpbmsgPSBhd2FpdCB0aGlzLmdldENvcHlQYXRoKHRoaXMuc2V0dGluZywgcm93RGF0YSk7XHJcbiAgICAgICAgICAgIGlmIChjb250ZW50TGluaykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbW9kZWxFbnRpdHkgPSB0aGlzLnBhcnNlQXR0YWNoTGluayhjb250ZW50TGluayk7XHJcbiAgICAgICAgICAgICAgICBtb2RlbFRhc2suZGluaEtlbU5naGllcFZ1RHRvcyA9IG1vZGVsRW50aXR5O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcubW9kaWZ5SXRlbVRhc2spIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZy5tb2RpZnlJdGVtVGFzayhtb2RlbFRhc2ssIHJvd0RhdGEpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBLaeG7g20gdHJhIG7hur91IGPDsyBj4bqldSBow6xuaCB04buxIMSR4buZbmcgYuG6r3QgxJHhuqd1IHRhc2ssIHbDoCBwaOG6o2kgY8OzIGxv4bqhaSBjw7RuZyB2aeG7h2MgbeG6t2MgxJHhu4tuaFxyXG4gICAgICAgICAgICBpZiAod29ya2Zsb3dTZXR0aW5nLmF1dG9TdGFydFRhc2tcclxuICAgICAgICAgICAgICAgICYmIHdvcmtmbG93U2V0dGluZy5pZExvYWlDb25nVmllY0RlZmF1bHRcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyA9PiBUaMOsIGzhuqV5IHRow6ptIHRow7RuZyB0aW4gcXV5IHRyw6xuaCBt4bq3YyDEkeG7i25oIGNobyB0YXNrXHJcbiAgICAgICAgICAgICAgICAvLyBO4bq/dSBs4bqleSDEkcaw4bujYyB0aMOsIHThu7EgxJHhu5luZyBi4bqvdCDEkeG6p3UsIG7hur91IGtow7RuZyB0aMOsIHbhuqtuIHBo4bqjaSBt4bufIGzDqm4gZm9ybSBjw7RuZyB2aeG7h2NcclxuICAgICAgICAgICAgICAgIGNvbnN0IHRhc2tXb3JrZmxvd1NldHRpbmcgPSBhd2FpdCB0aGlzLl9kbUxvYWlDb25nVmllY1NlcnZpY2UuZ2V0V29ya2Zsb3dTZXR0aW5nQnlJZExvYWlDb25nVmllYyh3b3JrZmxvd1NldHRpbmcuaWRMb2FpQ29uZ1ZpZWNEZWZhdWx0KTtcclxuICAgICAgICAgICAgICAgIGlmICh0YXNrV29ya2Zsb3dTZXR0aW5nICE9IG51bGwgJiYgdGFza1dvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBtb2RlbFRhc2tbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXSA9IHRhc2tXb3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuaW5zZXJ0VGFza0FuZFJlbG9hZChtb2RlbFRhc2ssIHJvd0RhdGEsIHRhc2tXb3JrZmxvd1NldHRpbmcpO1xyXG4gICAgICAgICAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuY29uZ1ZpZWNNb2RlbC5kYXRhLmNvbmdWaWVjU2V0dGluZy5pc1dvcmtmbG93VHJlZSA9IHRydWU7XHJcbiAgICAgICAgICAgIHRoaXMuY29uZ1ZpZWNNb2RlbC5kYXRhLm1vZGVsID0ge1xyXG4gICAgICAgICAgICAgICAgZm9ybVN0YXRlOiBGb3JtU3RhdGUuQURELFxyXG4gICAgICAgICAgICAgICAgZGF0YTogbW9kZWxUYXNrXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHRoaXMuY29uZ1ZpZWNNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3MubGVuZ3RoID09IDEpIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc3RhcnRXb3JrZmxvdyhyb3dEYXRhLCB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzWzBdKTtcclxuICAgICAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRXb3JrZmxvd01vZGVsLmRhdGEud29ya2Zsb3dzID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cztcclxuICAgICAgICAgICAgdGhpcy5zdGFydFdvcmtmbG93TW9kZWwuZGF0YS5kZWZhdWx0V29ya2Zsb3cgPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dDb2RlO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5kYXRhLml0ZW0gPSByb3dEYXRhO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBnZXRUZW5Db25nVmllYyh0ZW1wbGF0ZVRleHQ6IHN0cmluZywgcm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgcmV0dXJuIHJlbmRlclRleHRUZW1wbGF0ZShcclxuICAgICAgICAgICAgZ2V0UmVnZXhSZXN1bHQodGVtcGxhdGVUZXh0LCBSZWdleFNwbGl0RmllbGRCeUl0ZW0sIGV4ZWNSZXN1bHQgPT4gZXhlY1Jlc3VsdFsxXSksXHJcbiAgICAgICAgICAgIHRlbXBsYXRlVGV4dCwgcm93RGF0YVxyXG4gICAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSB0b25nSG9wV29ya2Zsb3dIaXN0b3J5Rm9yTmV4dEZpcnN0U3RlcChcclxuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5OiBhbnksIGl0ZW1UYXNrOiBhbnksIHdvcmtmbG93U2V0dGluZzogV29ya2Zsb3dTZXR0aW5nTmV3LCB3b3JrZmxvd0NvZGU6IHN0cmluZ1xyXG4gICAgKSB7XHJcbiAgICAgICAgaWYgKGl0ZW1Xb3JrZmxvd0hpc3RvcnkgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5pZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xyXG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuaWdub3JlVmFsaWRhdGVCYXNlSW5CdXNzaW5lc3MgPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93ID0gd29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cy5maW5kKHEgPT4gcS5jb2RlID09IHdvcmtmbG93Q29kZSk7XHJcbiAgICAgICAgaWYgKHdvcmtmbG93ID09IG51bGwpIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IHN0YXRlU3RhcnQgPSB3b3JrZmxvdy5kYXRhLm1hY2hpbmVzLmZpbmQocSA9PiBxLnR5cGUgPT0gRW51bVN0YXRlVHlwZS5TVEFSVCk7XHJcbiAgICAgICAgaWYgKHN0YXRlU3RhcnQgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgYWN0aW9uQ29kZSA9IGl0ZW1Xb3JrZmxvd0hpc3RvcnkuYWN0aW9uQ29kZTtcclxuICAgICAgICBjb25zdCBleGlzdEFjdGlvbiA9IHdvcmtmbG93LmRhdGEuY29ubmVjdGlvbnMuc29tZSh4ID0+IHguc291cmNlID09IHN0YXRlU3RhcnQuaWRcclxuICAgICAgICAgICAgJiYgeC5jb2RlID09IGFjdGlvbkNvZGVcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmICghZXhpc3RBY3Rpb24pIHJldHVybiBudWxsO1xyXG4gICAgICAgIGNvbnN0IGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZS5hZGp1c3RTZXR0aW5nV29ya2Zsb3dGb3JDcnVkTGlzdChjcnVkTGlzdFNldHRpbmcpO1xyXG4gICAgICAgIGxldCBuYW1lID0gJyc7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkID09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSBpdGVtVGFza1s8c3RyaW5nPihjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkKV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBuYW1lID0gKDxGdW5jdGlvbj4oY3J1ZExpc3RTZXR0aW5nLmRpc3BsYXlGaWVsZCkpKGl0ZW1UYXNrKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmFtZSA9IGAke2NydWRMaXN0U2V0dGluZy5iYXNlU2VydmljZS5vYmplY3ROYW1lfSAke25hbWV9YDtcclxuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LnRhYmxlTmFtZSA9IHRoaXMuX2NvbmdWaWVjU2VydmljZS5lbnRpdHlOYW1lO1xyXG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnkub2JqZWN0RnVsbE5hbWUgPSBuYW1lO1xyXG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnkub2JqZWN0TmFtZSA9IGNydWRMaXN0U2V0dGluZy5iYXNlU2VydmljZS5vYmplY3ROYW1lO1xyXG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnkud29ya2Zsb3dDb2RlID0gd29ya2Zsb3dDb2RlO1xyXG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuaXRlbUlkID0gaXRlbVRhc2suaWQ7XHJcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5zb3VyY2VTdGF0dXNDb2RlID0gc3RhdGVTdGFydC5jb2RlO1xyXG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkuYWN0aW9uQ29kZSA9IGFjdGlvbkNvZGU7XHJcbiAgICAgICAgcmV0dXJuIGl0ZW1Xb3JrZmxvd0hpc3Rvcnk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBpbnNlcnRUYXNrQW5kUmVsb2FkKG1vZGVsVGFzaywgcm93RGF0YSwgd29ya2Zsb3dTZXR0aW5nOiBXb3JrZmxvd1NldHRpbmdOZXcpIHtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmdldERhdGFGb3JOZXh0Rmlyc3RTdGVwVGFzaykge1xyXG4gICAgICAgICAgICBtb2RlbFRhc2suaXRlbVdvcmtmbG93SGlzdG9yeSA9IGF3YWl0IHRoaXMuc2V0dGluZy5nZXREYXRhRm9yTmV4dEZpcnN0U3RlcFRhc2socm93RGF0YSk7XHJcbiAgICAgICAgICAgIG1vZGVsVGFzay5pdGVtV29ya2Zsb3dIaXN0b3J5ID0gdGhpcy50b25nSG9wV29ya2Zsb3dIaXN0b3J5Rm9yTmV4dEZpcnN0U3RlcChcclxuICAgICAgICAgICAgICAgIG1vZGVsVGFzay5pdGVtV29ya2Zsb3dIaXN0b3J5LCBtb2RlbFRhc2ssIHdvcmtmbG93U2V0dGluZywgbW9kZWxUYXNrW0ZpZWxkV29ya2Zsb3dDb2RlSW5DcnVkRm9ybV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYXdhaXQgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLnBvc3QobW9kZWxUYXNrKVxyXG4gICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICcnLCBmID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TdGFydGVkV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBjYWxsIGJhY2sga2hpIOG6pW4gbMawdSB0csOqbiBmb3JtIGLhuq90IMSR4bqndSBxdXkgdHLDrG5oXHJcbiAgICAgKiBjcnVkLWxpc3Qgc+G6vSBn4buNaSBow6BtIGzGsHUgY2jhu6kgZm9ybSBzdGFydCB3b3JrZmxvdyBrIGzDoG0gZ8OsIGPhuqNcclxuICAgICAqIMSQ4buCIFThuqxOIEThu6RORyBM4bqgSSBIw4BNIHN0YXJ0V29ya2Zsb3cgY+G7p2EgY3J1ZC1saXN0XHJcbiAgICAgKi9cclxuICAgIGhhbmRsZVN0YXJ0V29ya2Zsb3dGcm9tRGlhbG9nKHdvcmtmbG93OiBXZkl0ZW0pIHtcclxuICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3codGhpcy5zdGFydFdvcmtmbG93TW9kZWwuZGF0YS5pdGVtLCB3b3JrZmxvdyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNob3dBY3Rpb25Xb3JrZmxvdyhldnQsIHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cpIHJldHVybjtcclxuICAgICAgICB0aGlzLmJ1dHRvbkNvbnRleHRzID0gYXdhaXQgdGhpcy5nZXRCdXR0b25Db250ZXh0KHJvd0RhdGEpO1xyXG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbkNvbnRleHRzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Nob3dDb250ZXh0TWVudShldnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRCdXR0b25Db250ZXh0KHJvd0RhdGEpIHtcclxuICAgICAgICB0aGlzLnNob3dpbmdBY3Rpb25Xb3JrZmxvdyA9IHRydWU7XHJcbiAgICAgICAgbGV0IHJlc3VsdEdldEFjdGlvbldvcmtmbG93ID0gbnVsbDtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5pc1dvcmtmbG93VHJlZSAmJiB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nTmV3LmNyZWF0ZVRhc2tJbnN0ZWFkKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdEdldEFjdGlvbldvcmtmbG93ID0gYXdhaXQgdGhpcy5nZXRBY3Rpb25Xb3JrZmxvd0J5VGFzayhyb3dEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHJlc3VsdEdldEFjdGlvbldvcmtmbG93ID0gYXdhaXQgdGhpcy5nZXRBY3Rpb25Xb3JrZmxvdyhyb3dEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cpKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIGPDsyBow6BuaCDEkeG7mW5nIGto4bqjIGThu6VuZycpO1xyXG4gICAgICAgICAgICByZXR1cm4gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGJ1dHRvbkNvbnRleHRzID0gcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3c7XHJcbiAgICAgICAgLy8gTuG6v3UgbMOgIGLhuqNuIGdoaSBuZ2hp4buHcCB24bulIG3DoCBjw7MgZ+G6r24gdGjDtG5nIHRpbiB0YXNrIHRow6wgYuG7lSBzdW5nIHRow6ptIG1lbnUgeGVtIGPDtG5nIHZp4buHY1xyXG4gICAgICAgIGlmIChyb3dEYXRhW0ZpZWxkRGVmaW5lSGFzVGFza10pIHtcclxuICAgICAgICAgICAgYnV0dG9uQ29udGV4dHMudW5zaGlmdChcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogYFhlbSBjw7RuZyB2aeG7h2NgLFxyXG4gICAgICAgICAgICAgICAgICAgIGljb246ICdwaSBwaS1tYXAnLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMudmlld1Rhc2tEZXRhaWwocm93RGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJ1dHRvbkNvbnRleHRzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGdldEFjdGlvbldvcmtmbG93KHJvd0RhdGEpOiBQcm9taXNlPGFueVtdIHwgdm9pZD4ge1xyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuZ2V0SXRlbVdvcmtmbG93U2V0dGluZyh0aGlzLnNldHRpbmcsIHJvd0RhdGEpO1xyXG4gICAgICAgIGlmICghd29ya2Zsb3dTZXR0aW5nKSByZXR1cm47XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFjdGlvbldvcmtmbG93QmFzZSh0aGlzLnNldHRpbmcsIHJvd0RhdGEsIHdvcmtmbG93U2V0dGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0QWN0aW9uV29ya2Zsb3dCeVRhc2socm93RGF0YSk6IFByb21pc2U8YW55W10gfCB2b2lkPiB7XHJcbiAgICAgICAgaWYgKCFyb3dEYXRhLl9faXNHb3RDb25nVmllYykge1xyXG4gICAgICAgICAgICByb3dEYXRhLl9faXRlbUNvbmdWaWVjID0gKGF3YWl0IHRoaXMuX2NvbmdWaWVjU2VydmljZS5nZXREZXRhaWxCeUZpbHRlcihcclxuICAgICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignc2VydmljZUNvZGUnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5JywgT3BlcmF0b3IuZXF1YWwsIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5lbnRpdHlOYW1lKSxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5S2V5JywgT3BlcmF0b3IuZXF1YWwsIHJvd0RhdGEuaWQpXHJcbiAgICAgICAgICAgICAgICBdXHJcbiAgICAgICAgICAgICkpLmRhdGE7XHJcbiAgICAgICAgICAgIHJvd0RhdGEuX19pc0dvdENvbmdWaWVjID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcm93RGF0YSA9IHJvd0RhdGEuX19pdGVtQ29uZ1ZpZWM7XHJcbiAgICAgICAgaWYgKCFyb3dEYXRhKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2hvd2luZ0FjdGlvbldvcmtmbG93ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyB0w6xtIHRo4bqleSBi4bqjbiBnaGkgY8O0bmcgdmnhu4djIGfhuq9uIHbhu5tpIGLhuqNuIGdoaScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb3dEYXRhLl9fd29ya2Zsb3dDb2RlID0gcm93RGF0YS53b3JrZmxvd0NvZGU7XHJcblxyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoV29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSk7XHJcbiAgICAgICAgY29uc3QgdXNlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoVXNlclNlcnZpY2UpO1xyXG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHdvcmtmbG93UGVybWlzc2lvbkRldGFpbFNlcnZpY2UuY2hhbmdlRW5kcG9pbnQodGhpcy5fY29uZ1ZpZWNTZXJ2aWNlKVxyXG4gICAgICAgICAgICAuYXBwZW5kSW5mb0ZvcldvcmtmbG93KFxyXG4gICAgICAgICAgICAgICAgdXNlclNlcnZpY2UuZ2V0VXNlcklkQ29tYmluZSgpLCBbcm93RGF0YV0sICdpZCcsIHRoaXMuc2V0dGluZy5pZ25vcmVXb3JrZmxvd1xyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGlmIChyZXN1bHQgIT09IHRydWUpIHJldHVybjtcclxuICAgICAgICBjb25zdCB3b3JrZmxvd1NldHRpbmcgPSBhd2FpdCB0aGlzLl9kbUxvYWlDb25nVmllY1NlcnZpY2UuZ2V0V29ya2Zsb3dTZXR0aW5nQnlJZExvYWlDb25nVmllYyhyb3dEYXRhLmlkTG9haUNvbmdWaWVjKTtcclxuXHJcbiAgICAgICAgaWYgKHdvcmtmbG93U2V0dGluZyA9PSBudWxsKSByZXR1cm47XHJcbiAgICAgICAgY29uc3QgY3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZS5hZGp1c3RTZXR0aW5nV29ya2Zsb3dGb3JDcnVkTGlzdChjcnVkTGlzdFNldHRpbmcpO1xyXG4gICAgICAgIHJldHVybiB0aGlzLl9nZXRBY3Rpb25Xb3JrZmxvd0Jhc2UoY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhLCB3b3JrZmxvd1NldHRpbmcpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYXN5bmMgX2dldEFjdGlvbldvcmtmbG93QmFzZShjcnVkTGlzdFNldHRpbmc6IENydWRMaXN0U2V0dGluZywgcm93RGF0YSwgd29ya2Zsb3dTZXR0aW5nOiBXb3JrZmxvd1NldHRpbmdOZXcpOiBQcm9taXNlPGFueVtdIHwgdm9pZD4ge1xyXG4gICAgICAgIHRoaXMuY3VycmVudEl0ZW0gPSByb3dEYXRhO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMgPSBbXTtcclxuICAgICAgICBjb25zdCBidXR0b25Db250ZXh0cyA9IFtdO1xyXG4gICAgICAgIC8vIE7hur91IGsgY8OzIHdvcmtmbG93IGNvZGUgbmdoxKlhIGzDoCBjaMawYSBjaOG6oXkgcXV5IHRyw6xuaCBob+G6t2MgcXV5IHRyw6xuaCBs4buXaSA9PiBDaG8gY2jhuqF5IGzhuqFpXHJcbiAgICAgICAgaWYgKCFyb3dEYXRhLl9fd29ya2Zsb3dDb2RlKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Xb3JrZmxvd1NldHRpbmcgPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLmZpbmQocSA9PiBxLmNvZGUgPT0gcm93RGF0YS5fX3dvcmtmbG93Q29kZSk7XHJcbiAgICAgICAgICAgIGlmICghaXRlbVdvcmtmbG93U2V0dGluZykge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgS2jDtG5nIHTDrG0gdGjhuqV5IHF1eSB0csOsbmggY8OzIG3DoyAke3Jvd0RhdGEuX193b3JrZmxvd0NvZGV9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3QgYWN0aW9ucyA9IGl0ZW1Xb3JrZmxvd1NldHRpbmcuZGF0YS5hY3Rpb25zW3Jvd0RhdGEuX190cmFuZ1RoYWldO1xyXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25BbGxvd3MgPSAoYXdhaXQgY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlLmdldEFjdGlvbkFsbG93KHJvd0RhdGEuaWQpKS5kYXRhO1xyXG4gICAgICAgICAgICBpZiAoYWN0aW9uQWxsb3dzKSB7XHJcbiAgICAgICAgICAgICAgICBhY3Rpb25BbGxvd3MuZm9yRWFjaChhY3Rpb25Db2RlID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBhY3Rpb24gPSBhY3Rpb25zLmZpbmQocSA9PiBxLmNvZGUgPT0gYWN0aW9uQ29kZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBidXR0b25Db250ZXh0cy5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvVGh1VHU6IGFjdGlvbi5zb1RodVR1LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uQ29kZTogYWN0aW9uLmNvZGUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpY29uOiB0aGlzLnNvdXJjZUljb25bYWN0aW9uLmljb25dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGFjdGlvbi5uYW1lLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5wcm9jZXNzV29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nLCBpdGVtV29ya2Zsb3dTZXR0aW5nLCBhY3Rpb24pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gTOG7l2kgayBs4bqleSDEkcaw4bujYyBhY3Rpb24gYWxsb3dcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBidXR0b25Db250ZXh0cy5zb3J0KG11bHRpcGxlU29ydCgnc29UaHVUdScpKTtcclxuICAgICAgICAgICAgLy8gS2nhu4NtIHRyYSBuZ8aw4budaSBjdeG7kWkgY8O5bmcgdGjhu7FjIGhp4buHbiBjw7MgcGjhuqNpIG5nxrDhu51pIGhp4buHbiB04bqhaSBraMO0bmcgdGjDrCBjaG8gcGjDqXAgcm9sbGJhY2tcclxuICAgICAgICAgICAgY29uc3Qgd29ya2Zsb3dIaXN0b3J5U2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlKTtcclxuICAgICAgICAgICAgd29ya2Zsb3dIaXN0b3J5U2VydmljZS5jaGFuZ2VFbmRwb2ludCh0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJJZCA9IHVzZXJTZXJ2aWNlLmdldElkKCk7XHJcbiAgICAgICAgICAgIGxldCB1c2VySWRTdHJpbmdVcHBlciA9ICcnO1xyXG4gICAgICAgICAgICBpZiAodXNlcklkKSB7XHJcbiAgICAgICAgICAgICAgICB1c2VySWRTdHJpbmdVcHBlciA9IHVzZXJJZC50b1VwcGVyQ2FzZSgpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBpdGVtV29ya2Zsb3dIaXN0b3J5TGFzdCA9IChhd2FpdCB3b3JrZmxvd0hpc3RvcnlTZXJ2aWNlLmNoYW5nZUVuZHBvaW50KGNydWRMaXN0U2V0dGluZy5iYXNlU2VydmljZSkuZ2V0TGFzdEJ5SXRlbUlkKHJvd0RhdGEuaWQpKS5kYXRhO1xyXG4gICAgICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeUxhc3RcclxuICAgICAgICAgICAgICAgICYmIGl0ZW1Xb3JrZmxvd0hpc3RvcnlMYXN0LmFjdGlvbkNvZGUgIT0gTWFBY3Rpb25CYXREYXVRdXlUcmluaFxyXG4gICAgICAgICAgICAgICAgJiYgaXRlbVdvcmtmbG93SGlzdG9yeUxhc3QudXNlcklkQ3JlYXRlZC50b1VwcGVyQ2FzZSgpID09IHVzZXJJZFN0cmluZ1VwcGVyXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgYnV0dG9uQ29udGV4dHMucHVzaChcclxuICAgICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGljb246ICdwaSBwaS1yZXBsYXknLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ1RodSBo4buTaScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMucm9sbGJhY2tXb3JrZmxvdyhjcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEpXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBidXR0b25Db250ZXh0cy5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGljb246ICdwaSBwaS1jb21tZW50cycsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6ICdDaG8gw70ga2nhur9uJyxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnNob3dGb3JtQ2hvWUtpZW4oY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKVxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICBpY29uOiAncGkgcGktY2FsZW5kYXInLFxyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBCdXR0b25UZXh0QWN0aW9uQ29uZ1ZpZWMuWEVNX0xJQ0hfU1UsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy52aWV3SGlzdG9yeVdvcmtmbG93KGNydWRMaXN0U2V0dGluZywgcm93RGF0YSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGJ1dHRvbkNvbnRleHRzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHZpZXdUYXNrRGV0YWlsKHJvd0RhdGEpIHtcclxuICAgICAgICBjb25zdCBpdGVtVGFzayA9IChhd2FpdCB0aGlzLl9jb25nVmllY1NlcnZpY2UuZ2V0RGV0YWlsQnlGaWx0ZXIoW1xyXG4gICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignZW50aXR5S2V5JywgT3BlcmF0b3IuZXF1YWwsIHJvd0RhdGEuaWQpXHJcbiAgICAgICAgXSkpLmRhdGE7XHJcbiAgICAgICAgaWYgKGl0ZW1UYXNrID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGPDtG5nIHZp4buHYyBn4bqvbiB24bubaSBi4bqjbiBnaGknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgdGFza0Zvcm1Nb2RlbDogYW55ID0ge307XHJcbiAgICAgICAgdGFza0Zvcm1Nb2RlbC5mb3JtU3RhdGUgPSBGb3JtU3RhdGUuVklFVztcclxuICAgICAgICB0YXNrRm9ybU1vZGVsLmRhdGEgPSBpdGVtVGFzaztcclxuICAgICAgICB0aGlzLmRldGFpbFRhc2tNb2RlbC5kYXRhLnRhc2tGb3JtTW9kZWwgPSB0YXNrRm9ybU1vZGVsO1xyXG4gICAgICAgIHRoaXMuZGV0YWlsVGFza01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcm9sbGJhY2tXb3JrZmxvdyhjcnVkTGlzdFNldHRpbmc6IENydWRMaXN0U2V0dGluZywgcm93RGF0YSkge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93Q29uZmlybSgnQuG6oW4gY8OzIGNo4bqvYyBjaOG6r24gbXXhu5FuIGtow7RpIHBo4bulYyB0cuG6oW5nIHRow6FpIHRyxrDhu5tjIMSRw7MnKVxyXG4gICAgICAgICAgICAudGhlbihyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFyZXMpIHJldHVybjtcclxuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gJyc7XHJcbiAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gcm93RGF0YVs8c3RyaW5nPihjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkKV07XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBuYW1lID0gKDxGdW5jdGlvbj4oY3J1ZExpc3RTZXR0aW5nLmRpc3BsYXlGaWVsZCkpKHJvd0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlLnJvbGxiYWNrKHJvd0RhdGEsIFtjcnVkTGlzdFNldHRpbmcub2JqZWN0TmFtZSwgbmFtZV0pXHJcbiAgICAgICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2UocmVzLCAnS2jDtGkgcGjhu6VjIHRy4bqhbmcgdGjDoWkgdHLGsOG7m2MgdGjDoG5oIGPDtG5nJywgZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMub25Sb2xsYmFja2VkV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWRTdGF0dXNXb3JrZmxvdy5lbWl0KHJvd0RhdGEuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgICAgICAgICAgICAgICB9KSk7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHZpZXdIaXN0b3J5V29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIHJvd0RhdGE6IG51bWJlcikge1xyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuZ2V0SXRlbVdvcmtmbG93U2V0dGluZyhjcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEpO1xyXG4gICAgICAgIGlmICghd29ya2Zsb3dTZXR0aW5nKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IHJvd0RhdGE7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd0hpc3RvcnlNb2RlbC5kYXRhID0ge307XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd0hpc3RvcnlNb2RlbC5kYXRhLnNldHRpbmcgPSBjcnVkTGlzdFNldHRpbmc7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd0hpc3RvcnlNb2RlbC5kYXRhLndvcmtmbG93U2V0dGluZyA9IHdvcmtmbG93U2V0dGluZztcclxuICAgICAgICB0aGlzLndvcmtmbG93SGlzdG9yeU1vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlSGlkZUhpc3RvcnlXb3JrZmxvdygpIHtcclxuICAgICAgICB0aGlzLnNob3dIaXN0b3J5V29ya2Zsb3cgPSBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcm9jZXNzV29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcsIGl0ZW1Xb3JrZmxvd1NldHRpbmc6IGFueSwgd29ya2Zsb3dBY3Rpb246IFdmQWN0aW9uKSB7XHJcbiAgICAgICAgaWYgKHdvcmtmbG93QWN0aW9uLm9wZW5OZXdUYWIpIHtcclxuICAgICAgICAgICAgbGV0IGRvbWFpbk5ld1RhYiA9IHdvcmtmbG93QWN0aW9uLmRvbWFpbk5ld1RhYjtcclxuICAgICAgICAgICAgaWYgKCFkb21haW5OZXdUYWIpIGRvbWFpbk5ld1RhYiA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW47XHJcbiAgICAgICAgICAgIHdpbmRvdy5vcGVuKGAke2RvbWFpbk5ld1RhYn0vJHt3b3JrZmxvd0FjdGlvbi5saW5rTmV3VGFifSNfaXRlbUlkPSR7dGhpcy5jdXJyZW50SXRlbS5pZH1gLCAnX2JsYW5rJyk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF3b3JrZmxvd0FjdGlvbi5vcGVuUG9wdXApIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93V2FpdEJveCgpO1xyXG4gICAgICAgICAgICBjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2UuY2hhbmdlU3RhdGVCYXNlQnlBY3Rpb24odGhpcy5jdXJyZW50SXRlbS5pZCwgd29ya2Zsb3dBY3Rpb24uY29kZSlcclxuICAgICAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlV2l0aFdhaXRCb3gocmVzLCAnJywgZiA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9jZXNzZWRXb3JrZmxvd0Jhc2UoKTtcclxuICAgICAgICAgICAgICAgIH0pKVxyXG4gICAgICAgICAgICAgICAgLmNhdGNoKGVyciA9PiB0aGlzLmhpZGVXYWl0Qm94KCkpO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLmhlYWRlciA9IHdvcmtmbG93QWN0aW9uLm5hbWU7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5kYXRhLnNldHRpbmcgPSBjcnVkTGlzdFNldHRpbmc7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5kYXRhLmFjdGlvbiA9IHdvcmtmbG93QWN0aW9uO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuZGF0YS53b3JrZmxvdyA9IGl0ZW1Xb3JrZmxvd1NldHRpbmc7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0Zvcm1DaG9ZS2llbihjcnVkTGlzdFNldHRpbmc6IENydWRMaXN0U2V0dGluZywgcm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5jaG9ZS2llbk1vZGVsLmRhdGEucm93RGF0YSA9IHJvd0RhdGE7XHJcbiAgICAgICAgdGhpcy5jaG9ZS2llbk1vZGVsLmRhdGEuc2V0dGluZyA9IGNydWRMaXN0U2V0dGluZztcclxuICAgICAgICB0aGlzLmNob1lLaWVuTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzdGFydFdvcmtmbG93KHJvd0RhdGEsIHdvcmtmbG93OiBXZkl0ZW0pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc3RhcnRXb3JrZmxvdyhyb3dEYXRhLmlkLCB3b3JrZmxvdy5jb2RlKVxyXG4gICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICdDaOG6oXkgcXV5IHRyw6xuaCB0aMOgbmggY8O0bmcnLCBmID0+IHtcclxuICAgICAgICAgICAgICAgIHRoaXMub25TdGFydGVkV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMub25DaGFuZ2VkU3RhdHVzV29ya2Zsb3cuZW1pdChyb3dEYXRhLmlkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlUHJvY2Vzc2VkV29ya2Zsb3dCYXNlKCkge1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5vblByb2Nlc3NlZFdvcmtmbG93LmVtaXQodGhpcy5jdXJyZW50SXRlbS5pZCk7XHJcbiAgICAgICAgdGhpcy5vbkNoYW5nZWRTdGF0dXNXb3JrZmxvdy5lbWl0KHRoaXMuY3VycmVudEl0ZW0uaWQpO1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3B5TGluayhyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm9uQ29weUxpbmsuZW1pdChyb3dEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgY29weUxpbmtNdWx0aXBsZSgpIHtcclxuICAgICAgICB0aGlzLm9uQ29weUxpbmtNdWx0aXBsZS5lbWl0KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd1NoYXJlTGlua0Zvcm0obHN0SXRlbSkge1xyXG4gICAgICAgIHRoaXMuc2hhcmVMaW5rTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNoYXJlTGlua01vZGVsLmRhdGEubHN0SXRlbSA9IGxzdEl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgY3JlYXRlU2hhcmVMaW5rKCkge1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmNoZWNrUmVhZHlUb1RyaW5oS3koKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCfEkGFuZyB04bqjaSBk4buvIGxp4buHdSBkYW5oIHPDoWNoLCBjaOG7nSBt4buZdCBsw7pjIHLhu5NpIHRo4butIGzhuqFpJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJvd0RhdGEgPSB0aGlzLnJvd0RhdGFDdXJyZW50O1xyXG4gICAgICAgIHRoaXMuc2hvd1NoYXJlTGlua0Zvcm0oW3Jvd0RhdGFdKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVTaGFyZUxpbmtNdWx0aXBsZSgpIHtcclxuICAgICAgICB0aGlzLnNob3dTaGFyZUxpbmtGb3JtKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc2FibGVNdWx0aXBsZUNvcHlMaW5rKCkge1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZGlzYWJsZUNvcHlMaW5rKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc2FibGVDb3B5TGluayhyb3dEYXRhKSB7XHJcbiAgICAgICAgaWYgKHJvd0RhdGEuX19kaXNhYmxlQ29weUxpbmspIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmhpZGRlbkNvcHlMaW5rKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocm93RGF0YVsnbWV0YWRhdGFTdGF0dXMnXSAmJiByb3dEYXRhWydtZXRhZGF0YVN0YXR1cyddICE9ICcwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBzaG93U2V0dGluZ3NQZXJtaXNzaW9uKCkge1xyXG4gICAgICAgIGlmICh0aGlzLmNyZWF0aW5nU2VhcmNoSW5mbykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1Blcm1pc3Npb24gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93U2V0dGluZ3NXb3JrZmxvdygpIHtcclxuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NXb3JrZmxvdyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dTZXR0aW5nc1dvcmtmbG93TmV3KCkge1xyXG4gICAgICAgIHRoaXMud29ya2Zsb3dTZXR0aW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0xpbmtTaGFyaW5nKCkge1xyXG4gICAgICAgIHRoaXMucGVybWlzc2lvblNoYXJpbmdNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHNob3dBdHRhY2hlZFRhc2soKSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2hlZFRhc2tNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93TGlzdFBlcm1pc3Npb25CeUl0ZW0oKSB7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uTGlzdE1vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2F2ZVdvcmtmbG93U2V0dGluZ3MoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcud29ya2Zsb3dTZXR0aW5nID0gZXZlbnQ7XHJcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5yZWxvYWRQYWdlKCk7XHJcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TYXZlV29ya2Zsb3dTZXR0aW5nc05ldyhldnQpIHtcclxuICAgICAgICB0aGlzLndvcmtmbG93U2V0dGluZ01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UucmVsb2FkUGFnZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblJlbW92ZVdvcmtmbG93U2V0dGluZ3MoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBnb1RvVGFzayhldmVudCkge1xyXG4gICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ2jhu6ljIG7Eg25nIHhlbSBjaGkgdGnhur90IGPDtG5nIHZp4buHYyB44butIGzDvSB04budIHRyw6xuaCDEkWFuZyDEkcaw4bujYyBob8OgbiB0aGnhu4duLi4uJyk7XHJcbiAgICB9XHJcblxyXG4gICAgYWRqdXN0UG9zaXRpb25Mb2FkaW5nTWFzaygpIHtcclxuICAgIH1cclxufVxyXG4iXX0=
2881
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGlzdC1jb21wb25lbnQtYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi8uLi9wcm9qZWN0cy90bngtc2hhcmVkL3NyYy9saWIvIiwic291cmNlcyI6WyJjbGFzc2VzL2Jhc2UvbGlzdC1jb21wb25lbnQtYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFFSCxZQUFZLEVBQ1osZUFBZSxFQUNmLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLFFBQVEsRUFDUixLQUFLLEVBR0wsTUFBTSxFQUVOLFNBQVMsRUFDVCxXQUFXLEVBQ1gsU0FBUyxFQUNaLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3pELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFL0IsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzVELE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUNoRCxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFeEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1DQUFtQyxDQUFDO0FBRWxFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxTQUFTLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUM5RSxPQUFPLEVBQXFCLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMvRixPQUFPLEVBQ0gseUJBQXlCLEVBQ3pCLGdCQUFnQixFQUNoQixhQUFhLEVBQ2IsV0FBVyxFQUNYLGNBQWMsRUFDZCxZQUFZLEVBQ1osZUFBZSxFQUNmLFFBQVEsRUFDUiwwQkFBMEIsRUFDMUIsV0FBVyxFQUNYLHFCQUFxQixFQUNyQixlQUFlLEVBQ2YsY0FBYyxFQUVkLFVBQVUsRUFDVix3QkFBd0IsRUFDeEIsUUFBUSxFQUNSLFNBQVMsRUFDVCxRQUFRLEVBQ1IsU0FBUyxFQUNULGlCQUFpQixFQUNwQixNQUFNLDJCQUEyQixDQUFDO0FBR25DLE9BQU8sRUFBRSxjQUFjLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUNqRixPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDNUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDZDQUE2QyxDQUFDO0FBQzVFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLCtEQUErRCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ2hILE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdDQUF3QyxDQUFDO0FBRXBHLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVEQUF1RCxDQUFDO0FBQzFGLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLG9FQUFvRSxDQUFDO0FBQ2xILE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDZEQUE2RCxDQUFDO0FBQ3JHLE9BQU8sRUFBRSwrQkFBK0IsRUFBRSxNQUFNLHVFQUF1RSxDQUFDO0FBQ3hILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx1RUFBdUUsQ0FBQztBQUN2RyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMENBQTBDLENBQUM7QUFDM0UsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG1EQUFtRCxDQUFDO0FBQ3BGLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG1FQUFtRSxDQUFDO0FBQzFHLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQ3hGLE9BQU8sRUFDSCxxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLHVCQUF1QixFQUN2QixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLGtCQUFrQixFQUNyQixNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFRLE1BQU0sd0JBQXdCLENBQUM7QUFDaEUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRTlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDMUQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFFM0UsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQzlELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUM5RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxzQ0FBc0MsQ0FBQztBQUMzRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDdEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQU1qRCxNQUFNLE9BQWdCLGlCQUFrQixTQUFRLGFBQWE7SUE0U3pELFlBQ1csU0FBbUIsRUFDMUIsWUFBcUI7UUFFckIsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDO1FBSFYsY0FBUyxHQUFULFNBQVMsQ0FBVTtRQWhSckIsVUFBSyxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3pDLFlBQU8sR0FBb0IsSUFBSSxlQUFlLEVBQUUsQ0FBQztRQUNqRCxhQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3BCLFNBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxxREFBcUQ7UUFFM0UsMEdBQTBHO1FBQ2pHLGtCQUFhLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLHFCQUFnQixHQUFHLFFBQVEsQ0FBQztRQUNyQywrQkFBMEIsR0FBRyxFQUFFLENBQUM7UUFDaEMseUJBQW9CLEdBQUcsR0FBRyxJQUFJLENBQUMsMEJBQTBCLElBQUksQ0FBQztRQUU5RCxtQkFBYyxHQUFHLFlBQVksQ0FBQztRQVVyQixrQkFBYSxHQUFHLElBQUksQ0FBQztRQUNyQixxQkFBZ0IsR0FBRyxLQUFLLENBQUM7UUFDekIsdUJBQWtCLEdBQVcsSUFBSSxDQUFDO1FBQ2xDLGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIseUJBQW9CLEdBQVksS0FBSyxDQUFDO1FBR3RDLHFCQUFnQixHQUFhO1lBQ2xDLGVBQWUsQ0FBQyxNQUFNLENBQUMsR0FBRztZQUMxQixlQUFlLENBQUMsTUFBTSxDQUFDLElBQUk7WUFDM0IsZUFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNO1lBQzdCLGVBQWUsQ0FBQyxNQUFNLENBQUMsZUFBZTtTQUN6QyxDQUFDO1FBQ08sb0JBQWUsR0FBUSxFQUFFLGVBQWUsRUFBRSxJQUFJLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxDQUFDO1FBQ3pFLHlCQUFvQixHQUFHLEtBQUssQ0FBQztRQUM3QixvQkFBZSxHQUFHLElBQUksQ0FBQztRQUN2QixjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFDbEIsaUJBQVksR0FBRyxLQUFLLENBQUM7UUFDckIsZUFBVSxHQUFHLEtBQUssQ0FBQztRQUNuQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixlQUFVLEdBQUcsS0FBSyxDQUFDO1FBQ25CLDJCQUFzQixHQUFHLEtBQUssQ0FBQztRQUMvQixpQkFBWSxHQUFHLElBQUksQ0FBQztRQUNwQixXQUFNLEdBQUcsSUFBSSxDQUFDO1FBRWQsV0FBTSxHQUFtQixJQUFJLGNBQWMsRUFBRSxDQUFDO1FBQzlDLHFCQUFnQixHQUFHLEtBQUssQ0FBQztRQUt6QixlQUFVLEdBQVcsa0JBQWtCLENBQUM7UUFFakQsV0FBTSxHQUFRLEVBQUUsQ0FBQztRQWdCakIsbUJBQWMsR0FBVSxFQUFFLENBQUM7UUFjM0IsZ0JBQVcsR0FBVSxFQUFFLENBQUM7UUFZeEIsK0JBQStCO1FBQ3RCLG1CQUFjLEdBQWEsRUFBRSxDQUFDO1FBRTdCLGdCQUFXLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN0QyxnQkFBVyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFZLENBQUM7UUFDeEMsZUFBVSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDckMsWUFBTyxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbEMsa0JBQWEsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3hDLFVBQUssR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2hDLFdBQU0sR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2pDLGVBQVUsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ3JDLHVCQUFrQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDN0MsV0FBTSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDakMsYUFBUSxHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDbkMscUJBQWdCLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMzQyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzVDLG1CQUFjLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUN6QyxzQkFBaUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQzVDLHdCQUFtQixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDOUMseUJBQW9CLEdBQUcsSUFBSSxZQUFZLEVBQU8sQ0FBQztRQUMvQyw0QkFBdUIsR0FBRyxJQUFJLFlBQVksRUFBTyxDQUFDO1FBQ2xELDhCQUF5QixHQUFHLElBQUksWUFBWSxFQUFPLENBQUM7UUFDdEQsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsZUFBVSxHQUFHLElBQUksT0FBTyxFQUFPLENBQUM7UUFDeEMsc0JBQWlCLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNuRCxrQkFBYSxHQUFHLHFCQUFxQixDQUFDO1FBQ3RDLG1CQUFjLEdBQUcsc0JBQXNCLENBQUM7UUFDeEMsb0JBQWUsR0FBRyx1QkFBdUIsQ0FBQztRQUMxQyxrQkFBYSxHQUFHLHFCQUFxQixDQUFDO1FBQ3RDLDJCQUFzQixHQUFHLHNCQUFzQixDQUFDO1FBRWhELGVBQVUsR0FBRyxJQUFJLENBQUM7UUFDbEIsb0JBQWUsR0FBUSxFQUFFLENBQUM7UUFDMUIscUJBQWdCLEdBQVEsRUFBRSxDQUFDO1FBRTNCLGlCQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLGlCQUFZLEdBQVEsRUFBRSxDQUFDO1FBQ3ZCLGdCQUFXLEdBQVcsRUFBRSxDQUFDO1FBQ3pCLHNCQUFpQixHQUFRLEVBQUUsQ0FBQztRQUM1QixnQkFBVyxHQUFXLElBQUksQ0FBQztRQUMzQixtQkFBYyxHQUFHLEtBQUssQ0FBQztRQUN2QixlQUFVLEdBQUcsU0FBUyxDQUFDO1FBQ3ZCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5QixtQkFBYyxHQUFlLEVBQUUsQ0FBQztRQUNoQyxtQkFBYyxHQUErQixFQUFFLENBQUM7UUFDaEQseUJBQW9CLEdBQWdDLEVBQUUsQ0FBQztRQUN2RCxnQkFBVyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUM7UUFFckMsdUJBQWtCLEdBQUcscUNBQXFDLENBQUM7UUFDM0QsZ0JBQVcsR0FBRyxFQUFFLENBQUM7UUFDakIsMEJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQzlCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLDBCQUFxQixHQUFHLEtBQUssQ0FBQztRQUM5Qiw0QkFBdUIsR0FBRyxLQUFLLENBQUM7UUFDaEMsc0JBQWlCLEdBQUcsRUFBRSxDQUFDO1FBQ3ZCLGVBQVUsR0FBRyxFQUFFLENBQUM7UUFDaEIsYUFBUSxHQUFtQixDQUFDLENBQUMsQ0FBQztRQUU5QixhQUFRLEdBQVEsRUFBRSxDQUFDO1FBQ1gsbUJBQWMsR0FBYSxFQUFFLENBQUM7UUFDdEMsMEJBQXFCLEdBQVEsRUFBRSxDQUFDO1FBRWhDLHFCQUFnQixHQUFHLEVBQUUsQ0FBQztRQUV0QixpQkFBWSxHQUFRLEVBQUUsQ0FBQztRQUN2QixlQUFVLEdBQVEsRUFBRSxDQUFDO1FBRXJCLHdCQUFtQixHQUFlO1lBQzlCLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDbkYsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN2RixFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxFQUFFO1NBQ3pGLENBQUM7UUFDRixlQUFVLEdBQWUsSUFBSSxVQUFVLEVBQUUsQ0FBQztRQUMxQyx1QkFBa0IsR0FBRyxLQUFLLENBQUM7UUFFM0Isa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFDN0IsbUNBQW1DO1FBQ25DLHlCQUFvQixHQUFhLEVBQUUsQ0FBQztRQUNwQyxxREFBcUQ7UUFDckQsa0JBQWEsR0FBYSxFQUFFLENBQUM7UUFJN0IsZ0JBQVcsR0FBUSxFQUFFLENBQUM7UUFHdEIscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLG1CQUFjLEdBQUcsRUFBRSxDQUFDO1FBRXBCLHNCQUFpQixHQUFjLElBQUksU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUMxRSx3QkFBbUIsR0FBRyxLQUFLLENBQUM7UUFDNUIsa0VBQWtFO1FBQ2xFLGdJQUFnSTtRQUNoSSxrQkFBYSxHQUFHLElBQUksQ0FBQztRQUVyQix1QkFBa0IsR0FBZ0IsSUFBSSxXQUFXLENBQUM7WUFDOUMsTUFBTSxFQUFFLGtDQUFrQztTQUM3QyxDQUFDLENBQUM7UUFDSCx5QkFBb0IsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUN0RCxrQkFBYSxHQUFnQixJQUFJLFdBQVcsQ0FBQztZQUN6QyxNQUFNLEVBQUUsWUFBWTtZQUNwQixTQUFTLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN6RCxDQUFDLENBQUM7UUFDSCx5QkFBb0IsR0FBZ0IsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUN0RCx5QkFBb0IsR0FBZ0IsSUFBSSxXQUFXLENBQUM7WUFDaEQsTUFBTSxFQUFFLGFBQWE7U0FDeEIsQ0FBQyxDQUFDO1FBQ0gsMkJBQXNCLEdBQWdCLElBQUksV0FBVyxDQUFDO1lBQ2xELE1BQU0sRUFBRSw0QkFBNEI7WUFDcEMsU0FBUyxFQUFFLElBQUksU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDekQsQ0FBQyxDQUFDO1FBQ0gsd0JBQW1CLEdBQWdCLElBQUksV0FBVyxDQUFDO1lBQy9DLE1BQU0sRUFBRSx3QkFBd0I7WUFDaEMsU0FBUyxFQUFFLElBQUksU0FBUyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUM7U0FDekQsQ0FBQyxDQUFDO1FBQ0gsa0JBQWEsR0FBZ0IsSUFBSSxXQUFXLENBQUM7WUFDekMsTUFBTSxFQUFFLDBCQUEwQjtZQUNsQyxTQUFTLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztZQUN0RCxJQUFJLEVBQUU7Z0JBQ0YsZUFBZSxFQUFFLElBQUksZUFBZSxFQUFFO2FBQ3pDO1NBQ0osQ0FBQyxDQUFDO1FBQ0gsb0JBQWUsR0FBZ0IsSUFBSSxXQUFXLENBQUM7WUFDM0MsTUFBTSxFQUFFLG9CQUFvQjtTQUMvQixDQUFDLENBQUM7UUFDSCxtQkFBYyxHQUFnQixJQUFJLFdBQVcsQ0FBQztZQUMxQyxNQUFNLEVBQUUsZUFBZTtZQUN2QixTQUFTLEVBQUUsSUFBSSxTQUFTLENBQUMsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQztTQUN4RCxDQUFDLENBQUM7UUFDSCxzQkFBaUIsR0FBZ0IsSUFBSSxXQUFXLENBQUM7WUFDN0MsTUFBTSxFQUFFLDhCQUE4QjtTQUN6QyxDQUFDLENBQUM7UUFFSCxzQkFBaUIsR0FBRyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQztRQUN2RCw4QkFBeUIsR0FBRyxnQkFBZ0IsQ0FBQyx5QkFBeUIsQ0FBQztRQUN2RSx3QkFBbUIsR0FBRyxFQUFFLENBQUM7UUFDekIsd0JBQW1CLEdBQXlCLElBQUksR0FBRyxFQUFFLENBQUM7UUFTdEQsZUFBVSxHQUFRLEVBQUUsQ0FBQztRQUNyQix1Q0FBa0MsR0FBRyxLQUFLLENBQUM7UUFLM0MsbUJBQWMsR0FBRyxjQUFjLENBQUM7UUFNekIsb0JBQWUsR0FBRyxJQUFJLE9BQU8sRUFBTyxDQUFDO1FBc21CNUMsb0JBQWUsR0FBRyxDQUFDLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUM1QixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsdUJBQXVCLEVBQUU7Z0JBQ3RDLE9BQU87YUFDVjtZQUVELElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUN0QyxPQUFPO2FBQ1Y7WUFDRCxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHlCQUF5QixFQUFFO2dCQUN6QyxJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQztnQkFDOUIsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO29CQUNwQixJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztvQkFDM0Isa0JBQWtCLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztpQkFDNUM7cUJBQ0k7b0JBQ0Qsa0JBQWtCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUM7aUJBQ2pEO2dCQUNELGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDcEMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQzthQUNqQztZQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxVQUFVLENBQUM7WUFDNUIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFO2dCQUNyQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7b0JBQzdCLFNBQVMsR0FBRyxLQUFLLENBQUM7aUJBQ3JCO2FBQ0o7WUFDRCxJQUFJLENBQUMsa0JBQWtCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3ZFLENBQUMsQ0FBQztRQUVGLHlCQUFvQixHQUFHLENBQUMsR0FBRyxFQUFFLElBQUksRUFBRSxFQUFFO1lBQ2pDLElBQUksQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxFQUFFO2dCQUN0QyxPQUFPO2FBQ1Y7WUFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyx5QkFBeUIsRUFBRTtnQkFDekMsTUFBTSxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7Z0JBQ3BELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtvQkFDMUMsQ0FBQyxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUM7Z0JBQ3ZCLENBQUMsQ0FBQyxDQUFDO2dCQUNILElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUU7b0JBQzNDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7aUJBQzVCO2dCQUNELGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ3pCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO2dCQUNyRCxDQUFDLENBQUMsQ0FBQzthQUNOO1lBQ0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUM7WUFFL0IsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ3JCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLHFCQUFxQixFQUFFO2dCQUNyQyxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUM7b0JBQzdCLFNBQVMsR0FBRyxLQUFLLENBQUM7aUJBQ3JCO2FBQ0o7WUFDRCxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzdFLENBQUMsQ0FBQztRQWlSRix5QkFBb0IsR0FBRyxHQUFHLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksRUFBRTtnQkFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQzthQUN2RDtpQkFDSTtnQkFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7Z0JBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO2FBQzFCO1lBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQy9CLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztnQkFDaEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQztZQUNuRSxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUM7UUFFRix3QkFBbUIsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQzlCLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztZQUNwRixJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDbEIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUU7b0JBQ3ZFLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxHQUFHLFlBQVksQ0FBQztvQkFDL0MsS0FBSyxHQUFHLElBQUksQ0FBQztpQkFDaEI7cUJBQ0ksSUFBSSxLQUFLO29CQUFFLE1BQU07YUFDekI7WUFFRCxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDOUIsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUNqRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsUUFBUSxFQUFFO29CQUNqQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2lCQUN6RDthQUNKO1lBQ0QsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUIsQ0FBQyxDQUFDO1FBRUYsNkJBQXdCLEdBQUcsQ0FBQyxPQUFPLEVBQUUsU0FBUyxHQUFHLElBQUksRUFBRSxTQUFTLEdBQUcsSUFBSSxFQUFFLEVBQUU7WUFDdkUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUU7Z0JBQ25CLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDL0IsSUFBSSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO2dCQUN4RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDN0M7YUFDSjtpQkFDSTtnQkFDRCxJQUFJLFVBQVUsR0FBRyxJQUFJLENBQUM7Z0JBQ3RCLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDdkMsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDO2dCQUNsQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7b0JBQ2pELElBQUksQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsRUFBRTt3QkFDbEMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFOzRCQUN2RSxVQUFVLEdBQUcsS0FBSyxDQUFDO3lCQUN0QjtxQkFDSjtpQkFDSjtnQkFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7YUFDaEU7WUFDRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLFNBQVMsRUFBRTtnQkFDWCxJQUFJLENBQUMsU0FBUztvQkFBRSxTQUFTLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQztnQkFDekQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDM0M7UUFDTCxDQUFDLENBQUM7UUFFRixtQkFBYyxHQUFHLEdBQUcsRUFBRTtZQUNsQixJQUFJLElBQUksQ0FBQyxVQUFVLEtBQUssSUFBSSxFQUFFO2dCQUMxQixJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO2FBQ3ZEO2lCQUNJO2dCQUNELElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7YUFDMUI7WUFFRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDL0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxLQUFLLElBQUksQ0FBQztZQUM3QyxDQUFDLENBQUMsQ0FBQztZQUNILElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUMxQyxDQUFDLENBQUM7UUFFRix1QkFBa0IsR0FBRyxDQUFDLE9BQU8sRUFBRSxTQUFTLEdBQUcsSUFBSSxFQUFFLFNBQVMsR0FBRyxJQUFJLEVBQUUsRUFBRTtZQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO2dCQUMvQixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxJQUFJLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDMUUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7b0JBQ1osSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQztpQkFDN0M7YUFDSjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtvQkFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO29CQUN2QyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUM7aUJBQ3JDO2FBQ0o7WUFFRCxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztZQUMzQixJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztZQUN4QixJQUFJLENBQUMsU0FBUyxFQUFFO2dCQUNaLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzVDO1lBQ0QsSUFBSSxTQUFTLEVBQUU7Z0JBQ1gsSUFBSSxDQUFDLGNBQWMsQ0FBQyxTQUFTLEVBQUUsT0FBTyxDQUFDLENBQUM7YUFDM0M7UUFDTCxDQUFDLENBQUM7UUFzb0JLLG9CQUFlLEdBQUcsQ0FBQyxpQkFBeUIsQ0FBQyxFQUFFLEVBQUU7WUFDcEQsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLFNBQVMsSUFBSSxDQUFDLENBQUMsT0FBTyxLQUFLLElBQUksQ0FBQyxDQUFDLE1BQU07a0JBQzFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7a0JBQ3hDLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7a0JBQzNDLGNBQWMsQ0FBQztRQUN6QixDQUFDLENBQUM7UUEwUUssYUFBUSxHQUFHLENBQUMsSUFBSyxFQUFFLEVBQUU7WUFDeEIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUMvQixJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDaEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztZQUN6SCxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNuQixDQUFDLENBQUM7UUFwNkRFLElBQUksQ0FBQyxXQUFXLEdBQUcsWUFBWSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUQsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsbUJBQW1CLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN4RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyw0QkFBNEIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQ3JGLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO1FBQ3JFLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUM1RCxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUV4RSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUM5RCxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3hELElBQUksQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNwRCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzlDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBRWhFLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsU0FBUyxFQUFFLENBQUMsV0FBVyxDQUFDO0lBQ3pFLENBQUM7SUFyVUQsSUFBeUMsTUFBTSxDQUFDLENBQVE7UUFDcEQsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDZixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBa0NELElBQWEsYUFBYSxDQUFDLEtBQWE7UUFDcEMsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsS0FBSyxFQUFFLENBQUM7U0FDL0M7YUFDSTtZQUNELElBQUksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFDO1NBQ3RDO0lBQ0wsQ0FBQztJQXFDRCxJQUFhLEtBQUssQ0FBQyxLQUFVO1FBQ3pCLElBQUksS0FBSyxFQUFFO1lBQ1AsSUFBSSxDQUFDLE1BQU0sR0FBRyxLQUFLLENBQUM7U0FDdkI7SUFDTCxDQUFDO0lBRUQsSUFBYSxVQUFVLENBQUMsS0FBYTtRQUNqQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztRQUMzQyxJQUFJLEtBQUssSUFBSSxJQUFJLElBQUksS0FBSyxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsRUFBRTtZQUNyQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7U0FDbkM7UUFFRCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7SUFDM0IsQ0FBQztJQUlELElBQWEsYUFBYSxDQUFDLEtBQVU7UUFDakMsSUFBSSxVQUFVLEdBQUcsRUFBRSxFQUNmLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdkIsSUFBSSxLQUFLLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRTtZQUNwQixVQUFVLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQztZQUN4QixhQUFhLEdBQUcsS0FBSyxDQUFDLEdBQUcsQ0FBQztTQUM3QjtRQUNELElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztRQUM5QixJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztJQUN4QyxDQUFDO0lBR0QsSUFBYSxVQUFVLENBQUMsS0FBWTtRQUNoQyxJQUFJLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztRQUM3QixJQUFJLFVBQVUsR0FBRyxFQUFFLENBQUM7UUFDcEIsSUFBSSxLQUFLLEVBQUU7WUFDUCxVQUFVLEdBQUcsS0FBSyxDQUFDO1NBQ3RCO1FBQ0QsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxXQUFXLEdBQUcsVUFBVSxDQUFDO1FBQzlCLElBQUksQ0FBQyxjQUFjLEdBQUcsVUFBVSxDQUFDO0lBQ3JDLENBQUM7SUErTUQsUUFBUTtRQUNKLElBQUksQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyx3QkFBd0IsRUFBRSxPQUFPLENBQUMsRUFBRTtZQUN0RSxJQUFJLENBQUMscUJBQXFCLEdBQUcsT0FBTyxDQUFDO1FBQ3pDLENBQUMsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFlBQVksQ0FBQyxTQUFTLEdBQUcsSUFBSSwwQkFBMEIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLElBQUksQ0FBQyxZQUFZLENBQUMsYUFBYSxHQUFHLElBQUksMEJBQTBCLENBQUMsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZHLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUVoQyxjQUFjLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUM7UUFDNUMsQ0FBQyxDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsY0FBYyxHQUFHLEVBQUUsQ0FBQztRQUV6QixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNuQixJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQztZQUUzQyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7U0FDMUI7UUFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN6QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksRUFBRTtZQUMzRCxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbkIsSUFBSSxDQUFDLFdBQVcsR0FBRyxHQUFTLEVBQUUsZ0RBQUMsT0FBQSxFQUFFLENBQUEsR0FBQSxDQUFDO2FBQ3JDO1NBQ0o7UUFFRCw2R0FBNkc7UUFDN0csSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLG1CQUFtQixFQUFFO1lBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztTQUNsQjtRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFO1lBQy9DLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO1NBQzNEO1FBRUQsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLE1BQU0sQ0FBQztZQUM5RSxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsYUFBYSxPQUFPLENBQUM7WUFDaEYsSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxDQUFDLGFBQWEsU0FBUyxDQUFDO1lBQ3BGLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLGtCQUFrQixDQUFDO1lBQ3RHLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLGVBQWUsQ0FBQztZQUNoRyxJQUFJLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxhQUFhLG1CQUFtQixDQUFDO1NBQzNHO1FBRUQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNuQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDO1FBQzdDLENBQUMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDcEQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQzFDLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtZQUNkLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7U0FDL0Q7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLElBQUksSUFBSSxFQUFFO1lBQzFCLEtBQUssTUFBTSxvQkFBb0IsSUFBSSxJQUFJLENBQUMsbUJBQW1CLEVBQUU7Z0JBQ3pELE1BQU0sZ0JBQWdCLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLG9CQUFvQixFQUFFLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ2hKLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7YUFDekQ7WUFDRCxPQUFPO1NBQ1Y7UUFDRCxpR0FBaUc7UUFDakcsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNO2VBQ2xELENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEtBQUssSUFBSTttQkFDbkUsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxDQUN2RCxFQUNIO1lBQ0UsSUFBSSxDQUFDLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRTs7Z0JBQzdGLE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDO2dCQUNqQyxJQUFJLENBQUMsbUJBQW1CLFNBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFNBQVMsRUFBRSxDQUFDLFdBQVcsQ0FBQyxpQkFBNkIsbUNBQUksRUFBRSxDQUFDO2dCQUNqSCxLQUFLLE1BQU0sb0JBQW9CLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO29CQUN6RCxNQUFNLGdCQUFnQixHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxvQkFBb0IsRUFBRSxDQUFDLFdBQVcsRUFBRSxDQUFDO29CQUNoSixJQUFJLENBQUMsbUJBQW1CLENBQUMsR0FBRyxDQUFDLGdCQUFnQixFQUFFLGlCQUFpQixDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7aUJBQ2hHO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFRCxrQkFBa0I7UUFDZCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDNUIsSUFBSSxHQUFHLENBQUMsS0FBSyxFQUFFO2dCQUNYLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUNoSCxJQUFJLFFBQVEsRUFBRTtvQkFDVixJQUFJLENBQUMscUJBQXFCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQztpQkFDcEQ7YUFDSjtRQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDbEMsQ0FBQztJQUVELGVBQWU7UUFDWCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMseUJBQXlCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRTtZQUN4RSxJQUFJLENBQUMsV0FBVyxJQUFJLGNBQWMsQ0FBQztTQUN0QzthQUNJO1lBQ0QsSUFBSSxDQUFDLFdBQVcsSUFBSSxlQUFlLENBQUM7U0FDdkM7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFO1lBQzNCLElBQUksQ0FBQyxXQUFXLElBQUksd0JBQXdCLENBQUM7U0FDaEQ7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO1lBQzdCLElBQUksQ0FBQyxXQUFXLElBQUkseUJBQXlCLENBQUM7U0FDakQ7UUFFRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUU7WUFDaEMsSUFBSSxDQUFDLFdBQVcsSUFBSSxzQkFBc0IsQ0FBQztTQUM5QztJQUNMLENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxJQUF3QjtRQUNyQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO1FBQ2xDLElBQUksV0FBVyxHQUFHLElBQUksRUFBRSxRQUFRLEdBQUcsSUFBSSxFQUFFLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDNUIsSUFBSSxHQUFHLENBQUMsY0FBYyxFQUFFO2dCQUNwQixnQkFBZ0IsR0FBRyxHQUFHLENBQUM7YUFDMUI7WUFDRCxJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksVUFBVSxFQUFFO2dCQUN6QixXQUFXLEdBQUcsR0FBRyxDQUFDO2FBQ3JCO2lCQUNJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRTtnQkFDaEIsR0FBRyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7Z0JBQ2xCLFFBQVEsR0FBRyxHQUFHLENBQUM7YUFDbEI7UUFDTCxDQUFDLENBQUMsQ0FBQztRQUNILElBQUksV0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRTtZQUNuQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsV0FBVyxDQUFDLEtBQUssQ0FBQztTQUNqRDtRQUNELElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtZQUNuQixnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztTQUMzQztRQUNELGdCQUFnQixDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztRQUN6QyxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDdkIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztRQUN0QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdEMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFTyxhQUFhLENBQUMsSUFBd0IsRUFBRSxTQUFTLEdBQUcsSUFBSTtRQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDbEMsSUFBSSxDQUFDLElBQUksRUFBRTtZQUNQLE9BQU87U0FDVjtRQUVELE1BQU0sSUFBSSxHQUF1QixFQUFFLENBQUM7UUFDcEMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQzFCLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFO1lBQ3BDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLEVBQUU7Z0JBQ3BELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO29CQUNsQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRTt3QkFDeEMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDbkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7cUJBQ3JCO2lCQUNKO1lBQ0wsQ0FBQyxDQUFDLENBQUM7WUFFSCxrRkFBa0Y7WUFDbEYsSUFBSSxRQUFRLEdBQXVCLEVBQUUsQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFO2dCQUNmLElBQUksV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDL0QsSUFBSSxXQUFXLElBQUksQ0FBQyxFQUFFO29CQUNsQixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7aUJBQzFCO3FCQUNJO29CQUNELHVEQUF1RDtvQkFDdkQsSUFBSSxpQkFBaUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsV0FBVyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO29CQUN2RixPQUFPLGlCQUFpQixJQUFJLENBQUMsQ0FBQyxFQUFFO3dCQUM1QixRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUM7d0JBQzNCLGdFQUFnRTt3QkFDaEUsV0FBVyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2hGLGlCQUFpQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxXQUFXLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7cUJBQ3RGO29CQUNELG1FQUFtRTtvQkFDbkUsSUFBSSxpQkFBaUIsSUFBSSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTt3QkFDdEMsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQztxQkFDL0I7eUJBQ0k7d0JBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDO3FCQUMzRDtvQkFDRCxRQUFRLEdBQUcsRUFBRSxDQUFDO2lCQUNqQjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047YUFDSTtTQUNKO1FBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzVCLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBRTNCLElBQUksZUFBZSxHQUFHLElBQUksQ0FBQztRQUMzQixJQUFJLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDNUIsSUFBSSxNQUFNLEdBQXFCLElBQUksQ0FBQztRQUNwQyxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksRUFBRTtZQUN4QixJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7Z0JBQ25CLFNBQVM7YUFDWjtZQUNELElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDbkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBRTNGLElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssSUFBSSxFQUFFO2dCQUNuRSxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7YUFDcEM7WUFFRCxJQUFJLE9BQU8sQ0FBQyxLQUFLLEVBQUU7Z0JBQ2YsT0FBTyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQzthQUNqRTtZQUVELElBQUksTUFBTSxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssU0FBUyxJQUFJLE1BQU0sQ0FBQyxTQUFTLEtBQUssSUFBSSxFQUFFO2dCQUN2RSxPQUFPLENBQUMsU0FBUyxHQUFHLE1BQU0sQ0FBQyxTQUFTLENBQUM7YUFDeEM7WUFFRCxJQUFJLE1BQU0sSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLFNBQVMsSUFBSSxNQUFNLENBQUMsS0FBSyxLQUFLLElBQUksRUFBRTtnQkFDL0QsT0FBTyxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDO2FBQ2hDO1lBRUQsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLElBQUksSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLFNBQVMsSUFBSSxPQUFPLENBQUMsUUFBUSxJQUFJLEVBQUUsRUFBRTtnQkFDckYsT0FBTyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDO2FBQ3RDO1lBRUQsSUFBSSxPQUFPLENBQUMsT0FBTzttQkFDWixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVzt1QkFDckIsT0FBTyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQ3JELEVBQ0g7Z0JBQ0UsSUFBSSxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksRUFBRTtvQkFDN0IsT0FBTyxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUMsUUFBUSxDQUFDO29CQUMzQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRTt3QkFDcEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxtQkFDdkMsT0FBTyxFQUNaLENBQUMsQ0FBQzt3QkFDSixJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksSUFBSSxFQUFFOzRCQUM1QixPQUFPLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQzt5QkFDN0I7d0JBQ0QsSUFBSSxPQUFPLENBQUMsWUFBWSxJQUFJLElBQUksRUFBRTs0QkFDOUIsT0FBTyxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7eUJBQ2hDO3dCQUNELE1BQU0sR0FBRyxJQUFJLGdCQUFnQixpQ0FDdEIsT0FBTyxLQUNWLFNBQVMsRUFBRSxPQUFPLEVBQ2xCLFdBQVcsRUFBRSxXQUFXLENBQUMsUUFBUSxFQUNqQyxRQUFRLEVBQUUsT0FBTyxDQUFDLGdCQUFnQixFQUNsQyxLQUFLLEVBQUUsS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQzVCLFdBQVcsRUFBRSxPQUFPLENBQUMsV0FBVyxFQUNoQyxJQUFJLEVBQUUsS0FBSyxFQUNYLE9BQU8sRUFBRSxJQUFJLElBQ2YsQ0FBQzt3QkFDSCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFVBQVUsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ2xHLElBQUksY0FBYyxJQUFJLGNBQWMsQ0FBQyxPQUFPLElBQUksSUFBSSxFQUFFOzRCQUNsRCxNQUFNLENBQUMsT0FBTyxHQUFHLGNBQWMsQ0FBQyxPQUFPLENBQUM7eUJBQzNDO3dCQUNELElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ2xCLE9BQU8sQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDO3dCQUN4QixJQUFJLENBQUMsZUFBZSxFQUFFOzRCQUNsQixlQUFlLEdBQUcsTUFBTSxDQUFDO3lCQUM1QjtxQkFDSjtpQkFDSjtxQkFDSSxJQUFJLE9BQU8sQ0FBQyxVQUFVLElBQUksT0FBTyxDQUFDLFVBQVUsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO29CQUMxRCxPQUFPLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUM7b0JBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFO3dCQUNwQixJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxJQUFJLG1CQUMxQixPQUFPLEVBQ1osQ0FBQzt3QkFDSCxNQUFNLEdBQUcsSUFBSSxnQkFBZ0IsaUNBQ3RCLE9BQU8sS0FDVixTQUFTLEVBQUUsT0FBTyxFQUNsQixXQUFXLEVBQUUsV0FBVyxDQUFDLFFBQVEsRUFDakMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxnQkFBZ0IsRUFDbEMsV0FBVyxFQUFFLElBQUksRUFDakIsS0FBSyxFQUFFLEtBQUssR0FBRyxPQUFPLENBQUMsS0FBSyxFQUM1QixXQUFXLEVBQUUsT0FBTyxDQUFDLFdBQVcsRUFDaEMsSUFBSSxFQUFFLEtBQUssRUFDWCxPQUFPLEVBQUUsSUFBSSxJQUNmLENBQUM7d0JBQ0gsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxVQUFVLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUNsRyxJQUFJLGNBQWMsSUFBSSxjQUFjLENBQUMsT0FBTyxJQUFJLElBQUksRUFBRTs0QkFDbEQsTUFBTSxDQUFDLE9BQU8sR0FBRyxjQUFjLENBQUMsT0FBTyxDQUFDO3lCQUMzQzt3QkFDRCxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3dCQUNsQixPQUFPLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQzt3QkFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRTs0QkFDbEIsZUFBZSxHQUFHLE1BQU0sQ0FBQzt5QkFDNUI7cUJBQ0o7aUJBQ0o7cUJBQ0ksSUFBSSxDQUFDLGVBQWUsRUFBRTtvQkFDdkIsZUFBZSxHQUFHLE9BQU8sQ0FBQztpQkFDN0I7YUFDSjtpQkFDSSxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQzNCLElBQUksT0FBTyxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7b0JBQzdCLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLElBQUksbUJBQzFCLE9BQU8sRUFDWixDQUFDO29CQUNILElBQUksT0FBTyxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUU7d0JBQzVCLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO3FCQUM3QjtvQkFDRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLElBQUksSUFBSSxFQUFFO3dCQUM5QixPQUFPLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztxQkFDaEM7b0JBQ0QsT0FBTyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7aUJBQzNCO2FBQ0o7WUFDRCxJQUFJLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQ3RCLHFCQUFxQixHQUFHLElBQUksQ0FBQzthQUNoQztTQUNKO1FBQ0QsSUFBSSxDQUFDLHFCQUFxQixJQUFJLGVBQWUsRUFBRTtZQUMzQyxlQUFlLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztTQUN2QztRQUNELElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUVuQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsR0FBRyxFQUFFLENBQUM7UUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLEdBQUcsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU87Z0JBQUUsT0FBTztZQUN6QixJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUU7Z0JBQ3BCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUMxRDtpQkFDSSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDM0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBQzVEO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU0sYUFBYSxDQUFDLElBQXdCO1FBQ3pDLEtBQUssTUFBTSxHQUFHLElBQUksSUFBSSxFQUFFO1lBQ3BCLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxNQUFNLEVBQUU7Z0JBQ3hCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTTtvQkFBRSxHQUFHLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQzthQUMxQztZQUNELEdBQUcsQ0FBQyxVQUFVLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7WUFDNUQsR0FBRyxDQUFDLFVBQVUsQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzdEO0lBQ0wsQ0FBQztJQUVPLGdCQUFnQixDQUFDLFFBQTBCO1FBQy9DLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLFFBQVEsQ0FBQztRQUNwQyxNQUFNLFdBQVcsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUMxRixJQUFJLFdBQVcsRUFBRTtZQUNiLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFDekIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQzthQUM3QztZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDekMsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7Z0JBQzVCLCtCQUErQjtnQkFDL0IsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDO29CQUNqRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQzNGLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxJQUFJLENBQUMsRUFBRTt3QkFDekMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztxQkFDL0M7b0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO29CQUNuRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUM7b0JBQ3pFLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLElBQUksUUFBUSxJQUFJLElBQUksRUFBRTt3QkFDNUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztxQkFDaEM7b0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDO29CQUM3RCxNQUFNO2lCQUNUO2FBQ0o7U0FDSjthQUNJLElBQUksUUFBUSxFQUFFO1lBQ2YsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNoQztJQUNMLENBQUM7SUFFTyxhQUFhLENBQUMsUUFBUTtRQUMxQixJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7ZUFDcEQsUUFBUSxDQUFDLFdBQVcsRUFBRTtZQUN6QixJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsTUFBTSxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7U0FDbEU7YUFDSTtZQUNELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1NBQzFEO0lBQ0wsQ0FBQztJQUVPLGlCQUFpQjtRQUNyQixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDekIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUM3QztRQUNELElBQUksYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN2QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUYsSUFBSSxXQUFXLEVBQUU7WUFDYixhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4QyxNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQztZQUNwRSxJQUFJLFdBQVcsRUFBRTtnQkFDYixXQUFXLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7Z0JBQ3JFLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztnQkFDakUsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsVUFBVSxDQUFDO2dCQUN2RSxXQUFXLENBQUMsT0FBTyxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7Z0JBQzdFLFdBQVcsQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztnQkFDakUsVUFBVSxHQUFHLElBQUksQ0FBQzthQUNyQjtTQUNKO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUM7U0FDbkY7UUFFRCxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFFTyxtQkFBbUI7UUFDdkIsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDLFFBQVEsQ0FBQztRQUNqQyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFO1lBQ3pCLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7U0FDN0M7UUFDRCxJQUFJLGFBQWEsR0FBRyxFQUFFLENBQUM7UUFDdkIsTUFBTSxXQUFXLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDMUYsSUFBSSxXQUFXLEVBQUU7WUFDYixhQUFhLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN4QyxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsQ0FBQztZQUNuRSxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQUUsYUFBYSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7U0FDbEQ7UUFFRCxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLENBQUM7SUFFTyxlQUFlO1FBQ25CLE1BQU0sZUFBZSxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLGdCQUFnQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzdGLElBQUksZUFBZSxFQUFFO1lBQ2pCLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7WUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtnQkFDekIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQzthQUM3QztZQUNELE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDN0MsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3RDLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDNUIsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtvQkFDL0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3pELElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDO29CQUN6RCxNQUFNO2lCQUNUO2FBQ0o7U0FDSjtRQUNELElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQzdCLENBQUM7SUFFTyxpQkFBaUI7UUFDckIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztRQUM1QixLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hFLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDO1lBQ3RCLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2pDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQ2pDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNyRCxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUN6QyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBQ2pELFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7U0FDM0M7SUFDTCxDQUFDO0lBRU8sZUFBZTtRQUNuQixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1FBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7WUFDekIsUUFBUSxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQztTQUM3QztRQUNELElBQUksWUFBWSxHQUFHLEVBQUUsQ0FBQztRQUN0QixJQUFJLFVBQVUsR0FBRyxLQUFLLENBQUM7UUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUM5RixJQUFJLGdCQUFnQixFQUFFO1lBQ2xCLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7WUFDNUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtnQkFDM0IsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLFFBQVEsRUFBRTtvQkFDL0IsT0FBTyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3pELE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDO29CQUN6RCxVQUFVLEdBQUcsSUFBSSxDQUFDO2lCQUNyQjtZQUNMLENBQUMsQ0FBQyxDQUFDO1NBQ047UUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ2IsWUFBWSxDQUFDLElBQUksQ0FBQztnQkFDZCxRQUFRLEVBQUUsUUFBUTtnQkFDbEIsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0I7Z0JBQy9DLGdCQUFnQixFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCO2FBQ2xELENBQUMsQ0FBQztTQUNOO1FBRUQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRU8sY0FBYztRQUNsQixNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RixJQUFJLGVBQWUsRUFBRTtZQUNqQixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUMsUUFBUSxDQUFDO1lBQ2pDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUU7Z0JBQ3pCLFFBQVEsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUM7YUFDN0M7WUFDRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ2pELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO2dCQUMxQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxRQUFRLEVBQUU7b0JBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO29CQUNyRCxNQUFNO2lCQUNUO2FBQ0o7U0FDSjtJQUNMLENBQUM7SUFFTyxlQUFlO1FBQ25CLElBQUksUUFBUSxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUM7UUFDakMsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRTtZQUN6QixRQUFRLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDO1NBQzdDO1FBQ0QsSUFBSSxXQUFXLEdBQUcsRUFBRSxDQUFDO1FBQ3JCLElBQUksVUFBVSxHQUFHLEtBQUssQ0FBQztRQUN2QixNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUM1RixJQUFJLGVBQWUsRUFBRTtZQUNqQixXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUMxQyxXQUFXLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFO2dCQUMxQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssUUFBUSxFQUFFO29CQUMvQixPQUFPLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQztvQkFDckQsVUFBVSxHQUFHLElBQUksQ0FBQztpQkFDckI7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO1FBRUQsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUNiLFdBQVcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3pGO1FBRUQsWUFBWSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRUQsbUJBQW1CO1FBQ2YsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2xFLE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQztJQUNyQixDQUFDO0lBRUQsV0FBVztRQUNQLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsRUFBRTtZQUNwQyxJQUFJLElBQUksQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO2dCQUM1QixJQUFJLENBQUMsT0FBTyxDQUFDLFVBQVUsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDO2FBQy9DO1NBQ0o7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRU8sbUJBQW1CLENBQUMsR0FBRyxFQUFFLE9BQU87UUFDcEMsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLCtCQUErQjtlQUN4QyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQzttQkFDN0MsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsQ0FDM0MsRUFDSDtZQUNFLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QscUJBQXFCO1FBQ3JCLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUMsRUFBRTtZQUMxRixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxFQUFFO1lBQ3JGLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQWdFTyxtQkFBbUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3JDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1NBQy9GO2FBQ0k7WUFDRCxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztTQUN0QztJQUNMLENBQUM7SUFFTyxjQUFjLENBQUMsU0FBUyxFQUFFLElBQUk7UUFDbEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7WUFDbEIsT0FBTyxFQUFFLFNBQVM7WUFDbEIsSUFBSTtTQUNQLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFTSxlQUFlLENBQUMsT0FBTyxFQUFFLEdBQUc7UUFDL0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxHQUFHO1FBQ3hCLHFFQUFxRTtRQUNyRSxVQUFVLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDWCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUMvQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDUCxHQUFHLENBQUMsY0FBYyxFQUFFLENBQUM7UUFDckIsR0FBRyxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFTyxVQUFVO1FBQ2QsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUNyQixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFO1lBQ3BCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDdEM7UUFDRCxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUU7WUFDcEIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUN0QztRQUNELElBQUksSUFBSSxDQUFDLG9CQUFvQixFQUFFO1lBQzNCLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztTQUM3QztRQUNELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxXQUFXO1FBQ1AsTUFBTSxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUM7WUFDMUIsUUFBUSxFQUFFO2dCQUNOLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJO2dCQUNuQyxRQUFRLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUTthQUM5QztZQUNELE9BQU8sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQzFCLEtBQUssRUFBRSxFQUFFO1NBQ1osQ0FBQyxDQUFDO1FBQ0gsSUFBSSxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtZQUMxQyxRQUFRLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1NBQy9EO1FBQ0QsSUFBSSxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxFQUFFO1lBQ3hDLFFBQVEsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQ3ZFO1FBRUQsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVNLGdCQUFnQixDQUFDLE9BQWlCO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztRQUNsQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELHVCQUF1QixDQUFDLE9BQWlCO1FBQ3JDLElBQUksQ0FBQyxvQkFBb0IsR0FBRyxPQUFPLENBQUM7UUFDcEMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSxPQUFPO1FBQ1YsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFRCxNQUFNLENBQUMsYUFBd0IsRUFBRSxJQUFJLEdBQUcsQ0FBQztRQUNyQyxJQUFJLENBQUMsYUFBYSxHQUFHLGFBQWEsQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUNuQixDQUFDO0lBRU0sdUJBQXVCO1FBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLHNCQUFzQixFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsK0JBQStCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7UUFFNUgsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFTSxHQUFHO1FBQ04sSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBRUQsZ0JBQWdCO1FBQ1osUUFBUSxJQUFJLENBQUMsT0FBTyxDQUFDLGVBQWUsRUFBRTtZQUNsQyxLQUFLLGVBQWUsQ0FBQyxRQUFRO2dCQUN6QixJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztnQkFDM0IsTUFBTTtZQUNWLEtBQUssZUFBZSxDQUFDLGFBQWEsQ0FBQztZQUNuQyxLQUFLLGVBQWUsQ0FBQyxXQUFXLENBQUM7WUFDakM7Z0JBQ0ksSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2dCQUN6RSxNQUFNO1NBQ2I7SUFDTCxDQUFDO0lBRU0sbUJBQW1CO1FBQ3RCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNsQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLG1DQUFtQyxDQUFDLENBQUM7WUFDdkUsT0FBTztTQUNWO1FBRUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQzVDLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDaEQsTUFBTSxPQUFPLEdBQUcsUUFBUSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNoRCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRWhELFVBQVU7UUFDVixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDL0MsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU87U0FDVjtRQUVELFFBQVE7UUFDUixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBRTlELFVBQVU7UUFDVixNQUFNLFVBQVUsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQztRQUM5RCxNQUFNLFFBQVEsR0FBRyxhQUFhLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLGNBQWMsQ0FBQyxhQUFhLENBQUMsVUFBVSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBRTVELENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxNQUFNO1FBQzFCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLFFBQVEsRUFBRTtZQUNYLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFOUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZELE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLG9CQUFvQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoRixJQUFJLFVBQVUsR0FBRyxRQUFRLEVBQUU7WUFDdkIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3pDLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRTtnQkFDcEIsU0FBUyxDQUFDLElBQUksQ0FBQztvQkFDWCxLQUFLLEVBQUUsQ0FBQztvQkFDUixLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVM7aUJBQzVCLENBQUMsQ0FBQzthQUNOO1NBQ0o7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRU0sbUJBQW1CLENBQUMsT0FBTyxFQUFFLE9BQU87UUFDdkMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixDQUFDLENBQUM7UUFDakUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7WUFDaEIsT0FBTyxFQUFFLENBQUM7U0FDYjtRQUVELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQztRQUN0QixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNwQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDdEIsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3pDLElBQUksU0FBUyxDQUFDO1lBQ2QsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBRW5CLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ25CLFNBQVMsR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dCQUM5QixJQUFJLFNBQVMsQ0FBQyxTQUFTLEtBQUssRUFBRSxFQUFFO29CQUM1QixPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2lCQUN4RDtxQkFDSTtvQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztpQkFDckM7WUFDTCxDQUFDLENBQUMsQ0FBQztZQUVILFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7U0FDNUI7UUFDRCxDQUFDO1FBRUQsT0FBTyxVQUFVLENBQUM7SUFDdEIsQ0FBQztJQUVELHNCQUFzQixDQUFDLElBQUk7UUFDdkIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUNsRCxJQUFJLFFBQVEsRUFBRTtZQUNWLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7WUFDbEQsSUFBSSxLQUFLLEVBQUU7Z0JBQ1AsT0FBTyxJQUFJLENBQUM7YUFDZjtpQkFDSTtnQkFDRCxPQUFPLE9BQU8sQ0FBQzthQUNsQjtTQUNKO1FBQ0QsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU0sSUFBSSxDQUFDLE9BQVk7UUFDcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVNLElBQUksQ0FBQyxPQUFZO1FBQ3BCLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFTSxNQUFNLENBQUMsT0FBWTtRQUN0QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNoQyxDQUFDO0lBRU0sYUFBYTtRQUNoQixJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVLLGVBQWUsQ0FBQyxHQUFHLEVBQUUsT0FBTzs7WUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUM7WUFDOUIsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztZQUMxRixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUU7Z0JBQzVCLE1BQU0sWUFBWSxHQUFHO29CQUNqQixFQUFFLEtBQUssRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUU7b0JBQ2xGLEVBQUUsS0FBSyxFQUFFLG1CQUFtQixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFO2lCQUUvRixDQUFDO2dCQUNGLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsWUFBWSxDQUFDLENBQUM7YUFDN0M7WUFDRCxNQUFNLGtCQUFrQixHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsc0JBQXNCLENBQUMsQ0FBQztZQUN4RSxJQUFJLGtCQUFrQixJQUFJLE1BQU0sRUFBRTtnQkFDOUIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQ3BCLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLElBQUksRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FDbEcsQ0FBQzthQUNMO1lBQ0QsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQzthQUM5QjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLDZCQUE2QixDQUFDLENBQUM7YUFDcEU7UUFDTCxDQUFDO0tBQUE7SUFFYSx1QkFBdUIsQ0FBQyxXQUF5Qjs7WUFDM0QsTUFBTSxpQkFBaUIsR0FBaUIsRUFBRSxDQUFDO1lBQzNDLE1BQU0saUJBQWlCLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN2RyxNQUFNLFFBQVEsR0FBRyxFQUFFLENBQUM7WUFDcEIsS0FBSyxNQUFNLElBQUksSUFBSSxXQUFXLEVBQUU7Z0JBQzVCLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLEVBQUU7b0JBQy9CLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztvQkFDN0IsU0FBUztpQkFDWjtnQkFDRCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsaUJBQWlCLENBQUM7Z0JBQ3RHLFFBQVEsQ0FBQyxJQUFJLENBQ1QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLHVCQUF1QixFQUFFLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRTtvQkFDcEcsSUFBSSxVQUFVLEtBQUssSUFBSSxFQUFFO3dCQUNyQixPQUFPO3FCQUNWO29CQUNELGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztnQkFDakMsQ0FBQyxDQUFDLENBQ0wsQ0FBQzthQUNMO1lBQ0QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQzVCLE9BQU8saUJBQWlCLENBQUM7UUFDN0IsQ0FBQztLQUFBO0lBOEdPLGdCQUFnQjtRQUNwQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDakcsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7U0FDMUI7YUFDSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7U0FDM0I7YUFDSTtZQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDO1NBQzFCO0lBQ0wsQ0FBQztJQUVNLFNBQVMsQ0FBQyxRQUFlLEVBQUU7UUFDOUIsSUFBSSxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtZQUM3QixPQUFPO1NBQ1Y7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO1lBQzdCLE1BQU0sUUFBUSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1lBQ3pDLFFBQVEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO1lBQ3pCLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtnQkFDbEIsSUFBSSxDQUFDLHdCQUF3QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDO2FBQ2hGO2lCQUNJO2dCQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO2FBQ3BFO1NBQ0o7YUFDSTtZQUNELEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2dCQUNyQixJQUFJLElBQUksQ0FBQyxXQUFXLEVBQUU7b0JBQ2xCLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDeEU7cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7aUJBQzVEO1lBQ0wsQ0FBQyxDQUFDLENBQUM7U0FDTjtJQUNMLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBVSxFQUFFLE1BQWE7UUFDbkMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVPLFdBQVcsQ0FBQyxLQUFVLEVBQUUsTUFBYTtRQUN6QyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUU7WUFDckIsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO1lBQ2YsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7Z0JBQzlCLElBQUksQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDOUIsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7YUFDckI7aUJBQ0ksSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO2dCQUMvQyxJQUFJLENBQUMsVUFBVSxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUM7Z0JBQzlCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLEVBQUU7b0JBQ3JCLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7aUJBQ3RCO3FCQUNJLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLENBQUMsRUFBRTtvQkFDM0IsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7aUJBQ3JCO3FCQUNJO29CQUNELElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO2lCQUNyQjthQUNKO2lCQUNJLElBQUksS0FBSyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRTtnQkFDL0MsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDO2dCQUM5QixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQzthQUNyQjtZQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNmLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQzVFO0lBQ0wsQ0FBQztJQUVNLGlCQUFpQixDQUFDLFVBQVU7UUFDL0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7UUFDdkIsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7UUFDMUIsSUFBSSxDQUFDLFVBQVU7WUFBRSxPQUFPO1FBQ3hCLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDeEIsSUFBSSxNQUFNLENBQUMsRUFBRSxJQUFJLFNBQVMsRUFBRTtnQkFDeEIsTUFBTSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksRUFBRSxDQUFDO2FBQzFDO1lBQ0QsTUFBTSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDMUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ2pCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2FBQ3ZCO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUU7Z0JBQ2pCLE1BQU0sQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO2FBQ3ZCO1lBQ0QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7Z0JBQ2hCLE1BQU0sQ0FBQyxNQUFNLEdBQUcsRUFBRSxDQUFDO2FBQ3RCO1lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNkLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQzthQUNyQztZQUNELElBQUksTUFBTSxDQUFDLFVBQVUsRUFBRTtnQkFDbkIsTUFBTSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO2FBQ3hDO1lBQ0QsSUFBSSxNQUFNLENBQUMsS0FBSyxFQUFFO2dCQUNkLE1BQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRTtvQkFDakQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7Z0JBQ3JDLENBQUMsQ0FBQyxDQUFDO2FBQ047WUFDRCxNQUFNLENBQUMsYUFBYSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUV4RSxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzFELE1BQU0sR0FBRyxHQUFxQixJQUFJLENBQUM7Z0JBQ25DLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ2hDLElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxTQUFTLElBQUksS0FBSyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsZ0JBQWdCLEVBQUU7b0JBQ2pFLGtCQUFrQjtvQkFDbEIsTUFBTSxDQUFDLEdBQUcsR0FBRyxDQUFDLEtBQUssTUFBTSxDQUFDLEdBQUcsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDO2lCQUM5RTtZQUNMLENBQUMsQ0FBQyxDQUFDO1lBRUgsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUN4RCxNQUFNLEdBQUcsR0FBcUIsSUFBSSxDQUFDO2dCQUNuQyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUMzRSxJQUFJLGNBQWMsRUFBRTtvQkFDaEIsa0JBQWtCO29CQUNsQixNQUFNLENBQUMsR0FBRyxHQUFHLENBQUMsS0FBSyxNQUFNLENBQUMsR0FBRyxHQUFHLGNBQWMsRUFBRSxDQUFDO2lCQUNwRDtZQUNMLENBQUMsQ0FBQyxDQUFDO1FBQ1AsQ0FBQyxDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsc0JBQXNCLENBQUMsVUFBVSxDQUFDLENBQUM7SUFDNUMsQ0FBQztJQUVNLE9BQU8sQ0FBQyxLQUFhLEVBQUUsU0FBaUI7UUFDM0MsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJO1lBQUUsT0FBTyxLQUFLLENBQUM7UUFDeEMsS0FBSyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNyQixJQUFJLEtBQUssR0FBRyxDQUFDLENBQUMsRUFBRSxVQUFVLEdBQUcsR0FBRyxDQUFDO1FBQ2pDLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ25DLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsSUFBSSxVQUFVLElBQUksRUFBRSxFQUFFO2dCQUNwQyxTQUFTLEVBQUUsQ0FBQzthQUNmO1lBQ0QsVUFBVSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QixJQUFJLFNBQVMsSUFBSSxDQUFDLEVBQUU7Z0JBQ2hCLEtBQUssR0FBRyxDQUFDLENBQUM7Z0JBQ1YsTUFBTTthQUNUO1NBQ0o7UUFDRCxJQUFJLEtBQUssR0FBRyxDQUFDLENBQUM7WUFBRSxPQUFPLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ2pELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxjQUFjLENBQUMsT0FBTyxFQUFFLEtBQUs7UUFDekIsT0FBTyxDQUFDLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVNLGFBQWEsQ0FBQyxNQUFNLEVBQUUsUUFBUSxHQUFHLEVBQUU7UUFDdEMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLGFBQWEsQ0FBQztRQUNqQyxLQUFLLE1BQU0sR0FBRyxJQUFJLFFBQVEsRUFBRTtZQUN4QixHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQzVCO1FBQ0QsT0FBTyxHQUFHLENBQUM7SUFDZixDQUFDO0lBRU0sa0JBQWtCLENBQUMsT0FBTztRQUM3QixPQUFPO1lBQ0gsT0FBTztZQUNQLGdCQUFnQixFQUFFLElBQUksQ0FBQyxnQkFBZ0I7WUFDdkMsUUFBUSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVztZQUNsQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDNUIsYUFBYSxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ3JDLENBQUM7SUFDTixDQUFDO0lBRU0sc0JBQXNCLENBQUMsT0FBTyxFQUFFLFFBQVE7UUFDM0MsdUNBQ08sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxLQUNuQyxRQUFRLEVBQ1IsbUJBQW1CLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixFQUM3QyxlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWUsRUFDckMsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQ2pCLGFBQWEsRUFBRSxJQUFJLENBQUMsY0FBYyxFQUNsQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsa0JBQWtCLElBQzdDO0lBQ04sQ0FBQztJQUVNLGNBQWMsQ0FBQyxPQUFPLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSztRQUN6RCxPQUFPO1lBQ0gsUUFBUSxFQUFFLEtBQUs7WUFDZixPQUFPO1lBQ1AsUUFBUTtZQUNSLEdBQUc7WUFDSCxLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7WUFDaEIsUUFBUTtZQUNSLGlCQUFpQixFQUFFLElBQUksQ0FBQyxpQkFBaUI7U0FDNUMsQ0FBQztJQUNOLENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxPQUFPO1FBQ2pDLElBQUksTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNoQixJQUFJLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUNqQyxNQUFNLElBQUkscUJBQXFCLENBQUM7U0FDbkM7UUFDRCxJQUFJLElBQUksQ0FBQyxXQUFXLEtBQUssRUFBRSxFQUFFO1lBQ3pCLE1BQU0sSUFBSSxpQkFBaUIsQ0FBQztTQUMvQjtRQUNELElBQUksT0FBTyxDQUFDLEtBQUssRUFBRTtZQUNmLE1BQU0sSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQztTQUNqQztRQUNELE9BQU8sTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ3pCLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFJO1FBQ3pCLElBQUksQ0FBQyxJQUFJLEVBQUU7WUFDUCxPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUNELElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDMUIsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztTQUN4SDtJQUNMLENBQUM7SUFFRCxTQUFTO1FBQ0wsVUFBVSxDQUFDLEdBQUcsRUFBRTtZQUNaLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtnQkFDaEIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2FBQ3BDO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsY0FBYztRQUNWLFVBQVUsQ0FBQyxHQUFHLEVBQUU7WUFDWixJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2hCLElBQUksQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQzthQUN2QztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztJQUVNLE1BQU0sQ0FBQyxLQUFLO1FBQ2YsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUM7UUFDbEUsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxNQUFNLENBQUMsS0FBSztRQUNmLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsRUFBRTtZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQztTQUNyRTtRQUNELElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sUUFBUSxDQUFDLEtBQUs7UUFDakIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDaEcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2YsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDO0lBQ3JCLENBQUM7SUFFTSxRQUFRLENBQUMsS0FBSztRQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztJQUNyQixDQUFDO0lBRU0sY0FBYyxDQUFDLE9BQW9CO1FBQ3RDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMzQixJQUFJLElBQUksQ0FBQyxRQUFRLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7Z0JBQ3RFLE9BQU8sS0FBSyxDQUFDO2FBQ2hCO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRU0sc0JBQXNCLENBQUMsT0FBb0I7UUFDOUMsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUNqQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNuQyxNQUFNLElBQUksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzNCLElBQUksSUFBSSxDQUFDLFFBQVEsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDdEUsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTSxZQUFZLENBQUMsWUFBWTtRQUM1QixPQUFPLElBQUksQ0FBQyxjQUFjLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxZQUFZLENBQUMsQ0FBQztJQUNqRixDQUFDO0lBRU0sV0FBVyxDQUFDLFlBQW9CO1FBQ25DLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsS0FBSyxTQUFTLEVBQUU7WUFDM0MsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO1NBQ2pFO1FBQ0QsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxJQUFJLElBQUksQ0FBQztJQUMvQyxDQUFDO0lBRU0sa0JBQWtCLENBQUMsV0FBbUI7UUFDekMsSUFBSSxXQUFXLElBQUksYUFBYSxFQUFFO1lBQzlCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDO1NBQ25DO1FBQ0QsSUFBSSxXQUFXLElBQUksZUFBZSxFQUFFO1lBQ2hDLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDO1NBQ3RDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUN6QixJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO1NBQ2hGO1FBRUQsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVNLFdBQVcsQ0FBQyxZQUFvQjtRQUNuQyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEtBQUssU0FBUyxFQUFFO1lBQzNDLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxZQUFZLENBQUMsQ0FBQztTQUNqRTtRQUNELE9BQU8sSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRU0sc0JBQXNCLENBQUMsVUFBZTtRQUN6QyxJQUFJLENBQUMsZ0JBQWdCLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixNQUFNLGNBQWMsR0FBVyxJQUFJLENBQUMsV0FBVyxDQUFDO1FBQ2hELCtCQUErQjtRQUMvQixJQUFJLGtCQUFrQixHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDcEQsSUFBSSxjQUFjLElBQUksY0FBYyxJQUFJLEVBQUUsRUFBRTtZQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtnQkFDeEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM5QixNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7Z0JBQzNDLElBQUksVUFBVSxLQUFLLGtCQUFrQixFQUFFO29CQUNuQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUc7d0JBQ2hDLEtBQUssRUFBRSxDQUFDLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxFQUFFLElBQUksRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsQ0FBQyxPQUFPLENBQUM7cUJBQ25GLENBQUM7b0JBQ0YsSUFBSSxDQUFDLEtBQUssQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEdBQUcsSUFBSSxDQUFDO29CQUM5QyxrQkFBa0IsR0FBRyxVQUFVLENBQUM7aUJBQ25DO3FCQUNJO29CQUNELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLENBQUMsQ0FBQztvQkFDcEQsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNqQixTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDakM7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxDQUFDO2FBQ3JFO1NBQ0o7SUFDTCxDQUFDO0lBRU0sWUFBWTtRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO0lBQzlCLENBQUM7SUFFTSxtQkFBbUIsQ0FBQyxJQUFJO1FBQzNCLElBQUksSUFBSSxDQUFDLGdCQUFnQixFQUFFO1lBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztZQUMvQyxLQUFLLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQzNDLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxFQUFFLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxJQUFJLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsSUFBSSxTQUFTLEVBQUU7b0JBQzFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUN0QzthQUNKO1NBQ0o7UUFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUN0RCxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQztRQUN0RCxJQUFJLENBQUMscUJBQXFCLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sY0FBYyxDQUFDLEtBQUs7UUFDdkIsSUFBSSxLQUFLLEVBQUU7WUFDUCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQztZQUNuRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQztZQUN2RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFNBQVMsSUFBSSxJQUFJLEVBQUU7Z0JBQzlDLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO2FBQ3REO2lCQUNJO2dCQUNELElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLE9BQU8sR0FBRyxDQUFDLENBQUM7YUFDMUM7WUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztZQUN6RCxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDLGFBQWEsQ0FBQztZQUUvRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRTtnQkFDdkMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLENBQUM7Z0JBQ3BGLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7b0JBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7b0JBQ3pDLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7aUJBQ2hEO2FBQ0o7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQ25DO1lBQ0QsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztZQUMxQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7U0FDbEI7UUFDRCxJQUFJLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBRU0sZ0JBQWdCO1FBQ25CLElBQUksQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1FBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDakQsSUFBSSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDM0IsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3RDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN0QyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztRQUMxQixJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVNLGtCQUFrQjtRQUNyQixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsRUFBRTtZQUN2QyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1lBQ3pHLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEVBQUU7Z0JBQzFCLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7Z0JBRTdDLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsU0FBUyxFQUFFO29CQUNwQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUM7aUJBQy9EO3FCQUNJO29CQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDO2lCQUNyRDthQUNKO2lCQUNJO2dCQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO2FBQzNCO1lBQ0QsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUM7U0FDbEU7YUFDSTtZQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQzNCO1FBRUQsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUM7UUFDdkQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7UUFFbkQsSUFBSSxJQUFJLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDM0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUM7U0FDM0Y7YUFDSTtZQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO1NBQ3pCO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEdBQUc7UUFDMUIsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRTtZQUNmLE1BQU0sSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDO1NBQzNCO1FBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUU7WUFDWCxNQUFNLElBQUksZUFBZSxDQUFDO1NBQzdCO1FBQ0QsSUFBSSxHQUFHLENBQUMsS0FBSyxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDOUIsTUFBTSxJQUFJLG9CQUFvQixDQUFDO1lBQy9CLElBQUksSUFBSSxDQUFDLFFBQVEsSUFBSSxDQUFDLEVBQUU7Z0JBQ3BCLE1BQU0sSUFBSSxjQUFjLENBQUM7YUFDNUI7U0FDSjtRQUVELE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFTyxjQUFjLENBQUMsR0FBUSxFQUFFLFNBQVMsR0FBRyxLQUFLO1FBQzlDLE1BQU0sS0FBSyxHQUFRLEVBQUUsQ0FBQztRQUN0QixJQUFJLEdBQUcsQ0FBQyxLQUFLLElBQUksZ0JBQWdCLEVBQUU7WUFDL0IsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUMvQixPQUFPLEtBQUssQ0FBQztTQUNoQjtRQUVELElBQUksU0FBUyxFQUFFO1lBQ1gsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLFFBQVEsQ0FBQztTQUNsQzthQUNJO1lBQ0QsSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUU7Z0JBQ2pDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxNQUFNLENBQUM7YUFDaEM7aUJBQ0ksSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxNQUFNLEVBQUU7Z0JBQ3hDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUM7YUFDbEM7aUJBQ0ksSUFBSSxHQUFHLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxLQUFLLEVBQUU7Z0JBQ3ZDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxPQUFPLENBQUM7YUFDakM7aUJBQ0ksSUFBSSxJQUFJLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2xDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxRQUFRLENBQUM7YUFDbEM7aUJBQ0ksSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLEtBQUssQ0FBQyxZQUFZLENBQUMsR0FBRyxPQUFPLENBQUM7YUFDakM7aUJBQ0k7Z0JBQ0QsS0FBSyxDQUFDLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQzthQUNoQztTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUdNLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxPQUFPO1FBQ3BDLE1BQU0sQ0FBQyxHQUFRLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ25DLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO1lBQ2hFLElBQUksR0FBRyxDQUFDO1lBQ1IsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUU7Z0JBQ3JCLElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFO29CQUNuRCxHQUFHLEdBQUcsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUNqQixNQUFNO2lCQUNUO2FBQ0o7WUFFRCxJQUFJLE9BQU8sR0FBRyxLQUFLLENBQUM7WUFDcEIsSUFBSSxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQ3RCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNwQixJQUFJLEtBQUssR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO1lBQ25ELElBQUksR0FBRyxFQUFFO2dCQUNMLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsSUFBSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsRUFBRTtvQkFDcEUsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ2xDLE9BQU8sR0FBRyxJQUFJLENBQUM7aUJBQ2xCO3FCQUNJLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLE9BQU87dUJBQ2xFLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLGNBQWMsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxRQUFRLEVBQ2pGO29CQUNFLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQ3RCLFNBQVMsR0FBRyxJQUFJLENBQUM7aUJBQ3BCO3FCQUNJLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxFQUFFO29CQUN2QyxLQUFLLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7b0JBQzlCLE9BQU8sR0FBRyxJQUFJLENBQUM7aUJBQ2xCO2FBQ0o7WUFFRCxLQUFLLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7Z0JBQ3pELE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUM1QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3RCLElBQUksV0FBVyxHQUFRLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDL0IsSUFBSSxPQUFPLEVBQUU7b0JBQ1QsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsSUFBSSxXQUFXLElBQUksSUFBSTt3QkFBRSxTQUFTO2lCQUNyQztxQkFDSSxJQUFJLFNBQVMsRUFBRTtvQkFDaEIsV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztvQkFDdEIsSUFBSSxLQUFLLENBQUMsV0FBVyxDQUFDO3dCQUFFLFNBQVM7aUJBQ3BDO3FCQUNJLElBQUksT0FBTztvQkFBRSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUV4QyxJQUFJLFdBQVcsSUFBSSxPQUFPLEVBQUU7b0JBQ3hCLElBQUk7d0JBQ0EsS0FBSyxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7d0JBQ25CLE1BQU0sRUFBRSxHQUFHLElBQUksTUFBTSxDQUFDLFdBQVcsRUFBRSxHQUFHLENBQUMsQ0FBQzt3QkFDeEMsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFOzRCQUNqQixDQUFDLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FBQzs0QkFDOUMsQ0FBQyxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7eUJBQ3ZCO3FCQUNKO29CQUNELFdBQU07cUJBQ0w7aUJBQ0o7cUJBQ0ksSUFBSSxXQUFXLElBQUksUUFBUSxFQUFFO29CQUM5QixJQUFJLEtBQUssSUFBSSxXQUFXLEVBQUU7d0JBQ3RCLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUM5QyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztxQkFDdkI7aUJBQ0o7cUJBQ0ksSUFBSSxXQUFXLElBQUksV0FBVyxFQUFFO29CQUNqQyxJQUFJLEtBQUssSUFBSSxXQUFXLEVBQUU7d0JBQ3RCLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUM5QyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztxQkFDdkI7aUJBQ0o7cUJBQ0ksSUFBSSxXQUFXLElBQUksVUFBVSxFQUFFO29CQUNoQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEVBQUU7d0JBQ2pCLENBQUMsQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLEtBQUssQ0FBQyxDQUFDO3dCQUM5QyxDQUFDLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztxQkFDdkI7aUJBQ0o7cUJBQ0ksSUFBSSxXQUFXLElBQUksYUFBYSxFQUFFO29CQUNuQyxLQUFLLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztvQkFDbkIsTUFBTSxFQUFFLEdBQUcsSUFBSSxNQUFNLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDO29CQUN4QyxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDbEIsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzlDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO3FCQUN2QjtpQkFDSjtxQkFDSSxJQUFJLFdBQVcsSUFBSSxTQUFTLEVBQUU7b0JBQy9CLElBQUksS0FBSyxHQUFHLFdBQVcsRUFBRTt3QkFDckIsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzlDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO3FCQUN2QjtpQkFDSjtxQkFDSSxJQUFJLFdBQVcsSUFBSSxRQUFRLEVBQUU7b0JBQzlCLElBQUksS0FBSyxHQUFHLFdBQVcsRUFBRTt3QkFDckIsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQzlDLENBQUMsQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO3FCQUN2QjtpQkFDSjthQUNKO1NBQ0o7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNiLENBQUM7SUFFTyxhQUFhLENBQUMsS0FBSztRQUN2QixJQUFJLEtBQUssS0FBSyxPQUFPO1lBQUUsT0FBTyxJQUFJLEVBQUUsQ0FBQztRQUVyQyxJQUFJLEtBQUssQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUMvQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6RCxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxFQUFFO2dCQUNmLE1BQU0sSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDO2dCQUNyQyxPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUVELElBQUksS0FBSyxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFO1lBQy9DLEtBQUssR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3pELElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7Z0JBQ2YsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLEVBQUUsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7Z0JBQ3ZDLE9BQU8sSUFBSSxDQUFDO2FBQ2Y7WUFDRCxPQUFPLElBQUksQ0FBQztTQUNmO1FBRUQsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDL0MsS0FBSyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDekQsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDZixNQUFNLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN4QixJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQztnQkFDM0MsT0FBTyxJQUFJLENBQUM7YUFDZjtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNsQixPQUFPLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQzthQUMvRDtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUM3QixJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQ3hDLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFTyxrQkFBa0IsQ0FBQyxLQUFLO1FBQzVCLE9BQU8sMEJBQTBCLEtBQUssUUFBUSxLQUFLLFdBQVcsS0FBSywyQkFBMkIsQ0FBQztJQUNuRyxDQUFDO0lBRU8saUJBQWlCLENBQUMsR0FBRztRQUN6QixPQUFPLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxJQUFJLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksQ0FBQztJQUNuSixDQUFDO0lBRU8sZ0JBQWdCLENBQUMsR0FBRztRQUN4QixPQUFPLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLFFBQVEsQ0FBQyxPQUFPLElBQUksR0FBRyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsY0FBYyxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQztJQUM1SixDQUFDO0lBU0QsV0FBVztRQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsc0JBQXNCLEVBQUU7WUFDOUIsSUFBSSxJQUFJLENBQUMsT0FBTyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUU7Z0JBQ2xELE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUM7Z0JBQ25ELE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3RDLElBQUksS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFO29CQUNaLFNBQVMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDO2lCQUM5QjthQUNKO1NBQ0o7UUFDRCxJQUFJLElBQUksQ0FBQyxPQUFPO1lBQUUsWUFBWSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU0scUJBQXFCO1FBQ3hCLEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUU7WUFDekMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFO2dCQUMxQixPQUFPLElBQUksQ0FBQzthQUNmO1NBQ0o7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQU87UUFDdEIsSUFBSSxPQUFPLENBQUMsYUFBYSxFQUFFO1lBQ3ZCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUU7WUFDakIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxFQUFFO1lBQy9ELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU0sYUFBYSxDQUFDLE9BQU87UUFDeEIsSUFBSSxPQUFPLENBQUMsZUFBZSxFQUFFO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDbkIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxFQUFFO1lBQy9ELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRU0sV0FBVyxDQUFDLE9BQU87UUFDdEIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBQ2hDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUNuQyxDQUFDO0lBRU0sZUFBZSxDQUFDLE9BQU87UUFDMUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUM5QyxJQUFJLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDO0lBQ2pELENBQUM7SUFFTyxnQkFBZ0IsQ0FBQyxLQUFLO1FBQzFCLElBQUksSUFBSSxDQUFDLG1CQUFtQixFQUFFO1lBQzFCLE9BQU87U0FDVjtRQUVELElBQUksWUFBWSxHQUFHLElBQUksQ0FBQywwQkFBMEIsQ0FBQztRQUNuRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsOEJBQThCLENBQUMsQ0FBQztRQUNoRixJQUFJLEVBQUUsRUFBRTtZQUNKLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLENBQUMsQ0FBQyx1QkFBdUI7WUFDM0QsTUFBTSxlQUFlLEdBQUcsS0FBSyxHQUFHLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQyx1Q0FBdUM7WUFDdkYsSUFBSSxZQUFZLEdBQUcsZUFBZSxFQUFFO2dCQUNoQyxZQUFZLEdBQUcsZUFBZSxDQUFDO2FBQ2xDO1NBQ0o7UUFFRCxNQUFNLEVBQUUsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxhQUFhLENBQUMsMkJBQTJCLENBQUMsQ0FBQztRQUM3RSxJQUFJLEVBQUUsRUFBRTtZQUNKLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUMvQyxNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsb0JBQW9CLENBQUMsUUFBUSxDQUFDLENBQUM7WUFDbEQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsNkNBQTZDO1lBQ3hGLE1BQU0sZUFBZSxHQUFHLEtBQUssR0FBRyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsdUNBQXVDO1lBQ3ZGLElBQUksWUFBWSxHQUFHLGVBQWUsRUFBRTtnQkFDaEMsWUFBWSxHQUFHLGVBQWUsQ0FBQzthQUNsQztTQUNKO1FBRUQsSUFBSSxDQUFDLG9CQUFvQixHQUFHLEdBQUcsWUFBWSxJQUFJLENBQUM7UUFDaEQsSUFBSSxDQUFDLHlCQUF5QixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsb0JBQW9CLENBQUMsQ0FBQztJQUNuRSxDQUFDO0lBRU8sa0JBQWtCLENBQUMsRUFBRTtRQUN6QixPQUFPLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzdFLENBQUM7SUFFSyxlQUFlOztZQUNqQixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ25ELENBQUM7S0FBQTtJQUVhLGNBQWMsQ0FBQyxVQUFVOztZQUNuQyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDekQsS0FBSyxNQUFNLEdBQUcsSUFBSSxVQUFVLEVBQUU7Z0JBQzFCLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFO29CQUMzQixJQUFJLENBQUMsU0FBUyxDQUFnQixHQUFHLENBQUMsSUFBSSxFQUFFLEdBQUcsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRTt3QkFDOUUsSUFBSSxDQUFDLFNBQVMsR0FBRyxDQUFDLEtBQUssR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO29CQUNyQyxDQUFDLENBQUMsQ0FBQztpQkFDTjthQUNKO1FBQ0wsQ0FBQztLQUFBO0lBRWEsU0FBUyxDQUFDLElBQW1CLEVBQUUsU0FBa0IsRUFBRSxLQUFLOztZQUNsRSxJQUFJLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsRUFBRTtnQkFDOUIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLENBQUM7YUFDdkM7WUFFRCxJQUFJLFNBQVMsRUFBRTtnQkFDWCxNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7Z0JBQ3hDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLENBQUM7Z0JBQ25DLE9BQU8sR0FBRyxDQUFDO2FBQ2Q7aUJBQ0k7Z0JBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQztnQkFDbkMsT0FBTyxHQUFHLENBQUM7YUFDZDtRQUNMLENBQUM7S0FBQTtJQUVNLGdCQUFnQixDQUFDLEdBQUc7UUFDdkIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDL0IsQ0FBQztJQUVNLG1CQUFtQjtRQUN0QixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUF3QjtRQUM3QyxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO1FBQzNDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDZixJQUFJLEdBQUcsQ0FBQyxXQUFXLElBQUksV0FBVyxDQUFDLFFBQVEsRUFBRTtnQkFDekMsSUFBSSxHQUFHLENBQUMsV0FBVyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRTtvQkFDbEUsY0FBYyxDQUFDLElBQUksQ0FDZixJQUFJLE1BQU0sQ0FBQzt3QkFDUCxLQUFLLEVBQUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUM7d0JBQy9CLFFBQVEsRUFBRSxRQUFRLENBQUMsRUFBRTt3QkFDckIsV0FBVyxFQUFFLEdBQUcsQ0FBQyxLQUFLO3dCQUN0QixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLO3FCQUNoRCxDQUFDLENBQ0wsQ0FBQztvQkFDRixJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxxQkFBcUIsaUNBQzFELEdBQUcsS0FDTixRQUFRLEVBQUUsTUFBTSxFQUNoQixXQUFXLEVBQUUsUUFBUSxHQUFHLENBQUMsS0FBSyxFQUFFLEVBQ2hDLFFBQVEsRUFBRSxJQUFJLEVBQ2QsVUFBVSxFQUFFLElBQUksRUFDaEIsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZLElBQ2hDLENBQUM7aUJBQ047cUJBQ0k7b0JBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxxREFBcUQsR0FBRyxDQUFDLEtBQUssS0FBSyxHQUFHLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztpQkFDckg7Z0JBQ0QsT0FBTzthQUNWO1lBQ0QsUUFBUSxHQUFHLENBQUMsUUFBUSxFQUFFO2dCQUNsQixLQUFLLFFBQVEsQ0FBQyxPQUFPO29CQUNqQixjQUFjLENBQUMsSUFBSSxDQUNmLElBQUksTUFBTSxDQUFDO3dCQUNQLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQzt3QkFDL0IsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFO3dCQUNyQixXQUFXLEVBQUUsR0FBRyxDQUFDLEtBQUs7cUJBQ3pCLENBQUMsQ0FDTCxDQUFDO29CQUNGLE1BQU07Z0JBQ1YsS0FBSyxRQUFRLENBQUMsR0FBRyxDQUFDO2dCQUNsQixLQUFLLFFBQVEsQ0FBQyxjQUFjLENBQUM7Z0JBQzdCLEtBQUssUUFBUSxDQUFDLE9BQU8sQ0FBQztnQkFDdEIsS0FBSyxRQUFRLENBQUMsUUFBUTtvQkFDbEIsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztvQkFDakQsTUFBTTtnQkFDVixLQUFLLFFBQVEsQ0FBQyxJQUFJO29CQUNkLGNBQWMsQ0FBQyxJQUFJLENBQ2YsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQ3RCLEdBQUcsRUFDSCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUMsRUFDdkUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQ3hGLENBQ0osQ0FBQztvQkFDRixNQUFNO2dCQUNWLEtBQUssUUFBUSxDQUFDLFFBQVE7b0JBQ2xCLGNBQWMsQ0FBQyxJQUFJLENBQ2YsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQ3RCLEdBQUcsRUFDSCxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsT0FBTyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUMsRUFDOUgsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQUUsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLElBQUksQ0FBQyxRQUFRLEVBQUUsRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQ2pJLENBQ0osQ0FBQztvQkFFRixNQUFNO2dCQUNWO29CQUNJLGNBQWMsQ0FBQyxJQUFJLENBQ2YsSUFBSSxNQUFNLENBQUM7d0JBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO3dCQUMvQixRQUFRLEVBQUUsUUFBUSxDQUFDLE9BQU87d0JBQzFCLFdBQVcsRUFBRSxHQUFHLENBQUMsS0FBSztxQkFDekIsQ0FBQyxDQUNMLENBQUM7b0JBQ0YsTUFBTTthQUNiO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRU8sa0JBQWtCLENBQUMsR0FBcUIsRUFBRSxhQUFtQyxFQUFFLFdBQWlDO1FBQ3BILE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQzFCLElBQUksQ0FBQyxFQUFFO1lBQ0gsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUNqQixPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsT0FBTyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDL0IsQ0FBQyxFQUNELElBQUksQ0FBQyxFQUFFO1lBQ0gsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxFQUFFO2dCQUNqQixPQUFPLElBQUksQ0FBQzthQUNmO1lBQ0QsTUFBTSxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDL0IsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQyxDQUNKLENBQUM7SUFDTixDQUFDO0lBRU8sY0FBYyxDQUFDLEdBQXFCLEVBQUUsbUJBQWtDLElBQUksRUFBRSxpQkFBZ0MsSUFBSTtRQUN0SCxPQUFPO1lBQ0gsSUFBSSxNQUFNLENBQUM7Z0JBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUMvQixRQUFRLEVBQUUsUUFBUSxDQUFDLGdCQUFnQjtnQkFDbkMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dCQUN0QixRQUFRLEVBQUUsQ0FBQztnQkFDWCxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUN4RSxDQUFDO1lBQ0YsSUFBSSxNQUFNLENBQUM7Z0JBQ1AsS0FBSyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDO2dCQUMvQixRQUFRLEVBQUUsUUFBUSxDQUFDLGNBQWM7Z0JBQ2pDLFdBQVcsRUFBRSxHQUFHLENBQUMsS0FBSztnQkFDdEIsUUFBUSxFQUFFLENBQUM7Z0JBQ1gsWUFBWSxFQUFFLGNBQWMsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQzthQUNwRSxDQUFDO1NBQ0wsQ0FBQztJQUNOLENBQUM7SUFFTyxjQUFjLENBQUMsR0FBRzs7UUFDdEIsYUFBTyxHQUFHLENBQUMsV0FBVyxtQ0FBSSxHQUFHLENBQUMsS0FBSyxDQUFDO0lBQ3hDLENBQUM7SUFFTSxzQkFBc0I7UUFDekIsT0FBTyxFQUFFLENBQUM7SUFDZCxDQUFDO0lBRU0sYUFBYSxDQUFDLGFBQTJCO1FBQzVDLElBQUksYUFBYSxFQUFFO1lBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7Z0JBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzlDLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQztTQUM1SDtJQUNMLENBQUM7SUFVTyxlQUFlLENBQUMsS0FBSztRQUN6QixJQUFJLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUN4QixJQUFJLEtBQUssQ0FBQyxjQUFjLElBQUksSUFBSSxJQUFJLEtBQUssQ0FBQyxjQUFjLEtBQUssRUFBRSxFQUFFO2dCQUM3RCxPQUFPLEtBQUssQ0FBQyxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUM7YUFDdEM7WUFFRCxNQUFNLElBQUksR0FBRyxFQUFFLENBQUM7WUFDaEIsS0FBSyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUU7Z0JBQ3JCLElBQUksR0FBRyxJQUFJLFNBQVMsSUFBSSxHQUFHLElBQUksU0FBUyxJQUFJLEdBQUcsSUFBSSxTQUFTLEVBQUU7b0JBQzFELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7b0JBQy9DLElBQUksS0FBSyxJQUFJLElBQUk7d0JBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQztpQkFDeEM7YUFDSjtZQUNELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7YUFDSSxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRTtZQUNyQixNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUM7WUFDZixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtnQkFDdEIsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7YUFDeEM7WUFDRCxPQUFPLEdBQUcsQ0FBQztTQUNkO2FBQ0ksSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO1lBQ3BCLE9BQU8sS0FBSyxDQUFDO1NBQ2hCO0lBQ0wsQ0FBQztJQUVNLGFBQWEsQ0FBQyxJQUFJLEVBQUUsS0FBSztRQUM1QixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTztZQUFFLE9BQU87UUFDL0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRTtZQUNqRSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLElBQUksQ0FBQztZQUM5QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDO1NBQ3ZCO2FBQ0k7WUFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDbkM7SUFDTCxDQUFDO0lBRU0sbUJBQW1CLENBQUMsSUFBSSxFQUFFLE9BQU87UUFDcEMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQy9CLElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2pCLGlEQUFpRDtnQkFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7U0FDSjtJQUNMLENBQUM7SUFFTSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLEtBQUs7UUFDekMsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU87WUFBRSxPQUFPO1FBQy9CLElBQUksT0FBTyxFQUFFO1lBQ1QsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUU7Z0JBQ2pCLDZDQUE2QztnQkFDN0MsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztnQkFDaEQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN2QjtpQkFDSTtnQkFDRCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUM7YUFDbkM7U0FDSjtJQUNMLENBQUM7SUFFTSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsS0FBSztRQUM5QixJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFTSxlQUFlLENBQUMsR0FBRyxFQUFFLEtBQUs7UUFDN0IsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLEVBQUU7WUFDcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1NBQ3ZDO1FBQ0QsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxzQkFBc0IsQ0FBQyxHQUFHLEVBQUUsS0FBSztRQUM3QixJQUFJLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1FBQ2hDLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxHQUFHLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO1FBQ3BELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU0sbUJBQW1CLENBQUMsS0FBSztRQUM1QixJQUFJLEtBQUssS0FBSyxJQUFJLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ25ELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDO1lBQ2pFLElBQUksS0FBSyxLQUFLLElBQUksRUFBRTtnQkFDaEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7YUFDckQ7aUJBQ0k7Z0JBQ0QsSUFBSSxDQUFDLG1CQUFtQixDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxRQUFRLENBQUM7YUFDckQ7U0FDSjthQUNJO1lBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsR0FBRyxJQUFJLENBQUM7U0FDbkQ7UUFDRCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDcEIsQ0FBQztJQUVNLG9CQUFvQixDQUFDLElBQUk7UUFDNUIsSUFBSSxJQUFJLEVBQUU7WUFDTixNQUFNLFFBQVEsR0FBUSxRQUFRLENBQUMsYUFBYSxDQUFDO1lBRTdDLFVBQVUsQ0FBQyxHQUFHLEVBQUU7Z0JBQ1osTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7Z0JBQ25ELElBQUksQ0FBQyxTQUFTLElBQUksQ0FBQyxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxPQUFPLENBQUMsRUFBRTtvQkFDMUQsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQztvQkFDMUMsSUFBSSxLQUFLO3dCQUFFLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDN0I7cUJBQ0ksSUFBSSxTQUFTLEVBQUU7b0JBQ2hCLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQztpQkFDckI7WUFDTCxDQUFDLENBQUMsQ0FBQztTQUNOO0lBQ0wsQ0FBQztJQUVELHlCQUF5QixDQUFDLEtBQUs7UUFDM0IsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUU7WUFDNUIsT0FBTztTQUNWO1FBRUQsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQ2xELE1BQU0sZ0JBQWdCLEdBQUcsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUVoRCx3RkFBd0Y7UUFDeEYsZ0JBQWdCLElBQUksZ0JBQWdCLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN2RSxDQUFDO0lBRUQseUJBQXlCLENBQUMsS0FBSztRQUMzQixJQUFJLENBQUMsS0FBSyxJQUFJLENBQUMsS0FBSyxDQUFDLFNBQVMsRUFBRTtZQUM1QixPQUFPO1NBQ1Y7UUFFRCxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDbEQsTUFBTSxnQkFBZ0IsR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2hELGdCQUFnQixJQUFJLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDMUUsQ0FBQztJQUVNLGtCQUFrQixDQUFDLElBQUk7UUFDMUIsSUFBSSxJQUFJLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN6QixJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxHQUFHLEdBQUcsRUFBRTtnQkFDbkMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsa0JBQWtCLENBQUMsQ0FBQzthQUMxQztpQkFDSTtnQkFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO2FBQzdDO1NBQ0o7SUFDTCxDQUFDO0lBRU8sV0FBVyxDQUFDLEtBQUssRUFBRSxNQUFNO1FBQzdCLElBQUksS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNsQixPQUFPLEtBQUssSUFBSSxLQUFLLENBQUMsVUFBVSxJQUFJLE1BQU0sRUFBRTtZQUN4QyxLQUFLLEdBQUcsS0FBSyxDQUFDLFVBQVUsQ0FBQztTQUM1QjtRQUVELE9BQU8sS0FBSyxJQUFJLElBQUksQ0FBQztJQUN6QixDQUFDO0lBRU0sWUFBWTtRQUNmLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUMzQixDQUFDO0lBRU0sbUJBQW1CO1FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtZQUNaLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxhQUFhLENBQUMsQ0FBQztTQUMzRDthQUNJLElBQUksSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUNyQixJQUFJLENBQUMscUJBQXFCLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLENBQUM7U0FDL0Q7UUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMvQixDQUFDO0lBRU8scUJBQXFCLENBQUMsWUFBaUI7UUFDM0MsSUFBSSxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsRUFBRTtZQUMxQyxJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUFFLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7WUFFbEQsSUFBSSxDQUFDLGtDQUFrQyxHQUFHLElBQUksQ0FBQztTQUNsRDtRQUNELE1BQU0sUUFBUSxHQUFHLFlBQVksQ0FBQyxhQUFhLENBQUMscUNBQXFDLENBQUMsQ0FBQztRQUNuRixNQUFNLFNBQVMsR0FBRyxRQUFRLENBQUMsU0FBUyxDQUFDO1FBQ3JDLE1BQU0sSUFBSSxHQUFHLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQzVFLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxFQUFFO1lBQ2xDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsR0FBRyxTQUFTLElBQUksQ0FBQztTQUM1RDtRQUNELGlEQUFpRDtRQUNqRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUU7WUFDL0IsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFO2dCQUM3QixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztnQkFDN0QsSUFBSSxHQUFHLEVBQUU7b0JBQ0wsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUM7b0JBQ3BELEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQztpQkFDZjthQUNKO1NBQ0o7SUFDTCxDQUFDO0lBRU8sY0FBYyxDQUFDLE9BQU87UUFDMUIsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDMUYsT0FBTyxFQUFFLENBQUM7YUFDYjtTQUNKO2FBQ0ksSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO1lBQ2pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsSUFBSSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7WUFDckUsSUFBSSxLQUFLLEdBQUcsQ0FBQyxDQUFDLEVBQUU7Z0JBQ1osTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxzQkFBc0IsS0FBSyxJQUFJLENBQUMsQ0FBQztnQkFDdEYsT0FBTyxFQUFFLENBQUM7YUFDYjtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQztJQUVhLGtCQUFrQjs7WUFDNUIsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxJQUFJLEVBQUU7Z0JBQzNCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFDO2FBQ25GO1lBQ0QsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksQ0FBQztZQUMvQixNQUFNLFVBQVUsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO1lBQ3BDLFVBQVUsQ0FBQyxNQUFNLEdBQXNCLEVBQUUsQ0FBQztZQUMxQyxVQUFVLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztZQUM5QixVQUFVLENBQUMsZUFBZSxHQUFHLEVBQUUsQ0FBQztZQUNoQyxLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFO2dCQUNqQyxJQUFJLEdBQUcsQ0FBQyxXQUFXLElBQUksS0FBSyxJQUFJLEdBQUcsQ0FBQyxTQUFTLElBQUksSUFBSSxFQUFFO29CQUNuRCxJQUFJLEdBQUcsQ0FBQyxjQUFjLEVBQUU7d0JBQ3BCLElBQUksVUFBVSxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFOzRCQUNyRCxVQUFVLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7NEJBQzNDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUU7Z0NBQy9CLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRywyQkFBMkIsQ0FBQzs2QkFDOUQ7NEJBQ0QsVUFBVSxDQUFDLGlCQUFpQixJQUFJLEtBQUssR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEtBQUssSUFBSSxDQUFDO3lCQUM5RTtxQkFDSjtvQkFDRCxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztvQkFDeEUsSUFBSSxPQUFPLElBQUksSUFBSSxFQUFFO3dCQUNqQixVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE9BQU8sQ0FBQyxDQUFDO3FCQUN0Qzt5QkFDSTt3QkFDRCxJQUFJLEdBQUcsQ0FBQyxXQUFXLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxJQUFJLEdBQUcsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFOzRCQUNsRSxVQUFVLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxJQUFJLHFCQUFxQixpQ0FDeEQsR0FBRyxLQUNOLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSyxFQUNoQixRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssRUFDckQsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFDdkMsVUFBVSxFQUFFLElBQUksSUFDbEIsQ0FBQzs0QkFDSCxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbEIsVUFBVSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQ3RDLENBQUM7eUJBQ0w7NkJBQ0ksSUFBSSxHQUFHLENBQUMsUUFBUSxJQUFJLEtBQUssRUFBRTs0QkFDNUIsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2xCLElBQUksd0JBQXdCLENBQUM7Z0NBQ3pCLEtBQUssRUFBRSxHQUFHLENBQUMsS0FBSztnQ0FDaEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dDQUNoQixRQUFRLEVBQUUsS0FBSztnQ0FDZixPQUFPLEVBQUUsQ0FBQzs2QkFDYixDQUFDLENBQ0wsQ0FBQzt5QkFDTDs2QkFDSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksU0FBUyxFQUFFOzRCQUNoQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbEIsSUFBSSx3QkFBd0IsQ0FBQztnQ0FDekIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dDQUNoQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0NBQ2hCLFFBQVEsRUFBRSxTQUFTO2dDQUNuQixPQUFPLEVBQUUsQ0FBQzs2QkFDYixDQUFDLENBQ0wsQ0FBQzt5QkFDTDs2QkFDSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksTUFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksVUFBVSxFQUFFOzRCQUMzRCxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbEIsSUFBSSwwQkFBMEIsQ0FBQztnQ0FDM0IsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dDQUNoQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0NBQ2hCLFFBQVEsRUFBRSxRQUFRLENBQUMsZ0JBQWdCO2dDQUNuQyxPQUFPLEVBQUUsQ0FBQzs2QkFDYixDQUFDLENBQ0wsQ0FBQzt5QkFDTDs2QkFDSSxJQUFJLEdBQUcsQ0FBQyxRQUFRLElBQUksU0FBUyxFQUFFOzRCQUNoQyxVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbEIsSUFBSSx5QkFBeUIsQ0FBQztnQ0FDMUIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO2dDQUNoQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7Z0NBQ2hCLFVBQVUsRUFBRTtvQ0FDUixFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRTtvQ0FDNUIsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUU7aUNBQ25DO2dDQUNELFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSztnQ0FDeEIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7NkJBQzFDLENBQUMsQ0FDTCxDQUFDO3lCQUNMOzZCQUNJOzRCQUNELElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxHQUFHLENBQUMsUUFBUSxFQUFFO2dDQUMzQixVQUFVLENBQUMsTUFBTSxDQUFDLElBQUksQ0FDbEIsSUFBSSxpQkFBaUIsQ0FBQztvQ0FDbEIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxLQUFLO29DQUNoQixLQUFLLEVBQUUsR0FBRyxDQUFDLEtBQUs7b0NBQ2hCLFFBQVEsRUFBRSxRQUFRLENBQUMsT0FBTztvQ0FDMUIsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLEVBQUU7aUNBQzFDLENBQUMsQ0FDTCxDQUFDOzZCQUNMO3lCQUNKO3FCQUNKO2lCQUNKO2FBQ0o7WUFFRCxJQUFJLFVBQVUsQ0FBQyxlQUFlLEVBQUU7Z0JBQzVCLEtBQUssTUFBTSxLQUFLLElBQUksVUFBVSxDQUFDLGVBQWUsRUFBRTtvQkFDNUMsSUFBSSxVQUFVLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRTt3QkFDakQsVUFBVSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7d0JBQ3ZDLElBQUksQ0FBQyxVQUFVLENBQUMsaUJBQWlCLEVBQUU7NEJBQy9CLFVBQVUsQ0FBQyxpQkFBaUIsR0FBRywyQkFBMkIsQ0FBQzt5QkFDOUQ7d0JBQ0QsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxLQUFLLENBQUMsQ0FBQzt3QkFDbEUsSUFBSSxHQUFHLElBQUksSUFBSSxFQUFFOzRCQUNiLFVBQVUsQ0FBQyxpQkFBaUIsSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQzt5QkFDckQ7cUJBQ0o7aUJBQ0o7YUFDSjtZQUVELElBQUksVUFBVSxDQUFDLGlCQUFpQixFQUFFO2dCQUM5QixVQUFVLENBQUMsaUJBQWlCLEdBQUcsVUFBVSxDQUFDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxDQUFDLGlCQUFpQixDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQzthQUNySDtZQUNELElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO1lBQzdCLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7UUFDcEMsQ0FBQztLQUFBO0lBRUQsMEJBQTBCLENBQUMsb0JBQTRCO1FBQ25ELElBQUksSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLEVBQUU7WUFDMUIsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDcEQsTUFBTSxJQUFJLEdBQUcsV0FBVyxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzFDLElBQUksSUFBSSxJQUFJLElBQUksRUFBRTtnQkFDZCxPQUFPLEtBQUssQ0FBQzthQUNoQjtZQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1NBQzNCO1FBRUQsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsS0FBSyxNQUFNO2VBQ2xELENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxTQUFTLEVBQUUsQ0FBQyxXQUFXLENBQUMsV0FBVyxLQUFLLEtBQUssQ0FBQyxFQUNuSTtZQUNFLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFFRCxPQUFPLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxXQUFXLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsVUFBVSxJQUFJLG9CQUFvQixFQUFFLENBQUMsQ0FBQztJQUNsSixDQUFDO0lBRUQscUJBQXFCLENBQUMsS0FBYSxFQUFFLFVBQWlCO1FBQ2xELElBQUksSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztTQUM3RDtJQUNMLENBQUM7SUFFWSxzQkFBc0IsQ0FBQyxPQUF3QixFQUFFLE9BQU87O1lBQ2pFLElBQUksZUFBZSxHQUFHLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQztZQUNqRCxJQUFJLE9BQU8sQ0FBQyxjQUFjO21CQUNuQixPQUFPLENBQUMscUJBQXFCO21CQUM3QixPQUFPLENBQUMscUJBQXFCLENBQUMsa0JBQWtCLEVBQ3JEO2dCQUNFLGVBQWUsR0FBRyxNQUFNLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUNyRjtZQUNELElBQUksQ0FBQyxlQUFlLElBQUksZUFBZSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksQ0FBQyxFQUFFO2dCQUMzRCxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsa0RBQWtELENBQUMsQ0FBQzthQUNoRztZQUNELE9BQU8sZUFBZSxDQUFDO1FBQzNCLENBQUM7S0FBQTtJQUVLLHFCQUFxQixDQUFDLE9BQU87O1lBQy9CLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLENBQUM7WUFDbEMsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsZUFBZSxFQUFFO2dCQUNsQixPQUFPLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO2dCQUNuQyxPQUFPO2FBQ1Y7WUFDRCx3RkFBd0Y7WUFDeEYsSUFBSSxlQUFlLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ25DLGlEQUFpRDtnQkFDakQscUJBQXFCO2dCQUNyQixNQUFNLGdCQUFnQixHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsa0JBQWtCLENBQUM7b0JBQ3JFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO29CQUNuRixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztvQkFDN0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO2lCQUMxRCxDQUFDLENBQUMsQ0FBQztnQkFDSixJQUFJLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxFQUFFO29CQUMzQixPQUFPLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO29CQUNuQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsaUVBQWlFLENBQUMsQ0FBQztpQkFDL0c7Z0JBQ0QsSUFBSSxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUU7b0JBQ3ZCLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7b0JBQ25DLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO2lCQUM3RTtnQkFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUU7b0JBQ25DLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDcEQ7Z0JBQ0QsTUFBTSxTQUFTLEdBQUc7b0JBQ2QsRUFBRSxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFO29CQUM5Qix3QkFBd0IsRUFBRSxJQUFJO29CQUM5Qiw4Q0FBOEM7b0JBQzlDLGNBQWMsRUFBRSxlQUFlLENBQUMscUJBQXFCO29CQUNyRCxXQUFXLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVztvQkFDakQsTUFBTSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVU7b0JBQzNDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRTtvQkFDckIsR0FBRyxFQUFFLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQztvQkFDbkUsbUJBQW1CLEVBQUUsRUFBRTtpQkFDMUIsQ0FBQztnQkFFRiwyQ0FBMkM7Z0JBQzNDLE1BQU0sV0FBVyxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO2dCQUNsRSxJQUFJLFdBQVcsRUFBRTtvQkFDYixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDO29CQUN0RCxTQUFTLENBQUMsbUJBQW1CLEdBQUcsV0FBVyxDQUFDO2lCQUMvQztnQkFDRCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFO29CQUM3QixNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsQ0FBQztpQkFDekQ7Z0JBRUQsb0ZBQW9GO2dCQUNwRixJQUFJLGVBQWUsQ0FBQyxhQUFhO3VCQUMxQixlQUFlLENBQUMscUJBQXFCLEVBQzFDO29CQUNFLHdEQUF3RDtvQkFDeEQsaUZBQWlGO29CQUNqRixNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGtDQUFrQyxDQUFDLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDO29CQUN4SSxJQUFJLG1CQUFtQixJQUFJLElBQUksSUFBSSxtQkFBbUIsQ0FBQyxZQUFZLEVBQUU7d0JBQ2pFLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxHQUFHLG1CQUFtQixDQUFDLFlBQVksQ0FBQzt3QkFDMUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsbUJBQW1CLENBQUMsQ0FBQzt3QkFDbEUsT0FBTyxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQzt3QkFDbkMsT0FBTztxQkFDVjtpQkFDSjtnQkFDRCxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztnQkFDOUQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHO29CQUM1QixTQUFTLEVBQUUsU0FBUyxDQUFDLEdBQUc7b0JBQ3hCLElBQUksRUFBRSxTQUFTO2lCQUNsQixDQUFDO2dCQUNGLElBQUksQ0FBQyxhQUFhLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQzthQUMxQztpQkFDSTtnQkFDRCxJQUFJLGVBQWUsQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLENBQUMsRUFBRTtvQkFDdkMsTUFBTSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7b0JBQ2hFLE9BQU8sQ0FBQyxrQkFBa0IsR0FBRyxLQUFLLENBQUM7b0JBQ25DLE9BQU87aUJBQ1Y7Z0JBRUQsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxTQUFTLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztnQkFDbkUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDLFlBQVksQ0FBQztnQkFDNUUsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDO2dCQUM1QyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztnQkFDNUMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLEtBQUssQ0FBQzthQUN0QztRQUNMLENBQUM7S0FBQTtJQUVELGNBQWMsQ0FBQyxZQUFvQixFQUFFLE9BQVk7UUFDN0MsT0FBTyxrQkFBa0IsQ0FDckIsY0FBYyxDQUFDLFlBQVksRUFBRSxxQkFBcUIsRUFBRSxVQUFVLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNoRixZQUFZLEVBQUUsT0FBTyxDQUN4QixDQUFDO0lBQ04sQ0FBQztJQUVPLHNDQUFzQyxDQUMxQyxtQkFBd0IsRUFBRSxRQUFhLEVBQUUsZUFBbUMsRUFBRSxZQUFvQjtRQUVsRyxJQUFJLG1CQUFtQixJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUM3QyxtQkFBbUIsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNwRCxtQkFBbUIsQ0FBQyw2QkFBNkIsR0FBRyxJQUFJLENBQUM7UUFDekQsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLFlBQVksQ0FBQyxDQUFDO1FBQzdFLElBQUksUUFBUSxJQUFJLElBQUk7WUFBRSxPQUFPLElBQUksQ0FBQztRQUNsQyxNQUFNLFVBQVUsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLGFBQWEsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNuRixJQUFJLFVBQVUsSUFBSSxJQUFJO1lBQUUsT0FBTyxJQUFJLENBQUM7UUFDcEMsTUFBTSxVQUFVLEdBQUcsbUJBQW1CLENBQUMsVUFBVSxDQUFDO1FBQ2xELE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLElBQUksVUFBVSxDQUFDLEVBQUU7ZUFDMUUsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQzFCLENBQUM7UUFDRixJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzlCLE1BQU0sZUFBZSxHQUFvQixJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQy9ELElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxnQ0FBZ0MsQ0FBQyxlQUFlLENBQUMsQ0FBQztRQUN4RSxJQUFJLElBQUksR0FBRyxFQUFFLENBQUM7UUFDZCxJQUFJLE9BQU8sZUFBZSxDQUFDLFlBQVksSUFBSSxRQUFRLEVBQUU7WUFDakQsSUFBSSxHQUFHLFFBQVEsQ0FBUyxDQUFDLGVBQWUsQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDO1NBQzNEO2FBQ0k7WUFDRCxJQUFJLEdBQWMsQ0FBQyxlQUFlLENBQUMsWUFBWSxDQUFFLENBQUMsUUFBUSxDQUFDLENBQUM7U0FDL0Q7UUFDRCxJQUFJLEdBQUcsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLFVBQVUsSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUMzRCxtQkFBbUIsQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQztRQUNqRSxtQkFBbUIsQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDO1FBQzFDLG1CQUFtQixDQUFDLFVBQVUsR0FBRyxlQUFlLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztRQUN4RSxtQkFBbUIsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDO1FBQ2hELG1CQUFtQixDQUFDLE1BQU0sR0FBRyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3pDLG1CQUFtQixDQUFDLGdCQUFnQixHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQUM7UUFDdkQsbUJBQW1CLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM1QyxPQUFPLG1CQUFtQixDQUFDO0lBQy9CLENBQUM7SUFFYSxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsT0FBTyxFQUFFLGVBQW1DOztZQUNyRixJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsMkJBQTJCLEVBQUU7Z0JBQzFDLFNBQVMsQ0FBQyxtQkFBbUIsR0FBRyxNQUFNLElBQUksQ0FBQyxPQUFPLENBQUMsMkJBQTJCLENBQUMsT0FBTyxDQUFDLENBQUM7Z0JBQ3hGLFNBQVMsQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsc0NBQXNDLENBQ3ZFLFNBQVMsQ0FBQyxtQkFBbUIsRUFBRSxTQUFTLEVBQUUsZUFBZSxFQUFFLFNBQVMsQ0FBQywyQkFBMkIsQ0FBQyxDQUNwRyxDQUFDO2FBQ0w7WUFDRCxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDO2lCQUN0QyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQzFDLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbkIsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNaLENBQUM7S0FBQTtJQUVEOzs7O09BSUc7SUFDSCw2QkFBNkIsQ0FBQyxRQUFnQjtRQUMxQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztRQUM3QyxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3BFLENBQUM7SUFFWSxrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsT0FBTzs7WUFDeEMsSUFBSSxJQUFJLENBQUMscUJBQXFCO2dCQUFFLE9BQU87WUFDdkMsSUFBSSxDQUFDLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUMzRCxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFDbEMsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQy9CLENBQUM7S0FBQTtJQUVZLGdCQUFnQixDQUFDLE9BQU87O1lBQ2pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxJQUFJLENBQUM7WUFDbEMsSUFBSSx1QkFBdUIsR0FBRyxJQUFJLENBQUM7WUFDbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsaUJBQWlCLEVBQUU7Z0JBQ25GLHVCQUF1QixHQUFHLE1BQU0sSUFBSSxDQUFDLHVCQUF1QixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ3pFO2lCQUNJO2dCQUNELHVCQUF1QixHQUFHLE1BQU0sSUFBSSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQ25FO1lBQ0QsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztZQUNuQyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyx1QkFBdUIsQ0FBQyxFQUFFO2dCQUN6QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLDZCQUE2QixDQUFDLENBQUM7Z0JBQ2pFLE9BQU8sRUFBRSxDQUFDO2FBQ2I7WUFDRCxNQUFNLGNBQWMsR0FBRyx1QkFBdUIsQ0FBQztZQUMvQyx3RkFBd0Y7WUFDeEYsSUFBSSxPQUFPLENBQUMsa0JBQWtCLENBQUMsRUFBRTtnQkFDN0IsY0FBYyxDQUFDLE9BQU8sQ0FDbEI7b0JBQ0ksS0FBSyxFQUFFLGVBQWU7b0JBQ3RCLElBQUksRUFBRSxXQUFXO29CQUNqQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUM7aUJBQzlDLENBQ0osQ0FBQzthQUNMO1lBQ0QsT0FBTyxjQUFjLENBQUM7UUFDMUIsQ0FBQztLQUFBO0lBRUssaUJBQWlCLENBQUMsT0FBTzs7WUFDM0IsTUFBTSxlQUFlLEdBQUcsTUFBTSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNqRixJQUFJLENBQUMsZUFBZTtnQkFBRSxPQUFPO1lBQzdCLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxDQUFDO1FBQy9FLENBQUM7S0FBQTtJQUVLLHVCQUF1QixDQUFDLE9BQU87O1lBQ2pDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxFQUFFO2dCQUMxQixPQUFPLENBQUMsY0FBYyxHQUFHLENBQUMsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsaUJBQWlCLENBQ25FO29CQUNJLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxFQUFFLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDO29CQUNuRixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQztvQkFDN0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO2lCQUMxRCxDQUNKLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQ1IsT0FBTyxDQUFDLGVBQWUsR0FBRyxJQUFJLENBQUM7YUFDbEM7WUFDRCxPQUFPLEdBQUcsT0FBTyxDQUFDLGNBQWMsQ0FBQztZQUNqQyxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNWLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7Z0JBQ25DLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO2FBQ2hHO1lBQ0QsT0FBTyxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsWUFBWSxDQUFDO1lBRTlDLE1BQU0sK0JBQStCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsK0JBQStCLENBQUMsQ0FBQztZQUM1RixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUNwRCxNQUFNLE1BQU0sR0FBRyxNQUFNLCtCQUErQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7aUJBQ3JGLHFCQUFxQixDQUNsQixXQUFXLENBQUMsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FDL0UsQ0FBQztZQUNOLElBQUksTUFBTSxLQUFLLElBQUk7Z0JBQUUsT0FBTztZQUM1QixNQUFNLGVBQWUsR0FBRyxNQUFNLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxrQ0FBa0MsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFFckgsSUFBSSxlQUFlLElBQUksSUFBSTtnQkFBRSxPQUFPO1lBQ3BDLE1BQU0sZUFBZSxHQUFHLElBQUksZUFBZSxFQUFFLENBQUM7WUFDOUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGdDQUFnQyxDQUFDLGVBQWUsQ0FBQyxDQUFDO1lBQ3hFLE9BQU8sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUM7UUFDbEYsQ0FBQztLQUFBO0lBRWEsc0JBQXNCLENBQUMsZUFBZ0MsRUFBRSxPQUFPLEVBQUUsZUFBbUM7O1lBQy9HLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1lBQzNCLElBQUksQ0FBQyxjQUFjLEdBQUcsRUFBRSxDQUFDO1lBQ3pCLE1BQU0sY0FBYyxHQUFHLEVBQUUsQ0FBQztZQUMxQix5RkFBeUY7WUFDekYsSUFBSSxDQUFDLE9BQU8sQ0FBQyxjQUFjLEVBQUU7Z0JBQ3pCLE9BQU8sRUFBRSxDQUFDO2FBQ2I7aUJBQ0k7Z0JBQ0QsTUFBTSxtQkFBbUIsR0FBRyxlQUFlLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLGNBQWMsQ0FBQyxDQUFDO2dCQUNsRyxJQUFJLENBQUMsbUJBQW1CLEVBQUU7b0JBQ3RCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyxrQ0FBa0MsT0FBTyxDQUFDLGNBQWMsRUFBRSxDQUFDLENBQUM7aUJBQ3hHO2dCQUNELE1BQU0sT0FBTyxHQUFHLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUN0RSxNQUFNLFlBQVksR0FBRyxDQUFDLE1BQU0sZUFBZSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO2dCQUN6RixJQUFJLFlBQVksRUFBRTtvQkFDZCxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFO3dCQUM5QixNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsQ0FBQzt3QkFDdkQsSUFBSSxNQUFNLEVBQUU7NEJBQ1IsY0FBYyxDQUFDLElBQUksQ0FBQztnQ0FDaEIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO2dDQUN2QixVQUFVLEVBQUUsTUFBTSxDQUFDLElBQUk7Z0NBQ3ZCLElBQUksRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUM7Z0NBQ2xDLEtBQUssRUFBRSxNQUFNLENBQUMsSUFBSTtnQ0FDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sQ0FBQzs2QkFDcEYsQ0FBQyxDQUFDO3lCQUNOO29CQUNMLENBQUMsQ0FBQyxDQUFDO2lCQUNOO3FCQUNJO29CQUNELDhCQUE4QjtpQkFDakM7Z0JBQ0QsY0FBYyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQztnQkFDN0Msd0ZBQXdGO2dCQUN4RixNQUFNLHNCQUFzQixHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7Z0JBQzFFLHNCQUFzQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNoRSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEQsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNuQyxJQUFJLGlCQUFpQixHQUFHLEVBQUUsQ0FBQztnQkFDM0IsSUFBSSxNQUFNLEVBQUU7b0JBQ1IsaUJBQWlCLEdBQUcsTUFBTSxDQUFDLFdBQVcsRUFBRSxDQUFDO2lCQUM1QztnQkFFRCxNQUFNLHVCQUF1QixHQUFHLENBQUMsTUFBTSxzQkFBc0IsQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLFdBQVcsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzVJLElBQUksdUJBQXVCO3VCQUNwQix1QkFBdUIsQ0FBQyxVQUFVLElBQUksc0JBQXNCO3VCQUM1RCx1QkFBdUIsQ0FBQyxhQUFhLENBQUMsV0FBVyxFQUFFLElBQUksaUJBQWlCLEVBQzdFO29CQUNFLGNBQWMsQ0FBQyxJQUFJLENBQ2Y7d0JBQ0ksSUFBSSxFQUFFLGNBQWM7d0JBQ3BCLEtBQUssRUFBRSxTQUFTO3dCQUNoQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUM7cUJBQ2pFLENBQ0osQ0FBQztpQkFDTDtnQkFDRCxjQUFjLENBQUMsSUFBSSxDQUNmO29CQUNJLElBQUksRUFBRSxnQkFBZ0I7b0JBQ3RCLEtBQUssRUFBRSxZQUFZO29CQUNuQixPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUM7aUJBQ2pFLEVBQ0Q7b0JBQ0ksSUFBSSxFQUFFLGdCQUFnQjtvQkFDdEIsS0FBSyxFQUFFLHdCQUF3QixDQUFDLFdBQVc7b0JBQzNDLE9BQU8sRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsZUFBZSxFQUFFLE9BQU8sQ0FBQztpQkFDcEUsQ0FDSixDQUFDO2FBQ0w7WUFDRCxPQUFPLGNBQWMsQ0FBQztRQUMxQixDQUFDO0tBQUE7SUFFSyxjQUFjLENBQUMsT0FBTzs7WUFDeEIsTUFBTSxRQUFRLEdBQUcsQ0FBQyxNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQkFBaUIsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO2FBQzFELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUNULElBQUksUUFBUSxJQUFJLElBQUksRUFBRTtnQkFDbEIsT0FBTyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7YUFDeEY7WUFDRCxNQUFNLGFBQWEsR0FBUSxFQUFFLENBQUM7WUFDOUIsYUFBYSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUMsSUFBSSxDQUFDO1lBQ3pDLGFBQWEsQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1lBQzlCLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLGFBQWEsR0FBRyxhQUFhLENBQUM7WUFDeEQsSUFBSSxDQUFDLGVBQWUsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzdDLENBQUM7S0FBQTtJQUVELGdCQUFnQixDQUFDLGVBQWdDLEVBQUUsT0FBTztRQUN0RCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDLHFEQUFxRCxDQUFDO2FBQ25GLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRTtZQUNSLElBQUksQ0FBQyxHQUFHO2dCQUFFLE9BQU87WUFDakIsSUFBSSxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ2QsSUFBSSxPQUFPLGVBQWUsQ0FBQyxZQUFZLElBQUksUUFBUSxFQUFFO2dCQUNqRCxJQUFJLEdBQUcsT0FBTyxDQUFTLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxDQUFDLENBQUM7YUFDMUQ7aUJBQ0k7Z0JBQ0QsSUFBSSxHQUFjLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQzlEO1lBQ0QsZUFBZSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUMsZUFBZSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztpQkFDNUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsdUNBQXVDLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQy9FLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUMzQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFSyxtQkFBbUIsQ0FBQyxlQUFnQyxFQUFFLE9BQWU7O1lBQ3ZFLE1BQU0sZUFBZSxHQUFHLE1BQU0sSUFBSSxDQUFDLHNCQUFzQixDQUFDLGVBQWUsRUFBRSxPQUFPLENBQUMsQ0FBQztZQUNwRixJQUFJLENBQUMsZUFBZTtnQkFBRSxPQUFPO1lBQzdCLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO1lBQzNCLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDO1lBQ3BDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLGVBQWUsQ0FBQztZQUN6RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLGVBQWUsR0FBRyxlQUFlLENBQUM7WUFDakUsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDbEQsQ0FBQztLQUFBO0lBRUQseUJBQXlCO1FBQ3JCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVLLGVBQWUsQ0FBQyxlQUFnQyxFQUFFLG1CQUF3QixFQUFFLGNBQXdCOztZQUN0RyxJQUFJLGNBQWMsQ0FBQyxVQUFVLEVBQUU7Z0JBQzNCLElBQUksWUFBWSxHQUFHLGNBQWMsQ0FBQyxZQUFZLENBQUM7Z0JBQy9DLElBQUksQ0FBQyxZQUFZO29CQUFFLFlBQVksR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztnQkFDekQsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFlBQVksSUFBSSxjQUFjLENBQUMsVUFBVSxZQUFZLElBQUksQ0FBQyxXQUFXLENBQUMsRUFBRSxFQUFFLEVBQUUsUUFBUSxDQUFDLENBQUM7Z0JBQ3JHLE9BQU87YUFDVjtZQUNELElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFO2dCQUMzQixJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ25CLGVBQWUsQ0FBQyxXQUFXLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEVBQUUsY0FBYyxDQUFDLElBQUksQ0FBQztxQkFDeEYsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUU7b0JBQ3JELElBQUksQ0FBQywyQkFBMkIsRUFBRSxDQUFDO2dCQUN2QyxDQUFDLENBQUMsQ0FBQztxQkFDRixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztnQkFDdEMsT0FBTzthQUNWO1lBQ0QsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7WUFDOUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUMsSUFBSSxDQUFDO1lBQ3ZELElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxHQUFHLGVBQWUsQ0FBQztZQUN6RCxJQUFJLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxjQUFjLENBQUM7WUFDdkQsSUFBSSxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxRQUFRLEdBQUcsbUJBQW1CLENBQUM7UUFDbEUsQ0FBQztLQUFBO0lBRUssZ0JBQWdCLENBQUMsZUFBZ0MsRUFBRSxPQUFZOztZQUNqRSxJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1lBQzFDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sR0FBRyxlQUFlLENBQUM7WUFDbEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO1FBQzNDLENBQUM7S0FBQTtJQUVLLGFBQWEsQ0FBQyxPQUFPLEVBQUUsUUFBZ0I7O1lBQ3pDLE1BQU0sSUFBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQztpQkFDbEUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsMkJBQTJCLEVBQUUsQ0FBQyxDQUFDLEVBQUU7Z0JBQ25FLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO2dCQUN4QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDOUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDWixDQUFDO0tBQUE7SUFFRCwyQkFBMkI7UUFDdkIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7UUFDL0MsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2RCxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVNLFFBQVEsQ0FBQyxPQUFZO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFTSxnQkFBZ0I7UUFDbkIsSUFBSSxDQUFDLGtCQUFrQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxPQUFPO1FBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztRQUN4QyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0lBQy9DLENBQUM7SUFFSyxlQUFlOztZQUNqQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsRUFBRSxFQUFFO2dCQUNyQyxPQUFPLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMscURBQXFELENBQUMsQ0FBQzthQUNuRztZQUNELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUM7WUFDcEMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUN0QyxDQUFDO0tBQUE7SUFFSyx1QkFBdUI7O1lBQ3pCLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ3JELENBQUM7S0FBQTtJQUVNLHVCQUF1QjtRQUMxQixLQUFLLE1BQU0sSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxFQUFFO1lBQ3pDLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDNUIsT0FBTyxJQUFJLENBQUM7YUFDZjtTQUNKO1FBQ0QsT0FBTyxLQUFLLENBQUM7SUFDakIsQ0FBQztJQUVNLGVBQWUsQ0FBQyxPQUFPO1FBQzFCLElBQUksT0FBTyxDQUFDLGlCQUFpQixFQUFFO1lBQzNCLE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsT0FBTyxJQUFJLENBQUM7U0FDZjtRQUNELElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksT0FBTyxDQUFDLGdCQUFnQixDQUFDLElBQUksR0FBRyxFQUFFO1lBQy9ELE9BQU8sSUFBSSxDQUFDO1NBQ2Y7UUFDRCxPQUFPLEtBQUssQ0FBQztJQUNqQixDQUFDO0lBRVksc0JBQXNCOztZQUMvQixJQUFJLElBQUksQ0FBQyxrQkFBa0I7Z0JBQUUsT0FBTztZQUNwQyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO1FBQ3hDLENBQUM7S0FBQTtJQUVNLG9CQUFvQjtRQUN2QixJQUFJLENBQUMscUJBQXFCLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLENBQUM7SUFFTSx1QkFBdUI7UUFDMUIsSUFBSSxDQUFDLG9CQUFvQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDbEQsQ0FBQztJQUVNLGVBQWU7UUFDbEIsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7SUFDcEQsQ0FBQztJQUVLLGdCQUFnQjs7WUFDbEIsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7UUFDL0MsQ0FBQztLQUFBO0lBRU0sd0JBQXdCO1FBQzNCLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxZQUFZLEdBQUcsSUFBSSxDQUFDO0lBQ2pELENBQUM7SUFFTSxzQkFBc0IsQ0FBQyxLQUFLO1FBQy9CLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUNyQyxJQUFJLENBQUMsY0FBYyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxxQkFBcUIsR0FBRyxLQUFLLENBQUM7UUFDbkMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBQ25CLENBQUM7SUFFTSx5QkFBeUIsQ0FBQyxHQUFHO1FBQ2hDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1FBQy9DLElBQUksQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVNLHdCQUF3QixDQUFDLEdBQUc7UUFDL0IsSUFBSSxDQUFDLHFCQUFxQixHQUFHLEtBQUssQ0FBQztRQUNuQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDbkIsQ0FBQztJQUVELFFBQVEsQ0FBQyxLQUFLO1FBQ1YsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsQ0FBQyx5RUFBeUUsQ0FBQyxDQUFDO0lBQ2pILENBQUM7SUFFRCx5QkFBeUI7SUFDekIsQ0FBQzs7O1lBbmpHSixTQUFTOzs7WUEzRk4sUUFBUTs7Ozt3QkE2RlAsU0FBUyxTQUFDLFdBQVc7cUJBR3JCLFNBQVMsU0FBQyxLQUFLLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFO3dCQUtsQyxTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtpQ0FDdkMsU0FBUyxTQUFDLG9CQUFvQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtnQ0FDaEQsU0FBUyxTQUFDLG1CQUFtQixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtrQ0FDL0MsU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7cUNBQ3pDLFNBQVMsU0FBQyxhQUFhLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3lDQUN6QyxTQUFTLFNBQUMsb0JBQW9CLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3dCQUNoRCxTQUFTLFNBQUMsV0FBVyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTswQkFDdkMsU0FBUyxTQUFDLGFBQWEsRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUU7aUNBQzFDLFlBQVksU0FBQyxZQUFZLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzJCQUMzQyxZQUFZLFNBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtxQkFDN0MsWUFBWSxTQUFDLFFBQVEsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7MkJBQ3ZDLFlBQVksU0FBQyxjQUFjLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFOzJCQUM3QyxZQUFZLFNBQUMsY0FBYyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtzQkFDN0MsWUFBWSxTQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7cUJBQ3hDLFlBQVksU0FBQyxRQUFRLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO3VCQUN2QyxZQUFZLFNBQUMsVUFBVSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTt1QkFDekMsWUFBWSxTQUFDLFVBQVUsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7OEJBQ3pDLFlBQVksU0FBQyxpQkFBaUIsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7dUJBQ2hELGVBQWUsU0FBQyxXQUFXO29CQUUzQixLQUFLO3NCQUNMLEtBQUs7dUJBQ0wsS0FBSzttQkFDTCxLQUFLOzRCQUdMLEtBQUs7K0JBQ0wsS0FBSztrQ0FHTCxLQUFLOzRCQUVMLEtBQUs7NEJBU0wsS0FBSzsrQkFDTCxLQUFLO2lDQUNMLEtBQUs7eUJBQ0wsS0FBSzttQ0FDTCxLQUFLOzBCQUNMLEtBQUs7NEJBQ0wsS0FBSzsrQkFDTCxLQUFLOzhCQU1MLEtBQUs7bUNBQ0wsS0FBSzs4QkFDTCxLQUFLO3dCQUNMLEtBQUs7d0JBQ0wsS0FBSzsyQkFDTCxLQUFLO3lCQUNMLEtBQUs7NkJBQ0wsS0FBSzt5QkFDTCxLQUFLO3FDQUNMLEtBQUs7MkJBQ0wsS0FBSztxQkFDTCxLQUFLOzRCQUNMLEtBQUs7cUJBQ0wsS0FBSzsrQkFDTCxLQUFLO3dCQUNMLEtBQUs7a0NBQ0wsS0FBSztpQ0FDTCxLQUFLOzBCQUNMLEtBQUs7eUJBQ0wsS0FBSztvQkFHTCxLQUFLO3lCQU1MLEtBQUs7NEJBV0wsS0FBSzt5QkFhTCxLQUFLOzZCQVlMLEtBQUs7MEJBRUwsTUFBTTswQkFDTixNQUFNO3lCQUNOLE1BQU07dUJBQ04sTUFBTTt5QkFDTixNQUFNO3NCQUNOLE1BQU07NEJBQ04sTUFBTTtvQkFDTixNQUFNO3FCQUNOLE1BQU07eUJBQ04sTUFBTTtpQ0FDTixNQUFNO3FCQUNOLE1BQU07dUJBQ04sTUFBTTsrQkFDTixNQUFNO2dDQUNOLE1BQU07NkJBQ04sTUFBTTtnQ0FDTixNQUFNO2tDQUNOLE1BQU07bUNBQ04sTUFBTTtzQ0FDTixNQUFNO3dDQUNOLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEYXRlUGlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XHJcbmltcG9ydCB7XHJcbiAgICBBZnRlckNvbnRlbnRJbml0LFxyXG4gICAgQ29udGVudENoaWxkLFxyXG4gICAgQ29udGVudENoaWxkcmVuLFxyXG4gICAgRGlyZWN0aXZlLFxyXG4gICAgRWxlbWVudFJlZixcclxuICAgIEV2ZW50RW1pdHRlcixcclxuICAgIEluamVjdG9yLFxyXG4gICAgSW5wdXQsXHJcbiAgICBPbkRlc3Ryb3ksXHJcbiAgICBPbkluaXQsXHJcbiAgICBPdXRwdXQsXHJcbiAgICBQaXBlVHJhbnNmb3JtLFxyXG4gICAgUXVlcnlMaXN0LFxyXG4gICAgVGVtcGxhdGVSZWYsXHJcbiAgICBWaWV3Q2hpbGRcclxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgRG9tU2FuaXRpemVyIH0gZnJvbSAnQGFuZ3VsYXIvcGxhdGZvcm0tYnJvd3Nlcic7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgTWVudUl0ZW0gfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy9hcGknO1xyXG5pbXBvcnQgeyBDb250ZXh0TWVudSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL2NvbnRleHRtZW51JztcclxuaW1wb3J0IHsgVGFibGUgfSBmcm9tICd0bi1jdXN0b20tcHJpbWVuZy90YWJsZSc7XHJcbmltcG9ydCB7IFRyZWVUYWJsZSB9IGZyb20gJ3RuLWN1c3RvbS1wcmltZW5nL3RyZWV0YWJsZSc7XHJcblxyXG5pbXBvcnQgeyBDb21wb25lbnRCYXNlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9iYXNlL2NvbXBvbmVudC1iYXNlJztcclxuaW1wb3J0IHsgSUxpc3RDb21wb25lbnQgfSBmcm9tICcuLi8uLi9jbGFzc2VzL2Jhc2UvaS1saXN0LWNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEJ1dHRvblRleHRBY3Rpb25Db25nVmllYywgRm9ybVN0YXRlIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9jb25zdGFudHMnO1xyXG5pbXBvcnQgeyBFbnZpcm9ubWVudFNjaGVtYSwgaXNBcnJheSwgaXNMaXRlcmFsT2JqZWN0IH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy9lbnZpcm9ubWVudC1zY2hlbWEnO1xyXG5pbXBvcnQge1xyXG4gICAgQ2hlY2tCb3hMaXN0Q29udHJvbFNjaGVtYSxcclxuICAgIENvbHVtblNjaGVtYUJhc2UsXHJcbiAgICBDb2x1bW5TZXR0aW5nLFxyXG4gICAgQ29udHJvbFR5cGUsXHJcbiAgICBDcnVkTGlzdENvbmZpZyxcclxuICAgIENydWRMaXN0RGF0YSxcclxuICAgIENydWRMaXN0U2V0dGluZyxcclxuICAgIERhdGFUeXBlLFxyXG4gICAgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEsXHJcbiAgICBEaWFsb2dNb2RlbCxcclxuICAgIERyb3Bkb3duQ29udHJvbFNjaGVtYSxcclxuICAgIEV4cG9ydEl0ZW1zTW9kZSxcclxuICAgIEZpbGVVcGxvYWRNb2RlLFxyXG4gICAgRm9ybUNvbnRyb2xCYXNlLFxyXG4gICAgSGVpZ2h0VHlwZSxcclxuICAgIE51bWJlclJhbmdlQ29udHJvbFNjaGVtYSxcclxuICAgIE9wZXJhdG9yLFxyXG4gICAgUG9wdXBTaXplLFxyXG4gICAgUmVmRmllbGQsXHJcbiAgICBUZXh0QWxpZ24sXHJcbiAgICBUZXh0Q29udHJvbFNjaGVtYVxyXG59IGZyb20gJy4uLy4uL2NsYXNzZXMvZm9ybS1zY2hlbWEnO1xyXG5pbXBvcnQgeyBUbk1lbnVJdGVtIH0gZnJvbSAnLi4vLi4vY2xhc3Nlcy90bi1tZW51LWl0ZW0nO1xyXG5pbXBvcnQgeyBBY3Rpb24sIFdvcmtmbG93U2V0dGluZ05ldyB9IGZyb20gJy4uLy4uL2NsYXNzZXMvd29ya2Zsb3ctc2NoZW1hJztcclxuaW1wb3J0IHsgZ2V0UmVnZXhSZXN1bHQsIHJlbmRlclRleHRUZW1wbGF0ZSB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvY3J1ZC91dGlscyc7XHJcbmltcG9ydCB7IFNlYXJjaEluZm8gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL21vZGVscy9zZWFyY2gnO1xyXG5pbXBvcnQgeyBFbnVtU3RhdGVUeXBlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdGF0ZW1hY2hpbmVzL21vZGVscy9lbnVtcyc7XHJcbmltcG9ydCB7IFN0YXRlTWFjaGluZXNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy9zdGF0ZW1hY2hpbmVzL3NlcnZpY2VzL3N0YXRlbWFjaGluZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IFRuQ3VzdG9tU2Nyb2xsYmFyQ29tcG9uZW50IH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy90bi1jdXN0b20tc2Nyb2xsYmFyL3RuLWN1c3RvbS1zY3JvbGxiYXIuY29tcG9uZW50JztcclxuaW1wb3J0IHsgRmllbGREZWZpbmVIYXNUYXNrLCBNYUFjdGlvbkJhdERhdVF1eVRyaW5oIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9tb2RlbHMvY29uc3QnO1xyXG5pbXBvcnQgeyBXZkFjdGlvbiwgV2ZJdGVtIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9tb2RlbHMvbW9kZWxzJztcclxuaW1wb3J0IHsgQ2FuQm9fSG9Tb1NlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2NhbmJvLWhvc28uc2VydmljZSc7XHJcbmltcG9ydCB7IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3NlcnZpY2VzL2VudGl0eS13b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy93b3JrZmxvdy1oaXN0b3J5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29tcG9uZW50cy93b3JrZmxvdy9zZXJ2aWNlcy93b3JrZmxvdy1wZXJtaXNzaW9uLWRldGFpbC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgZGF0YVNvdXJjZUljb24gfSBmcm9tICcuLi8uLi9jb21wb25lbnRzL3dvcmtmbG93L3dvcmtmbG93LXNldHRpbmcvd29ya2Zsb3ctc2V0dGluZy5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBCdXR0b25QZXJtaXNzaW9uIH0gZnJvbSAnLi4vLi4vY29uZmlncy9jb21wb25lbnQtY29udGFudHMnO1xyXG5pbXBvcnQgeyBDb21DdHhDb25zdGFudHMgfSBmcm9tICcuLi8uLi9jb25maWdzL2NvbXBvbmVudC1jb250ZXh0LmNvbnN0YW50JztcclxuaW1wb3J0IHsgQ29uZ1ZpZWNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vY29uZ3ZpZWMvY29uZ3ZpZWMvc2VydmljZXMvY29uZ3ZpZWMuc2VydmljZSc7XHJcbmltcG9ydCB7IERtTG9haUNvbmdWaWVjU2VydmljZSB9IGZyb20gJy4uLy4uL2Nvbmd2aWVjL2RtLWxvYWktY29uZ3ZpZWMvc2VydmljZXMvZG0tbG9haS1jb25ndmllYy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtLCBSZWdleFNwbGl0RmllbGRCeUl0ZW0gfSBmcm9tICcuLi8uLi9jb25zdC9jb21tb24nO1xyXG5pbXBvcnQge1xyXG4gICAgRmllbGRDaGVja2JveENydWRMaXN0LFxyXG4gICAgRmllbGRDb2xFeHBhbmRDcnVkTGlzdCxcclxuICAgIEZpZWxkQ29sUmVvcmRlckNydWRMaXN0LFxyXG4gICAgRmllbGRGdW5jdGlvbkNydWRMaXN0LFxyXG4gICAgRmllbGRJbmRleEluRGF0YVNvdXJjZSxcclxuICAgIEZpZWxkT3JkZXJDcnVkTGlzdFxyXG59IGZyb20gJy4uLy4uL2VudW1zL2NvbW1vbic7XHJcbmltcG9ydCB7IEZpbHRlciwgR3JpZEluZm8sIFNvcnQgfSBmcm9tICcuLi8uLi9tb2RlbHMvZ3JpZC1pbmZvJztcclxuaW1wb3J0IHsgVG5Vc2VyIH0gZnJvbSAnLi4vLi4vbW9kZWxzL3RuLXVzZXInO1xyXG5pbXBvcnQgeyBLZXlWYWx1ZVR5cGUgfSBmcm9tICcuLi8uLi9tb2RlbHMvdHlwZXMnO1xyXG5pbXBvcnQgeyBDb21tb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29tbW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDcnVkU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NydWQuc2VydmljZSc7XHJcbmltcG9ydCB7IEN1c3RvbVJvdXRlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9jdXN0b20tcm91dGVyLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBFbnRpdHlNZXRhZGF0YVNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9lbnRpdHktbWV0YWRhdGEuc2VydmljZSc7XHJcbmltcG9ydCB7IEV4cG9ydFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9leHBvcnQuc2VydmljZSc7XHJcbmltcG9ydCB7IExvZ2dlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9sb2dnZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IE1vZHVsZUNvbmZpZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9tb2R1bGUtY29uZmlnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBOb3RpZmllclNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9ub3RpZmllci5zZXJ2aWNlJztcclxuaW1wb3J0IHsgUGVybWlzc2lvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9wZXJtaXNzaW9uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3VzZXIuc2VydmljZSc7XHJcbmltcG9ydCB7IG11bHRpcGxlU29ydCB9IGZyb20gJy4uLy4uL3V0aWxzL2FycmF5JztcclxuXHJcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby11bnVzZWQtdmFyc1xyXG5kZWNsYXJlIGxldCAkOiBhbnk7XHJcblxyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIExpc3RDb21wb25lbnRCYXNlIGV4dGVuZHMgQ29tcG9uZW50QmFzZSBpbXBsZW1lbnRzIElMaXN0Q29tcG9uZW50LCBPbkluaXQsIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBAVmlld0NoaWxkKCd0cmVldGFibGUnKSB0cmVlVGFibGU6IFRyZWVUYWJsZTtcclxuICAgIHRhYmxlOiBUYWJsZTtcclxuXHJcbiAgICBAVmlld0NoaWxkKFRhYmxlLCB7IHN0YXRpYzogZmFsc2UgfSkgc2V0IF90YWJsZSh2OiBUYWJsZSkge1xyXG4gICAgICAgIHRoaXMudGFibGUgPSB2O1xyXG4gICAgICAgIHRoaXMudGFibGVSZWFkeS5uZXh0KHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicsIHsgc3RhdGljOiB0cnVlIH0pIGNvbnRhaW5lcjogRWxlbWVudFJlZjxhbnk+O1xyXG4gICAgQFZpZXdDaGlsZCgnaWNvblRvZ2dsZVJvd0dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgaWNvblRvZ2dsZVJvd0dyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQFZpZXdDaGlsZCgnaWNvblRvZ2dsZVJvd0RhdGEnLCB7IHN0YXRpYzogdHJ1ZSB9KSBpY29uVG9nZ2xlUm93RGF0YTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoJ3RyYW5nVGhhaVY1JywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGVUcmFuZ1RoYWlWNTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoJ3ZpZXdIaXN0b3J5JywgeyBzdGF0aWM6IHRydWUgfSkgdGVtcGxhdGVDb2xWaWV3SGlzdG9yeTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBWaWV3Q2hpbGQoJ3dvcmtmbG93Q29yZVN0YXR1cycsIHsgc3RhdGljOiB0cnVlIH0pIHRlbXBsYXRlV29ya2Zsb3dDb3JlU3RhdHVzOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQFZpZXdDaGlsZCgnc2Nyb2xsYmFyJywgeyBzdGF0aWM6IHRydWUgfSkgc2Nyb2xsYmFyOiBUbkN1c3RvbVNjcm9sbGJhckNvbXBvbmVudDtcclxuICAgIEBWaWV3Q2hpbGQoJ2NvbnRleHRNZW51JywgeyBzdGF0aWM6IGZhbHNlIH0pIGNvbnRleHRNZW51OiBDb250ZXh0TWVudTtcclxuICAgIEBDb250ZW50Q2hpbGQoJ3BhZ2luYXRpb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSBwYWdpbmF0aW9uVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdzZWFyY2hDdXN0b20nLCB7IHN0YXRpYzogdHJ1ZSB9KSBzZWFyY2hDdXN0b206IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBoZWFkZXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdoZWFkZXJGaWx0ZXInLCB7IHN0YXRpYzogdHJ1ZSB9KSBoZWFkZXJGaWx0ZXI6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdyb3dFeHBhbnNpb24nLCB7IHN0YXRpYzogdHJ1ZSB9KSByb3dFeHBhbnNpb246IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdzdW1tYXJ5JywgeyBzdGF0aWM6IHRydWUgfSkgc3VtbWFyeTogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2Zvb3RlcicsIHsgc3RhdGljOiB0cnVlIH0pIGZvb3RlcjogVGVtcGxhdGVSZWY8YW55PjtcclxuICAgIEBDb250ZW50Q2hpbGQoJ2NvbGdyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgY29sZ3JvdXA6IFRlbXBsYXRlUmVmPGFueT47XHJcbiAgICBAQ29udGVudENoaWxkKCdyb3dHcm91cCcsIHsgc3RhdGljOiB0cnVlIH0pIHJvd0dyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZCgnY29udGVudFJvd0dyb3VwJywgeyBzdGF0aWM6IHRydWUgfSkgY29udGVudFJvd0dyb3VwOiBUZW1wbGF0ZVJlZjxhbnk+O1xyXG4gICAgQENvbnRlbnRDaGlsZHJlbihUZW1wbGF0ZVJlZikgY2hpbGRyZW46IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuXHJcbiAgICBASW5wdXQoKSBtb2RlbDogQ3J1ZExpc3REYXRhID0gbmV3IENydWRMaXN0RGF0YSgpO1xyXG4gICAgQElucHV0KCkgc2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nID0gbmV3IENydWRMaXN0U2V0dGluZygpO1xyXG4gICAgQElucHV0KCkgZmlsZU5hbWUgPSAnZXhwb3J0JztcclxuICAgIEBJbnB1dCgpIGxhenkgPSB0cnVlOyAvLyDEkeG6t3QgZ2nDoSB0cuG7iyBuw6B5IGLhurFuZyBmYWxzZSB0aMOsIHPhur0gZmlsdGVyIMSRYyBjbGllbnRcclxuXHJcbiAgICAvLyBkdW5nIGRvbiB2aSByZW0gZGUgd2lkdGgga2hvbmcgYmkgYW5oIGh1b25nIGJvaSBmb250IHNpemUgY3VhIHRoLCBubyBzZSBsYXkgdGhlbyBmb250IHNpemUgY3VhIHRoZSBodG1sXHJcbiAgICBASW5wdXQoKSB3aWR0aENoZWNrYm94ID0gJzIuNXJlbSc7XHJcbiAgICBASW5wdXQoKSB3aWR0aE9yZGVyQ29sdW1uID0gJzMuNXJlbSc7XHJcbiAgICBfZGVmYXVsdFdpdGhGdW5jdGlvbkNvbHVtbiA9IDgxO1xyXG4gICAgX3dpZHRoRnVuY3Rpb25Db2x1bW4gPSBgJHt0aGlzLl9kZWZhdWx0V2l0aEZ1bmN0aW9uQ29sdW1ufXB4YDtcclxuICAgIEBJbnB1dCgpIHdpZHRoRnVuY3Rpb25Db2x1bW46IHN0cmluZztcclxuICAgIF9jbGFzc1Jvd0dyb3VwID0gJ25vLXBhZGRpbmcnO1xyXG4gICAgQElucHV0KCkgc2V0IGNsYXNzUm93R3JvdXAodmFsdWU6IHN0cmluZykge1xyXG4gICAgICAgIGlmICh2YWx1ZSkge1xyXG4gICAgICAgICAgICB0aGlzLl9jbGFzc1Jvd0dyb3VwID0gYG5vLXBhZGRpbmcgJHt2YWx1ZX1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fY2xhc3NSb3dHcm91cCA9IGBuby1wYWRkaW5nYDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgQElucHV0KCkgc2hvd1Njcm9sbEJhciA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBwVGFibGVTY3JvbGxhYmxlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBwVGFibGVTY3JvbGxIZWlnaHQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBASW5wdXQoKSByZXNwb25zaXZlID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGVuYWJsZUJhc2ljQXV0aG9yaXplOiBib29sZWFuID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBzZXJ2aWNlQ29kZTogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgYXV0aG9yaXplUGF0aDogc3RyaW5nO1xyXG4gICAgQElucHV0KCkgYXV0aG9yaXplQnV0dG9uczogc3RyaW5nW10gPSBbXHJcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5BREQsXHJcbiAgICAgICAgQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FRElULFxyXG4gICAgICAgIENvbUN0eENvbnN0YW50cy5DT01NT04uREVMRVRFLFxyXG4gICAgICAgIENvbUN0eENvbnN0YW50cy5DT01NT04uREVMRVRFX01VTFRJUExFXHJcbiAgICBdO1xyXG4gICAgQElucHV0KCkgY29uZmlnU2Nyb2xsQmFyOiBhbnkgPSB7IHN1cHByZXNzU2Nyb2xsWDogdHJ1ZSwgc3VwcHJlc3NTY3JvbGxZOiBmYWxzZSB9O1xyXG4gICAgQElucHV0KCkgc2hvd1Njcm9sbEhvcml6b250YWwgPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIHNob3dNZW51QnV0dG9ucyA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBzaG93UmFkaW8gPSBmYWxzZTtcclxuICAgIEBJbnB1dCgpIGhpZGRlbkFkZCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgaGlkZGVuRGVsZXRlID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBoaWRkZW5FZGl0ID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSBoaWRkZW5Db3B5TGluayA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgaGlkZGVuVmlldyA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgZGlzYWJsZUtleXByZXNzQ29udHJvbCA9IGZhbHNlO1xyXG4gICAgQElucHV0KCkgY2FuY2VsQnViYmxlID0gdHJ1ZTtcclxuICAgIEBJbnB1dCgpIGVzY2FwZSA9IHRydWU7XHJcbiAgICBASW5wdXQoKSBzZWxlY3Rpb25Nb2RlOiBzdHJpbmc7XHJcbiAgICBASW5wdXQoKSBjb25maWc6IENydWRMaXN0Q29uZmlnID0gbmV3IENydWRMaXN0Q29uZmlnKCk7XHJcbiAgICBASW5wdXQoKSBlbmFibGVSZW9yZGVyUm93ID0gZmFsc2U7XHJcbiAgICBASW5wdXQoKSB0ZW1wbGF0ZXM6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICAgIEBJbnB1dCgpIHRlbXBsYXRlc0Zyb21QYXJlbnQ6IFF1ZXJ5TGlzdDxUZW1wbGF0ZVJlZjxhbnk+PjtcclxuICAgIEBJbnB1dCgpIGNoaWxkcmVuRnJvbVBhcmVudDogUXVlcnlMaXN0PFRlbXBsYXRlUmVmPGFueT4+O1xyXG4gICAgQElucHV0KCkgbWVudUJ1dHRvbnM6IChyb3dEYXRhKSA9PiBUbk1lbnVJdGVtW10gfCBQcm9taXNlPFRuTWVudUl0ZW1bXT47XHJcbiAgICBASW5wdXQoKSBmaWVsZE9yZGVyOiBzdHJpbmcgPSBGaWVsZE9yZGVyQ3J1ZExpc3Q7XHJcblxyXG4gICAgX3N0eWxlOiBhbnkgPSB7fTtcclxuICAgIEBJbnB1dCgpIHNldCBzdHlsZSh2YWx1ZTogYW55KSB7XHJcbiAgICAgICAgaWYgKHZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3N0eWxlID0gdmFsdWU7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIEBJbnB1dCgpIHNldCB0YWJsZUNsYXNzKHZhbHVlOiBzdHJpbmcpIHtcclxuICAgICAgICB0aGlzLl90YWJsZUNsYXNzID0gdGhpcy5fZGVmYXVsdFRhYmxlQ2xhc3M7XHJcbiAgICAgICAgaWYgKHZhbHVlICE9IG51bGwgJiYgdmFsdWUudHJpbSgpICE9ICcnKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gYCAke3ZhbHVlfWA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldHVwVGFibGVDbGFzcygpO1xyXG4gICAgfVxyXG5cclxuICAgIF9yYXdEYXRhU291cmNlOiBhbnlbXSA9IFtdO1xyXG5cclxuICAgIEBJbnB1dCgpIHNldCBhbGxEYXRhU291cmNlKHZhbHVlOiBhbnkpIHtcclxuICAgICAgICBsZXQgZGF0YVNvdXJjZSA9IFtdLFxyXG4gICAgICAgICAgICByYXdEYXRhU291cmNlID0gW107XHJcbiAgICAgICAgaWYgKHZhbHVlICYmIHZhbHVlLnJhdykge1xyXG4gICAgICAgICAgICBkYXRhU291cmNlID0gdmFsdWUuZGF0YTtcclxuICAgICAgICAgICAgcmF3RGF0YVNvdXJjZSA9IHZhbHVlLnJhdztcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzRGF0YVNvdXJjZShyYXdEYXRhU291cmNlKTtcclxuICAgICAgICB0aGlzLl9kYXRhU291cmNlID0gZGF0YVNvdXJjZTtcclxuICAgICAgICB0aGlzLl9yYXdEYXRhU291cmNlID0gcmF3RGF0YVNvdXJjZTtcclxuICAgIH1cclxuXHJcbiAgICBfZGF0YVNvdXJjZTogYW55W10gPSBbXTtcclxuICAgIEBJbnB1dCgpIHNldCBkYXRhU291cmNlKHZhbHVlOiBhbnlbXSkge1xyXG4gICAgICAgIGlmICh0aGlzLmlzVHJlZVRhYmxlKSByZXR1cm47XHJcbiAgICAgICAgbGV0IGRhdGFTb3VyY2UgPSBbXTtcclxuICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgZGF0YVNvdXJjZSA9IHZhbHVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnByb2Nlc3NEYXRhU291cmNlKGRhdGFTb3VyY2UpO1xyXG4gICAgICAgIHRoaXMuX2RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UgPSBkYXRhU291cmNlO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIGZpbHRlciBt4bq3YyDEkeG7i25oIGNobyBkZXYgY29kZVxyXG4gICAgQElucHV0KCkgZmlsdGVyX2RlZmF1bHQ6IEZpbHRlcltdID0gW107XHJcblxyXG4gICAgQE91dHB1dCgpIG9uUm93U2VsZWN0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25SZW9yZGVyZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvbkNoZWNrQWxsID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25SZWxvYWQgPSBuZXcgRXZlbnRFbWl0dGVyPEdyaWRJbmZvPigpO1xyXG4gICAgQE91dHB1dCgpIG9uUmVsb2FkZWQgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJlYWR5ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Db250ZW50SW5pdCA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQWRkID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25FZGl0ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25Db3B5TGluayA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ29weUxpbmtNdWx0aXBsZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uVmlldyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uRGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25EZWxldGVNdWx0aXBsZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uSW52YWxpZFdvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgb25BZnRlclRyaW5oS3kgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblN0YXJ0ZWRXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uUHJvY2Vzc2VkV29ya2Zsb3cgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcclxuICAgIEBPdXRwdXQoKSBvblJvbGxiYWNrZWRXb3JrZmxvdyA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgQE91dHB1dCgpIG9uQ2hhbmdlZFN0YXR1c1dvcmtmbG93ID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KCk7XHJcbiAgICBAT3V0cHV0KCkgd2lkdGhGdW5jdGlvbkNvbHVtbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xyXG4gICAgcHJpdmF0ZSBpc1RyZWVUYWJsZSA9IGZhbHNlO1xyXG4gICAgcHJpdmF0ZSB0YWJsZVJlYWR5ID0gbmV3IFN1YmplY3Q8YW55PigpO1xyXG4gICAgdGFibGVSZWFkeVNvdXJjZSQgPSB0aGlzLnRhYmxlUmVhZHkuYXNPYnNlcnZhYmxlKCk7XHJcbiAgICBmaWVsZENoZWNrYm94ID0gRmllbGRDaGVja2JveENydWRMaXN0O1xyXG4gICAgZmllbGRDb2xFeHBhbmQgPSBGaWVsZENvbEV4cGFuZENydWRMaXN0O1xyXG4gICAgZmllbGRDb2xSZW9yZGVyID0gRmllbGRDb2xSZW9yZGVyQ3J1ZExpc3Q7XHJcbiAgICBmaWVsZEZ1bmN0aW9uID0gRmllbGRGdW5jdGlvbkNydWRMaXN0O1xyXG4gICAgZmllbGRJbmRleEluRGF0YVNvdXJjZSA9IEZpZWxkSW5kZXhJbkRhdGFTb3VyY2U7XHJcblxyXG4gICAgY2hlY2tlZEFsbCA9IG51bGw7XHJcbiAgICByb3dHcm91cENoZWNrZWQ6IGFueSA9IHt9O1xyXG4gICAgcm93R3JvdXBNZXRhZGF0YTogYW55ID0ge307XHJcbiAgICBkYXRhU291cmNlSW50ZXJuYWw6IGFueVtdO1xyXG4gICAgY2xhc3NUb29sYmFyID0gJyc7XHJcbiAgICBpdGVtU2V0dGluZ3M6IGFueSA9IHt9O1xyXG4gICAgc29ydEhpc3Rvcnk6IFNvcnRbXSA9IFtdO1xyXG4gICAgc29ydENsaWVudEhpc3Rvcnk6IGFueSA9IHt9O1xyXG4gICAgX2dyb3VwRmllbGQ6IHN0cmluZyA9IG51bGw7XHJcbiAgICBfZ3JvdXBJbkNsaWVudCA9IGZhbHNlO1xyXG4gICAgZW5hYmxlZFdmMSA9IHVuZGVmaW5lZDtcclxuICAgIHNob3dpbmdBY3Rpb25Xb3JrZmxvdyA9IGZhbHNlO1xyXG4gICAgYnV0dG9uQ29udGV4dHM6IE1lbnVJdGVtW10gPSBbXTtcclxuICAgIGF1dGhvcml6ZVBhdGhzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZzsgfSA9IHt9O1xyXG4gICAgYnV0dG9uQXBwbHlBdXRob3JpemU6IHsgW2tleTogc3RyaW5nXTogYm9vbGVhbjsgfSA9IHt9O1xyXG4gICAgY29tbW9uQ29uc3QgPSBDb21DdHhDb25zdGFudHMuQ09NTU9OO1xyXG5cclxuICAgIF9kZWZhdWx0VGFibGVDbGFzcyA9ICduZXctdGFibGUgc2NyLXRhYmxlIGNydWQtbGlzdC10YWJsZSc7XHJcbiAgICBfdGFibGVDbGFzcyA9ICcnO1xyXG4gICAgX3Nob3dTZXR0aW5nc1Jvd0NvbG9yID0gZmFsc2U7XHJcbiAgICBfc2hvd1NldHRpbmdzID0gZmFsc2U7XHJcbiAgICBfc2hvd1NldHRpbmdzV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgIF9zaG93U2V0dGluZ3NQZXJtaXNzaW9uID0gZmFsc2U7XHJcbiAgICBfY29sb3JGaWx0ZXJUYWJsZSA9IFtdO1xyXG4gICAgX3NvcnRGaWVsZCA9ICcnO1xyXG4gICAgX3NvcnREaXI6IC0xIHwgMCB8IDEgfCAyID0gLTE7XHJcblxyXG4gICAgdGVtcGxhdGU6IGFueSA9IHt9O1xyXG4gICAgcHJpdmF0ZSB0ZW1wbGF0ZUZpbHRlcjogRmlsdGVyW10gPSBbXTtcclxuICAgIHRlbXBsYXRlSGVhZGVyQ29udGVudDogYW55ID0ge307XHJcblxyXG4gICAgY2FjaGVkVHJhbnNmb3JtcyA9IHt9O1xyXG5cclxuICAgIGZpbHRlclNjaGVtYTogYW55ID0ge307XHJcbiAgICBmaWx0ZXJEYXRhOiBhbnkgPSB7fTtcclxuICAgIGN1cnJlbnRGaWVsZEZpbHRlcjogc3RyaW5nO1xyXG4gICAgY2hlY2tCb3hDb250ZXh0TWVudTogTWVudUl0ZW1bXSA9IFtcclxuICAgICAgICB7IGxhYmVsOiBgQ8OzYCwgaWNvbjogJ3BpIHBpLWNoZWNrJywgY29tbWFuZDogKCkgPT4gdGhpcy5jaGFuZ2VGaWx0ZXJCb29sZWFuKHRydWUpIH0sXHJcbiAgICAgICAgeyBsYWJlbDogYEtow7RuZ2AsIGljb246ICdwaSBwaS10aW1lcycsIGNvbW1hbmQ6ICgpID0+IHRoaXMuY2hhbmdlRmlsdGVyQm9vbGVhbihmYWxzZSkgfSxcclxuICAgICAgICB7IGxhYmVsOiBgSOG7p3kgYuG7j2AsIGljb246ICdwaSBwaS11bmRvJywgY29tbWFuZDogKCkgPT4gdGhpcy5jaGFuZ2VGaWx0ZXJCb29sZWFuKG51bGwpIH1cclxuICAgIF07XHJcbiAgICBzZWFyY2hJbmZvOiBTZWFyY2hJbmZvID0gbmV3IFNlYXJjaEluZm8oKTtcclxuICAgIGNyZWF0aW5nU2VhcmNoSW5mbyA9IGZhbHNlO1xyXG5cclxuICAgIGZpbHRlcl9jdXN0b206IEZpbHRlcltdID0gW107XHJcbiAgICAvLyBmaWx0ZXIgY+G7p2EgYWR2YW5jZSBzZWFyY2ggdHLhuqMgduG7gVxyXG4gICAgZmlsdGVyX2FkdmFuY2VTZWFyY2g6IEZpbHRlcltdID0gW107XHJcbiAgICAvLyBmaWx0ZXIgdGhlbyBjw6FjIGZpbHRlciBoaeG7g24gdGjhu4sgdHJvbmcgY+G7mXQgY+G7p2EgZ3JpZFxyXG4gICAgZmlsdGVyX2NvbHVtbjogRmlsdGVyW10gPSBbXTtcclxuXHJcbiAgICB0aW1lb3V0OiBhbnk7XHJcbiAgICBpbnRlcnZhbDogYW55O1xyXG4gICAgZGF0YUFkdmFuY2U6IGFueSA9IHt9O1xyXG5cclxuICAgIGN1cnJlbnRJdGVtOiBhbnk7XHJcbiAgICBzaG93Rm9ybVdvcmtmbG93ID0gZmFsc2U7XHJcbiAgICBoZWFkZXJXb3JrZmxvdyA9ICcnO1xyXG4gICAgYWN0aW9uV29ya2Zsb3c6IEFjdGlvbjtcclxuICAgIHBvcHVwU2l6ZVdvcmtmbG93OiBQb3B1cFNpemUgPSBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDk1MCwgaGVpZ2h0OiA1NDAgfSk7XHJcbiAgICBzaG93SGlzdG9yeVdvcmtmbG93ID0gZmFsc2U7XHJcbiAgICAvLyBCaeG6v24gxJHhu4Mga2nhu4NtIHRyYSBs4bqnbiBjbGljayDEkeG6p3UgdGnDqm4gY+G7p2EgdXNlciB2w6BvIGTDsm5nIHRyw6puIGdyaWRcclxuICAgIC8vIFPhu60gZOG7pW5nIMSR4buDIGZpeCBidWcgc2V0IHNlbGVjdGVkIHJvdyB04burIGZvcm0gY2hhLCBuaMawbmcgdsOgbyBmb3JtIGNvbiDhuqVuIHNhbmcgcm93IGtow6FjIG7DsyBrIGLhu48gc2VsZWN0ZWQgcm93IMSRw6Mgc2V0IHThu6sgYsOqbiBuZ2/DoGlcclxuICAgIGZpcnN0Um93Q2xpY2sgPSB0cnVlO1xyXG5cclxuICAgIHN0YXJ0V29ya2Zsb3dNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xyXG4gICAgICAgIGhlYWRlcjogJ0No4buNbiBxdXkgdHLDrG5oIG5naGnhu4dwIHbhu6Ugc+G7rSBk4bulbmcnXHJcbiAgICB9KTtcclxuICAgIHByb2Nlc3NXb3JrZmxvd01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCgpO1xyXG4gICAgY2hvWUtpZW5Nb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xyXG4gICAgICAgIGhlYWRlcjogJ0NobyDDvSBraeG6v24nLFxyXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiAxMTAwLCBoZWlnaHQ6IDY1MCB9KVxyXG4gICAgfSk7XHJcbiAgICB3b3JrZmxvd1NldHRpbmdNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoKTtcclxuICAgIHdvcmtmbG93SGlzdG9yeU1vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XHJcbiAgICAgICAgaGVhZGVyOiAnWGVtIGzhu4tjaCBz4butJ1xyXG4gICAgfSk7XHJcbiAgICBwZXJtaXNzaW9uU2hhcmluZ01vZGVsOiBEaWFsb2dNb2RlbCA9IG5ldyBEaWFsb2dNb2RlbCh7XHJcbiAgICAgICAgaGVhZGVyOiAnWGVtIGRhbmggc8OhY2ggbGluayBjaGlhIHPhursnLFxyXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiAxMTAwLCBoZWlnaHQ6IDY1MCB9KSxcclxuICAgIH0pO1xyXG4gICAgcGVybWlzc2lvbkxpc3RNb2RlbDogRGlhbG9nTW9kZWwgPSBuZXcgRGlhbG9nTW9kZWwoe1xyXG4gICAgICAgIGhlYWRlcjogJ1hlbSBkYW5oIHPDoWNoIGPDsyBxdXnhu4FuJyxcclxuICAgICAgICBwb3B1cFNpemU6IG5ldyBQb3B1cFNpemUoeyB3aWR0aDogMTEwMCwgaGVpZ2h0OiA2NTAgfSksXHJcbiAgICB9KTtcclxuICAgIGNvbmdWaWVjTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcclxuICAgICAgICBoZWFkZXI6ICdDaOG6oXkgcXV5IHRyw6xuaCBjw7RuZyB2aeG7h2MnLFxyXG4gICAgICAgIHBvcHVwU2l6ZTogbmV3IFBvcHVwU2l6ZSh7IHdpZHRoOiAxMTAwLCBoZWlnaHQ6IDY1MCB9KSxcclxuICAgICAgICBkYXRhOiB7XHJcbiAgICAgICAgICAgIGNvbmdWaWVjU2V0dGluZzogbmV3IENydWRMaXN0U2V0dGluZygpXHJcbiAgICAgICAgfVxyXG4gICAgfSk7XHJcbiAgICBkZXRhaWxUYXNrTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcclxuICAgICAgICBoZWFkZXI6ICdDaGkgdGnhur90IGPDtG5nIHZp4buHYydcclxuICAgIH0pO1xyXG4gICAgc2hhcmVMaW5rTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcclxuICAgICAgICBoZWFkZXI6ICdDaGlhIHPhursgcXV54buBbicsXHJcbiAgICAgICAgcG9wdXBTaXplOiBuZXcgUG9wdXBTaXplKHsgd2lkdGg6IDY1MCwgaGVpZ2h0OiAzMTAgfSlcclxuICAgIH0pO1xyXG4gICAgYXR0YWNoZWRUYXNrTW9kZWw6IERpYWxvZ01vZGVsID0gbmV3IERpYWxvZ01vZGVsKHtcclxuICAgICAgICBoZWFkZXI6ICdEYW5oIHPDoWNoIGPDtG5nIHZp4buHYyDEkcOtbmgga8OobSdcclxuICAgIH0pO1xyXG5cclxuICAgIEJVVFRPTl9QSEFOX1FVWUVOID0gQnV0dG9uUGVybWlzc2lvbi5CVVRUT05fUEhBTl9RVVlFTjtcclxuICAgIEJVVFRPTl9DQVVfSElOSF9RVVlfVFJJTkggPSBCdXR0b25QZXJtaXNzaW9uLkJVVFRPTl9DQVVfSElOSF9RVVlfVFJJTkg7XHJcbiAgICBsc3RCdXR0b25QZXJtaXNzaW9uID0gW107XHJcbiAgICBidXR0b25QZXJtaXNzaW9uTWFwOiBNYXA8c3RyaW5nLCBib29sZWFuPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgICBlbnRpdHlNZXRhZGF0YVNlcnZpY2U6IEVudGl0eU1ldGFkYXRhU2VydmljZTtcclxuICAgIGVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U6IEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2U7XHJcblxyXG4gICAgc3RhdGVNYWNoaW5lc1NlcnZpY2U6IFN0YXRlTWFjaGluZXNTZXJ2aWNlO1xyXG5cclxuICAgIGNhbkJvX0hvU29TZXJ2aWNlOiBDYW5Cb19Ib1NvU2VydmljZTtcclxuXHJcbiAgICBzb3VyY2VJY29uOiBhbnkgPSB7fTtcclxuICAgIHN0b3BDYWxjdWxhdGluZ0Z1bmN0aW9uQ29sdW1uV2lkdGggPSBmYWxzZTtcclxuICAgIHNlbGVjdGVkSXRlbUxhc3Q6IGFueTtcclxuXHJcbiAgICByb3dEYXRhQ3VycmVudDogYW55O1xyXG4gICAgZW52aXJvbm1lbnQ6IEVudmlyb25tZW50U2NoZW1hO1xyXG4gICAgRmlsZVVwbG9hZE1vZGUgPSBGaWxlVXBsb2FkTW9kZTtcclxuICAgIGN1cnJlbnRVc2VyOiBUblVzZXI7XHJcblxyXG4gICAgcHVibGljIF9yb3V0ZXI6IFJvdXRlcjtcclxuICAgIHB1YmxpYyBfYWN0aXZhdGVkUm91dGU6IEFjdGl2YXRlZFJvdXRlO1xyXG4gICAgcHVibGljIF9jdXN0b21Sb3V0ZXJTZXJ2aWNlOiBDdXN0b21Sb3V0ZXJTZXJ2aWNlO1xyXG4gICAgcHVibGljIF91blN1YnNjcmliZUFsbCA9IG5ldyBTdWJqZWN0PGFueT4oKTtcclxuICAgIHB1YmxpYyBfbm90aWZpZXJTZXJ2aWNlOiBOb3RpZmllclNlcnZpY2U7XHJcbiAgICBwdWJsaWMgX2V4cG9ydFNlcnZpY2U6IEV4cG9ydFNlcnZpY2U7XHJcbiAgICBwdWJsaWMgX2xvZ2dlclNlcnZpY2U6IExvZ2dlclNlcnZpY2U7XHJcbiAgICBwdWJsaWMgX2NvbmdWaWVjU2VydmljZTogQ29uZ1ZpZWNTZXJ2aWNlO1xyXG4gICAgcHVibGljIF9kbUxvYWlDb25nVmllY1NlcnZpY2U6IERtTG9haUNvbmdWaWVjU2VydmljZTtcclxuICAgIHB1YmxpYyBfY29tbW9uU2VydmljZTogQ29tbW9uU2VydmljZTtcclxuICAgIHB1YmxpYyBfY3J1ZFNlcnZpY2U6IENydWRTZXJ2aWNlO1xyXG4gICAgcHVibGljIF9zYW50aWxpemVyOiBEb21TYW5pdGl6ZXI7XHJcbiAgICBwdWJsaWMgX2RhdGVQaXBlOiBEYXRlUGlwZTtcclxuXHJcbiAgICBwcml2YXRlIF90cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlO1xyXG4gICAgcHJpdmF0ZSBfbW9kdWxlQ29uZmlnU2VydmljZTogTW9kdWxlQ29uZmlnU2VydmljZTtcclxuICAgIHByaXZhdGUgX3Blcm1pc3Npb25TZXJ2aWNlOiBQZXJtaXNzaW9uU2VydmljZTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwdWJsaWMgX2luamVjdG9yOiBJbmplY3RvcixcclxuICAgICAgICBfaXNUcmVlVGFibGU6IGJvb2xlYW5cclxuICAgICkge1xyXG4gICAgICAgIHN1cGVyKF9pbmplY3Rvcik7XHJcbiAgICAgICAgdGhpcy5pc1RyZWVUYWJsZSA9IF9pc1RyZWVUYWJsZTtcclxuICAgICAgICB0aGlzLl9hY3RpdmF0ZWRSb3V0ZSA9IHRoaXMuX2luamVjdG9yLmdldChBY3RpdmF0ZWRSb3V0ZSk7XHJcbiAgICAgICAgdGhpcy5fcm91dGVyID0gdGhpcy5faW5qZWN0b3IuZ2V0KFJvdXRlcik7XHJcbiAgICAgICAgdGhpcy5fY3VzdG9tUm91dGVyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDdXN0b21Sb3V0ZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTm90aWZpZXJTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9leHBvcnRTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEV4cG9ydFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2xvZ2dlclNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoTG9nZ2VyU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5lbnRpdHlXb3JrZmxvd0hpc3RvcnlTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KEVudGl0eVdvcmtmbG93SGlzdG9yeVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuc3RhdGVNYWNoaW5lc1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoU3RhdGVNYWNoaW5lc1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuY2FuQm9fSG9Tb1NlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ2FuQm9fSG9Tb1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbmdWaWVjU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChDb25nVmllY1NlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChEbUxvYWlDb25nVmllY1NlcnZpY2UpO1xyXG5cclxuICAgICAgICB0aGlzLl90cmFuc2xhdGVTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFRyYW5zbGF0ZVNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX2NvbW1vblNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ29tbW9uU2VydmljZSk7XHJcbiAgICAgICAgdGhpcy5fY3J1ZFNlcnZpY2UgPSB0aGlzLl9pbmplY3Rvci5nZXQoQ3J1ZFNlcnZpY2UpO1xyXG4gICAgICAgIHRoaXMuX3NhbnRpbGl6ZXIgPSB0aGlzLl9pbmplY3Rvci5nZXQoRG9tU2FuaXRpemVyKTtcclxuICAgICAgICB0aGlzLl9kYXRlUGlwZSA9IHRoaXMuX2luamVjdG9yLmdldChEYXRlUGlwZSk7XHJcbiAgICAgICAgdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChNb2R1bGVDb25maWdTZXJ2aWNlKTtcclxuICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChQZXJtaXNzaW9uU2VydmljZSk7XHJcblxyXG4gICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tBbGwgPSB0aGlzLmhhbmRsZUNoZWNrQWxsLmJpbmQodGhpcyk7XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja0FsbF9Hcm91cCA9IHRoaXMuaGFuZGxlQ2hlY2tBbGxfR3JvdXAuYmluZCh0aGlzKTtcclxuICAgICAgICB0aGlzLmVudmlyb25tZW50ID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudDtcclxuICAgIH1cclxuXHJcbiAgICBuZ09uSW5pdCgpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmliZShDb21DdHhDb25zdGFudHMuQ09NTU9OLkVOVElUWV9NRVRBREFUQV9SRUxPQURFRCwgc2VydmljZSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuZW50aXR5TWV0YWRhdGFTZXJ2aWNlID0gc2VydmljZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJTY2hlbWEuZGF0ZVJhbmdlID0gbmV3IERhdGVUaW1lUmFuZ2VDb250cm9sU2NoZW1hKHsgYXBwZW5kVG86ICdib2R5JyB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kYXRlVGltZVJhbmdlID0gbmV3IERhdGVUaW1lUmFuZ2VDb250cm9sU2NoZW1hKHsgYXBwZW5kVG86ICdib2R5Jywgc2hvd1RpbWU6IHRydWUgfSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJTY2hlbWEuZHJvcGRvd24gPSB7fTtcclxuXHJcbiAgICAgICAgZGF0YVNvdXJjZUljb24uZm9yRWFjaChzb3VyY2UgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLnNvdXJjZUljb25bc291cmNlLmlkXSA9IHNvdXJjZS50ZW47XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMudGVtcGxhdGVGaWx0ZXIgPSBbXTtcclxuXHJcbiAgICAgICAgaWYgKCF0aGlzLl90YWJsZUNsYXNzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgPSB0aGlzLl9kZWZhdWx0VGFibGVDbGFzcztcclxuXHJcbiAgICAgICAgICAgIHRoaXMuc2V0dXBUYWJsZUNsYXNzKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuaW5pdENvbHVtblNjaGVtYSh0aGlzLnNldHRpbmcuY29scyk7XHJcbiAgICAgICAgdGhpcy5jcmVhdGVTZWFyY2hTY2hlbWEoKTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5oaWRkZW5UcmluaEt5IHx8ICF0aGlzLnNldHRpbmcuZGlzYWJsZVNoYXJlKSB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5tZW51QnV0dG9ucykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tZW51QnV0dG9ucyA9IGFzeW5jICgpID0+IFtdO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBO4bq/dSBtw6Ag4bqpbiBhZHZhbmNlc2VhcmNoID0+IHPhur0ga2jDtG5nIGPDsyB0cmlnZ2VyIGxvYWQgZGF0YSB04burIGFkdmFuY2Ugc2VhcmNoID0+IHBo4bqjaSB04buxIGfhu41pIGdldERhdGEg4bufIE9uSW5pdFxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGlkZGVuQWR2YW5jZVNlYXJjaCkge1xyXG4gICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlQ29kZSAmJiB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UpIHtcclxuICAgICAgICAgICAgdGhpcy5zZXJ2aWNlQ29kZSA9IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmF1dGhvcml6ZVBhdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkFERF0gPSBgJHt0aGlzLmF1dGhvcml6ZVBhdGh9L0FERGA7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FRElUXSA9IGAke3RoaXMuYXV0aG9yaXplUGF0aH0vRURJVGA7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5ERUxFVEVdID0gYCR7dGhpcy5hdXRob3JpemVQYXRofS9ERUxFVEVgO1xyXG4gICAgICAgICAgICB0aGlzLmF1dGhvcml6ZVBhdGhzW0NvbUN0eENvbnN0YW50cy5DT01NT04uREVMRVRFX01VTFRJUExFXSA9IGAke3RoaXMuYXV0aG9yaXplUGF0aH0vREVMRVRFX01VTFRJUExFYDtcclxuICAgICAgICAgICAgdGhpcy5hdXRob3JpemVQYXRoc1tDb21DdHhDb25zdGFudHMuQ09NTU9OLkVYUE9SVF9FWENFTF0gPSBgJHt0aGlzLmF1dGhvcml6ZVBhdGh9L0VYUE9SVF9FWENFTGA7XHJcbiAgICAgICAgICAgIHRoaXMuYXV0aG9yaXplUGF0aHNbQ29tQ3R4Q29uc3RhbnRzLkNPTU1PTi5FWFBPUlRfQUxMX0VYQ0VMXSA9IGAke3RoaXMuYXV0aG9yaXplUGF0aH0vRVhQT1JUX0FMTF9FWENFTGA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmF1dGhvcml6ZUJ1dHRvbnMuZm9yRWFjaChidXR0b24gPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkFwcGx5QXV0aG9yaXplW2J1dHRvbl0gPSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XHJcbiAgICAgICAgY29uc3QgdGVtcCA9IHVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgaWYgKHRlbXAgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gbmV3IFRuVXNlcih1c2VyU2VydmljZS5nZXRDdXJyZW50VXNlcigpKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudFVzZXIgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGJ1dHRvblBlcm1pc3Npb25Db2RlIG9mIHRoaXMubHN0QnV0dG9uUGVybWlzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uUGVybWlzc2lvbiA9IGAke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZX0vJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZW50aXR5TmFtZX0vJHtidXR0b25QZXJtaXNzaW9uQ29kZX1gLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvblBlcm1pc3Npb25NYXAuc2V0KGJ1dHRvblBlcm1pc3Npb24sIGZhbHNlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIHNraXAgY2hlY2sgcGVybWlzc2lvbiBpZiBjdXJyZW50IHVzZXIgaXMgc3VwZXJ1c2VyIG9yIChpZ25vcmVBZG1pbiA9PSBmYWxzZSBhbmQgdXNlciBpcyBhZG1pbilcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlci5pc3N1cGVydXNlci50b0xvd2VyQ2FzZSgpICE9PSAndHJ1ZSdcclxuICAgICAgICAgICAgJiYgKHRoaXMuX21vZHVsZUNvbmZpZ1NlcnZpY2UuZ2V0Q29uZmlnKCkuZW52aXJvbm1lbnQuaWdub3JlQWRtaW4gPT09IHRydWVcclxuICAgICAgICAgICAgICAgIHx8IHRoaXMuY3VycmVudFVzZXIuaXNhZG1pbi50b0xvd2VyQ2FzZSgpICE9PSAndHJ1ZSdcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLl9wZXJtaXNzaW9uU2VydmljZS5nZXRTZXJ2aWNlUGVybWlzc2lvbih0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUpLnRoZW4ocmVzdWx0ID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGxzdEJhc2VQZXJtaXNzaW9uID0gcmVzdWx0O1xyXG4gICAgICAgICAgICAgICAgdGhpcy5sc3RCdXR0b25QZXJtaXNzaW9uID0gdGhpcy5fbW9kdWxlQ29uZmlnU2VydmljZS5nZXRDb25maWcoKS5lbnZpcm9ubWVudC5idXR0b25QZXJtaXNzaW9ucyBhcyBzdHJpbmdbXSA/PyBbXTtcclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgYnV0dG9uUGVybWlzc2lvbkNvZGUgb2YgdGhpcy5sc3RCdXR0b25QZXJtaXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYnV0dG9uUGVybWlzc2lvbiA9IGAke3RoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZX0vJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2UuZW50aXR5TmFtZX0vJHtidXR0b25QZXJtaXNzaW9uQ29kZX1gLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25QZXJtaXNzaW9uTWFwLnNldChidXR0b25QZXJtaXNzaW9uLCBsc3RCYXNlUGVybWlzc2lvbi5pbmNsdWRlcyhidXR0b25QZXJtaXNzaW9uKSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICBpZiAoY29sLmZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ZW1wbGF0ZSA9IHRoaXMuZmluZFRlbXBsYXRlKGBoZWFkZXIke2NvbC5maWVsZC5zdWJzdHJpbmcoMCwgMSkudG9VcHBlckNhc2UoKX0ke2NvbC5maWVsZC5zdWJzdHJpbmcoMSl9YCk7XHJcbiAgICAgICAgICAgICAgICBpZiAodGVtcGxhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnRlbXBsYXRlSGVhZGVyQ29udGVudFtjb2wuZmllbGRdID0gdGVtcGxhdGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLm9uQ29udGVudEluaXQuZW1pdCh0aGlzKTtcclxuICAgIH1cclxuXHJcbiAgICBzZXR1cFRhYmxlQ2xhc3MoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5tdWx0aXBsZUNoZWNrV2hlbkNsaWNrUm93IHx8ICF0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3gpIHtcclxuICAgICAgICAgICAgdGhpcy5fdGFibGVDbGFzcyArPSAnIG11bHRpLWNoZWNrJztcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBzaW5nbGUtY2hlY2snO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zdGlja3lDb2x1bW4pIHtcclxuICAgICAgICAgICAgdGhpcy5fdGFibGVDbGFzcyArPSAnIHN0aWNreS1jb2x1bW5zLWFjdGl2ZSc7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmhpZGRlbkNoZWNrYm94KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3RhYmxlQ2xhc3MgKz0gJyBoaWRkZW4tY29sdW1uLWNoZWNrYm94JztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGlkZGVuT3JkZXJDb2x1bW4pIHtcclxuICAgICAgICAgICAgdGhpcy5fdGFibGVDbGFzcyArPSAnIGhpZGRlbi1jb2x1bW4tb3JkZXInO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBpbml0Q29sdW1uU2NoZW1hKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSkge1xyXG4gICAgICAgIGlmICghY29scyB8fCAhY29scy5sZW5ndGgpIHJldHVybjtcclxuICAgICAgICBsZXQgY29sRnVuY3Rpb24gPSBudWxsLCBjb2xHcm91cCA9IG51bGwsIGNvbEhhc1RvZ2dsZUljb24gPSBudWxsO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2xzLmZvckVhY2goY29sID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbC5zaG93VG9nZ2xlSWNvbikge1xyXG4gICAgICAgICAgICAgICAgY29sSGFzVG9nZ2xlSWNvbiA9IGNvbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoY29sLmZpZWxkID09ICdmdW5jdGlvbicpIHtcclxuICAgICAgICAgICAgICAgIGNvbEZ1bmN0aW9uID0gY29sO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5ncm91cCkge1xyXG4gICAgICAgICAgICAgICAgY29sLmdyb3VwID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBjb2xHcm91cCA9IGNvbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGlmIChjb2xGdW5jdGlvbiAmJiAhY29sRnVuY3Rpb24ud2lkdGgpIHtcclxuICAgICAgICAgICAgdGhpcy5fd2lkdGhGdW5jdGlvbkNvbHVtbiA9IGNvbEZ1bmN0aW9uLndpZHRoO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIWNvbEhhc1RvZ2dsZUljb24pIHtcclxuICAgICAgICAgICAgY29sSGFzVG9nZ2xlSWNvbiA9IHRoaXMuc2V0dGluZy5jb2xzWzBdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb2xIYXNUb2dnbGVJY29uLmNvbEhhc1RvZ2dsZUljb24gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZ2V0Q29sb3JTZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5nZXRDb2x1bW5TZXR0aW5nKGNvbEdyb3VwKTtcclxuICAgICAgICB0aGlzLmdldFBhZ2VTZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5leHRlbmRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcclxuICAgICAgICB0aGlzLmZvcm1hdENvbHVtbnModGhpcy5zZXR0aW5nLmNvbHMpO1xyXG4gICAgICAgIHRoaXMuYXBwbHlDb2x1bW5TZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5idWlsZEZpbHRlckNvbHVtbih0aGlzLnNldHRpbmcuY29scyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBleHRlbmRDb2x1bW5zKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSwgYXBwZW5kQ29sID0gdHJ1ZSk6IHZvaWQge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYgPSBbXTtcclxuICAgICAgICBpZiAoIWNvbHMpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGVtcDogQ29sdW1uU2NoZW1hQmFzZVtdID0gW107XHJcbiAgICAgICAgY29uc3QgdG1wQ29scyA9IFsuLi5jb2xzXTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscykge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzLmZvckVhY2goY29sUmVvcmRlciA9PiB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvbHMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sc1tpXS5maWVsZCA9PSBjb2xSZW9yZGVyLmNvbHVtbkNvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKGNvbHNbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xzLnNwbGljZShpLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgLy8gQ8OybiBs4bqhaSBuaOG7r25nIGNvZGUgbcOgIGtow7RuZyDEkcaw4bujYyBj4bqldSBow6xuaCB0aMOsIGdow6lwIGzhuqFpIHRoZW8gaW5kZXggxJHGsOG7o2Mga2hhaSBiw6FvXHJcbiAgICAgICAgICAgIGxldCB0ZW1wQ29sczogQ29sdW1uU2NoZW1hQmFzZVtdID0gW107XHJcbiAgICAgICAgICAgIGNvbHMuZm9yRWFjaChjb2wgPT4ge1xyXG4gICAgICAgICAgICAgICAgbGV0IGluZGV4Q29sT2xkID0gdG1wQ29scy5maW5kSW5kZXgocCA9PiBwLmZpZWxkID09IGNvbC5maWVsZCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXhDb2xPbGQgPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRlbXAuc3BsaWNlKDAsIDAsIGNvbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBUw6xtIHbhu4sgdHLDrSBj4bunYSBj4buZdCBwaMOtYSB0csaw4bubYyB0cm9uZyBsaXN0IHJlb3JkZXIgbeG7m2lcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXhDb2xCZWZvcmVOZXcgPSB0ZW1wLmZpbmRJbmRleChwID0+IHAuZmllbGQgPT0gdG1wQ29sc1tpbmRleENvbE9sZCAtIDFdLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICB3aGlsZSAoaW5kZXhDb2xCZWZvcmVOZXcgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcENvbHMuc3BsaWNlKDAsIDAsIGNvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFTDrG0gduG7iyB0csOtIGPhu6dhIGPhu5l0IHRyxrDhu5tjIGPhu5l0IMSRYW5nIGtp4buDbSB0cmEgdHJvbmcgbGlzdCBj4buZdCBn4buRY1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvbE9sZCA9IHRtcENvbHMuZmluZEluZGV4KHAgPT4gcC5maWVsZCA9PSB0bXBDb2xzW2luZGV4Q29sT2xkIC0gMV0uZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmRleENvbEJlZm9yZU5ldyA9IHRlbXAuZmluZEluZGV4KHAgPT4gcC5maWVsZCA9PSB0bXBDb2xzW2luZGV4Q29sT2xkIC0gMV0uZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyA9PiDEkOG6v24ga2hpIHRo4bqleSB0aMOsIGFkZCBj4buZdCBoaeG7h24gdOG6oWkgdsOgIGxpc3QgdOG6oW0gdsOgbyB24buLIHRyw60gY2jDqG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXhDb2xCZWZvcmVOZXcgPT0gdGVtcC5sZW5ndGggLSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAucHVzaChjb2wsIC4uLnRlbXBDb2xzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRlbXAuc3BsaWNlKGluZGV4Q29sQmVmb3JlTmV3ICsgMSwgMCwgY29sLCAuLi50ZW1wQ29scyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBDb2xzID0gW107XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29scy5zcGxpY2UoMCwgY29scy5sZW5ndGgpO1xyXG4gICAgICAgIGNvbHMuc3BsaWNlKDAsIDAsIC4uLnRlbXApO1xyXG5cclxuICAgICAgICBsZXQgZmlyc3RDb2xWaXNpYmxlID0gbnVsbDtcclxuICAgICAgICBsZXQgZm91bmRJdGVtU2hvd0VkaXRMaW5rID0gZmFsc2U7XHJcbiAgICAgICAgdGVtcC5zcGxpY2UoMCwgdGVtcC5sZW5ndGgpO1xyXG4gICAgICAgIGxldCB0bXBDb2w6IENvbHVtblNjaGVtYUJhc2UgPSBudWxsO1xyXG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiBjb2xzKSB7XHJcbiAgICAgICAgICAgIGlmIChlbGVtZW50LnJhd0NvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgY29udGludWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGVtcC5wdXNoKGVsZW1lbnQpO1xyXG4gICAgICAgICAgICBjb25zdCBjb25maWcgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzLmZpbmQocCA9PiBwLmNvbHVtbkNvZGUgPT0gZWxlbWVudC5maWVsZCk7XHJcblxyXG4gICAgICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy52aXNpYmxlICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLnZpc2libGUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGNvbmZpZy52aXNpYmxlO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC5sYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC5sYWJlbCA9IHRoaXMuX3RyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChlbGVtZW50LmxhYmVsKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGNvbmZpZyAmJiBjb25maWcudGV4dEFsaWduICE9PSB1bmRlZmluZWQgJiYgY29uZmlnLnRleHRBbGlnbiAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC50ZXh0QWxpZ24gPSBjb25maWcudGV4dEFsaWduO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoY29uZmlnICYmIGNvbmZpZy53aWR0aCAhPT0gdW5kZWZpbmVkICYmIGNvbmZpZy53aWR0aCAhPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgZWxlbWVudC53aWR0aCA9IGNvbmZpZy53aWR0aDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGF0YVR5cGUgPT0gbnVsbCB8fCBlbGVtZW50LmRhdGFUeXBlID09IHVuZGVmaW5lZCB8fCBlbGVtZW50LmRhdGFUeXBlID09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBlbGVtZW50LmRhdGFUeXBlID0gRGF0YVR5cGUuc3RyaW5nO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAoZWxlbWVudC52aXNpYmxlXHJcbiAgICAgICAgICAgICAgICB8fCAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uXHJcbiAgICAgICAgICAgICAgICAgICAgJiYgZWxlbWVudC5maWVsZCA9PSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4uZmllbGRcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5iYXNlU2VydmljZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cm9sVHlwZSA9IENvbnRyb2xUeXBlLmRyb3Bkb3duO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5yYXdDb2x1bW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi5wdXNoKG5ldyBSZWZGaWVsZCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5lbGVtZW50XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQudmFsdWVGaWVsZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LnZhbHVlRmllbGQgPSAnaWQnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlbGVtZW50LmRpc3BsYXlGaWVsZCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbGVtZW50LmRpc3BsYXlGaWVsZCA9ICd0ZW4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcENvbCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdDb2x1bW46IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogZWxlbWVudC5kYXRhVHlwZVJlZkZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6ICdzdHInICsgZWxlbWVudC5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93RmlsdGVyOiBlbGVtZW50LmFsbG93RmlsdGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29ydDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aXNpYmxlOiB0cnVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb25maWdSZWZGaWVsZCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmRldGFpbHMuZmluZChwID0+IHAuY29sdW1uQ29kZSA9PSB0bXBDb2wuZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29uZmlnUmVmRmllbGQgJiYgY29uZmlnUmVmRmllbGQudmlzaWJsZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXBDb2wudmlzaWJsZSA9IGNvbmZpZ1JlZkZpZWxkLnZpc2libGU7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGVtcC5wdXNoKHRtcENvbCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZpcnN0Q29sVmlzaWJsZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDb2xWaXNpYmxlID0gdG1wQ29sO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZWxlbWVudC5kYXRhU291cmNlICYmIGVsZW1lbnQuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb250cm9sVHlwZSA9IENvbnRyb2xUeXBlLmRyb3Bkb3duO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghZWxlbWVudC5yYXdDb2x1bW4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmZpZWxkTmVlZEdldFJlZi5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRtcENvbCA9IG5ldyBDb2x1bW5TY2hlbWFCYXNlKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYXdDb2x1bW46IGVsZW1lbnQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250cm9sVHlwZTogQ29udHJvbFR5cGUuZHJvcGRvd24sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogZWxlbWVudC5kYXRhVHlwZVJlZkZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZVNlcnZpY2U6IG51bGwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogJ3N0cicgKyBlbGVtZW50LmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dGaWx0ZXI6IGVsZW1lbnQuYWxsb3dGaWx0ZXIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3J0OiBmYWxzZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpc2libGU6IHRydWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbmZpZ1JlZkZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscy5maW5kKHAgPT4gcC5jb2x1bW5Db2RlID09IHRtcENvbC5maWVsZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb25maWdSZWZGaWVsZCAmJiBjb25maWdSZWZGaWVsZC52aXNpYmxlICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtcENvbC52aXNpYmxlID0gY29uZmlnUmVmRmllbGQudmlzaWJsZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0ZW1wLnB1c2godG1wQ29sKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmlyc3RDb2xWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENvbFZpc2libGUgPSB0bXBDb2w7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICghZmlyc3RDb2xWaXNpYmxlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlyc3RDb2xWaXNpYmxlID0gZWxlbWVudDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChlbGVtZW50LmZvcmNlR2V0RGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuYmFzZVNlcnZpY2UgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5maWVsZE5lZWRHZXRSZWYucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmVsZW1lbnRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC52YWx1ZUZpZWxkID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52YWx1ZUZpZWxkID0gJ2lkJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQuZGlzcGxheUZpZWxkID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5kaXNwbGF5RmllbGQgPSAndGVuJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGVsZW1lbnQuc2hvd0VkaXRMaW5rKSB7XHJcbiAgICAgICAgICAgICAgICBmb3VuZEl0ZW1TaG93RWRpdExpbmsgPSB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghZm91bmRJdGVtU2hvd0VkaXRMaW5rICYmIGZpcnN0Q29sVmlzaWJsZSkge1xyXG4gICAgICAgICAgICBmaXJzdENvbFZpc2libGUuc2hvd0VkaXRMaW5rID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29scy5sZW5ndGggPSAwO1xyXG4gICAgICAgIGNvbHMucHVzaCguLi50ZW1wKTtcclxuXHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bUxlbmd0aCA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5hZHZhbmNlRGF0YS5maWVsZEhhc01heGltdW1Xb3JkID0gW107XHJcbiAgICAgICAgY29scy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmICghY29sLnZpc2libGUpIHJldHVybjtcclxuICAgICAgICAgICAgaWYgKGNvbC5tYXhXb3JkRGlzcGxheSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmFkdmFuY2VEYXRhLmZpZWxkSGFzTWF4aW11bVdvcmQucHVzaChjb2wpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5tYXhMZW5ndGhEaXNwbGF5KSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtTGVuZ3RoLnB1c2goY29sKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBmb3JtYXRDb2x1bW5zKGNvbHM6IENvbHVtblNjaGVtYUJhc2VbXSk6IHZvaWQge1xyXG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHMpIHtcclxuICAgICAgICAgICAgaWYgKGNvbC5kYXRhVHlwZSA9PSAnZGF0ZScpIHtcclxuICAgICAgICAgICAgICAgIGlmICghY29sLmZvcm1hdCkgY29sLmZvcm1hdCA9ICdub3JtYWwnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGNvbC5leHRlbmREYXRhLnN0eWxlID0gdGhpcy5nZXRDb2x1bW5TdHlsZShjb2wpO1xyXG4gICAgICAgICAgICBjb2wuZXh0ZW5kRGF0YS5oZWFkZXJTdHlsZSA9IHRoaXMuZ2V0Q29sdW1uU3R5bGUoY29sLCB0cnVlKTtcclxuICAgICAgICAgICAgY29sLmV4dGVuZERhdGEuaGVhZGVyQ2xhc3MgPSB0aGlzLmdldENlbGxDbGFzc0hlYWRlcihjb2wpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENvbHVtblNldHRpbmcoY29sR3JvdXA6IENvbHVtblNjaGVtYUJhc2UpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gPSBjb2xHcm91cDtcclxuICAgICAgICBjb25zdCBkYXRhU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkNPTFVNTl9TRVRUSU5HKTtcclxuICAgICAgICBpZiAoZGF0YVNldHRpbmcpIHtcclxuICAgICAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2V0dGluZ0tleSkge1xyXG4gICAgICAgICAgICAgICAgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBKU09OLnBhcnNlKGRhdGFTZXR0aW5nKTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBlbGVtZW50IG9mIHNldHRpbmdzKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zdCBlbGVtZW50ID0gc2V0dGluZ3NbaV07XHJcbiAgICAgICAgICAgICAgICBpZiAoZWxlbWVudC5wYXRobmFtZSA9PT0gcGF0aE5hbWUpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQgPSBlbGVtZW50LnNldHRpbmcuc29ydEZpZWxkO1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPSBlbGVtZW50LnNldHRpbmcuc29ydERpciA/IGVsZW1lbnQuc2V0dGluZy5zb3J0RGlyIDogMDtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydERpciA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnRGaWVsZCA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQgPSBlbGVtZW50LnNldHRpbmcuZ3JvdXBGaWVsZDtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEluQ2xpZW50ID0gZWxlbWVudC5zZXR0aW5nLmdyb3VwSW5DbGllbnQ7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkICYmIGNvbEdyb3VwICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRHcm91cEZpZWxkKGNvbEdyb3VwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZGV0YWlscyA9IGVsZW1lbnQuc2V0dGluZy5kZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKGNvbEdyb3VwKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0R3JvdXBGaWVsZChjb2xHcm91cCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0R3JvdXBGaWVsZChjb2xHcm91cCkge1xyXG4gICAgICAgIGlmICgoY29sR3JvdXAuZGF0YVNvdXJjZSAmJiBjb2xHcm91cC5kYXRhU291cmNlLmxlbmd0aCA+IDApXHJcbiAgICAgICAgICAgIHx8IGNvbEdyb3VwLmJhc2VTZXJ2aWNlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQgPSBgc3RyJHtjb2xHcm91cC5maWVsZH1gO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCA9IGNvbEdyb3VwLmZpZWxkO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNhdmVDb2x1bW5TZXR0aW5nKCkge1xyXG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2V0dGluZ0tleSkge1xyXG4gICAgICAgICAgICBwYXRoTmFtZSArPSAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNvbHVtblNldHRpbmcgPSBbXTtcclxuICAgICAgICBsZXQgY2hlY2tFeGlzdCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcpO1xyXG4gICAgICAgIGlmIChkYXRhU2V0dGluZykge1xyXG4gICAgICAgICAgICBjb2x1bW5TZXR0aW5nID0gSlNPTi5wYXJzZShkYXRhU2V0dGluZyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1TZXR0aW5nID0gY29sdW1uU2V0dGluZy5maW5kKHEgPT4gcS5wYXRobmFtZSA9PSBwYXRoTmFtZSk7XHJcbiAgICAgICAgICAgIGlmIChpdGVtU2V0dGluZykge1xyXG4gICAgICAgICAgICAgICAgaXRlbVNldHRpbmcuc2V0dGluZy5zb3J0RmllbGQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQ7XHJcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLnNvcnREaXIgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RGlyO1xyXG4gICAgICAgICAgICAgICAgaXRlbVNldHRpbmcuc2V0dGluZy5ncm91cEZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZDtcclxuICAgICAgICAgICAgICAgIGl0ZW1TZXR0aW5nLnNldHRpbmcuZ3JvdXBJbkNsaWVudCA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwSW5DbGllbnQ7XHJcbiAgICAgICAgICAgICAgICBpdGVtU2V0dGluZy5zZXR0aW5nLmRldGFpbHMgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzO1xyXG4gICAgICAgICAgICAgICAgY2hlY2tFeGlzdCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghY2hlY2tFeGlzdCkge1xyXG4gICAgICAgICAgICBjb2x1bW5TZXR0aW5nLnB1c2goeyBwYXRobmFtZTogcGF0aE5hbWUsIHNldHRpbmc6IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcsIEpTT04uc3RyaW5naWZ5KGNvbHVtblNldHRpbmcpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGRlbGV0ZUNvbHVtblNldHRpbmcoKSB7XHJcbiAgICAgICAgbGV0IHBhdGhOYW1lID0gbG9jYXRpb24ucGF0aG5hbWU7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5KSB7XHJcbiAgICAgICAgICAgIHBhdGhOYW1lICs9ICcvJyArIHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgY29sdW1uU2V0dGluZyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGRhdGFTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MVU1OX1NFVFRJTkcpO1xyXG4gICAgICAgIGlmIChkYXRhU2V0dGluZykge1xyXG4gICAgICAgICAgICBjb2x1bW5TZXR0aW5nID0gSlNPTi5wYXJzZShkYXRhU2V0dGluZyk7XHJcbiAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gY29sdW1uU2V0dGluZy5maW5kSW5kZXgocSA9PiBxLnBhdGhuYW1lID09IHBhdGhOYW1lKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIGNvbHVtblNldHRpbmcuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkNPTFVNTl9TRVRUSU5HLCBKU09OLnN0cmluZ2lmeShjb2x1bW5TZXR0aW5nKSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb2xvclNldHRpbmcoKSB7XHJcbiAgICAgICAgY29uc3QgZGF0YVBhZ2VTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuQ09MT1JfU0VUVElORyk7XHJcbiAgICAgICAgaWYgKGRhdGFQYWdlU2V0dGluZykge1xyXG4gICAgICAgICAgICBsZXQgcGF0aE5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBwYXRoTmFtZSArPSAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZXR0aW5ncyA9IEpTT04ucGFyc2UoZGF0YVBhZ2VTZXR0aW5nKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzZXR0aW5ncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZWxlbWVudCA9IHNldHRpbmdzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHBhdGhOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQgPSBlbGVtZW50LmNvbG9yRmlsdGVyRmllbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGUgPSBlbGVtZW50LmNvbG9yRmlsdGVyVGFibGU7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jYWNoZUNvbG9yU2V0dGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2FjaGVDb2xvclNldHRpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5fY29sb3JGaWx0ZXJUYWJsZSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJUYWJsZS5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGVbaV07XHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1WYWx1ZXMgPSBbXTtcclxuICAgICAgICAgICAgaXRlbVZhbHVlc1swXSA9IGl0ZW0uY29tcGFyZVR5cGU7XHJcbiAgICAgICAgICAgIGl0ZW1WYWx1ZXNbMV0gPSBpdGVtLmZpbHRlclZhbHVlO1xyXG4gICAgICAgICAgICBpdGVtVmFsdWVzWzJdID0gdGhpcy5jb252ZXJ0VG9EYXRlKGl0ZW0uZmlsdGVyVmFsdWUpO1xyXG4gICAgICAgICAgICBpdGVtVmFsdWVzWzNdID0gTnVtYmVyKGl0ZW0uZmlsdGVyVmFsdWUpO1xyXG4gICAgICAgICAgICBpdGVtVmFsdWVzWzRdID0gKC90cnVlL2kpLnRlc3QoaXRlbS5maWx0ZXJWYWx1ZSk7XHJcbiAgICAgICAgICAgIGl0ZW1WYWx1ZXNbNV0gPSBpdGVtLmNvbG9yO1xyXG4gICAgICAgICAgICB0aGlzLl9jb2xvckZpbHRlclRhYmxlLnB1c2goaXRlbVZhbHVlcyk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgc2V0Q29sb3JTZXR0aW5nKCkge1xyXG4gICAgICAgIGxldCBwYXRoTmFtZSA9IGxvY2F0aW9uLnBhdGhuYW1lO1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuc2V0dGluZ0tleSkge1xyXG4gICAgICAgICAgICBwYXRoTmFtZSArPSAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbGV0IGNvbG9yU2V0dGluZyA9IFtdO1xyXG4gICAgICAgIGxldCBjaGVja0V4aXN0ID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZGF0YUNvbG9yU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLkNPTE9SX1NFVFRJTkcpO1xyXG4gICAgICAgIGlmIChkYXRhQ29sb3JTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIGNvbG9yU2V0dGluZyA9IEpTT04ucGFyc2UoZGF0YUNvbG9yU2V0dGluZyk7XHJcbiAgICAgICAgICAgIGNvbG9yU2V0dGluZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHBhdGhOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb2xvckZpbHRlckZpZWxkID0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQ7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5jb2xvckZpbHRlclRhYmxlID0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGU7XHJcbiAgICAgICAgICAgICAgICAgICAgY2hlY2tFeGlzdCA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCFjaGVja0V4aXN0KSB7XHJcbiAgICAgICAgICAgIGNvbG9yU2V0dGluZy5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHBhdGhuYW1lOiBwYXRoTmFtZSxcclxuICAgICAgICAgICAgICAgIGNvbG9yRmlsdGVyRmllbGQ6IHRoaXMuc2V0dGluZy5jb2xvckZpbHRlckZpZWxkLFxyXG4gICAgICAgICAgICAgICAgY29sb3JGaWx0ZXJUYWJsZTogdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyVGFibGVcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShDb21DdHhDb25zdGFudHMuTE9DQUxTVE9SQUdFX0tFWS5DT0xPUl9TRVRUSU5HLCBKU09OLnN0cmluZ2lmeShjb2xvclNldHRpbmcpKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFBhZ2VTZXR0aW5nKCkge1xyXG4gICAgICAgIGNvbnN0IGRhdGFQYWdlU2V0dGluZyA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLlBBR0VfU0VUVElORyk7XHJcbiAgICAgICAgaWYgKGRhdGFQYWdlU2V0dGluZykge1xyXG4gICAgICAgICAgICBsZXQgcGF0aE5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5zZXR0aW5nS2V5KSB7XHJcbiAgICAgICAgICAgICAgICBwYXRoTmFtZSArPSAnLycgKyB0aGlzLnNldHRpbmcuc2V0dGluZ0tleTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBwYWdlU2V0dGluZ3MgPSBKU09OLnBhcnNlKGRhdGFQYWdlU2V0dGluZyk7XHJcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcGFnZVNldHRpbmdzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlbGVtZW50ID0gcGFnZVNldHRpbmdzW2ldO1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHBhdGhOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2VTaXplID0gZWxlbWVudC5wYWdlU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHNhdmVQYWdlU2V0dGluZygpIHtcclxuICAgICAgICBsZXQgcGF0aE5hbWUgPSBsb2NhdGlvbi5wYXRobmFtZTtcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnNldHRpbmdLZXkpIHtcclxuICAgICAgICAgICAgcGF0aE5hbWUgKz0gJy8nICsgdGhpcy5zZXR0aW5nLnNldHRpbmdLZXk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGxldCBwYWdlU2V0dGluZyA9IFtdO1xyXG4gICAgICAgIGxldCBjaGVja0V4aXN0ID0gZmFsc2U7XHJcbiAgICAgICAgY29uc3QgZGF0YVBhZ2VTZXR0aW5nID0gbG9jYWxTdG9yYWdlLmdldEl0ZW0oQ29tQ3R4Q29uc3RhbnRzLkxPQ0FMU1RPUkFHRV9LRVkuUEFHRV9TRVRUSU5HKTtcclxuICAgICAgICBpZiAoZGF0YVBhZ2VTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgIHBhZ2VTZXR0aW5nID0gSlNPTi5wYXJzZShkYXRhUGFnZVNldHRpbmcpO1xyXG4gICAgICAgICAgICBwYWdlU2V0dGluZy5mb3JFYWNoKGVsZW1lbnQgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGVsZW1lbnQucGF0aG5hbWUgPT09IHBhdGhOYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxlbWVudC5wYWdlU2l6ZSA9IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZTtcclxuICAgICAgICAgICAgICAgICAgICBjaGVja0V4aXN0ID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIWNoZWNrRXhpc3QpIHtcclxuICAgICAgICAgICAgcGFnZVNldHRpbmcucHVzaCh7IHBhdGhuYW1lOiBwYXRoTmFtZSwgcGFnZVNpemU6IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlU2l6ZSB9KTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKENvbUN0eENvbnN0YW50cy5MT0NBTFNUT1JBR0VfS0VZLlBBR0VfU0VUVElORywgSlNPTi5zdHJpbmdpZnkocGFnZVNldHRpbmcpKTtcclxuICAgIH1cclxuXHJcbiAgICBjaGVja0lzSW5zaWRlRGlhbG9nKCkge1xyXG4gICAgICAgIGNvbnN0ICRkaWFsb2cgPSB0aGlzLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LmNsb3Nlc3QoJy5wLWRpYWxvZycpO1xyXG4gICAgICAgIHJldHVybiAhISRkaWFsb2c7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlUmVhZHkoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5maXhIZWlnaHRUeXBlSW5EaWFsb2cpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuY2hlY2tJc0luc2lkZURpYWxvZygpKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuaGVpZ2h0VHlwZSA9IEhlaWdodFR5cGUuY3VzdG9tO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMub25SZWFkeS5lbWl0KHRoaXMpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgY2hlY2tBbGxvd1NlbGVjdFJvdyhldnQsIHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy5jb25maWcuZGlzYWJsZVJvd1NlbGVjdFdoZW5DbGlja0FjdGlvblxyXG4gICAgICAgICAgICAmJiAoZXZ0LnRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoJy5saW5rLW9yLWFjdGlvbicpXHJcbiAgICAgICAgICAgICAgICB8fCBldnQudGFyZ2V0LmNsb3Nlc3QoJy5saW5rLW9yLWFjdGlvbicpXHJcbiAgICAgICAgICAgIClcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBDbGljayB2w6BvIGNoZWNrYm94XHJcbiAgICAgICAgaWYgKGV2dC50YXJnZXQuY2xhc3NMaXN0LmNvbnRhaW5zKCdwLWNoZWNrYm94LWJveCcpIHx8IGV2dC50YXJnZXQuY2xvc2VzdCgnLnAtY2hlY2tib3gtYm94JykpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNoZWNrQWxsb3dTZWxlY3RSb3cgJiYgIXRoaXMuc2V0dGluZy5jaGVja0FsbG93U2VsZWN0Um93KHJvd0RhdGEsIGV2dCkpIHtcclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVTZWxlY3RSb3cgPSAoZXZ0LCBkYXRhKSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5oYXNDdXN0b21IYW5kbGVDbGlja1Jvdykge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBbGxvd1NlbGVjdFJvdyhldnQsIGRhdGEpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgb2xkQ2hlY2tlZCA9IGRhdGEuX2NoZWNrZWQ7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcubXVsdGlwbGVDaGVja1doZW5DbGlja1Jvdykge1xyXG4gICAgICAgICAgICBsZXQgZGF0YVRvQ2xlYXJDaGVja2VkID0gbnVsbDtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZmlyc3RSb3dDbGljaykge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5maXJzdFJvd0NsaWNrID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICBkYXRhVG9DbGVhckNoZWNrZWQgPSB0aGlzLl9yYXdEYXRhU291cmNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgZGF0YVRvQ2xlYXJDaGVja2VkID0gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGRhdGFUb0NsZWFyQ2hlY2tlZC5mb3JFYWNoKChwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcC5fY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRhdGEuX2NoZWNrZWQgPSAhb2xkQ2hlY2tlZDtcclxuICAgICAgICBsZXQgZmlyZUV2ZW50ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5maXJlRXZlbnRXaGVuUmVTZWxlY3QpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtTGFzdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhc3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGEoZGF0YSwgZXZ0LnRhcmdldC5jbG9zZXN0KCd0cicpLCBmaXJlRXZlbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICBoYW5kbGVTZWxlY3RSb3dHcm91cCA9IChldnQsIGRhdGEpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMuY2hlY2tBbGxvd1NlbGVjdFJvdyhldnQsIGRhdGEpKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcubXVsdGlwbGVDaGVja1doZW5DbGlja1Jvdykge1xyXG4gICAgICAgICAgICBjb25zdCBpdGVtc01vZGlmaWVkID0gWy4uLnRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc107XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5mb3JFYWNoKChwLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcC5fY2hlY2tlZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgaWYgKCFpdGVtc01vZGlmaWVkLnNvbWUocSA9PiBxLmlkID09IGRhdGEuaWQpKSB7XHJcbiAgICAgICAgICAgICAgICBpdGVtc01vZGlmaWVkLnB1c2goZGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaXRlbXNNb2RpZmllZC5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGFfR3JvdXAoaXRlbSwgbnVsbCwgZmFsc2UpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZGF0YS5fY2hlY2tlZCA9ICFkYXRhLl9jaGVja2VkO1xyXG5cclxuICAgICAgICBsZXQgZmlyZUV2ZW50ID0gdHJ1ZTtcclxuICAgICAgICBpZiAoIXRoaXMuc2V0dGluZy5maXJlRXZlbnRXaGVuUmVTZWxlY3QpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJdGVtTGFzdCAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSXRlbUxhc3QgPSBudWxsO1xyXG4gICAgICAgICAgICAgICAgZmlyZUV2ZW50ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGFfR3JvdXAoZGF0YSwgZXZ0LnRhcmdldC5jbG9zZXN0KCd0cicpLCBmaXJlRXZlbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICBwcml2YXRlIHNldExhc3RJdGVtU2VsZWN0ZWQoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtTGFzdCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtc1t0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMubGVuZ3RoIC0gMV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3QgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9lbWl0Um93U2VsZWN0KHRyRWxlbWVudCwgZGF0YSkge1xyXG4gICAgICAgIHRoaXMub25Sb3dTZWxlY3QuZW1pdCh7XHJcbiAgICAgICAgICAgIGVsZW1lbnQ6IHRyRWxlbWVudCxcclxuICAgICAgICAgICAgZGF0YVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVUb2dnbGVSb3cocm93RGF0YSwgZXZ0KSB7XHJcbiAgICAgICAgdGhpcy50YWJsZS50b2dnbGVSb3cocm93RGF0YSwgZXZ0KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9zaG93Q29udGV4dE1lbnUoZXZ0KSB7XHJcbiAgICAgICAgLy8gc2V0VGltZW91dCDEkeG7gyBmaXggYnVnIGhp4buDbiB0aOG7iyBjb250ZXh0IG1lbnUgdHLDoG4gcmEgbmdvw6BpIG3DoG4gaMOsbmhcclxuICAgICAgICBzZXRUaW1lb3V0KGYgPT4ge1xyXG4gICAgICAgICAgICB0aGlzLmNvbnRleHRNZW51LnNob3coZXZ0KTtcclxuICAgICAgICB9LCAxMCk7XHJcbiAgICAgICAgZXZ0LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICAgICAgZXZ0LnN0b3BQcm9wYWdhdGlvbigpO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0RmlsdGVycygpOiBGaWx0ZXJbXSB7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gW107XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2RlZmF1bHQpIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfZGVmYXVsdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlcl9jdXN0b20pIHtcclxuICAgICAgICAgICAgcmVzdWx0LnB1c2goLi4udGhpcy5maWx0ZXJfY3VzdG9tKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyX2NvbHVtbikge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9jb2x1bW4pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5maWx0ZXJfYWR2YW5jZVNlYXJjaCkge1xyXG4gICAgICAgICAgICByZXN1bHQucHVzaCguLi50aGlzLmZpbHRlcl9hZHZhbmNlU2VhcmNoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRHcmlkSW5mbygpIHtcclxuICAgICAgICBjb25zdCBncmlkSW5mbyA9IG5ldyBHcmlkSW5mbyh7XHJcbiAgICAgICAgICAgIHBhZ2VJbmZvOiB7XHJcbiAgICAgICAgICAgICAgICBwYWdlOiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSxcclxuICAgICAgICAgICAgICAgIHBhZ2VTaXplOiB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZVNpemVcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgZmlsdGVyczogdGhpcy5nZXRGaWx0ZXJzKCksXHJcbiAgICAgICAgICAgIHNvcnRzOiBbXSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAodGhpcy5fZ3JvdXBGaWVsZCAmJiAhdGhpcy5fZ3JvdXBJbkNsaWVudCkge1xyXG4gICAgICAgICAgICBncmlkSW5mby5zb3J0cy51bnNoaWZ0KHsgZmllbGQ6IHRoaXMuX2dyb3VwRmllbGQsIGRpcjogMSB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX3NvcnRGaWVsZCAmJiB0aGlzLl9zb3J0RGlyICE9PSAwKSB7XHJcbiAgICAgICAgICAgIGdyaWRJbmZvLnNvcnRzLnB1c2goeyBmaWVsZDogdGhpcy5fc29ydEZpZWxkLCBkaXI6IHRoaXMuX3NvcnREaXIgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gZ3JpZEluZm87XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZVNlYXJjaEFkdnMoZmlsdGVyczogRmlsdGVyW10pIHtcclxuICAgICAgICB0aGlzLmZpbHRlcl9hZHZhbmNlU2VhcmNoID0gZmlsdGVycztcclxuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IDE7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgaGFuZGxlSW5pdEFkdmFuY2VTZWFyY2goZmlsdGVyczogRmlsdGVyW10pIHtcclxuICAgICAgICB0aGlzLmZpbHRlcl9hZHZhbmNlU2VhcmNoID0gZmlsdGVycztcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0RGF0YSgpIHtcclxuICAgICAgICBjb25zdCBpbmZvR2V0RGF0YSA9IHRoaXMuZ2V0R3JpZEluZm8oKTtcclxuICAgICAgICB0aGlzLm9uUmVsb2FkLmVtaXQoaW5mb0dldERhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHJlbG9hZChmaWx0ZXJfY3VzdG9tPzogRmlsdGVyW10sIHBhZ2UgPSAxKSB7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJfY3VzdG9tID0gZmlsdGVyX2N1c3RvbTtcclxuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IHBhZ2U7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRhbmhTb1RodVR1R3JvdXBMYXN0ZXN0KCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zb3J0R3JvdXBMYXN0TW9kZWxCYXNlKCkudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICfEkMOhbmggbOG6oWkgc+G7kSB0aOG7qSB04buxIHRow6BuaCBjw7RuZycsIGYgPT4ge1xyXG5cclxuICAgICAgICB9KSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFkZCgpIHtcclxuICAgICAgICB0aGlzLm9uQWRkLmVtaXQoKTtcclxuICAgIH1cclxuXHJcbiAgICB4dWF0Q2FjTXVjRGFDaG9uKCkge1xyXG4gICAgICAgIHN3aXRjaCAodGhpcy5zZXR0aW5nLmV4cG9ydEl0ZW1zTW9kZSkge1xyXG4gICAgICAgICAgICBjYXNlIEV4cG9ydEl0ZW1zTW9kZS5Gcm9tSHRtbDpcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwb3J0QnlSZWFkaW5nSHRtbCgpO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0SXRlbXNNb2RlLk1hbnVhbEdldERhdGE6XHJcbiAgICAgICAgICAgIGNhc2UgRXhwb3J0SXRlbXNNb2RlLkF1dG9HZXREYXRhOlxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdUaGUgZnVuY3Rpb24gaGF2ZW5cXCd0IHN1cHBvcnRlZCB5ZXQnKTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZXhwb3J0QnlSZWFkaW5nSHRtbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5fZ3JvdXBGaWVsZCkge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0NoxrBhIGjhu5cgdHLhu6MgeHXhuqV0IGPDsyBuaMOzbSBk4buvIGxp4buHdSEnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudDtcclxuICAgICAgICBjb25zdCB0YWJsZUVsZSA9IGVsZW1lbnQucXVlcnlTZWxlY3RvcigndGFibGUnKTtcclxuICAgICAgICBjb25zdCBoZWFkRWxlID0gdGFibGVFbGUucXVlcnlTZWxlY3RvcigndGhlYWQnKTtcclxuICAgICAgICBjb25zdCBib2R5RWxlID0gdGFibGVFbGUucXVlcnlTZWxlY3RvcigndGJvZHknKTtcclxuXHJcbiAgICAgICAgLy8gaGVhZGVyLlxyXG4gICAgICAgIGNvbnN0IGFyckhlYWQgPSB0aGlzLmdldEFyckhlYWRCeUh0bWwoaGVhZEVsZSk7XHJcbiAgICAgICAgaWYgKCFhcnJIZWFkKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIGJvZHkuXHJcbiAgICAgICAgY29uc3QgYXJyUm93RGF0YSA9IHRoaXMuZ2V0QXJyUm93RGF0YUJ5SHRtbChib2R5RWxlLCBhcnJIZWFkKTtcclxuXHJcbiAgICAgICAgLy8gZXhwb3J0LlxyXG4gICAgICAgIGNvbnN0IGRhdGFFeHBvcnQgPSBbYXJySGVhZC5tYXAoaSA9PiBpLnZhbHVlKSwgLi4uYXJyUm93RGF0YV07XHJcbiAgICAgICAgY29uc3QgZmlsZU5hbWUgPSBgRGFuaCBzw6FjaCAke3RoaXMuc2V0dGluZy5vYmplY3ROYW1lfWA7XHJcbiAgICAgICAgdGhpcy5fZXhwb3J0U2VydmljZS5vYmplY3RUb0V4Y2VsKGRhdGFFeHBvcnQsIGZpbGVOYW1lKTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldEFyckhlYWRCeUh0bWwoaGVhZGVyKSB7XHJcbiAgICAgICAgY29uc3QgZmlyc3RSb3cgPSBoZWFkZXIucXVlcnlTZWxlY3RvcigndHInKTtcclxuICAgICAgICBpZiAoIWZpcnN0Um93KSB7XHJcbiAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBhcnJUaCA9IGZpcnN0Um93LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoJyk7XHJcblxyXG4gICAgICAgIGNvbnN0IHN0YXJ0SW5kZXggPSB0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3ggPyAwIDogMTtcclxuICAgICAgICBjb25zdCBlbmRJbmRleCA9IGFyclRoLmxlbmd0aCAtICh0aGlzLnNldHRpbmcuaGlkZGVuRnVuY3Rpb25Db2x1bW4gPyAwIDogMSkgLSAxO1xyXG4gICAgICAgIGlmIChzdGFydEluZGV4ID4gZW5kSW5kZXgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBhcnJIZWFkZXIgPSBbXTtcclxuICAgICAgICBmb3IgKGxldCBpID0gc3RhcnRJbmRleDsgaSA8PSBlbmRJbmRleDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmIChhcnJUaFtpXS5pbm5lclRleHQpIHtcclxuICAgICAgICAgICAgICAgIGFyckhlYWRlci5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICBpbmRleDogaSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogYXJyVGhbaV0uaW5uZXJUZXh0XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGFyckhlYWRlcjtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0QXJyUm93RGF0YUJ5SHRtbChib2R5RWxlLCBhcnJIZWFkKSB7XHJcbiAgICAgICAgY29uc3QgYXJyUm93ID0gYm9keUVsZS5xdWVyeVNlbGVjdG9yQWxsKCd0ci51aS1zdGF0ZS1oaWdobGlnaHQnKTtcclxuICAgICAgICBpZiAoIWFyclJvdy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYXJyUm93RGF0YSA9IFtdO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJyUm93Lmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHJvdyA9IGFyclJvd1tpXTtcclxuICAgICAgICAgICAgY29uc3QgYXJyVGQgPSByb3cucXVlcnlTZWxlY3RvckFsbCgndGQnKTtcclxuICAgICAgICAgICAgbGV0IGN1cnJlbnRUZDtcclxuICAgICAgICAgICAgY29uc3Qgcm93RGF0YSA9IFtdO1xyXG5cclxuICAgICAgICAgICAgYXJySGVhZC5mb3JFYWNoKGhlYWQgPT4ge1xyXG4gICAgICAgICAgICAgICAgY3VycmVudFRkID0gYXJyVGRbaGVhZC5pbmRleF07XHJcbiAgICAgICAgICAgICAgICBpZiAoY3VycmVudFRkLmlubmVyVGV4dCA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgICAgICByb3dEYXRhLnB1c2godGhpcy5nZXRWYWx1ZUNoZWNrYm94Rm9ybWF0KGN1cnJlbnRUZCkpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5wdXNoKGN1cnJlbnRUZC5pbm5lclRleHQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIGFyclJvd0RhdGEucHVzaChyb3dEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgO1xyXG5cclxuICAgICAgICByZXR1cm4gYXJyUm93RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRWYWx1ZUNoZWNrYm94Rm9ybWF0KGRhdGEpIHtcclxuICAgICAgICBjb25zdCBjaGVja0JveCA9IGRhdGEucXVlcnlTZWxlY3RvcigncC1jaGVja2JveCcpO1xyXG4gICAgICAgIGlmIChjaGVja0JveCkge1xyXG4gICAgICAgICAgICBjb25zdCB2YWx1ZSA9IGRhdGEucXVlcnlTZWxlY3Rvcignc3Bhbi5waS1jaGVjaycpO1xyXG4gICAgICAgICAgICBpZiAodmFsdWUpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnQ8OzJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiAnS2jDtG5nJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gJyc7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHZpZXcocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5vblZpZXcuZW1pdChyb3dEYXRhKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZWRpdChyb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLm9uRWRpdC5lbWl0KHJvd0RhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGUocm93RGF0YTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5vbkRlbGV0ZS5lbWl0KHJvd0RhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkZWxldGVNdXRpcGxlKCkge1xyXG4gICAgICAgIHRoaXMub25EZWxldGVNdWx0aXBsZS5lbWl0KHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0NvbnRleHRNZW51KGV2dCwgcm93RGF0YSkge1xyXG4gICAgICAgIHRoaXMucm93RGF0YUN1cnJlbnQgPSByb3dEYXRhO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMgPSBhd2FpdCB0aGlzLmdldE1lbnVCdXR0b25BdXRob3JpemVkKGF3YWl0IHRoaXMubWVudUJ1dHRvbnMocm93RGF0YSkpO1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmRpc2FibGVTaGFyZSkge1xyXG4gICAgICAgICAgICBjb25zdCBzaGFyZUJ1dHRvbnMgPSBbXHJcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnQ2hpYSBz4bq7JywgaWNvbjogJ3BpIHBpLWxpbmsnLCBjb21tYW5kOiB0aGlzLmNyZWF0ZVNoYXJlTGluay5iaW5kKHRoaXMpIH0sXHJcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnRGFuaCBzw6FjaCBjaGlhIHPhursnLCBpY29uOiAncGkgcGktbGlzdCcsIGNvbW1hbmQ6IHRoaXMuc2hvd0xpbmtTaGFyaW5nLmJpbmQodGhpcykgfSxcclxuICAgICAgICAgICAgICAgIC8vIHsgbGFiZWw6ICdEYW5oIHPDoWNoIG5ow6xuIHRo4bqleScsIGljb246ICdwaSBwaS1saXN0JywgY29tbWFuZDogdGhpcy5zaG93TGlzdFBlcm1pc3Npb25CeUl0ZW0uYmluZCh0aGlzKSB9XHJcbiAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMucHVzaCguLi5zaGFyZUJ1dHRvbnMpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBzaG93V29ya2Zsb3dBdHRhY2ggPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSgnX19zaG93V29ya2Zsb3dBdHRhY2gnKTtcclxuICAgICAgICBpZiAoc2hvd1dvcmtmbG93QXR0YWNoID09ICd0cnVlJykge1xyXG4gICAgICAgICAgICB0aGlzLmJ1dHRvbkNvbnRleHRzLnB1c2goXHJcbiAgICAgICAgICAgICAgICB7IGxhYmVsOiAnRGFuaCBzw6FjaCBjw7RuZyB2aeG7h2MnLCBpY29uOiAncGkgcGktbGlzdCcsIGNvbW1hbmQ6IHRoaXMuc2hvd0F0dGFjaGVkVGFzay5iaW5kKHRoaXMpIH0sXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmJ1dHRvbkNvbnRleHRzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5fc2hvd0NvbnRleHRNZW51KGV2dCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0tow7RuZyBjw7MgaMOgbmggxJHhu5luZyBraOG6oyBk4bulbmcnKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBnZXRNZW51QnV0dG9uQXV0aG9yaXplZChtZW51QnV0dG9uczogVG5NZW51SXRlbVtdKSB7XHJcbiAgICAgICAgY29uc3QgYXV0aG9yaXplZEJ1dHRvbnM6IFRuTWVudUl0ZW1bXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IHNlcnZpY2VDb2RlQnlCYXNlID0gdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlICE9IG51bGwgPyB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUgOiAnJztcclxuICAgICAgICBjb25zdCBwcm9taXNlcyA9IFtdO1xyXG4gICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBtZW51QnV0dG9ucykge1xyXG4gICAgICAgICAgICBpZiAoIWl0ZW0uYXV0aG9yaXphdGlvblBlcm1pc3Npb24pIHtcclxuICAgICAgICAgICAgICAgIGF1dGhvcml6ZWRCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBzZXJ2aWNlQ29kZSA9IGl0ZW0uYXV0aG9yaXphdGlvblNlcnZpY2VDb2RlID8gaXRlbS5hdXRob3JpemF0aW9uU2VydmljZUNvZGUgOiBzZXJ2aWNlQ29kZUJ5QmFzZTtcclxuICAgICAgICAgICAgcHJvbWlzZXMucHVzaChcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Blcm1pc3Npb25TZXJ2aWNlLmlzQXV0aG9yaXplZChzZXJ2aWNlQ29kZSwgaXRlbS5hdXRob3JpemF0aW9uUGVybWlzc2lvbiwgdHJ1ZSkudGhlbihhdXRob3JpemVkID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYXV0aG9yaXplZCAhPT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGF1dGhvcml6ZWRCdXR0b25zLnB1c2goaXRlbSk7XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcbiAgICAgICAgcmV0dXJuIGF1dGhvcml6ZWRCdXR0b25zO1xyXG4gICAgfVxyXG5cclxuICAgIGhhbmRsZUNoZWNrQWxsX0dyb3VwID0gKCkgPT4ge1xyXG4gICAgICAgIGlmICh0aGlzLmNoZWNrZWRBbGwgPT09IHRydWUpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gWy4uLnRoaXMuX3Jhd0RhdGFTb3VyY2VdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tlZEFsbCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuc2V0TGFzdEl0ZW1TZWxlY3RlZCgpO1xyXG4gICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2UuZm9yRWFjaChpdGVtID0+IHtcclxuICAgICAgICAgICAgaXRlbS5fY2hlY2tlZCA9IHRoaXMuY2hlY2tlZEFsbDtcclxuICAgICAgICAgICAgdGhpcy5yb3dHcm91cENoZWNrZWRbaXRlbVt0aGlzLl9ncm91cEZpZWxkXV0gPSB0aGlzLmNoZWNrZWRBbGw7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5vbkNoZWNrQWxsLmVtaXQodGhpcy5jaGVja2VkQWxsKTtcclxuICAgIH07XHJcblxyXG4gICAgaGFuZGxlQ2hlY2tSb3dHcm91cCA9IChyb3dEYXRhKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZ3JvdXBDaGVja2VkID0gdGhpcy5yb3dHcm91cENoZWNrZWRbcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXV0gPyB0cnVlIDogZmFsc2U7XHJcbiAgICAgICAgbGV0IGZvdW5kID0gZmFsc2U7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9yYXdEYXRhU291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9yYXdEYXRhU291cmNlW2ldW3RoaXMuX2dyb3VwRmllbGRdID09IHJvd0RhdGFbdGhpcy5fZ3JvdXBGaWVsZF0pIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3Jhd0RhdGFTb3VyY2VbaV0uX2NoZWNrZWQgPSBncm91cENoZWNrZWQ7XHJcbiAgICAgICAgICAgICAgICBmb3VuZCA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZm91bmQpIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zID0gW107XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9yYXdEYXRhU291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLl9yYXdEYXRhU291cmNlW2ldLl9jaGVja2VkKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMucHVzaCh0aGlzLl9yYXdEYXRhU291cmNlW2ldKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldExhc3RJdGVtU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrZWRBbGwoKTtcclxuICAgIH07XHJcblxyXG4gICAgaGFuZGxlQ2hlY2tSb3dEYXRhX0dyb3VwID0gKHJvd0RhdGEsIHRyRWxlbWVudCA9IG51bGwsIGZpcmVFdmVudCA9IHRydWUpID0+IHtcclxuICAgICAgICBpZiAoIXJvd0RhdGEuX2NoZWNrZWQpIHtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW0gPSBudWxsO1xyXG4gICAgICAgICAgICB0aGlzLnJvd0dyb3VwQ2hlY2tlZFtyb3dEYXRhW3RoaXMuX2dyb3VwRmllbGRdXSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5maW5kSW5kZXgocCA9PiBwLmlkID09IHJvd0RhdGEuaWQpO1xyXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGxldCBjaGVja0dyb3VwID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLnB1c2gocm93RGF0YSk7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtID0gcm93RGF0YTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9yYXdEYXRhU291cmNlLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXRoaXMuX3Jhd0RhdGFTb3VyY2VbaV0uX2NoZWNrZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5fcmF3RGF0YVNvdXJjZVtpXVt0aGlzLl9ncm91cEZpZWxkXSA9PSByb3dEYXRhW3RoaXMuX2dyb3VwRmllbGRdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrR3JvdXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5yb3dHcm91cENoZWNrZWRbcm93RGF0YVt0aGlzLl9ncm91cEZpZWxkXV0gPSBjaGVja0dyb3VwO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNldExhc3RJdGVtU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrZWRBbGwoKTtcclxuICAgICAgICBpZiAoZmlyZUV2ZW50KSB7XHJcbiAgICAgICAgICAgIGlmICghdHJFbGVtZW50KSB0ckVsZW1lbnQgPSB0aGlzLmdldFRyQnlSb3dEYXRhKHJvd0RhdGEpO1xyXG4gICAgICAgICAgICB0aGlzLl9lbWl0Um93U2VsZWN0KHRyRWxlbWVudCwgcm93RGF0YSk7XHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBoYW5kbGVDaGVja0FsbCA9ICgpID0+IHtcclxuICAgICAgICBpZiAodGhpcy5jaGVja2VkQWxsID09PSB0cnVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFsuLi50aGlzLl9yYXdEYXRhU291cmNlXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5zZXRMYXN0SXRlbVNlbGVjdGVkKCk7XHJcbiAgICAgICAgdGhpcy5fcmF3RGF0YVNvdXJjZS5mb3JFYWNoKGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICBpdGVtLl9jaGVja2VkID0gdGhpcy5jaGVja2VkQWxsID09PSB0cnVlO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMub25DaGVja0FsbC5lbWl0KHRoaXMuY2hlY2tlZEFsbCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGhhbmRsZUNoZWNrUm93RGF0YSA9IChyb3dEYXRhLCB0ckVsZW1lbnQgPSBudWxsLCBmaXJlRXZlbnQgPSB0cnVlKSA9PiB7XHJcbiAgICAgICAgaWYgKCFyb3dEYXRhLl9jaGVja2VkKSB7XHJcbiAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtID0gbnVsbDtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbXMuZmluZEluZGV4KHAgPT4gcC5pZCA9PSByb3dEYXRhLmlkKTtcclxuICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoIXJvd0RhdGEuaGlkZGVuQ2hlY2tCb3gpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcy5wdXNoKHJvd0RhdGEpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW0gPSByb3dEYXRhO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldExhc3RJdGVtU2VsZWN0ZWQoKTtcclxuICAgICAgICB0aGlzLnVwZGF0ZUNoZWNrZWRBbGwoKTtcclxuICAgICAgICBpZiAoIXRyRWxlbWVudCkge1xyXG4gICAgICAgICAgICB0ckVsZW1lbnQgPSB0aGlzLmdldFRyQnlSb3dEYXRhKHJvd0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoZmlyZUV2ZW50KSB7XHJcbiAgICAgICAgICAgIHRoaXMuX2VtaXRSb3dTZWxlY3QodHJFbGVtZW50LCByb3dEYXRhKTtcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlQ2hlY2tlZEFsbCgpIHtcclxuICAgICAgICBpZiAodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA9PSB0aGlzLl9yYXdEYXRhU291cmNlLmxlbmd0aCAmJiB0aGlzLl9yYXdEYXRhU291cmNlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgdGhpcy5jaGVja2VkQWxsID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmNoZWNrZWRBbGwgPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2VsZWN0Um93KGRhdGFzOiBhbnlbXSA9IFtdKSB7XHJcbiAgICAgICAgaWYgKCFkYXRhcyB8fCBkYXRhcy5sZW5ndGggPT0gMCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuaGlkZGVuQ2hlY2tib3gpIHtcclxuICAgICAgICAgICAgY29uc3QgbGFzdEl0ZW0gPSBkYXRhc1tkYXRhcy5sZW5ndGggLSAxXTtcclxuICAgICAgICAgICAgbGFzdEl0ZW0uX2NoZWNrZWQgPSB0cnVlO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fZ3JvdXBGaWVsZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGFfR3JvdXAobGFzdEl0ZW0sIHRoaXMuZ2V0VHJCeVJvd0RhdGEobGFzdEl0ZW0pLCB0cnVlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2hlY2tSb3dEYXRhKGxhc3RJdGVtLCB0aGlzLmdldFRyQnlSb3dEYXRhKGxhc3RJdGVtKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGRhdGFzLmZvckVhY2goZGF0YSA9PiB7XHJcbiAgICAgICAgICAgICAgICBkYXRhLl9jaGVja2VkID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9ncm91cEZpZWxkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDaGVja1Jvd0RhdGFfR3JvdXAoZGF0YSwgdGhpcy5nZXRUckJ5Um93RGF0YShkYXRhKSwgdHJ1ZSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUNoZWNrUm93RGF0YShkYXRhLCB0aGlzLmdldFRyQnlSb3dEYXRhKGRhdGEpKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNvcnQoZXZlbnQ6IGFueSwgX3RhYmxlOiBUYWJsZSkge1xyXG4gICAgICAgIHRoaXMuc29ydFdpdGhBcGkoZXZlbnQsIF90YWJsZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzb3J0V2l0aEFwaShldmVudDogYW55LCBfdGFibGU6IFRhYmxlKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLm1vZGVsLmxvYWRpbmcpIHtcclxuICAgICAgICAgICAgX3RhYmxlLnJlc2V0KCk7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNvcnRIaXN0b3J5Lmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSBldmVudC5maWVsZDtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnREaXIgPSAxO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKHRoaXMuc29ydEhpc3RvcnlbMF0uZmllbGQgPT0gZXZlbnQuZmllbGQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX3NvcnRGaWVsZCA9IGV2ZW50LmZpZWxkO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuX3NvcnREaXIgPT09IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RGlyID0gLTE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmICh0aGlzLl9zb3J0RGlyID09PSAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX3NvcnREaXIgPSAwO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc29ydERpciA9IDE7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoZXZlbnQuZmllbGQgIT0gdGhpcy5zb3J0SGlzdG9yeVswXS5maWVsZCkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5fc29ydEZpZWxkID0gZXZlbnQuZmllbGQ7XHJcbiAgICAgICAgICAgICAgICB0aGlzLl9zb3J0RGlyID0gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgICAgICAgdGhpcy5zb3J0SGlzdG9yeS51bnNoaWZ0KHsgZmllbGQ6IHRoaXMuX3NvcnRGaWVsZCwgZGlyOiB0aGlzLl9zb3J0RGlyIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgcHJvY2Vzc0RhdGFTb3VyY2UoZGF0YVNvdXJjZSkge1xyXG4gICAgICAgIHRoaXMuY2hlY2tlZEFsbCA9IG51bGw7XHJcbiAgICAgICAgdGhpcy5yb3dHcm91cENoZWNrZWQgPSB7fTtcclxuICAgICAgICBpZiAoIWRhdGFTb3VyY2UpIHJldHVybjtcclxuICAgICAgICBkYXRhU291cmNlLmZvckVhY2goc291cmNlID0+IHtcclxuICAgICAgICAgICAgaWYgKHNvdXJjZS5pZCA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZS5pZCA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHNvdXJjZS5vYmpTdHlsZUNsYXNzID0ge307XHJcbiAgICAgICAgICAgIGlmICghc291cmNlLmNvbFNwYW4pIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZS5jb2xTcGFuID0ge307XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCFzb3VyY2Uucm93U3Bhbikge1xyXG4gICAgICAgICAgICAgICAgc291cmNlLnJvd1NwYW4gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoIXNvdXJjZS5oaWRkZW4pIHtcclxuICAgICAgICAgICAgICAgIHNvdXJjZS5oaWRkZW4gPSB7fTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBpZiAoc291cmNlLmlzTmV3KSB7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2Uub2JqU3R5bGVDbGFzcy5pc05ldyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNvdXJjZS5pc0V4cGlyaW5nKSB7XHJcbiAgICAgICAgICAgICAgICBzb3VyY2Uub2JqU3R5bGVDbGFzcy5leHBpcmluZyA9IHRydWU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHNvdXJjZS5jbGFzcykge1xyXG4gICAgICAgICAgICAgICAgc291cmNlLmNsYXNzLnNwbGl0KCcgJykuZmlsdGVyKHAgPT4gcCkuZm9yRWFjaChjbHMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHNvdXJjZS5vYmpTdHlsZUNsYXNzW2Nsc10gPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc291cmNlLmJvb2ttYXJrU3R5bGUgPSB0aGlzLmdldEJvb2ttYXJrQ29sb3Ioc291cmNlLCB0aGlzLnNldHRpbmcuY29scyk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtTGVuZ3RoLmZvckVhY2goX2NvbCA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBjb2wgPSA8Q29sdW1uU2NoZW1hQmFzZT5fY29sO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdmFsdWUgPSBzb3VyY2VbY29sLmZpZWxkXTtcclxuICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS5zdWJzdHJpbmcgJiYgdmFsdWUubGVuZ3RoID4gY29sLm1heExlbmd0aERpc3BsYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBzdjogc2hvcnQgdmFsdWVcclxuICAgICAgICAgICAgICAgICAgICBzb3VyY2VbYCR7Y29sLmZpZWxkfV9fc3ZgXSA9IGAke3ZhbHVlLnN1YnN0cmluZygwLCBjb2wubWF4TGVuZ3RoRGlzcGxheSl9YDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuYWR2YW5jZURhdGEuZmllbGRIYXNNYXhpbXVtV29yZC5mb3JFYWNoKF9jb2wgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sID0gPENvbHVtblNjaGVtYUJhc2U+X2NvbDtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlU2hvcnRXb3JkID0gdGhpcy5zdWJXb3JkKHNvdXJjZVtjb2wuZmllbGRdLCBjb2wubWF4V29yZERpc3BsYXkpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHZhbHVlU2hvcnRXb3JkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc3Y6IHNob3J0IHZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlW2Ake2NvbC5maWVsZH1fX3N2YF0gPSBgJHt2YWx1ZVNob3J0V29yZH1gO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLnVwZGF0ZVJvd0dyb3VwTWV0YURhdGEoZGF0YVNvdXJjZSk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHN1YldvcmQodmFsdWU6IHN0cmluZywgd29yZENvdW50OiBudW1iZXIpIHtcclxuICAgICAgICBpZiAoIXZhbHVlIHx8ICF2YWx1ZS50cmltKSByZXR1cm4gdmFsdWU7XHJcbiAgICAgICAgdmFsdWUgPSB2YWx1ZS50cmltKCk7XHJcbiAgICAgICAgbGV0IGluZGV4ID0gLTEsIGJlZm9yZUNoYXIgPSAnYSc7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2YWx1ZS5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBpZiAodmFsdWVbaV0gPT0gJycgJiYgYmVmb3JlQ2hhciAhPSAnJykge1xyXG4gICAgICAgICAgICAgICAgd29yZENvdW50LS07XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgYmVmb3JlQ2hhciA9IHZhbHVlW2ldO1xyXG4gICAgICAgICAgICBpZiAod29yZENvdW50ID09IDApIHtcclxuICAgICAgICAgICAgICAgIGluZGV4ID0gaTtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChpbmRleCA+IC0xKSByZXR1cm4gdmFsdWUuc3Vic3RyaW5nKDAsIGluZGV4KTtcclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICB0b2dnbGVTaG93RnVsbChyb3dEYXRhLCBmaWVsZCkge1xyXG4gICAgICAgIHJvd0RhdGFbZmllbGQgKyAnX19zaG93RnVsbCddID0gIXJvd0RhdGFbZmllbGQgKyAnX19zaG93RnVsbCddO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBtZXJnZUNsYXNzT2JqKHNvdXJjZSwgb3RoZXJPYmogPSB7fSkge1xyXG4gICAgICAgIGNvbnN0IG9iaiA9IHNvdXJjZS5vYmpTdHlsZUNsYXNzO1xyXG4gICAgICAgIGZvciAoY29uc3Qga2V5IGluIG90aGVyT2JqKSB7XHJcbiAgICAgICAgICAgIG9ialtrZXldID0gb3RoZXJPYmpba2V5XTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iajtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29udGV4dFJvd0dyb3VwKHJvd0RhdGEpIHtcclxuICAgICAgICByZXR1cm4ge1xyXG4gICAgICAgICAgICByb3dEYXRhLFxyXG4gICAgICAgICAgICByb3dHcm91cE1ldGFkYXRhOiB0aGlzLnJvd0dyb3VwTWV0YWRhdGEsXHJcbiAgICAgICAgICAgIGdyb3VwQ29sOiB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4sXHJcbiAgICAgICAgICAgIGdyb3VwRmllbGQ6IHRoaXMuX2dyb3VwRmllbGQsXHJcbiAgICAgICAgICAgIGdyb3VwSW5DbGllbnQ6IHRoaXMuX2dyb3VwSW5DbGllbnRcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb250ZXh0Um93R3JvdXBSb290KHJvd0RhdGEsIGV4cGFuZGVkKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgLi4udGhpcy5nZXRDb250ZXh0Um93R3JvdXAocm93RGF0YSksXHJcbiAgICAgICAgICAgIGV4cGFuZGVkLFxyXG4gICAgICAgICAgICBoYW5kbGVDaGVja1Jvd0dyb3VwOiB0aGlzLmhhbmRsZUNoZWNrUm93R3JvdXAsXHJcbiAgICAgICAgICAgIGdldENvbFNwYW5Hcm91cDogdGhpcy5nZXRDb2xTcGFuR3JvdXAsXHJcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRhYmxlLFxyXG4gICAgICAgICAgICBjbGFzc1Jvd0dyb3VwOiB0aGlzLl9jbGFzc1Jvd0dyb3VwLFxyXG4gICAgICAgICAgICBpY29uVG9nZ2xlUm93R3JvdXA6IHRoaXMuaWNvblRvZ2dsZVJvd0dyb3VwXHJcbiAgICAgICAgfTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZ2V0Q29udGV4dENlbGwocm93RGF0YSwgcm93SW5kZXgsIGNvbCwgZXhwYW5kZWQsICR0aGlzKSB7XHJcbiAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgY3J1ZExpc3Q6ICR0aGlzLFxyXG4gICAgICAgICAgICByb3dEYXRhLFxyXG4gICAgICAgICAgICByb3dJbmRleCxcclxuICAgICAgICAgICAgY29sLFxyXG4gICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxyXG4gICAgICAgICAgICBleHBhbmRlZCxcclxuICAgICAgICAgICAgaWNvblRvZ2dsZVJvd0RhdGE6IHRoaXMuaWNvblRvZ2dsZVJvd0RhdGFcclxuICAgICAgICB9O1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDbGFzc1Jvd0RhdGFPZkdyb3VwKHJvd0RhdGEpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgaWYgKHRoaXMuY29udGFpblNlbGVjdEl0ZW0ocm93RGF0YSkpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9ICcgdWktc3RhdGUtaGlnaGxpZ2h0JztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuX2dyb3VwRmllbGQgIT09ICcnKSB7XHJcbiAgICAgICAgICAgIHJlc3VsdCArPSAnIGlzLWNoaWxkLWdyb3VwJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJvd0RhdGEuY2xhc3MpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9ICcgJyArIHJvd0RhdGEuY2xhc3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXN1bHQudHJpbSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb250YWluU2VsZWN0SXRlbShpdGVtKSB7XHJcbiAgICAgICAgaWYgKCFpdGVtKSB7XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zLmZpbmRJbmRleCh4ID0+IHggJiYgeFt0aGlzLnNldHRpbmcuZW50aXR5S2V5XSA9PT0gaXRlbVt0aGlzLnNldHRpbmcuZW50aXR5S2V5XSkgPiAtMTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgc2Nyb2xsVG9wKCkge1xyXG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zY3JvbGxiYXIpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2Nyb2xsYmFyLnNjcm9sbFRvVG9wKDAsIDApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgc2Nyb2xsVG9Cb3R0b20oKSB7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNjcm9sbGJhcikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zY3JvbGxiYXIuc2Nyb2xsVG9Cb3R0b20oMCwgMCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25OZXh0KGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2UgPSB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSArIDE7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25QcmV2KGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlID4gMSkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlIC0gMTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgdGhpcy5zY3JvbGxUb3AoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25PbGRlc3QoZXZlbnQpIHtcclxuICAgICAgICB0aGlzLnNldHRpbmcucGFnZVNldHRpbmcucGFnZSA9IE1hdGguY2VpbCh0aGlzLm1vZGVsLnRvdGFsIC8gdGhpcy5zZXR0aW5nLnBhZ2VTZXR0aW5nLnBhZ2VTaXplKTtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkxhdGVzdChldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlID0gMTtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgICAgICB0aGlzLnNjcm9sbFRvcCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0VtcHR5VG9vbGJhcihlbGVtZW50OiBIVE1MRWxlbWVudCk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGNvbnN0IG5vZGVzID0gZWxlbWVudC5jaGlsZE5vZGVzO1xyXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbm9kZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgY29uc3Qgbm9kZSA9IG5vZGVzLml0ZW0oaSk7XHJcbiAgICAgICAgICAgIGlmIChub2RlLm5vZGVUeXBlICE9PSA4ICYmIG5vZGVzLml0ZW0oaSkudGV4dENvbnRlbnQudHJpbSgpLmxlbmd0aCAhPT0gMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBpc0VtcHR5RnVuY3Rpb25CdXR0b25zKGVsZW1lbnQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XHJcbiAgICAgICAgY29uc3Qgbm9kZXMgPSBlbGVtZW50LmNoaWxkTm9kZXM7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBub2Rlcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICBjb25zdCBub2RlID0gbm9kZXMuaXRlbShpKTtcclxuICAgICAgICAgICAgaWYgKG5vZGUubm9kZVR5cGUgIT09IDggJiYgbm9kZXMuaXRlbShpKS50ZXh0Q29udGVudC50cmltKCkubGVuZ3RoICE9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGZpbmRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5fY29tbW9uU2VydmljZS5maW5kVGVtcGxhdGVGcm9tTGlzdCh0aGlzLmNoaWxkcmVuLCB0ZW1wbGF0ZU5hbWUpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYXNUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG4gICAgICAgIGlmICh0aGlzLnRlbXBsYXRlW3RlbXBsYXRlTmFtZV0gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICB0aGlzLnRlbXBsYXRlW3RlbXBsYXRlTmFtZV0gPSB0aGlzLmZpbmRUZW1wbGF0ZSh0ZW1wbGF0ZU5hbWUpO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZVt0ZW1wbGF0ZU5hbWVdICE9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbXBvbmVudEJ5VHlwZShjb250cm9sVHlwZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKGNvbnRyb2xUeXBlID09ICd0cmFuZ1RoYWlWNScpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGVtcGxhdGVUcmFuZ1RoYWlWNTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbnRyb2xUeXBlID09ICdfX3ZpZXdIaXN0b3J5Jykge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy50ZW1wbGF0ZUNvbFZpZXdIaXN0b3J5O1xyXG4gICAgICAgIH1cclxuICAgICAgICBsZXQgaXRlbSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZmluZFRlbXBsYXRlRnJvbUxpc3QodGhpcy5jaGlsZHJlbiwgY29udHJvbFR5cGUpO1xyXG4gICAgICAgIGlmICghaXRlbSAmJiB0aGlzLnRlbXBsYXRlcykge1xyXG4gICAgICAgICAgICBpdGVtID0gdGhpcy5fY29tbW9uU2VydmljZS5maW5kVGVtcGxhdGVGcm9tTGlzdCh0aGlzLnRlbXBsYXRlcywgY29udHJvbFR5cGUpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGl0ZW07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldFRlbXBsYXRlKHRlbXBsYXRlTmFtZTogc3RyaW5nKSB7XHJcbiAgICAgICAgaWYgKHRoaXMudGVtcGxhdGVbdGVtcGxhdGVOYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHRoaXMudGVtcGxhdGVbdGVtcGxhdGVOYW1lXSA9IHRoaXMuZmluZFRlbXBsYXRlKHRlbXBsYXRlTmFtZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aGlzLnRlbXBsYXRlW3RlbXBsYXRlTmFtZV07XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHVwZGF0ZVJvd0dyb3VwTWV0YURhdGEoZGF0YVNvdXJjZTogYW55KSB7XHJcbiAgICAgICAgdGhpcy5yb3dHcm91cE1ldGFkYXRhID0ge307XHJcbiAgICAgICAgbGV0IGluZGV4R3JvdXAgPSAwO1xyXG4gICAgICAgIGNvbnN0IGdyb3VwRmllbGROYW1lOiBzdHJpbmcgPSB0aGlzLl9ncm91cEZpZWxkO1xyXG4gICAgICAgIC8vIFThuqFvIGLhu6thIDEgZ3JvdXAgdmFsdWUgYmVmb3JlXHJcbiAgICAgICAgbGV0IHByZXZpb3VzR3JvdXBWYWx1ZSA9IHRoaXMuX2NvbW1vblNlcnZpY2UuZ3VpZCgpO1xyXG4gICAgICAgIGlmIChncm91cEZpZWxkTmFtZSAmJiBncm91cEZpZWxkTmFtZSAhPSAnJykge1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGFTb3VyY2UubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHJvd0RhdGEgPSBkYXRhU291cmNlW2ldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZ3JvdXBWYWx1ZSA9IHJvd0RhdGFbZ3JvdXBGaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGdyb3VwVmFsdWUgIT09IHByZXZpb3VzR3JvdXBWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMucm93R3JvdXBNZXRhZGF0YVtncm91cFZhbHVlXSA9IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXg6IGksIGluZGV4R3JvdXA6IGluZGV4R3JvdXArKywgc2l6ZTogMSwgaXRlbVJvb3Q6IHJvd0RhdGEsIGl0ZW1zOiBbcm93RGF0YV1cclxuICAgICAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubW9kZWwuZXhwYW5kZWRSb3dLZXlzW2dyb3VwVmFsdWVdID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0dyb3VwVmFsdWUgPSBncm91cFZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgaXRlbUdyb3VwID0gdGhpcy5yb3dHcm91cE1ldGFkYXRhW2dyb3VwVmFsdWVdO1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1Hcm91cC5zaXplKys7XHJcbiAgICAgICAgICAgICAgICAgICAgaXRlbUdyb3VwLml0ZW1zLnB1c2gocm93RGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByb3dEYXRhW3RoaXMuZmllbGRPcmRlcl0gPSB0aGlzLnJvd0dyb3VwTWV0YWRhdGFbZ3JvdXBWYWx1ZV0uc2l6ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd1NldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5ncyA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2F2ZUNvbG9yU2V0dGluZ3MoZGF0YSkge1xyXG4gICAgICAgIGlmIChkYXRhLmNvbG9yRmlsdGVyVGFibGUpIHtcclxuICAgICAgICAgICAgY29uc3QgY2xvbmVBcnIgPSBkYXRhLmNvbG9yRmlsdGVyVGFibGUuc2xpY2UoKTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IGNsb25lQXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2xvbmVBcnJbaV0uZmlsdGVyVmFsdWUgPT0gJycgfHwgY2xvbmVBcnJbaV0uZmlsdGVyVmFsdWUgPT0gbnVsbCB8fCBjbG9uZUFycltpXS5maWx0ZXJWYWx1ZSA9PSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRhLmNvbG9yRmlsdGVyVGFibGUuc3BsaWNlKGksIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZCA9IGRhdGEuY29sb3JGaWx0ZXJGaWVsZDtcclxuICAgICAgICB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJUYWJsZSA9IGRhdGEuY29sb3JGaWx0ZXJUYWJsZTtcclxuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NSb3dDb2xvciA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuY2FjaGVDb2xvclNldHRpbmcoKTtcclxuICAgICAgICB0aGlzLnNldENvbG9yU2V0dGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNhdmVTZXR0aW5ncyhldmVudCkge1xyXG4gICAgICAgIGlmIChldmVudCkge1xyXG4gICAgICAgICAgICB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5kZXRhaWxzID0gZXZlbnQuZGV0YWlscztcclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkID0gZXZlbnQuc29ydEZpZWxkO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydEZpZWxkICE9IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXIgPSBldmVudC5zb3J0RGlyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuc29ydERpciA9IDA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmNvbHVtblNldHRpbmcuZ3JvdXBGaWVsZCA9IGV2ZW50Lmdyb3VwRmllbGQ7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwSW5DbGllbnQgPSBldmVudC5ncm91cEluQ2xpZW50O1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbiA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbmQocCA9PiBwLmZpZWxkID09IGV2ZW50Lmdyb3VwRmllbGQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5ncm91cENvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi52aXNpYmxlID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLmZvcmNlR2V0RGF0YSA9IHRydWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4gPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2F2ZUNvbHVtblNldHRpbmcoKTtcclxuICAgICAgICAgICAgdGhpcy5leHRlbmRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcclxuICAgICAgICAgICAgdGhpcy5mb3JtYXRDb2x1bW5zKHRoaXMuc2V0dGluZy5jb2xzKTtcclxuICAgICAgICAgICAgdGhpcy5hcHBseUNvbHVtblNldHRpbmcoKTtcclxuICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5ncyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkRlbGV0ZVNldHRpbmdzKCkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5ncyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nID0gbmV3IENvbHVtblNldHRpbmcoKTtcclxuICAgICAgICB0aGlzLmRlbGV0ZUNvbHVtblNldHRpbmcoKTtcclxuICAgICAgICB0aGlzLmV4dGVuZENvbHVtbnModGhpcy5zZXR0aW5nLmNvbHMpO1xyXG4gICAgICAgIHRoaXMuZm9ybWF0Q29sdW1ucyh0aGlzLnNldHRpbmcuY29scyk7XHJcbiAgICAgICAgdGhpcy5hcHBseUNvbHVtblNldHRpbmcoKTtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXBwbHlDb2x1bW5TZXR0aW5nKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEZpZWxkKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0dGluZy5ncm91cENvbHVtbiA9IHRoaXMuc2V0dGluZy5jb2xzLmZpbmQocCA9PiBwLmZpZWxkID09IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLmdyb3VwRmllbGQpO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4uZm9yY2VHZXREYXRhID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5zZXR0aW5nLmdyb3VwQ29sdW1uLnJhd0NvbHVtbikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX2dyb3VwRmllbGQgPSB0aGlzLnNldHRpbmcuZ3JvdXBDb2x1bW4ucmF3Q29sdW1uLmZpZWxkO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fZ3JvdXBGaWVsZCA9IHRoaXMuc2V0dGluZy5ncm91cENvbHVtbi5maWVsZDtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuX2dyb3VwRmllbGQgPSBudWxsO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuX2dyb3VwSW5DbGllbnQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5ncm91cEluQ2xpZW50O1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5fZ3JvdXBGaWVsZCA9IG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLl9zb3J0RmllbGQgPSB0aGlzLnNldHRpbmcuY29sdW1uU2V0dGluZy5zb3J0RmllbGQ7XHJcbiAgICAgICAgdGhpcy5fc29ydERpciA9IHRoaXMuc2V0dGluZy5jb2x1bW5TZXR0aW5nLnNvcnREaXI7XHJcblxyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsICYmIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZyAmJiB0aGlzLl9zb3J0RmllbGQpIHtcclxuICAgICAgICAgICAgdGhpcy5zb3J0SGlzdG9yeSA9IFt7IGZpZWxkOiB0aGlzLl9zb3J0RmllbGQsIGRpcjogdGhpcy5fc29ydERpciA/IHRoaXMuX3NvcnREaXIgOiAwIH1dO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5zb3J0SGlzdG9yeSA9IFtdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldENlbGxDbGFzc0hlYWRlcihjb2wpIHtcclxuICAgICAgICBsZXQgcmVzdWx0ID0gJyc7XHJcbiAgICAgICAgaWYgKGNvbC5jZWxsQ2xhc3MpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9IGNvbC5jZWxsQ2xhc3M7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghY29sLnNvcnQpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9ICcgTm9Tb3J0Q29sdW1uJztcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGNvbC5maWVsZCA9PSB0aGlzLl9zb3J0RmllbGQpIHtcclxuICAgICAgICAgICAgcmVzdWx0ICs9ICcgcC1zb3J0YWJsZS1jb2x1bW4nO1xyXG4gICAgICAgICAgICBpZiAodGhpcy5fc29ydERpciAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gJyBwLWhpZ2hsaWdodCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRDb2x1bW5TdHlsZShjb2w6IGFueSwgZm9ySGVhZGVyID0gZmFsc2UpIHtcclxuICAgICAgICBjb25zdCBzdHlsZTogYW55ID0ge307XHJcbiAgICAgICAgaWYgKGNvbC5maWVsZCA9PSAnbWV0YWRhdGFTdGF0dXMnKSB7XHJcbiAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnY2VudGVyJztcclxuICAgICAgICAgICAgcmV0dXJuIHN0eWxlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKGZvckhlYWRlcikge1xyXG4gICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2NlbnRlcic7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoY29sLnRleHRBbGlnbiA9PSBUZXh0QWxpZ24uTGVmdCkge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdsZWZ0JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjb2wudGV4dEFsaWduID09IFRleHRBbGlnbi5DZW50ZXIpIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAnY2VudGVyJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmIChjb2wudGV4dEFsaWduID09IFRleHRBbGlnbi5SaWdodCkge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdyaWdodCc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5hbGlnbkNlbnRlckNvbHVtbihjb2wpKSB7XHJcbiAgICAgICAgICAgICAgICBzdHlsZVsndGV4dC1hbGlnbiddID0gJ2NlbnRlcic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAodGhpcy5hbGlnblJpZ2h0Q29sdW1uKGNvbCkpIHtcclxuICAgICAgICAgICAgICAgIHN0eWxlWyd0ZXh0LWFsaWduJ10gPSAncmlnaHQnO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgc3R5bGVbJ3RleHQtYWxpZ24nXSA9ICdsZWZ0JztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gc3R5bGU7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIHB1YmxpYyBnZXRCb29rbWFya0NvbG9yKHJvd0RhdGEsIGNvbHVtbnMpIHtcclxuICAgICAgICBjb25zdCByOiBhbnkgPSB7IGRpc3BsYXk6ICdub25lJyB9O1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJGaWVsZCAmJiB0aGlzLnNldHRpbmcuY29sb3JGaWx0ZXJUYWJsZSkge1xyXG4gICAgICAgICAgICBsZXQgY29sO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGMgaW4gY29sdW1ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbHVtbnNbY10uZmllbGQgPT0gdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGQpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb2wgPSBjb2x1bW5zW2NdO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBsZXQgZm9yRGF0ZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBsZXQgZm9yTnVtYmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCBmb3JCb29sID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxldCB2YWx1ZSA9IHJvd0RhdGFbdGhpcy5zZXR0aW5nLmNvbG9yRmlsdGVyRmllbGRdO1xyXG4gICAgICAgICAgICBpZiAoY29sKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRhdGUgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRhdGV0aW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB0aGlzLmNvbnZlcnRUb0RhdGUodmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvckRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmludCB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuZGVjaW1hbFxyXG4gICAgICAgICAgICAgICAgICAgIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5pbnRXaXRob3V0TWFzayB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuY3VycmVuY3lcclxuICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3JOdW1iZXIgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmJvb2xlYW4pIHtcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9ICgvdHJ1ZS9pKS50ZXN0KHZhbHVlKTtcclxuICAgICAgICAgICAgICAgICAgICBmb3JCb29sID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMuX2NvbG9yRmlsdGVyVGFibGUubGVuZ3RoIC0gMTsgaSA+PSAwOyBpLS0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGl0ZW0gPSB0aGlzLl9jb2xvckZpbHRlclRhYmxlW2ldO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29tcGFyZVR5cGUgPSBpdGVtWzBdO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSBpdGVtWzVdO1xyXG4gICAgICAgICAgICAgICAgbGV0IGZpbHRlclZhbHVlOiBhbnkgPSBpdGVtWzFdO1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvckRhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJWYWx1ZSA9IGl0ZW1bMl07XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlclZhbHVlID09IG51bGwpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9yTnVtYmVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgZmlsdGVyVmFsdWUgPSBpdGVtWzNdO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChpc05hTihmaWx0ZXJWYWx1ZSkpIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoZm9yQm9vbCkgZmlsdGVyVmFsdWUgPSBpdGVtWzRdO1xyXG5cclxuICAgICAgICAgICAgICAgIGlmIChjb21wYXJlVHlwZSA9PSAncmVnZXgnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSArICcnO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoZmlsdGVyVmFsdWUsICdpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZS5tYXRjaChyZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgY2F0Y2gge1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdlcXVhbHMnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlID09IGZpbHRlclZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wYXJlVHlwZSA9PSAnbm90RXF1YWxzJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBmaWx0ZXJWYWx1ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ2NvbnRhaW5zJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoZmlsdGVyVmFsdWUsICdpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlLm1hdGNoKHJlKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLmJhY2tncm91bmQgPSB0aGlzLmJ1aWxkR3JhZGllbnRDb2xvcihjb2xvcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoY29tcGFyZVR5cGUgPT0gJ25vdENvbnRhaW5zJykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWUgKyAnJztcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCByZSA9IG5ldyBSZWdFeHAoZmlsdGVyVmFsdWUsICdpJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWx1ZS5tYXRjaChyZSkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5iYWNrZ3JvdW5kID0gdGhpcy5idWlsZEdyYWRpZW50Q29sb3IoY29sb3IpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbXBhcmVUeXBlID09ICdncmVhdGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA+IGZpbHRlclZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIGlmIChjb21wYXJlVHlwZSA9PSAnbGl0dGVyJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSA8IGZpbHRlclZhbHVlKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHIuYmFja2dyb3VuZCA9IHRoaXMuYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgci5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHI7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb252ZXJ0VG9EYXRlKHZhbHVlKSB7XHJcbiAgICAgICAgaWYgKHZhbHVlID09PSAne25vd30nKSByZXR1cm4gRGF0ZSgpO1xyXG5cclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgneycpICYmIHZhbHVlLmVuZHNXaXRoKCdkfScpKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnZH0nLCAnJykpO1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5zdGFydHNXaXRoKCd7JykgJiYgdmFsdWUuZW5kc1dpdGgoJ2h9JykpIHtcclxuICAgICAgICAgICAgdmFsdWUgPSBOdW1iZXIodmFsdWUucmVwbGFjZSgneycsICcnKS5yZXBsYWNlKCdofScsICcnKSk7XHJcbiAgICAgICAgICAgIGlmICghaXNOYU4odmFsdWUpKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgICAgIGRhdGUuc2V0SG91cnMoZGF0ZS5nZXRIb3VycygpICsgdmFsdWUpO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAodmFsdWUuc3RhcnRzV2l0aCgneycpICYmIHZhbHVlLmVuZHNXaXRoKCdtfScpKSB7XHJcbiAgICAgICAgICAgIHZhbHVlID0gTnVtYmVyKHZhbHVlLnJlcGxhY2UoJ3snLCAnJykucmVwbGFjZSgnbX0nLCAnJykpO1xyXG4gICAgICAgICAgICBpZiAoIWlzTmFOKHZhbHVlKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKCk7XHJcbiAgICAgICAgICAgICAgICBkYXRlLnNldE1pbnV0ZXMoZGF0ZS5nZXRNaW51dGVzKCkgKyB2YWx1ZSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh2YWx1ZS5pbmRleE9mKCcvJykgPiAtMSkge1xyXG4gICAgICAgICAgICBjb25zdCBwYXJ0cyA9IHZhbHVlLnNwbGl0KCcvJyk7XHJcbiAgICAgICAgICAgIGlmIChwYXJ0cy5sZW5ndGggPiAyKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocGFydHNbMl0gKyAnLScgKyBwYXJ0c1sxXSArICctJyArIHBhcnRzWzBdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh2YWx1ZSk7XHJcbiAgICAgICAgaWYgKCFpc05hTihkYXRlLmdldERhdGUoKSkpIHJldHVybiBkYXRlO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgYnVpbGRHcmFkaWVudENvbG9yKGNvbG9yKSB7XHJcbiAgICAgICAgcmV0dXJuIGBsaW5lYXItZ3JhZGllbnQoOTBkZWcsICR7Y29sb3J9IDAlLCAke2NvbG9yfTRkIDM1JSwgJHtjb2xvcn0xYSA2MCUsIHRyYW5zcGFyZW50IDEwMCUpYDtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFsaWduQ2VudGVyQ29sdW1uKGNvbCkge1xyXG4gICAgICAgIHJldHVybiBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuZGF0ZXRpbWUgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmRhdGUgfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmJvb2xlYW4gfHwgY29sLmRhdGFUeXBlID09IERhdGFUeXBlLmVudW07XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhbGlnblJpZ2h0Q29sdW1uKGNvbCkge1xyXG4gICAgICAgIHJldHVybiBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuaW50IHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5kZWNpbWFsIHx8IGNvbC5kYXRhVHlwZSA9PSBEYXRhVHlwZS5pbnRXaXRob3V0TWFzayB8fCBjb2wuZGF0YVR5cGUgPT0gRGF0YVR5cGUuY3VycmVuY3k7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGdldENvbFNwYW5Hcm91cCA9IChudW1PZkNvbEN1c3RvbTogbnVtYmVyID0gMCkgPT4ge1xyXG4gICAgICAgIHJldHVybiB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIoeCA9PiB4LnZpc2libGUgPT09IG51bGwgfHwgeC52aXNpYmxlID09PSB1bmRlZmluZWQgfHwgeC52aXNpYmxlID09PSB0cnVlKS5sZW5ndGhcclxuICAgICAgICAgICAgKyAodGhpcy5zZXR0aW5nLmhpZGRlbk9yZGVyQ29sdW1uID8gMCA6IDEpXHJcbiAgICAgICAgICAgICsgKHRoaXMuc2V0dGluZy5oaWRkZW5GdW5jdGlvbkNvbHVtbiA/IDAgOiAxKVxyXG4gICAgICAgICAgICAtIG51bU9mQ29sQ3VzdG9tO1xyXG4gICAgfTtcclxuXHJcbiAgICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZUtleXByZXNzQ29udHJvbCkge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5jb250ZXh0ICYmIHRoaXMuY29udGV4dC5yb290LmRhdGEubGlzdFF1ZXVlKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsaXN0UXVldWUgPSB0aGlzLmNvbnRleHQucm9vdC5kYXRhLmxpc3RRdWV1ZTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gbGlzdFF1ZXVlLmluZGV4T2YodGhpcyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGxpc3RRdWV1ZS5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLnRpbWVvdXQpIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXQpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXNhYmxlTXVsdGlwbGVEZWxldGUoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlRGVsZXRlKGl0ZW0pKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGRpc2FibGVFZGl0KHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVFZGl0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodGhpcy5oaWRkZW5FZGl0KSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocm93RGF0YVsnbWV0YWRhdGFTdGF0dXMnXSAmJiByb3dEYXRhWydtZXRhZGF0YVN0YXR1cyddICE9ICcwJykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBkaXNhYmxlRGVsZXRlKHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVEZWxldGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICh0aGlzLmhpZGRlbkRlbGV0ZSkge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gJiYgcm93RGF0YVsnbWV0YWRhdGFTdGF0dXMnXSAhPSAnMCcpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd0hpc3Rvcnkocm93RGF0YSkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5zaG93SGlzdG9yeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zZXR0aW5nLmhpc3RvcnkgPSByb3dEYXRhO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93TGlzdFZlcnNpb24ocm93RGF0YSkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy52ZXJzaW9uTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLnNldHRpbmcudmVyc2lvbk1vZGVsLml0ZW1EYXRhID0gcm93RGF0YTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFdpZHRoRnVuY3Rpb24odGFibGUpIHtcclxuICAgICAgICBpZiAodGhpcy53aWR0aEZ1bmN0aW9uQ29sdW1uKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCB3aWR0aEluUGl4ZWwgPSB0aGlzLl9kZWZhdWx0V2l0aEZ1bmN0aW9uQ29sdW1uO1xyXG4gICAgICAgIGNvbnN0IHRkID0gdGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0ZFtjbGFzcyo9XCJjb2x1bW4tZnVuY3Rpb25cIl0nKTtcclxuICAgICAgICBpZiAodGQpIHtcclxuICAgICAgICAgICAgY29uc3QgZW1Ub1BpeGNlbCA9IHRoaXMuZ2V0Rm9udFNpemVJblBpeGVsKHRkKTtcclxuICAgICAgICAgICAgY29uc3QgYnV0dG9ucyA9IHRkLmdldEVsZW1lbnRzQnlUYWdOYW1lKCdidXR0b24nKTtcclxuICAgICAgICAgICAgY29uc3Qgd2lkdGggPSBidXR0b25zLmxlbmd0aCAqIDIuNDsgLy8gYnV0dG9uIHdpZHRoOiAyLjRyZW1cclxuICAgICAgICAgICAgY29uc3QgdG1wV2lkdGhJblBpeGVsID0gd2lkdGggKiBlbVRvUGl4Y2VsICsgNjsgLy8gNiBsYSB0b25nIHBhZGRpbmcgbGVmdCwgcmlnaHQgY3VhIHRoXHJcbiAgICAgICAgICAgIGlmICh3aWR0aEluUGl4ZWwgPCB0bXBXaWR0aEluUGl4ZWwpIHtcclxuICAgICAgICAgICAgICAgIHdpZHRoSW5QaXhlbCA9IHRtcFdpZHRoSW5QaXhlbDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgdGggPSB0YWJsZS5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJ3RoW2NsYXNzKj1cInNldHRpbmctY2VsbFwiXScpO1xyXG4gICAgICAgIGlmICh0aCkge1xyXG4gICAgICAgICAgICBjb25zdCBlbVRvUGl4Y2VsID0gdGhpcy5nZXRGb250U2l6ZUluUGl4ZWwodGgpO1xyXG4gICAgICAgICAgICBjb25zdCBidXR0b25zID0gdGguZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ2J1dHRvbicpO1xyXG4gICAgICAgICAgICBjb25zdCB3aWR0aCA9IGJ1dHRvbnMubGVuZ3RoICogMi40IC8gMC44NTsgLy8gYnV0dG9uIHdpZHRoOiAyLjRyZW0sIGZvbnQtc2l6ZSB0aCAwLjg1cmVtXHJcbiAgICAgICAgICAgIGNvbnN0IHRtcFdpZHRoSW5QaXhlbCA9IHdpZHRoICogZW1Ub1BpeGNlbCArIDY7IC8vIDYgbGEgdG9uZyBwYWRkaW5nIGxlZnQsIHJpZ2h0IGN1YSB0aFxyXG4gICAgICAgICAgICBpZiAod2lkdGhJblBpeGVsIDwgdG1wV2lkdGhJblBpeGVsKSB7XHJcbiAgICAgICAgICAgICAgICB3aWR0aEluUGl4ZWwgPSB0bXBXaWR0aEluUGl4ZWw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuX3dpZHRoRnVuY3Rpb25Db2x1bW4gPSBgJHt3aWR0aEluUGl4ZWx9cHhgO1xyXG4gICAgICAgIHRoaXMud2lkdGhGdW5jdGlvbkNvbHVtbkNoYW5nZS5lbWl0KHRoaXMuX3dpZHRoRnVuY3Rpb25Db2x1bW4pO1xyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgZ2V0Rm9udFNpemVJblBpeGVsKGVsKSB7XHJcbiAgICAgICAgcmV0dXJuIE51bWJlcihnZXRDb21wdXRlZFN0eWxlKGVsLCAnJykuZm9udFNpemUubWF0Y2goLygoXFxkfC4pKylweC8pWzFdKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBwcm9jZXNzQmFzZURhdGEoKSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVQcm9jZXNzRGF0YSh0aGlzLl9yYXdEYXRhU291cmNlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIHByZVByb2Nlc3NEYXRhKGRhdGFTb3VyY2UpOiBQcm9taXNlPGFueT4ge1xyXG4gICAgICAgIGNvbnN0IGNvbEhhc1BpcGUgPSB0aGlzLnNldHRpbmcuY29scy5maWx0ZXIoeCA9PiB4LnBpcGUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgY29sIG9mIGNvbEhhc1BpcGUpIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGRhdGFTb3VyY2UpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtKDxQaXBlVHJhbnNmb3JtPmNvbC5waXBlLCBjb2wuYXN5bmNQaXBlLCBpdGVtW2NvbC5maWVsZF0pLnRoZW4ocnMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGl0ZW1bYHBpcGVfXyR7Y29sLmZpZWxkfSBgXSA9IHJzO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyB0cmFuc2Zvcm0ocGlwZTogUGlwZVRyYW5zZm9ybSwgYXN5bmNQaXBlOiBib29sZWFuLCB2YWx1ZSk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAgICAgaWYgKHRoaXMuY2FjaGVkVHJhbnNmb3Jtc1t2YWx1ZV0pIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkVHJhbnNmb3Jtc1t2YWx1ZV07XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoYXN5bmNQaXBlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IGF3YWl0IHBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5jYWNoZWRUcmFuc2Zvcm1zW3ZhbHVlXSA9IHZhbDtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHBpcGUudHJhbnNmb3JtKHZhbHVlKTtcclxuICAgICAgICAgICAgdGhpcy5jYWNoZWRUcmFuc2Zvcm1zW3ZhbHVlXSA9IHZhbDtcclxuICAgICAgICAgICAgcmV0dXJuIHZhbDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZVJvd09yZGVyZWQoZXZ0KSB7XHJcbiAgICAgICAgdGhpcy5vblJlb3JkZXJlZC5lbWl0KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dTZXR0aW5nUm93Q29sb3IoKSB7XHJcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzUm93Q29sb3IgPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBidWlsZEZpbHRlckNvbHVtbihjb2xzOiBDb2x1bW5TY2hlbWFCYXNlW10pIHtcclxuICAgICAgICBjb25zdCB0ZW1wbGF0ZUZpbHRlciA9IHRoaXMudGVtcGxhdGVGaWx0ZXI7XHJcbiAgICAgICAgY29scy5mb3JFYWNoKGNvbCA9PiB7XHJcbiAgICAgICAgICAgIGlmIChjb2wuY29udHJvbFR5cGUgPT0gQ29udHJvbFR5cGUuZHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2wuYmFzZVNlcnZpY2UgfHwgKGNvbC5kYXRhU291cmNlICYmIGNvbC5kYXRhU291cmNlLmxlbmd0aCA+IDApKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5nZXRGaWVsZEZpbHRlcihjb2wpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzQXJyYXlGaWVsZDogY29sLmlzQXJyYXlGaWVsZCA/IHRydWUgOiBmYWxzZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJTY2hlbWEuZHJvcGRvd25bY29sLmZpZWxkXSA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5jb2wsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFwcGVuZFRvOiAnYm9keScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyOiBgQ2jhu41uICR7Y29sLmxhYmVsfWAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG11bHRpcGxlOiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkT25Jbml0OiB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpc1NlcnZlckxvYWQ6IGNvbC5pc1NlcnZlckxvYWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZyhgQ2jGsGEgY+G6pXUgaMOsbmggYmFzZVNlcnZpY2UgaG/hurdjIGRhdGFTb3VyY2UgY2hvIGPhu5l0ICR7Y29sLmZpZWxkfTogJHtjb2wubGFiZWx9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgc3dpdGNoIChjb2wuZGF0YVR5cGUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuYm9vbGVhbjpcclxuICAgICAgICAgICAgICAgICAgICB0ZW1wbGF0ZUZpbHRlci5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBuZXcgRmlsdGVyKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiB0aGlzLmdldEZpZWxkRmlsdGVyKGNvbCksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuaW4sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VGaWVsZDogY29sLmZpZWxkXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuaW50OlxyXG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5pbnRXaXRob3V0TWFzazpcclxuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuZGVjaW1hbDpcclxuICAgICAgICAgICAgICAgIGNhc2UgRGF0YVR5cGUuY3VycmVuY3k6XHJcbiAgICAgICAgICAgICAgICAgICAgdGVtcGxhdGVGaWx0ZXIucHVzaCguLi50aGlzLmdldFJhbmdlRmlsdGVyKGNvbCkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgY2FzZSBEYXRhVHlwZS5kYXRlOlxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGF0ZVJhbmdlRmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGUpID0+IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGF0ZSkgPT4gbmV3IERhdGUoZGF0ZS5nZXRGdWxsWWVhcigpLCBkYXRlLmdldE1vbnRoKCksIGRhdGUuZ2V0RGF0ZSgpICsgMSwgMCwgMCwgLTEpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBjYXNlIERhdGFUeXBlLmRhdGV0aW1lOlxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLnRoaXMuZ2V0RGF0ZVJhbmdlRmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGUpID0+IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRhdGUpID0+IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgZGF0ZS5nZXRIb3VycygpLCBkYXRlLmdldE1pbnV0ZXMoKSwgZGF0ZS5nZXRTZWNvbmRzKCkpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlRmlsdGVyLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZ2V0RmllbGRGaWx0ZXIoY29sKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5jb250YWluLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldERhdGVSYW5nZUZpbHRlcihjb2w6IENvbHVtblNjaGVtYUJhc2UsIHBhcnNlRGF0ZUZyb206IChkYXRlOiBEYXRlKSA9PiBEYXRlLCBwYXJzZURhdGVUbzogKGRhdGU6IERhdGUpID0+IERhdGUpIHtcclxuICAgICAgICByZXR1cm4gdGhpcy5nZXRSYW5nZUZpbHRlcihjb2wsXHJcbiAgICAgICAgICAgIGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1bMF0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bMF0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGF0ZUZyb20oZGF0ZSk7XHJcbiAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgIGl0ZW0gPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW1bMV0gPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGl0ZW1bMV0pO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlRGF0ZVRvKGRhdGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFJhbmdlRmlsdGVyKGNvbDogQ29sdW1uU2NoZW1hQmFzZSwgZnVuY0dldFZhbHVlRnJvbTogKGl0ZW0pID0+IGFueSA9IG51bGwsIGZ1bmNHZXRWYWx1ZVRvOiAoaXRlbSkgPT4gYW55ID0gbnVsbCkge1xyXG4gICAgICAgIHJldHVybiBbXHJcbiAgICAgICAgICAgIG5ldyBGaWx0ZXIoe1xyXG4gICAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZ2V0RmllbGRGaWx0ZXIoY29sKSxcclxuICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5ncmVhdGVyVGhhbkVxdWFsLFxyXG4gICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZCxcclxuICAgICAgICAgICAgICAgIHN1YkZpZWxkOiAwLFxyXG4gICAgICAgICAgICAgICAgZnVuY0dldFZhbHVlOiBmdW5jR2V0VmFsdWVGcm9tID8gZnVuY0dldFZhbHVlRnJvbSA6IChpdGVtKSA9PiBpdGVtWzBdLFxyXG4gICAgICAgICAgICB9KSxcclxuICAgICAgICAgICAgbmV3IEZpbHRlcih7XHJcbiAgICAgICAgICAgICAgICBmaWVsZDogdGhpcy5nZXRGaWVsZEZpbHRlcihjb2wpLFxyXG4gICAgICAgICAgICAgICAgb3BlcmF0b3I6IE9wZXJhdG9yLmxvd2VyVGhhbkVxdWFsLFxyXG4gICAgICAgICAgICAgICAgc291cmNlRmllbGQ6IGNvbC5maWVsZCxcclxuICAgICAgICAgICAgICAgIHN1YkZpZWxkOiAxLFxyXG4gICAgICAgICAgICAgICAgZnVuY0dldFZhbHVlOiBmdW5jR2V0VmFsdWVUbyA/IGZ1bmNHZXRWYWx1ZVRvIDogKGl0ZW0pID0+IGl0ZW1bMV0sXHJcbiAgICAgICAgICAgIH0pXHJcbiAgICAgICAgXTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldEZpZWxkRmlsdGVyKGNvbCkge1xyXG4gICAgICAgIHJldHVybiBjb2wuZmllbGRGaWx0ZXIgPz8gY29sLmZpZWxkO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBnZXRDb250ZXh0Q3VzdG9tRmlsdGVyKCkge1xyXG4gICAgICAgIHJldHVybiB7fTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2V0SW5pdEZpbHRlcihkZWZhdWx0RmlsdGVyOiBLZXlWYWx1ZVR5cGUpIHtcclxuICAgICAgICBpZiAoZGVmYXVsdEZpbHRlcikge1xyXG4gICAgICAgICAgICBPYmplY3Qua2V5cyhkZWZhdWx0RmlsdGVyKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckRhdGFba2V5XSA9IGRlZmF1bHRGaWx0ZXJba2V5XTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyX2NvbHVtbiA9IHRoaXMuX2NydWRTZXJ2aWNlLmdldEZpbHRlckZyb21UZW1wbGF0ZSh0aGlzLnRlbXBsYXRlRmlsdGVyLCB0aGlzLmdldE1pbmltaXplRGF0YSh0aGlzLmZpbHRlckRhdGEpKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uU2VhcmNoID0gKG5vZGU/KSA9PiB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwubG9hZGluZykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyQm94Rm9jdXMobm9kZSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXJfY29sdW1uID0gdGhpcy5fY3J1ZFNlcnZpY2UuZ2V0RmlsdGVyRnJvbVRlbXBsYXRlKHRoaXMudGVtcGxhdGVGaWx0ZXIsIHRoaXMuZ2V0TWluaW1pemVEYXRhKHRoaXMuZmlsdGVyRGF0YSkpO1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy5wYWdlU2V0dGluZy5wYWdlID0gMTtcclxuICAgICAgICB0aGlzLmdldERhdGEoKTtcclxuICAgIH07XHJcblxyXG4gICAgcHJpdmF0ZSBnZXRNaW5pbWl6ZURhdGEobW9kZWwpIHtcclxuICAgICAgICBpZiAoaXNMaXRlcmFsT2JqZWN0KG1vZGVsKSkge1xyXG4gICAgICAgICAgICBpZiAobW9kZWwuX2Ryb3Bkb3dudmFsdWUgIT0gbnVsbCAmJiBtb2RlbC5fZHJvcGRvd252YWx1ZSAhPT0gJycpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBtb2RlbFttb2RlbC5fZHJvcGRvd252YWx1ZV07XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSB7fTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBrZXkgaW4gbW9kZWwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChrZXkgIT0gJ19zdGF0dXMnICYmIGtleSAhPSAnX2Vycm9ycycgJiYga2V5ICE9ICdfc291cmNlJykge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXRNaW5pbWl6ZURhdGEobW9kZWxba2V5XSk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IG51bGwpIGRhdGFba2V5XSA9IHZhbHVlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBkYXRhO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIGlmIChpc0FycmF5KG1vZGVsKSkge1xyXG4gICAgICAgICAgICBjb25zdCBhcnIgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG1vZGVsKSB7XHJcbiAgICAgICAgICAgICAgICBhcnIucHVzaCh0aGlzLmdldE1pbmltaXplRGF0YShpdGVtKSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGFycjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSBpZiAobW9kZWwgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gbW9kZWw7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNsZWFyU2VhcmNoKG5vZGUsIGZpZWxkKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwubG9hZGluZykgcmV0dXJuO1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlckRhdGFbZmllbGRdICE9IG51bGwgJiYgdGhpcy5maWx0ZXJEYXRhW2ZpZWxkXSAhPT0gJycpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW2ZpZWxkXSA9IG51bGw7XHJcbiAgICAgICAgICAgIHRoaXMub25TZWFyY2gobm9kZSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckJveEZvY3VzKG5vZGUpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25DbGVhck51bWJlclNlYXJjaChub2RlLCBjb250cm9sKSB7XHJcbiAgICAgICAgaWYgKHRoaXMubW9kZWwubG9hZGluZykgcmV0dXJuO1xyXG4gICAgICAgIGlmIChjb250cm9sKSB7XHJcbiAgICAgICAgICAgIGlmIChjb250cm9sLmNsZWFyKCkpIHtcclxuICAgICAgICAgICAgICAgIC8vIG5vIG5lZWQgY2xlYXIgZGF0YSBiZWNhdXNlIGl0J3MgMiB3YXlzIGJpbmRpbmdcclxuICAgICAgICAgICAgICAgIHRoaXMub25TZWFyY2gobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZUZpbHRlckJveEZvY3VzKG5vZGUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNsZWFyRGF0ZVNlYXJjaChub2RlLCBjb250cm9sLCBmaWVsZCkge1xyXG4gICAgICAgIGlmICh0aGlzLm1vZGVsLmxvYWRpbmcpIHJldHVybjtcclxuICAgICAgICBpZiAoY29udHJvbCkge1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbC5jbGVhcigpKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBuZWVkIGNsZWFyIGRhdGEgYmVjYXVzZSBub3QgMiB3YXlzIGJpbmRpbmdcclxuICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0gPSBbdW5kZWZpbmVkLCB1bmRlZmluZWRdO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblNlYXJjaChub2RlKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaGFuZGxlRmlsdGVyQm94Rm9jdXMobm9kZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uQ2hhbmdlRGF0ZVRpbWUoZXZ0LCBmaWVsZCkge1xyXG4gICAgICAgIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0gPSBldnQudmFsdWU7XHJcbiAgICAgICAgdGhpcy5vblNlYXJjaCgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvbkNoYW5nZUJvb2xlYW4oZXZ0LCBmaWVsZCkge1xyXG4gICAgICAgIGlmICh0aGlzLmZpbHRlckRhdGFbZmllbGRdLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVtmaWVsZF0uc3BsaWNlKDAsIDEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uU2VhcmNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2hvd0NoZWNrQm94RmlsdGVyTWVudShldnQsIGZpZWxkKSB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50RmllbGRGaWx0ZXIgPSBmaWVsZDtcclxuICAgICAgICB0aGlzLmJ1dHRvbkNvbnRleHRzID0gWy4uLnRoaXMuY2hlY2tCb3hDb250ZXh0TWVudV07XHJcbiAgICAgICAgdGhpcy5fc2hvd0NvbnRleHRNZW51KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNoYW5nZUZpbHRlckJvb2xlYW4odmFsdWUpIHtcclxuICAgICAgICBpZiAodmFsdWUgIT09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXJEYXRhW3RoaXMuY3VycmVudEZpZWxkRmlsdGVyXSA9IFt2YWx1ZV07XHJcbiAgICAgICAgICAgIHRoaXMuY2hlY2tCb3hDb250ZXh0TWVudS5mb3JFYWNoKG1lbnUgPT4gbWVudS5zdHlsZUNsYXNzID0gbnVsbCk7XHJcbiAgICAgICAgICAgIGlmICh2YWx1ZSA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jaGVja0JveENvbnRleHRNZW51WzBdLnN0eWxlQ2xhc3MgPSAnYWN0aXZlJztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuY2hlY2tCb3hDb250ZXh0TWVudVsxXS5zdHlsZUNsYXNzID0gJ2FjdGl2ZSc7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMuZmlsdGVyRGF0YVt0aGlzLmN1cnJlbnRGaWVsZEZpbHRlcl0gPSBudWxsO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uU2VhcmNoKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGhhbmRsZUZpbHRlckJveEZvY3VzKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZSkge1xyXG4gICAgICAgICAgICBjb25zdCBhY3RpdmVFbDogYW55ID0gZG9jdW1lbnQuYWN0aXZlRWxlbWVudDtcclxuXHJcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaW5TYW1lQm94ID0gdGhpcy5jaGVja0luTm9kZShhY3RpdmVFbCwgbm9kZSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWluU2FtZUJveCB8fCAoYWN0aXZlRWwgJiYgYWN0aXZlRWwubm9kZU5hbWUgIT0gJ0lOUFVUJykpIHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnB1dCA9IG5vZGUucXVlcnlTZWxlY3RvcignaW5wdXQnKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQpIGlucHV0LnNlbGVjdCgpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW5TYW1lQm94KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYWN0aXZlRWwuc2VsZWN0KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBvblNob3dGaWx0ZXJEcm9wZG93blBhbmVsKGV2ZW50KSB7XHJcbiAgICAgICAgaWYgKCFldmVudCB8fCAhZXZlbnQuY29tcG9uZW50KSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IGRyb3Bkb3duID0gZXZlbnQuY29tcG9uZW50LmVsLm5hdGl2ZUVsZW1lbnQ7XHJcbiAgICAgICAgY29uc3QgY2VsbEhlYWRlckZpbHRlciA9IGRyb3Bkb3duLmNsb3Nlc3QoJ3RoJyk7XHJcblxyXG4gICAgICAgIC8vIHRoZW0gY2xhc3MgZm9jdXMtd2l0aGluIGRlIGRyb3Bkb3duIGlucHV0IGx1YyBmb2N1cyBraG9uZyBiaSBkZSBib2kgY2FjIHN0aWNreSBjb2x1bW5cclxuICAgICAgICBjZWxsSGVhZGVyRmlsdGVyICYmIGNlbGxIZWFkZXJGaWx0ZXIuY2xhc3NMaXN0LmFkZCgnZm9jdXMtd2l0aGluJyk7XHJcbiAgICB9XHJcblxyXG4gICAgb25IaWRlRmlsdGVyRHJvcGRvd25QYW5lbChldmVudCkge1xyXG4gICAgICAgIGlmICghZXZlbnQgfHwgIWV2ZW50LmNvbXBvbmVudCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBkcm9wZG93biA9IGV2ZW50LmNvbXBvbmVudC5lbC5uYXRpdmVFbGVtZW50O1xyXG4gICAgICAgIGNvbnN0IGNlbGxIZWFkZXJGaWx0ZXIgPSBkcm9wZG93bi5jbG9zZXN0KCd0aCcpO1xyXG4gICAgICAgIGNlbGxIZWFkZXJGaWx0ZXIgJiYgY2VsbEhlYWRlckZpbHRlci5jbGFzc0xpc3QucmVtb3ZlKCdmb2N1cy13aXRoaW4nKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgaW5pdEZpbHRlckJveEZvY3VzKG5vZGUpIHtcclxuICAgICAgICBpZiAobm9kZSAmJiBub2RlLnBhcmVudE5vZGUpIHtcclxuICAgICAgICAgICAgaWYgKG5vZGUucGFyZW50Tm9kZS5vZmZzZXRXaWR0aCA8IDI1MCkge1xyXG4gICAgICAgICAgICAgICAgbm9kZS5jbGFzc0xpc3QuYWRkKCdzaG9ydC1maWx0ZXItYm94Jyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBub2RlLmNsYXNzTGlzdC5yZW1vdmUoJ3Nob3J0LWZpbHRlci1ib3gnKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGNoZWNrSW5Ob2RlKGNoaWxkLCBwYXJlbnQpIHtcclxuICAgICAgICBsZXQgc3RhcnQgPSBjaGlsZDtcclxuICAgICAgICB3aGlsZSAoc3RhcnQgJiYgc3RhcnQucGFyZW50Tm9kZSAhPSBwYXJlbnQpIHtcclxuICAgICAgICAgICAgc3RhcnQgPSBzdGFydC5wYXJlbnROb2RlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIHN0YXJ0ICE9IG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNhdmVQYWdlU2l6ZSgpIHtcclxuICAgICAgICB0aGlzLnNhdmVQYWdlU2V0dGluZygpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBoYW5kbGVUYWJsZVJlbmRlcmVkKCkge1xyXG4gICAgICAgIGlmICh0aGlzLnRhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZnRlclJlbmRlcmVkKHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMudHJlZVRhYmxlKSB7XHJcbiAgICAgICAgICAgIHRoaXMuX3Byb2Nlc3NBZnRlclJlbmRlcmVkKHRoaXMudHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLm9uUmVsb2FkZWQuZW1pdCh0cnVlKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIF9wcm9jZXNzQWZ0ZXJSZW5kZXJlZCh0YWJsZUVsZW1lbnQ6IGFueSkge1xyXG4gICAgICAgIGlmICghdGhpcy5zdG9wQ2FsY3VsYXRpbmdGdW5jdGlvbkNvbHVtbldpZHRoKSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnRhYmxlKSB0aGlzLmdldFdpZHRoRnVuY3Rpb24odGhpcy50YWJsZSk7XHJcblxyXG4gICAgICAgICAgICB0aGlzLnN0b3BDYWxjdWxhdGluZ0Z1bmN0aW9uQ29sdW1uV2lkdGggPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCAkdGhGaXJzdCA9IHRhYmxlRWxlbWVudC5xdWVyeVNlbGVjdG9yKCd0aGVhZCB0cjpmaXJzdC1jaGlsZCB0aDpmaXJzdC1jaGlsZCcpO1xyXG4gICAgICAgIGNvbnN0IG9mZnNldFRvcCA9ICR0aEZpcnN0Lm9mZnNldFRvcDtcclxuICAgICAgICBjb25zdCAkdGhzID0gdGFibGVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ3RoZWFkIHRyOm5vdCg6Zmlyc3QtY2hpbGQpIHRoJyk7XHJcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAkdGhzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgICAgICAgICR0aHNbaV0uc3R5bGUudG9wID0gYCR7JHRoc1tpXS5vZmZzZXRUb3AgLSBvZmZzZXRUb3B9cHhgO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBTZWxlY3QgbOG6oWkgaXRlbSBjdeG7kWkgY8O5bmcgxJHGsOG7o2Mgc2VsZWN0IHRyxrDhu5tjIMSRw7NcclxuICAgICAgICBpZiAodGhpcy5zZXR0aW5nLnJlU2VsZWN0TGFzdEl0ZW0pIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtTGFzdCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgJHRyID0gdGhpcy5nZXRUckJ5Um93RGF0YSh0aGlzLm1vZGVsLnNlbGVjdGVkSXRlbUxhc3QpO1xyXG4gICAgICAgICAgICAgICAgaWYgKCR0cikge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtTGFzdCA9IHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtTGFzdDtcclxuICAgICAgICAgICAgICAgICAgICAkdHIuY2xpY2soKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGdldFRyQnlSb3dEYXRhKHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAodGhpcy50cmVlVGFibGUpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9yYXdEYXRhU291cmNlLmZpbmRJbmRleChwID0+IHAuaWQgPT0gcm93RGF0YS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ciA9IHRoaXMudHJlZVRhYmxlLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvcihgdGJvZHkgdHJbcm93SW5kZXg9XCIke2luZGV4fVwiXWApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMudGFibGUpIHtcclxuICAgICAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLl9yYXdEYXRhU291cmNlLmZpbmRJbmRleChwID0+IHAuaWQgPT0gcm93RGF0YS5pZCk7XHJcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB0ciA9IHRoaXMudGFibGUuZWwubmF0aXZlRWxlbWVudC5xdWVyeVNlbGVjdG9yKGB0Ym9keSB0cltyb3dJbmRleD1cIiR7aW5kZXh9XCJdYCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdHI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBjcmVhdGVTZWFyY2hTY2hlbWEoKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5jb2xzID09IG51bGwpIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQuG6oW4gY2jGsGEgY+G6pXUgaMOsbmggY+G7mXQgY2hvIGRhbmggc8OhY2gnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jcmVhdGluZ1NlYXJjaEluZm8gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IHNlYXJjaEluZm8gPSBuZXcgU2VhcmNoSW5mbygpO1xyXG4gICAgICAgIHNlYXJjaEluZm8uc2NoZW1hID0gPEZvcm1Db250cm9sQmFzZVtdPltdO1xyXG4gICAgICAgIHNlYXJjaEluZm8uZmllbGREcm9wZG93biA9IHt9O1xyXG4gICAgICAgIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0ID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBjb2wgb2YgdGhpcy5zZXR0aW5nLmNvbHMpIHtcclxuICAgICAgICAgICAgaWYgKGNvbC5hbGxvd0ZpbHRlciAhPSBmYWxzZSAmJiBjb2wucmF3Q29sdW1uID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIGlmIChjb2wuZnVsbFRleHRTZWFyY2gpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoc2VhcmNoSW5mby5maWVsZFNlYXJjaFRleHQuaW5kZXhPZihjb2wuZmllbGQpID09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0LnB1c2goY29sLmZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0ID0gJ1TDrG0ga2nhur9tIHRoZW8gY8OhYyB0csaw4budbmc6JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0ICs9IGAgXCIke2NvbC5sYWJlbCA/IGNvbC5sYWJlbCA6IGNvbC5maWVsZH1cIixgO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRyb2wgPSBhd2FpdCB0aGlzLnNldHRpbmcuZnVuY3Rpb24uZ2V0U2VhcmNoQ29udHJvbChjb2wuZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGNvbnRyb2wgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goLi4uY29udHJvbCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoY29sLmJhc2VTZXJ2aWNlIHx8IChjb2wuZGF0YVNvdXJjZSAmJiBjb2wuZGF0YVNvdXJjZS5sZW5ndGggPiAwKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLmZpZWxkRHJvcGRvd25bY29sLmZpZWxkXSA9IG5ldyBEcm9wZG93bkNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uY29sLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbC5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBjb2wubXVsdGlwbGUgPyBPcGVyYXRvci5pbiA6IE9wZXJhdG9yLmVxdWFsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogY29sLm1kV2lkdGggPyBjb2wubWRXaWR0aCA6IDEwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZE9uSW5pdDogdHJ1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uZmllbGREcm9wZG93bltjb2wuZmllbGRdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGNvbC5kYXRhVHlwZSA9PSAnaW50Jykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnNjaGVtYS5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3IE51bWJlclJhbmdlQ29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tUeXBlOiAnaW50JyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiA2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZGF0YVR5cGUgPT0gJ2RlY2ltYWwnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgTnVtYmVyUmFuZ2VDb250cm9sU2NoZW1hKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiBjb2wubGFiZWwsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFza1R5cGU6ICdkZWNpbWFsJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiA2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZGF0YVR5cGUgPT0gJ2RhdGUnIHx8IGNvbC5kYXRhVHlwZSA9PSAnZGF0ZXRpbWUnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgRGF0ZVRpbWVSYW5nZUNvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkOiBjb2wuZmllbGQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFiZWw6IGNvbC5sYWJlbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuZ3JlYXRlclRoYW5FcXVhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiA2XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChjb2wuZGF0YVR5cGUgPT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlYXJjaEluZm8uc2NoZW1hLnB1c2goXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgQ2hlY2tCb3hMaXN0Q29udHJvbFNjaGVtYSh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGQ6IGNvbC5maWVsZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFTb3VyY2U6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyB2YWx1ZTogdHJ1ZSwgbGFiZWw6IGBDw7NgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsgdmFsdWU6IGZhbHNlLCBsYWJlbDogYEtow7RuZ2AgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdG9yOiBPcGVyYXRvci5lcXVhbCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZFdpZHRoOiBjb2wubWRXaWR0aCA/IGNvbC5tZFdpZHRoIDogMTBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY29sLmZpZWxkICE9IGNvbC5kYXRhVHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby5zY2hlbWEucHVzaChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXcgVGV4dENvbnRyb2xTY2hlbWEoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZDogY29sLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogY29sLmxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRvcjogT3BlcmF0b3IuY29udGFpbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRXaWR0aDogY29sLm1kV2lkdGggPyBjb2wubWRXaWR0aCA6IDEwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmIChzZWFyY2hJbmZvLmZpZWxkU2VhcmNoVGV4dCkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGZpZWxkIG9mIHNlYXJjaEluZm8uZmllbGRTZWFyY2hUZXh0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2VhcmNoSW5mby5maWVsZFNlYXJjaFRleHQuaW5kZXhPZihmaWVsZCkgPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLmZpZWxkU2VhcmNoVGV4dC5wdXNoKGZpZWxkKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIXNlYXJjaEluZm8udG9vbHRpcFNlYXJjaFRleHQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCA9ICdUw6xtIGtp4bq/bSB0aGVvIGPDoWMgdHLGsOG7nW5nOic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbCA9IHRoaXMuc2V0dGluZy5tb2RlbFNjaGVtYXMuZmluZChwID0+IHAuZmllbGQgPT0gZmllbGQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb2wgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0ICs9IGAgXCIke2NvbC5uYW1lfVwiLGA7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dCkge1xyXG4gICAgICAgICAgICBzZWFyY2hJbmZvLnRvb2x0aXBTZWFyY2hUZXh0ID0gc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dC5zdWJzdHJpbmcoMCwgc2VhcmNoSW5mby50b29sdGlwU2VhcmNoVGV4dC5sZW5ndGggLSAxKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5zZWFyY2hJbmZvID0gc2VhcmNoSW5mbztcclxuICAgICAgICB0aGlzLmNyZWF0aW5nU2VhcmNoSW5mbyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGNoZWNrUGVybWlzc2lvblRvVXNlQnV0dG9uKGJ1dHRvblBlcm1pc3Npb25Db2RlOiBzdHJpbmcpIHtcclxuICAgICAgICBpZiAodGhpcy5jdXJyZW50VXNlciA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcclxuICAgICAgICAgICAgY29uc3QgdGVtcCA9IHVzZXJTZXJ2aWNlLmdldEN1cnJlbnRVc2VyKCk7XHJcbiAgICAgICAgICAgIGlmICh0ZW1wID09IG51bGwpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLmN1cnJlbnRVc2VyID0gdGVtcDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGlzLmN1cnJlbnRVc2VyLmlzc3VwZXJ1c2VyLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJ1xyXG4gICAgICAgICAgICB8fCAodGhpcy5jdXJyZW50VXNlci5pc2FkbWluLnRvTG93ZXJDYXNlKCkgPT09ICd0cnVlJyAmJiB0aGlzLl9tb2R1bGVDb25maWdTZXJ2aWNlLmdldENvbmZpZygpLmVudmlyb25tZW50Lmlnbm9yZUFkbWluID09PSBmYWxzZSlcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICByZXR1cm4gdGhpcy5idXR0b25QZXJtaXNzaW9uTWFwLmdldChgJHt0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGV9LyR7dGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWV9LyR7YnV0dG9uUGVybWlzc2lvbkNvZGV9YCk7XHJcbiAgICB9XHJcblxyXG4gICAgc2V0RHJvcGRvd25EYXRhc291cmNlKGZpZWxkOiBzdHJpbmcsIGRhdGFTb3VyY2U6IGFueVtdKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuZmlsdGVyU2NoZW1hLmRyb3Bkb3duW2ZpZWxkXSkge1xyXG4gICAgICAgICAgICB0aGlzLmZpbHRlclNjaGVtYS5kcm9wZG93bltmaWVsZF0uZGF0YVNvdXJjZSA9IGRhdGFTb3VyY2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBhc3luYyBnZXRJdGVtV29ya2Zsb3dTZXR0aW5nKHNldHRpbmc6IENydWRMaXN0U2V0dGluZywgcm93RGF0YSkge1xyXG4gICAgICAgIGxldCB3b3JrZmxvd1NldHRpbmcgPSBzZXR0aW5nLndvcmtmbG93U2V0dGluZ05ldztcclxuICAgICAgICBpZiAoc2V0dGluZy5pc1dvcmtmbG93VHJlZVxyXG4gICAgICAgICAgICAmJiBzZXR0aW5nLndvcmtmbG93Q29uZmlnQWR2YW5jZVxyXG4gICAgICAgICAgICAmJiBzZXR0aW5nLndvcmtmbG93Q29uZmlnQWR2YW5jZS5nZXRXb3JrZmxvd1NldHRpbmdcclxuICAgICAgICApIHtcclxuICAgICAgICAgICAgd29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgc2V0dGluZy53b3JrZmxvd0NvbmZpZ0FkdmFuY2UuZ2V0V29ya2Zsb3dTZXR0aW5nKHJvd0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXdvcmtmbG93U2V0dGluZyB8fCB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLmxlbmd0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ8SQ4buRaSB0xrDhu6NuZyBjaMawYSDEkcaw4bujYyBj4bqldSBow6xuaCBxdXkgdHLDrG5oIG5naGnhu4dwIHbhu6UnKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIHdvcmtmbG93U2V0dGluZztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaG93Rm9ybVN0YXJ0V29ya2Zsb3cocm93RGF0YSkge1xyXG4gICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCB3b3JrZmxvd1NldHRpbmcgPSBhd2FpdCB0aGlzLmdldEl0ZW1Xb3JrZmxvd1NldHRpbmcodGhpcy5zZXR0aW5nLCByb3dEYXRhKTtcclxuICAgICAgICBpZiAoIXdvcmtmbG93U2V0dGluZykge1xyXG4gICAgICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIE7hur91IGNyZWF0ZSB0YXNrIHRoYXkgdsOsIGNo4bqheSBxdXkgdHLDrG5oIHbhu5tpIMSR4buRaSB0xrDhu6NuZyBjaMOtbmggdGjDrCBt4bufIGZvcm0gdGjDqm0gY8O0bmcgdmnhu4djXHJcbiAgICAgICAgaWYgKHdvcmtmbG93U2V0dGluZy5jcmVhdGVUYXNrSW5zdGVhZCkge1xyXG4gICAgICAgICAgICAvLyBLaeG7g20gdHJhIMSRw6MgdOG6oW8gY8O0bmcgdmnhu4djIGfhuq9uIHbhu5tpIGLhuqNuIGdoaSBjaMawYVxyXG4gICAgICAgICAgICAvLyBO4bq/dSBjw7MgcuG7k2kgdGjDrCBiw6FvXHJcbiAgICAgICAgICAgIGNvbnN0IHJlc3VsdENoZWNrRXhpc3QgPSAoYXdhaXQgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmNoZWNrRXhpc3RCeUZpbHRlcihbXHJcbiAgICAgICAgICAgICAgICB0aGlzLm5ld0ZpbHRlcignc2VydmljZUNvZGUnLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLnNlcnZpY2VDb2RlKSxcclxuICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHknLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWUpLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5uZXdGaWx0ZXIoJ2VudGl0eUtleScsIE9wZXJhdG9yLmVxdWFsLCByb3dEYXRhLmlkKVxyXG4gICAgICAgICAgICBdKSk7XHJcbiAgICAgICAgICAgIGlmICghcmVzdWx0Q2hlY2tFeGlzdC5zdWNjZXNzKSB7XHJcbiAgICAgICAgICAgICAgICByb3dEYXRhLl9fc3RhcnRpbmdXb3JrZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnQ8OzIGzhu5dpIHjhuqN5IHJhIGtoaSBraeG7g20gdHJhIHRy4bqhbmcgdGjDoWkgxJHDoyB04bqhbyBjw7RuZyB2aeG7h2MgaGF5IGNoxrBhJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHJlc3VsdENoZWNrRXhpc3QuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ0LhuqNuIGdoaSDEkcOjIMSRxrDhu6NjIHThuqFvIGPDtG5nIHZp4buHYycpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNldHRpbmcubW9kaWZ5Um93RGF0YUZvclRhc2spIHtcclxuICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZy5tb2RpZnlSb3dEYXRhRm9yVGFzayhyb3dEYXRhKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBtb2RlbFRhc2sgPSB7XHJcbiAgICAgICAgICAgICAgICBpZDogdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCksIC8vIElkIG7DoHkgY+G6p24gdGhp4bq/dCB2w6wgc+G6vSBkw7luZyB0cm9uZyBow6BtIGluc2VydFRhc2tBbmRSZWxvYWRcclxuICAgICAgICAgICAgICAgIGNoZWNrVW5pcXVlVGFza0ZvckVudGl0eTogdHJ1ZSxcclxuICAgICAgICAgICAgICAgIC8vIGF1dG9OZXh0U3RlcDogd29ya2Zsb3dTZXR0aW5nLmF1dG9OZXh0U3RlcCxcclxuICAgICAgICAgICAgICAgIGlkTG9haUNvbmdWaWVjOiB3b3JrZmxvd1NldHRpbmcuaWRMb2FpQ29uZ1ZpZWNEZWZhdWx0LFxyXG4gICAgICAgICAgICAgICAgc2VydmljZUNvZGU6IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zZXJ2aWNlQ29kZSxcclxuICAgICAgICAgICAgICAgIGVudGl0eTogdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWUsXHJcbiAgICAgICAgICAgICAgICBlbnRpdHlLZXk6IHJvd0RhdGEuaWQsXHJcbiAgICAgICAgICAgICAgICB0ZW46IHRoaXMuZ2V0VGVuQ29uZ1ZpZWMod29ya2Zsb3dTZXR0aW5nLnRlbXBsYXRlVGFza05hbWUsIHJvd0RhdGEpLFxyXG4gICAgICAgICAgICAgICAgZGluaEtlbU5naGllcFZ1RHRvczogW11cclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIC8vIFThu5VuZyBo4bujcCBtb2RlbCDEkcOtbmgga8OobSBuZ2hp4buHcCB24bulIGVudGl0eVxyXG4gICAgICAgICAgICBjb25zdCBjb250ZW50TGluayA9IGF3YWl0IHRoaXMuZ2V0Q29weVBhdGgodGhpcy5zZXR0aW5nLCByb3dEYXRhKTtcclxuICAgICAgICAgICAgaWYgKGNvbnRlbnRMaW5rKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBtb2RlbEVudGl0eSA9IHRoaXMucGFyc2VBdHRhY2hMaW5rKGNvbnRlbnRMaW5rKTtcclxuICAgICAgICAgICAgICAgIG1vZGVsVGFzay5kaW5oS2VtTmdoaWVwVnVEdG9zID0gbW9kZWxFbnRpdHk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKHRoaXMuc2V0dGluZy5tb2RpZnlJdGVtVGFzaykge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zZXR0aW5nLm1vZGlmeUl0ZW1UYXNrKG1vZGVsVGFzaywgcm93RGF0YSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEtp4buDbSB0cmEgbuG6v3UgY8OzIGPhuqV1IGjDrG5oIHThu7EgxJHhu5luZyBi4bqvdCDEkeG6p3UgdGFzaywgdsOgIHBo4bqjaSBjw7MgbG/huqFpIGPDtG5nIHZp4buHYyBt4bq3YyDEkeG7i25oXHJcbiAgICAgICAgICAgIGlmICh3b3JrZmxvd1NldHRpbmcuYXV0b1N0YXJ0VGFza1xyXG4gICAgICAgICAgICAgICAgJiYgd29ya2Zsb3dTZXR0aW5nLmlkTG9haUNvbmdWaWVjRGVmYXVsdFxyXG4gICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgIC8vID0+IFRow6wgbOG6pXkgdGjDqm0gdGjDtG5nIHRpbiBxdXkgdHLDrG5oIG3hurdjIMSR4buLbmggY2hvIHRhc2tcclxuICAgICAgICAgICAgICAgIC8vIE7hur91IGzhuqV5IMSRxrDhu6NjIHRow6wgdOG7sSDEkeG7mW5nIGLhuq90IMSR4bqndSwgbuG6v3Uga2jDtG5nIHRow6wgduG6q24gcGjhuqNpIG3hu58gbMOqbiBmb3JtIGPDtG5nIHZp4buHY1xyXG4gICAgICAgICAgICAgICAgY29uc3QgdGFza1dvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZS5nZXRXb3JrZmxvd1NldHRpbmdCeUlkTG9haUNvbmdWaWVjKHdvcmtmbG93U2V0dGluZy5pZExvYWlDb25nVmllY0RlZmF1bHQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKHRhc2tXb3JrZmxvd1NldHRpbmcgIT0gbnVsbCAmJiB0YXNrV29ya2Zsb3dTZXR0aW5nLndvcmtmbG93Q29kZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIG1vZGVsVGFza1tGaWVsZFdvcmtmbG93Q29kZUluQ3J1ZEZvcm1dID0gdGFza1dvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGU7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5pbnNlcnRUYXNrQW5kUmVsb2FkKG1vZGVsVGFzaywgcm93RGF0YSwgdGFza1dvcmtmbG93U2V0dGluZyk7XHJcbiAgICAgICAgICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdGhpcy5jb25nVmllY01vZGVsLmRhdGEuY29uZ1ZpZWNTZXR0aW5nLmlzV29ya2Zsb3dUcmVlID0gdHJ1ZTtcclxuICAgICAgICAgICAgdGhpcy5jb25nVmllY01vZGVsLmRhdGEubW9kZWwgPSB7XHJcbiAgICAgICAgICAgICAgICBmb3JtU3RhdGU6IEZvcm1TdGF0ZS5BREQsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiBtb2RlbFRhc2tcclxuICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgdGhpcy5jb25nVmllY01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAod29ya2Zsb3dTZXR0aW5nLndvcmtmbG93cy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5zdGFydFdvcmtmbG93KHJvd0RhdGEsIHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3NbMF0pO1xyXG4gICAgICAgICAgICAgICAgcm93RGF0YS5fX3N0YXJ0aW5nV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdGhpcy5zdGFydFdvcmtmbG93TW9kZWwuZGF0YS53b3JrZmxvd3MgPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzO1xyXG4gICAgICAgICAgICB0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5kYXRhLmRlZmF1bHRXb3JrZmxvdyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd0NvZGU7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRXb3JrZmxvd01vZGVsLmRhdGEuaXRlbSA9IHJvd0RhdGE7XHJcbiAgICAgICAgICAgIHRoaXMuc3RhcnRXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XHJcbiAgICAgICAgICAgIHJvd0RhdGEuX19zdGFydGluZ1dvcmtmbG93ID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGdldFRlbkNvbmdWaWVjKHRlbXBsYXRlVGV4dDogc3RyaW5nLCByb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICByZXR1cm4gcmVuZGVyVGV4dFRlbXBsYXRlKFxyXG4gICAgICAgICAgICBnZXRSZWdleFJlc3VsdCh0ZW1wbGF0ZVRleHQsIFJlZ2V4U3BsaXRGaWVsZEJ5SXRlbSwgZXhlY1Jlc3VsdCA9PiBleGVjUmVzdWx0WzFdKSxcclxuICAgICAgICAgICAgdGVtcGxhdGVUZXh0LCByb3dEYXRhXHJcbiAgICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIHRvbmdIb3BXb3JrZmxvd0hpc3RvcnlGb3JOZXh0Rmlyc3RTdGVwKFxyXG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3Rvcnk6IGFueSwgaXRlbVRhc2s6IGFueSwgd29ya2Zsb3dTZXR0aW5nOiBXb3JrZmxvd1NldHRpbmdOZXcsIHdvcmtmbG93Q29kZTogc3RyaW5nXHJcbiAgICApIHtcclxuICAgICAgICBpZiAoaXRlbVdvcmtmbG93SGlzdG9yeSA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LmlkID0gdGhpcy5fY29tbW9uU2VydmljZS5ndWlkKCk7XHJcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5pZ25vcmVWYWxpZGF0ZUJhc2VJbkJ1c3NpbmVzcyA9IHRydWU7XHJcbiAgICAgICAgY29uc3Qgd29ya2Zsb3cgPSB3b3JrZmxvd1NldHRpbmcud29ya2Zsb3dzLmZpbmQocSA9PiBxLmNvZGUgPT0gd29ya2Zsb3dDb2RlKTtcclxuICAgICAgICBpZiAod29ya2Zsb3cgPT0gbnVsbCkgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3Qgc3RhdGVTdGFydCA9IHdvcmtmbG93LmRhdGEubWFjaGluZXMuZmluZChxID0+IHEudHlwZSA9PSBFbnVtU3RhdGVUeXBlLlNUQVJUKTtcclxuICAgICAgICBpZiAoc3RhdGVTdGFydCA9PSBudWxsKSByZXR1cm4gbnVsbDtcclxuICAgICAgICBjb25zdCBhY3Rpb25Db2RlID0gaXRlbVdvcmtmbG93SGlzdG9yeS5hY3Rpb25Db2RlO1xyXG4gICAgICAgIGNvbnN0IGV4aXN0QWN0aW9uID0gd29ya2Zsb3cuZGF0YS5jb25uZWN0aW9ucy5zb21lKHggPT4geC5zb3VyY2UgPT0gc3RhdGVTdGFydC5pZFxyXG4gICAgICAgICAgICAmJiB4LmNvZGUgPT0gYWN0aW9uQ29kZVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKCFleGlzdEFjdGlvbikgcmV0dXJuIG51bGw7XHJcbiAgICAgICAgY29uc3QgY3J1ZExpc3RTZXR0aW5nOiBDcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmFkanVzdFNldHRpbmdXb3JrZmxvd0ZvckNydWRMaXN0KGNydWRMaXN0U2V0dGluZyk7XHJcbiAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuICAgICAgICBpZiAodHlwZW9mIGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQgPT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgICAgbmFtZSA9IGl0ZW1UYXNrWzxzdHJpbmc+KGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIG5hbWUgPSAoPEZ1bmN0aW9uPihjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkKSkoaXRlbVRhc2spO1xyXG4gICAgICAgIH1cclxuICAgICAgICBuYW1lID0gYCR7Y3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlLm9iamVjdE5hbWV9ICR7bmFtZX1gO1xyXG4gICAgICAgIGl0ZW1Xb3JrZmxvd0hpc3RvcnkudGFibGVOYW1lID0gdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmVudGl0eU5hbWU7XHJcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5vYmplY3RGdWxsTmFtZSA9IG5hbWU7XHJcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5vYmplY3ROYW1lID0gY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlLm9iamVjdE5hbWU7XHJcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS53b3JrZmxvd0NvZGUgPSB3b3JrZmxvd0NvZGU7XHJcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5pdGVtSWQgPSBpdGVtVGFzay5pZDtcclxuICAgICAgICBpdGVtV29ya2Zsb3dIaXN0b3J5LnNvdXJjZVN0YXR1c0NvZGUgPSBzdGF0ZVN0YXJ0LmNvZGU7XHJcbiAgICAgICAgaXRlbVdvcmtmbG93SGlzdG9yeS5hY3Rpb25Db2RlID0gYWN0aW9uQ29kZTtcclxuICAgICAgICByZXR1cm4gaXRlbVdvcmtmbG93SGlzdG9yeTtcclxuICAgIH1cclxuXHJcbiAgICBwcml2YXRlIGFzeW5jIGluc2VydFRhc2tBbmRSZWxvYWQobW9kZWxUYXNrLCByb3dEYXRhLCB3b3JrZmxvd1NldHRpbmc6IFdvcmtmbG93U2V0dGluZ05ldykge1xyXG4gICAgICAgIGlmICh0aGlzLnNldHRpbmcuZ2V0RGF0YUZvck5leHRGaXJzdFN0ZXBUYXNrKSB7XHJcbiAgICAgICAgICAgIG1vZGVsVGFzay5pdGVtV29ya2Zsb3dIaXN0b3J5ID0gYXdhaXQgdGhpcy5zZXR0aW5nLmdldERhdGFGb3JOZXh0Rmlyc3RTdGVwVGFzayhyb3dEYXRhKTtcclxuICAgICAgICAgICAgbW9kZWxUYXNrLml0ZW1Xb3JrZmxvd0hpc3RvcnkgPSB0aGlzLnRvbmdIb3BXb3JrZmxvd0hpc3RvcnlGb3JOZXh0Rmlyc3RTdGVwKFxyXG4gICAgICAgICAgICAgICAgbW9kZWxUYXNrLml0ZW1Xb3JrZmxvd0hpc3RvcnksIG1vZGVsVGFzaywgd29ya2Zsb3dTZXR0aW5nLCBtb2RlbFRhc2tbRmllbGRXb3JrZmxvd0NvZGVJbkNydWRGb3JtXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBhd2FpdCB0aGlzLl9jb25nVmllY1NlcnZpY2UucG9zdChtb2RlbFRhc2spXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJycsIGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblN0YXJ0ZWRXb3JrZmxvdy5lbWl0KHJvd0RhdGEuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIGNhbGwgYmFjayBraGkg4bqlbiBsxrB1IHRyw6puIGZvcm0gYuG6r3QgxJHhuqd1IHF1eSB0csOsbmhcclxuICAgICAqIGNydWQtbGlzdCBz4bq9IGfhu41pIGjDoG0gbMawdSBjaOG7qSBmb3JtIHN0YXJ0IHdvcmtmbG93IGsgbMOgbSBnw6wgY+G6o1xyXG4gICAgICogxJDhu4IgVOG6rE4gROG7pE5HIEzhuqBJIEjDgE0gc3RhcnRXb3JrZmxvdyBj4bunYSBjcnVkLWxpc3RcclxuICAgICAqL1xyXG4gICAgaGFuZGxlU3RhcnRXb3JrZmxvd0Zyb21EaWFsb2cod29ya2Zsb3c6IFdmSXRlbSkge1xyXG4gICAgICAgIHRoaXMuc3RhcnRXb3JrZmxvd01vZGVsLnNob3dFZGl0Rm9ybSA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuc3RhcnRXb3JrZmxvdyh0aGlzLnN0YXJ0V29ya2Zsb3dNb2RlbC5kYXRhLml0ZW0sIHdvcmtmbG93KTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgYXN5bmMgc2hvd0FjdGlvbldvcmtmbG93KGV2dCwgcm93RGF0YSkge1xyXG4gICAgICAgIGlmICh0aGlzLnNob3dpbmdBY3Rpb25Xb3JrZmxvdykgcmV0dXJuO1xyXG4gICAgICAgIHRoaXMuYnV0dG9uQ29udGV4dHMgPSBhd2FpdCB0aGlzLmdldEJ1dHRvbkNvbnRleHQocm93RGF0YSk7XHJcbiAgICAgICAgaWYgKHRoaXMuYnV0dG9uQ29udGV4dHMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5fc2hvd0NvbnRleHRNZW51KGV2dCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIGdldEJ1dHRvbkNvbnRleHQocm93RGF0YSkge1xyXG4gICAgICAgIHRoaXMuc2hvd2luZ0FjdGlvbldvcmtmbG93ID0gdHJ1ZTtcclxuICAgICAgICBsZXQgcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cgPSBudWxsO1xyXG4gICAgICAgIGlmICghdGhpcy5zZXR0aW5nLmlzV29ya2Zsb3dUcmVlICYmIHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmdOZXcuY3JlYXRlVGFza0luc3RlYWQpIHtcclxuICAgICAgICAgICAgcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cgPSBhd2FpdCB0aGlzLmdldEFjdGlvbldvcmtmbG93QnlUYXNrKHJvd0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgcmVzdWx0R2V0QWN0aW9uV29ya2Zsb3cgPSBhd2FpdCB0aGlzLmdldEFjdGlvbldvcmtmbG93KHJvd0RhdGEpO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLnNob3dpbmdBY3Rpb25Xb3JrZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdykpIHtcclxuICAgICAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgY8OzIGjDoG5oIMSR4buZbmcga2jhuqMgZOG7pW5nJyk7XHJcbiAgICAgICAgICAgIHJldHVybiBbXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgYnV0dG9uQ29udGV4dHMgPSByZXN1bHRHZXRBY3Rpb25Xb3JrZmxvdztcclxuICAgICAgICAvLyBO4bq/dSBsw6AgYuG6o24gZ2hpIG5naGnhu4dwIHbhu6UgbcOgIGPDsyBn4bqvbiB0aMO0bmcgdGluIHRhc2sgdGjDrCBi4buVIHN1bmcgdGjDqm0gbWVudSB4ZW0gY8O0bmcgdmnhu4djXHJcbiAgICAgICAgaWYgKHJvd0RhdGFbRmllbGREZWZpbmVIYXNUYXNrXSkge1xyXG4gICAgICAgICAgICBidXR0b25Db250ZXh0cy51bnNoaWZ0KFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGxhYmVsOiBgWGVtIGPDtG5nIHZp4buHY2AsXHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLW1hcCcsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy52aWV3VGFza0RldGFpbChyb3dEYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnV0dG9uQ29udGV4dHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0QWN0aW9uV29ya2Zsb3cocm93RGF0YSk6IFByb21pc2U8YW55W10gfCB2b2lkPiB7XHJcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgdGhpcy5nZXRJdGVtV29ya2Zsb3dTZXR0aW5nKHRoaXMuc2V0dGluZywgcm93RGF0YSk7XHJcbiAgICAgICAgaWYgKCF3b3JrZmxvd1NldHRpbmcpIHJldHVybjtcclxuICAgICAgICByZXR1cm4gdGhpcy5fZ2V0QWN0aW9uV29ya2Zsb3dCYXNlKHRoaXMuc2V0dGluZywgcm93RGF0YSwgd29ya2Zsb3dTZXR0aW5nKTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBnZXRBY3Rpb25Xb3JrZmxvd0J5VGFzayhyb3dEYXRhKTogUHJvbWlzZTxhbnlbXSB8IHZvaWQ+IHtcclxuICAgICAgICBpZiAoIXJvd0RhdGEuX19pc0dvdENvbmdWaWVjKSB7XHJcbiAgICAgICAgICAgIHJvd0RhdGEuX19pdGVtQ29uZ1ZpZWMgPSAoYXdhaXQgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmdldERldGFpbEJ5RmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdzZXJ2aWNlQ29kZScsIE9wZXJhdG9yLmVxdWFsLCB0aGlzLnNldHRpbmcuYmFzZVNlcnZpY2Uuc2VydmljZUNvZGUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHknLCBPcGVyYXRvci5lcXVhbCwgdGhpcy5zZXR0aW5nLmJhc2VTZXJ2aWNlLmVudGl0eU5hbWUpLFxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHlLZXknLCBPcGVyYXRvci5lcXVhbCwgcm93RGF0YS5pZClcclxuICAgICAgICAgICAgICAgIF1cclxuICAgICAgICAgICAgKSkuZGF0YTtcclxuICAgICAgICAgICAgcm93RGF0YS5fX2lzR290Q29uZ1ZpZWMgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByb3dEYXRhID0gcm93RGF0YS5fX2l0ZW1Db25nVmllYztcclxuICAgICAgICBpZiAoIXJvd0RhdGEpIHtcclxuICAgICAgICAgICAgdGhpcy5zaG93aW5nQWN0aW9uV29ya2Zsb3cgPSBmYWxzZTtcclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuX25vdGlmaWVyU2VydmljZS5zaG93V2FybmluZygnS2jDtG5nIHTDrG0gdGjhuqV5IGLhuqNuIGdoaSBjw7RuZyB2aeG7h2MgZ+G6r24gduG7m2kgYuG6o24gZ2hpJyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJvd0RhdGEuX193b3JrZmxvd0NvZGUgPSByb3dEYXRhLndvcmtmbG93Q29kZTtcclxuXHJcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChXb3JrZmxvd1Blcm1pc3Npb25EZXRhaWxTZXJ2aWNlKTtcclxuICAgICAgICBjb25zdCB1c2VyU2VydmljZSA9IHRoaXMuX2luamVjdG9yLmdldChVc2VyU2VydmljZSk7XHJcbiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgd29ya2Zsb3dQZXJtaXNzaW9uRGV0YWlsU2VydmljZS5jaGFuZ2VFbmRwb2ludCh0aGlzLl9jb25nVmllY1NlcnZpY2UpXHJcbiAgICAgICAgICAgIC5hcHBlbmRJbmZvRm9yV29ya2Zsb3coXHJcbiAgICAgICAgICAgICAgICB1c2VyU2VydmljZS5nZXRVc2VySWRDb21iaW5lKCksIFtyb3dEYXRhXSwgJ2lkJywgdGhpcy5zZXR0aW5nLmlnbm9yZVdvcmtmbG93XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgaWYgKHJlc3VsdCAhPT0gdHJ1ZSkgcmV0dXJuO1xyXG4gICAgICAgIGNvbnN0IHdvcmtmbG93U2V0dGluZyA9IGF3YWl0IHRoaXMuX2RtTG9haUNvbmdWaWVjU2VydmljZS5nZXRXb3JrZmxvd1NldHRpbmdCeUlkTG9haUNvbmdWaWVjKHJvd0RhdGEuaWRMb2FpQ29uZ1ZpZWMpO1xyXG5cclxuICAgICAgICBpZiAod29ya2Zsb3dTZXR0aW5nID09IG51bGwpIHJldHVybjtcclxuICAgICAgICBjb25zdCBjcnVkTGlzdFNldHRpbmcgPSBuZXcgQ3J1ZExpc3RTZXR0aW5nKCk7XHJcbiAgICAgICAgdGhpcy5fY29uZ1ZpZWNTZXJ2aWNlLmFkanVzdFNldHRpbmdXb3JrZmxvd0ZvckNydWRMaXN0KGNydWRMaXN0U2V0dGluZyk7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuX2dldEFjdGlvbldvcmtmbG93QmFzZShjcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEsIHdvcmtmbG93U2V0dGluZyk7XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBhc3luYyBfZ2V0QWN0aW9uV29ya2Zsb3dCYXNlKGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhLCB3b3JrZmxvd1NldHRpbmc6IFdvcmtmbG93U2V0dGluZ05ldyk6IFByb21pc2U8YW55W10gfCB2b2lkPiB7XHJcbiAgICAgICAgdGhpcy5jdXJyZW50SXRlbSA9IHJvd0RhdGE7XHJcbiAgICAgICAgdGhpcy5idXR0b25Db250ZXh0cyA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGJ1dHRvbkNvbnRleHRzID0gW107XHJcbiAgICAgICAgLy8gTuG6v3UgayBjw7Mgd29ya2Zsb3cgY29kZSBuZ2jEqWEgbMOgIGNoxrBhIGNo4bqheSBxdXkgdHLDrG5oIGhv4bq3YyBxdXkgdHLDrG5oIGzhu5dpID0+IENobyBjaOG6oXkgbOG6oWlcclxuICAgICAgICBpZiAoIXJvd0RhdGEuX193b3JrZmxvd0NvZGUpIHtcclxuICAgICAgICAgICAgcmV0dXJuIFtdO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgY29uc3QgaXRlbVdvcmtmbG93U2V0dGluZyA9IHdvcmtmbG93U2V0dGluZy53b3JrZmxvd3MuZmluZChxID0+IHEuY29kZSA9PSByb3dEYXRhLl9fd29ya2Zsb3dDb2RlKTtcclxuICAgICAgICAgICAgaWYgKCFpdGVtV29ya2Zsb3dTZXR0aW5nKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKGBLaMO0bmcgdMOsbSB0aOG6pXkgcXV5IHRyw6xuaCBjw7MgbcOjICR7cm93RGF0YS5fX3dvcmtmbG93Q29kZX1gKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBjb25zdCBhY3Rpb25zID0gaXRlbVdvcmtmbG93U2V0dGluZy5kYXRhLmFjdGlvbnNbcm93RGF0YS5fX3RyYW5nVGhhaV07XHJcbiAgICAgICAgICAgIGNvbnN0IGFjdGlvbkFsbG93cyA9IChhd2FpdCBjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2UuZ2V0QWN0aW9uQWxsb3cocm93RGF0YS5pZCkpLmRhdGE7XHJcbiAgICAgICAgICAgIGlmIChhY3Rpb25BbGxvd3MpIHtcclxuICAgICAgICAgICAgICAgIGFjdGlvbkFsbG93cy5mb3JFYWNoKGFjdGlvbkNvZGUgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGFjdGlvbiA9IGFjdGlvbnMuZmluZChxID0+IHEuY29kZSA9PSBhY3Rpb25Db2RlKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoYWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ1dHRvbkNvbnRleHRzLnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc29UaHVUdTogYWN0aW9uLnNvVGh1VHUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3Rpb25Db2RlOiBhY3Rpb24uY29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGljb246IHRoaXMuc291cmNlSWNvblthY3Rpb24uaWNvbl0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbDogYWN0aW9uLm5hbWUsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnByb2Nlc3NXb3JrZmxvdyhjcnVkTGlzdFNldHRpbmcsIGl0ZW1Xb3JrZmxvd1NldHRpbmcsIGFjdGlvbilcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAvLyBM4buXaSBrIGzhuqV5IMSRxrDhu6NjIGFjdGlvbiBhbGxvd1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJ1dHRvbkNvbnRleHRzLnNvcnQobXVsdGlwbGVTb3J0KCdzb1RodVR1JykpO1xyXG4gICAgICAgICAgICAvLyBLaeG7g20gdHJhIG5nxrDhu51pIGN14buRaSBjw7luZyB0aOG7sWMgaGnhu4duIGPDsyBwaOG6o2kgbmfGsOG7nWkgaGnhu4duIHThuqFpIGtow7RuZyB0aMOsIGNobyBwaMOpcCByb2xsYmFja1xyXG4gICAgICAgICAgICBjb25zdCB3b3JrZmxvd0hpc3RvcnlTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFdvcmtmbG93SGlzdG9yeVNlcnZpY2UpO1xyXG4gICAgICAgICAgICB3b3JrZmxvd0hpc3RvcnlTZXJ2aWNlLmNoYW5nZUVuZHBvaW50KHRoaXMuc2V0dGluZy5iYXNlU2VydmljZSk7XHJcbiAgICAgICAgICAgIGNvbnN0IHVzZXJTZXJ2aWNlID0gdGhpcy5faW5qZWN0b3IuZ2V0KFVzZXJTZXJ2aWNlKTtcclxuICAgICAgICAgICAgY29uc3QgdXNlcklkID0gdXNlclNlcnZpY2UuZ2V0SWQoKTtcclxuICAgICAgICAgICAgbGV0IHVzZXJJZFN0cmluZ1VwcGVyID0gJyc7XHJcbiAgICAgICAgICAgIGlmICh1c2VySWQpIHtcclxuICAgICAgICAgICAgICAgIHVzZXJJZFN0cmluZ1VwcGVyID0gdXNlcklkLnRvVXBwZXJDYXNlKCk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGl0ZW1Xb3JrZmxvd0hpc3RvcnlMYXN0ID0gKGF3YWl0IHdvcmtmbG93SGlzdG9yeVNlcnZpY2UuY2hhbmdlRW5kcG9pbnQoY3J1ZExpc3RTZXR0aW5nLmJhc2VTZXJ2aWNlKS5nZXRMYXN0QnlJdGVtSWQocm93RGF0YS5pZCkpLmRhdGE7XHJcbiAgICAgICAgICAgIGlmIChpdGVtV29ya2Zsb3dIaXN0b3J5TGFzdFxyXG4gICAgICAgICAgICAgICAgJiYgaXRlbVdvcmtmbG93SGlzdG9yeUxhc3QuYWN0aW9uQ29kZSAhPSBNYUFjdGlvbkJhdERhdVF1eVRyaW5oXHJcbiAgICAgICAgICAgICAgICAmJiBpdGVtV29ya2Zsb3dIaXN0b3J5TGFzdC51c2VySWRDcmVhdGVkLnRvVXBwZXJDYXNlKCkgPT0gdXNlcklkU3RyaW5nVXBwZXJcclxuICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICBidXR0b25Db250ZXh0cy5wdXNoKFxyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLXJlcGxheScsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxhYmVsOiAnVGh1IGjhu5NpJyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZDogKCkgPT4gdGhpcy5yb2xsYmFja1dvcmtmbG93KGNydWRMaXN0U2V0dGluZywgcm93RGF0YSlcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGJ1dHRvbkNvbnRleHRzLnB1c2goXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWNvbjogJ3BpIHBpLWNvbW1lbnRzJyxcclxuICAgICAgICAgICAgICAgICAgICBsYWJlbDogJ0NobyDDvSBraeG6v24nLFxyXG4gICAgICAgICAgICAgICAgICAgIGNvbW1hbmQ6ICgpID0+IHRoaXMuc2hvd0Zvcm1DaG9ZS2llbihjcnVkTGlzdFNldHRpbmcsIHJvd0RhdGEpXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIGljb246ICdwaSBwaS1jYWxlbmRhcicsXHJcbiAgICAgICAgICAgICAgICAgICAgbGFiZWw6IEJ1dHRvblRleHRBY3Rpb25Db25nVmllYy5YRU1fTElDSF9TVSxcclxuICAgICAgICAgICAgICAgICAgICBjb21tYW5kOiAoKSA9PiB0aGlzLnZpZXdIaXN0b3J5V29ya2Zsb3coY3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gYnV0dG9uQ29udGV4dHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmlld1Rhc2tEZXRhaWwocm93RGF0YSkge1xyXG4gICAgICAgIGNvbnN0IGl0ZW1UYXNrID0gKGF3YWl0IHRoaXMuX2NvbmdWaWVjU2VydmljZS5nZXREZXRhaWxCeUZpbHRlcihbXHJcbiAgICAgICAgICAgIHRoaXMubmV3RmlsdGVyKCdlbnRpdHlLZXknLCBPcGVyYXRvci5lcXVhbCwgcm93RGF0YS5pZClcclxuICAgICAgICBdKSkuZGF0YTtcclxuICAgICAgICBpZiAoaXRlbVRhc2sgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdLaMO0bmcgdMOsbSB0aOG6pXkgY8O0bmcgdmnhu4djIGfhuq9uIHbhu5tpIGLhuqNuIGdoaScpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCB0YXNrRm9ybU1vZGVsOiBhbnkgPSB7fTtcclxuICAgICAgICB0YXNrRm9ybU1vZGVsLmZvcm1TdGF0ZSA9IEZvcm1TdGF0ZS5WSUVXO1xyXG4gICAgICAgIHRhc2tGb3JtTW9kZWwuZGF0YSA9IGl0ZW1UYXNrO1xyXG4gICAgICAgIHRoaXMuZGV0YWlsVGFza01vZGVsLmRhdGEudGFza0Zvcm1Nb2RlbCA9IHRhc2tGb3JtTW9kZWw7XHJcbiAgICAgICAgdGhpcy5kZXRhaWxUYXNrTW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICByb2xsYmFja1dvcmtmbG93KGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhKSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dDb25maXJtKCdC4bqhbiBjw7MgY2jhuq9jIGNo4bqvbiBtdeG7kW4ga2jDtGkgcGjhu6VjIHRy4bqhbmcgdGjDoWkgdHLGsOG7m2MgxJHDsycpXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIXJlcykgcmV0dXJuO1xyXG4gICAgICAgICAgICAgICAgbGV0IG5hbWUgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY3J1ZExpc3RTZXR0aW5nLmRpc3BsYXlGaWVsZCA9PSAnc3RyaW5nJykge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSByb3dEYXRhWzxzdHJpbmc+KGNydWRMaXN0U2V0dGluZy5kaXNwbGF5RmllbGQpXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSAoPEZ1bmN0aW9uPihjcnVkTGlzdFNldHRpbmcuZGlzcGxheUZpZWxkKSkocm93RGF0YSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjcnVkTGlzdFNldHRpbmcuYmFzZVNlcnZpY2Uucm9sbGJhY2socm93RGF0YSwgW2NydWRMaXN0U2V0dGluZy5vYmplY3ROYW1lLCBuYW1lXSlcclxuICAgICAgICAgICAgICAgICAgICAudGhlbihyZXMgPT4gdGhpcy5oYW5kbGVSZXNwb25zZShyZXMsICdLaMO0aSBwaOG7pWMgdHLhuqFuZyB0aMOhaSB0csaw4bubYyB0aMOgbmggY8O0bmcnLCBmID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5vblJvbGxiYWNrZWRXb3JrZmxvdy5lbWl0KHJvd0RhdGEuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLm9uQ2hhbmdlZFN0YXR1c1dvcmtmbG93LmVtaXQocm93RGF0YS5pZCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgICAgICAgICAgICAgICAgIH0pKTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgdmlld0hpc3RvcnlXb3JrZmxvdyhjcnVkTGlzdFNldHRpbmc6IENydWRMaXN0U2V0dGluZywgcm93RGF0YTogbnVtYmVyKSB7XHJcbiAgICAgICAgY29uc3Qgd29ya2Zsb3dTZXR0aW5nID0gYXdhaXQgdGhpcy5nZXRJdGVtV29ya2Zsb3dTZXR0aW5nKGNydWRMaXN0U2V0dGluZywgcm93RGF0YSk7XHJcbiAgICAgICAgaWYgKCF3b3JrZmxvd1NldHRpbmcpIHJldHVybjtcclxuICAgICAgICB0aGlzLmN1cnJlbnRJdGVtID0gcm93RGF0YTtcclxuICAgICAgICB0aGlzLndvcmtmbG93SGlzdG9yeU1vZGVsLmRhdGEgPSB7fTtcclxuICAgICAgICB0aGlzLndvcmtmbG93SGlzdG9yeU1vZGVsLmRhdGEuc2V0dGluZyA9IGNydWRMaXN0U2V0dGluZztcclxuICAgICAgICB0aGlzLndvcmtmbG93SGlzdG9yeU1vZGVsLmRhdGEud29ya2Zsb3dTZXR0aW5nID0gd29ya2Zsb3dTZXR0aW5nO1xyXG4gICAgICAgIHRoaXMud29ya2Zsb3dIaXN0b3J5TW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVIaWRlSGlzdG9yeVdvcmtmbG93KCkge1xyXG4gICAgICAgIHRoaXMuc2hvd0hpc3RvcnlXb3JrZmxvdyA9IGZhbHNlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHByb2Nlc3NXb3JrZmxvdyhjcnVkTGlzdFNldHRpbmc6IENydWRMaXN0U2V0dGluZywgaXRlbVdvcmtmbG93U2V0dGluZzogYW55LCB3b3JrZmxvd0FjdGlvbjogV2ZBY3Rpb24pIHtcclxuICAgICAgICBpZiAod29ya2Zsb3dBY3Rpb24ub3Blbk5ld1RhYikge1xyXG4gICAgICAgICAgICBsZXQgZG9tYWluTmV3VGFiID0gd29ya2Zsb3dBY3Rpb24uZG9tYWluTmV3VGFiO1xyXG4gICAgICAgICAgICBpZiAoIWRvbWFpbk5ld1RhYikgZG9tYWluTmV3VGFiID0gd2luZG93LmxvY2F0aW9uLm9yaWdpbjtcclxuICAgICAgICAgICAgd2luZG93Lm9wZW4oYCR7ZG9tYWluTmV3VGFifS8ke3dvcmtmbG93QWN0aW9uLmxpbmtOZXdUYWJ9I19pdGVtSWQ9JHt0aGlzLmN1cnJlbnRJdGVtLmlkfWAsICdfYmxhbmsnKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoIXdvcmtmbG93QWN0aW9uLm9wZW5Qb3B1cCkge1xyXG4gICAgICAgICAgICB0aGlzLnNob3dXYWl0Qm94KCk7XHJcbiAgICAgICAgICAgIGNydWRMaXN0U2V0dGluZy5iYXNlU2VydmljZS5jaGFuZ2VTdGF0ZUJhc2VCeUFjdGlvbih0aGlzLmN1cnJlbnRJdGVtLmlkLCB3b3JrZmxvd0FjdGlvbi5jb2RlKVxyXG4gICAgICAgICAgICAgICAgLnRoZW4ocmVzID0+IHRoaXMuaGFuZGxlUmVzcG9uc2VXaXRoV2FpdEJveChyZXMsICcnLCBmID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmhhbmRsZVByb2Nlc3NlZFdvcmtmbG93QmFzZSgpO1xyXG4gICAgICAgICAgICAgICAgfSkpXHJcbiAgICAgICAgICAgICAgICAuY2F0Y2goZXJyID0+IHRoaXMuaGlkZVdhaXRCb3goKSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMucHJvY2Vzc1dvcmtmbG93TW9kZWwuaGVhZGVyID0gd29ya2Zsb3dBY3Rpb24ubmFtZTtcclxuICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLmRhdGEuc2V0dGluZyA9IGNydWRMaXN0U2V0dGluZztcclxuICAgICAgICB0aGlzLnByb2Nlc3NXb3JrZmxvd01vZGVsLmRhdGEuYWN0aW9uID0gd29ya2Zsb3dBY3Rpb247XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5kYXRhLndvcmtmbG93ID0gaXRlbVdvcmtmbG93U2V0dGluZztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBzaG93Rm9ybUNob1lLaWVuKGNydWRMaXN0U2V0dGluZzogQ3J1ZExpc3RTZXR0aW5nLCByb3dEYXRhOiBhbnkpIHtcclxuICAgICAgICB0aGlzLmNob1lLaWVuTW9kZWwuZGF0YS5yb3dEYXRhID0gcm93RGF0YTtcclxuICAgICAgICB0aGlzLmNob1lLaWVuTW9kZWwuZGF0YS5zZXR0aW5nID0gY3J1ZExpc3RTZXR0aW5nO1xyXG4gICAgICAgIHRoaXMuY2hvWUtpZW5Nb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIHN0YXJ0V29ya2Zsb3cocm93RGF0YSwgd29ya2Zsb3c6IFdmSXRlbSkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2V0dGluZy5iYXNlU2VydmljZS5zdGFydFdvcmtmbG93KHJvd0RhdGEuaWQsIHdvcmtmbG93LmNvZGUpXHJcbiAgICAgICAgICAgIC50aGVuKHJlcyA9PiB0aGlzLmhhbmRsZVJlc3BvbnNlKHJlcywgJ0No4bqheSBxdXkgdHLDrG5oIHRow6BuaCBjw7RuZycsIGYgPT4ge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vblN0YXJ0ZWRXb3JrZmxvdy5lbWl0KHJvd0RhdGEuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbkNoYW5nZWRTdGF0dXNXb3JrZmxvdy5lbWl0KHJvd0RhdGEuaWQpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICAgICAgICAgIH0pKTtcclxuICAgIH1cclxuXHJcbiAgICBoYW5kbGVQcm9jZXNzZWRXb3JrZmxvd0Jhc2UoKSB7XHJcbiAgICAgICAgdGhpcy5wcm9jZXNzV29ya2Zsb3dNb2RlbC5zaG93RWRpdEZvcm0gPSBmYWxzZTtcclxuICAgICAgICB0aGlzLm9uUHJvY2Vzc2VkV29ya2Zsb3cuZW1pdCh0aGlzLmN1cnJlbnRJdGVtLmlkKTtcclxuICAgICAgICB0aGlzLm9uQ2hhbmdlZFN0YXR1c1dvcmtmbG93LmVtaXQodGhpcy5jdXJyZW50SXRlbS5pZCk7XHJcbiAgICAgICAgdGhpcy5nZXREYXRhKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGNvcHlMaW5rKHJvd0RhdGE6IGFueSkge1xyXG4gICAgICAgIHRoaXMub25Db3B5TGluay5lbWl0KHJvd0RhdGEpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBjb3B5TGlua011bHRpcGxlKCkge1xyXG4gICAgICAgIHRoaXMub25Db3B5TGlua011bHRpcGxlLmVtaXQodGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBzaG93U2hhcmVMaW5rRm9ybShsc3RJdGVtKSB7XHJcbiAgICAgICAgdGhpcy5zaGFyZUxpbmtNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc2hhcmVMaW5rTW9kZWwuZGF0YS5sc3RJdGVtID0gbHN0SXRlbTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBjcmVhdGVTaGFyZUxpbmsoKSB7XHJcbiAgICAgICAgaWYgKCF0aGlzLnNldHRpbmcuY2hlY2tSZWFkeVRvVHJpbmhLeSgpKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9ub3RpZmllclNlcnZpY2Uuc2hvd1dhcm5pbmcoJ8SQYW5nIHThuqNpIGThu68gbGnhu4d1IGRhbmggc8OhY2gsIGNo4budIG3hu5l0IGzDumMgcuG7k2kgdGjhu60gbOG6oWknKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3Qgcm93RGF0YSA9IHRoaXMucm93RGF0YUN1cnJlbnQ7XHJcbiAgICAgICAgdGhpcy5zaG93U2hhcmVMaW5rRm9ybShbcm93RGF0YV0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGNyZWF0ZVNoYXJlTGlua011bHRpcGxlKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd1NoYXJlTGlua0Zvcm0odGhpcy5tb2RlbC5zZWxlY3RlZEl0ZW1zKTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZU11bHRpcGxlQ29weUxpbmsoKSB7XHJcbiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMubW9kZWwuc2VsZWN0ZWRJdGVtcykge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5kaXNhYmxlQ29weUxpbmsoaXRlbSkpIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgZGlzYWJsZUNvcHlMaW5rKHJvd0RhdGEpIHtcclxuICAgICAgICBpZiAocm93RGF0YS5fX2Rpc2FibGVDb3B5TGluaykge1xyXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKHRoaXMuaGlkZGVuQ29weUxpbmspIHtcclxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChyb3dEYXRhWydtZXRhZGF0YVN0YXR1cyddICYmIHJvd0RhdGFbJ21ldGFkYXRhU3RhdHVzJ10gIT0gJzAnKSB7XHJcbiAgICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIGFzeW5jIHNob3dTZXR0aW5nc1Blcm1pc3Npb24oKSB7XHJcbiAgICAgICAgaWYgKHRoaXMuY3JlYXRpbmdTZWFyY2hJbmZvKSByZXR1cm47XHJcbiAgICAgICAgdGhpcy5fc2hvd1NldHRpbmdzUGVybWlzc2lvbiA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dTZXR0aW5nc1dvcmtmbG93KCkge1xyXG4gICAgICAgIHRoaXMuX3Nob3dTZXR0aW5nc1dvcmtmbG93ID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgc2hvd1NldHRpbmdzV29ya2Zsb3dOZXcoKSB7XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd1NldHRpbmdNb2RlbC5zaG93RWRpdEZvcm0gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBzaG93TGlua1NoYXJpbmcoKSB7XHJcbiAgICAgICAgdGhpcy5wZXJtaXNzaW9uU2hhcmluZ01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgc2hvd0F0dGFjaGVkVGFzaygpIHtcclxuICAgICAgICB0aGlzLmF0dGFjaGVkVGFza01vZGVsLnNob3dFZGl0Rm9ybSA9IHRydWU7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIHNob3dMaXN0UGVybWlzc2lvbkJ5SXRlbSgpIHtcclxuICAgICAgICB0aGlzLnBlcm1pc3Npb25MaXN0TW9kZWwuc2hvd0VkaXRGb3JtID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBwdWJsaWMgb25TYXZlV29ya2Zsb3dTZXR0aW5ncyhldmVudCkge1xyXG4gICAgICAgIHRoaXMuc2V0dGluZy53b3JrZmxvd1NldHRpbmcgPSBldmVudDtcclxuICAgICAgICB0aGlzLl9jb21tb25TZXJ2aWNlLnJlbG9hZFBhZ2UoKTtcclxuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NXb3JrZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIHB1YmxpYyBvblNhdmVXb3JrZmxvd1NldHRpbmdzTmV3KGV2dCkge1xyXG4gICAgICAgIHRoaXMud29ya2Zsb3dTZXR0aW5nTW9kZWwuc2hvd0VkaXRGb3JtID0gZmFsc2U7XHJcbiAgICAgICAgdGhpcy5fY29tbW9uU2VydmljZS5yZWxvYWRQYWdlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgcHVibGljIG9uUmVtb3ZlV29ya2Zsb3dTZXR0aW5ncyhldnQpIHtcclxuICAgICAgICB0aGlzLl9zaG93U2V0dGluZ3NXb3JrZmxvdyA9IGZhbHNlO1xyXG4gICAgICAgIHRoaXMuZ2V0RGF0YSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGdvVG9UYXNrKGV2ZW50KSB7XHJcbiAgICAgICAgdGhpcy5fbm90aWZpZXJTZXJ2aWNlLnNob3dXYXJuaW5nKCdDaOG7qWMgbsSDbmcgeGVtIGNoaSB0aeG6v3QgY8O0bmcgdmnhu4djIHjhu60gbMO9IHThu50gdHLDrG5oIMSRYW5nIMSRxrDhu6NjIGhvw6BuIHRoaeG7h24uLi4nKTtcclxuICAgIH1cclxuXHJcbiAgICBhZGp1c3RQb3NpdGlvbkxvYWRpbmdNYXNrKCkge1xyXG4gICAgfVxyXG59XHJcbiJdfQ==