ngx-histaff-alpha 4.7.4 → 4.7.5

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.
@@ -1410,7 +1410,7 @@ export class CorePageListComponent extends CoreFormControlBaseComponent {
1410
1410
  type: c.type,
1411
1411
  pipe: c.pipe,
1412
1412
  align: c.align,
1413
- width: c.width,
1413
+ width: Math.round(c.width || 0),
1414
1414
  hidden: c.hidden
1415
1415
  });
1416
1416
  });
@@ -2042,4 +2042,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.1", ngImpor
2042
2042
  type: ViewChild,
2043
2043
  args: ['fileImport']
2044
2044
  }] } });
2045
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtcGFnZS1saXN0L2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBb0MsU0FBUyxFQUFlLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUNuTCxPQUFPLEVBQTBCLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsR0FBNEQsTUFBTSxvQ0FBb0MsQ0FBQztBQUlsSSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQztBQUN6SSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsMkJBQTJCLEVBQXVDLE1BQU0sZ0ZBQWdGLENBQUM7QUFLbEssT0FBTyxFQUFFLGtCQUFrQixFQUF3RixNQUFNLG9DQUFvQyxDQUFD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QUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDYyxxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUNBLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBQ1AsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIGlzRGV2TW9kZSwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29yZVRhYmxlQ29tcG9uZW50LCBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSwgSUNvcmVUYWJsZVRvb2xJdGVtLCB9IGZyb20gJy4uL2NvcmUtdGFibGUvY29yZS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUxpc3RTZXJ2aWNlLCBJR2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QsIElJbXBvcnRYbHN4VG9EYlJlcXVlc3QgfSBmcm9tICcuL2NvcmUtcGFnZS1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUVkaXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS1wYWdlLWVkaXQvY29yZS1wYWdlLWVkaXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmcm9tRXZlbnQsIG1hcCwgc3dpdGNoTWFwLCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUxpc3RTdGF0ZSB9IGZyb20gJy4vY29yZS1wYWdlLWxpc3Quc3RhdGUnO1xyXG5pbXBvcnQgeyBJQ29yZUJ1dHRvblZOUyB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvSUNvcmVCdXR0b25WTlMnO1xyXG5pbXBvcnQgeyBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0VudW1Db3JlQnV0dG9uVk5TQ29kZSc7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvcmVDb21tb25QYXJhbUtpdENvbXBvbmVudCwgSUNvcmVDb21tb25QYXJhbUtpdEV2ZW50RW1pdHRlckRhdGEgfSBmcm9tICcuLi9jb3JlLWNvbW1vbi1wYXJhbS1raXQvY29yZS1jb21tb24tcGFyYW0ta2l0L2NvcmUtY29tbW9uLXBhcmFtLWtpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb25nVGFza1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb25nLXRhc2suc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVDb21wb3NpdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLWNvbXBvc2l0aW9uL2NvcmUtY29tcG9zaXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uR3JvdXBTdGF0dXMgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1GaWx0ZXJPcGVyYXRvciwgSUZpbHRlck9wZXJhdG9yLCBJSW5PcGVyYXRvciwgSVBhZ2luYXRpb24sIElRdWVyeUxpc3RSZXF1ZXN0LCBJU2VhcmNoSXRlbSwgSVNvcnRJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUXVlcnlMaXN0UmVxdWVzdCc7XHJcbmltcG9ydCB7IGFwaSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcm91dGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9qc29uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBhbGVydE9wdGlvbnMsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2FsZXJ0T3B0aW9ucyc7XHJcbmltcG9ydCB7IElGb3JtYXRlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRm9ybWF0ZWRSZXNwb25zZSc7XHJcbmltcG9ydCB7IElRdWVyeUxpc3RSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVF1ZXJ5TGlzdFJlc3BvbnNlJztcclxuaW1wb3J0IHsgZGVmYXVsdFBhZ2luZyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kZWZhdWx0UGFnaW5nJztcclxuaW1wb3J0IHsgSUlkc1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lJZHNSZXF1ZXN0JztcclxuaW1wb3J0IHsgSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QsIElUb2dnbGVBcHByb3ZlSWRzUmVxdWVzdCwgSVRvbmdsZVVuQXBwcm92ZUlkc1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lUb2dnbGVBY3RpdmVJZHNSZXF1ZXN0JztcclxuaW1wb3J0IHsgRW51bVNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9lbnVtL0VudW1Tb3J0RGlyZWN0aW9uJztcclxuaW1wb3J0IHsgSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QnO1xyXG5pbXBvcnQgeyBJQ29yZVRhYmxlQ29sdW1uSXRlbSB9IGZyb20gJy4uL2NvcmUtdGFibGUvSUNvcmVUYWJsZUNvbHVtbkl0ZW0nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb3JlUGFnaW5hdGlvbkZ1bGxDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLXBhZ2luYXRpb24tZnVsbC9jb3JlLXBhZ2luYXRpb24tZnVsbC9jb3JlLXBhZ2luYXRpb24tZnVsbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVDb21wb3NpdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtY29tcG9zaXRpb24vY29yZS1jb21wb3NpdGlvbi9jb3JlLWNvbXBvc2l0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVBcGlQcm9ncmVzc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtYXBpLXByb2dyZXNzL2NvcmUtYXBpLXByb2dyZXNzL2NvcmUtYXBpLXByb2dyZXNzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZ1bGxzY3JlZW5Nb2RhbExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2Z1bGxzY3JlZW4tbW9kYWwtbG9hZGVyL2Z1bGxzY3JlZW4tbW9kYWwtbG9hZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElDb3JlQ2hlY2tsaXN0T3B0aW9uIH0gZnJvbSAnLi4vY29yZS1jaGVja2xpc3QvY29yZS1jaGVja2xpc3QvY29yZS1jaGVja2xpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgV29ya1NoaWZ0RG5kU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dvcmstc2hpZnQtZG5kLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlVGFic0NvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtdGFicy9jb3JlLXRhYnMvY29yZS10YWJzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERvbVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kb20uc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVGaWx0ZXJLaXRDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWZpbHRlci1raXQvY29yZS1maWx0ZXIta2l0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbHRlcktpdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXIta2l0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJQ29yZVBhcmFtQ29udHJvbCB9IGZyb20gJy4uL2NvcmUtaGVhZGVyLXBhcmFtcy9lbnVtLWFuZC1pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29yZUZpbHRlckh1YlNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLWZpbHRlci1odWIvY29yZS1maWx0ZXItaHViLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlRmlsdGVySHViQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1maWx0ZXItaHViL2NvcmUtZmlsdGVyLWh1Yi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29yZS10YWJsZS5zZXJ2aWNlJztcclxuXHJcbi8qIEtoaSBraMO0bmcgY8OzIGTDsm5nIG7DoG8gxJHGsOG7o2MgdGljayBjaOG7jW4sIGPDoWMgbsO6dCBzYXUgc+G6vSDEkcaw4bujYyDhuqluIMSRaTogKi9cclxuY29uc3QgRU1QVFlfU0VMRUNUSU9OX0hJRERFTl9CVVRUT046IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdID0gW1xyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCwgLy8gU+G7rWFcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xPQ0ssIC8vIEtow7NhXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkxPQ0ssIC8vIE3hu58ga2jDs2FcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FDVElWQVRFLCAvLyDDgXAgZOG7pW5nXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9JTkFDVElWQVRFLCAvLyBOZ+G7q25nIMOhcCBk4bulbmdcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1JFU0VULCAvLyBSZXNldCAobeG6rXQga2jhuql1KVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ09QWSwgLy8gU2FvIGNow6lwXHJcblxyXG4gIC8vIEPDoWMgdGjhu4MgbG/huqFpIGluXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QUklOVCxcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5UXzJDLFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUFJJTlRfMkNfMjAwOCxcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5UXzJDXzk4LFxyXG4gIC8vXHJcblxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFLCAvLyB4w7NhXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BUFBST1ZFLCAvLyBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1JFSkVDVCwgLy8gdOG7qyBjaOG7kWlcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRSwgLy8gYuG7jyBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BFTkRJTkdfQVBQUk9WRSwgLy8gbeG7nyBjaOG7nSBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xJUVVJREFURV9DT05UUkFDVCwgLy8gdGhhbmggbMO9IGjhu6NwIMSR4buTbmdcclxuXVxyXG5cclxuLy9kZWNsYXJlIGxldCBjb3JlRmlsZVV0aWxzOiBhbnk7XHJcbi8vaW1wb3J0IHsgY29yZUZpbGVVdGlscyB9IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9qcy9jb3JlRmlsZVV0aWxzJztcclxuLy9jb25zdCBibG9iVG9CYXNlNjQgPSBjb3JlRmlsZVV0aWxzLnByb3RvdHlwZS5ibG9iVG9CYXNlNjQ7XHJcblxyXG5jb25zdCBibG9iVG9CYXNlNjQgPSBhc3luYyAoYmxvYikgPT4ge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgXykgPT4ge1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxyXG4gICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdClcclxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0QXBpRGVmaW5pdGlvbiB7XHJcbiAgcXVlcnlMaXN0UmVsYXRpdmVQYXRoOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdFNlYXJjaE9iamVjdCB7XHJcbiAgcHJldmlvdXM6IElTZWFyY2hJdGVtW107XHJcbiAgY3VycmVudDogSVNlYXJjaEl0ZW1bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0RWRpdFJvdXRpbmcge1xyXG4gIGF1eGlsaWFyeTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RDUlVEIHtcclxuICBkZWxldGVJZHM/OiBhcGk7XHJcbiAgdG9nZ2xlQWN0aXZlSWRzPzogYXBpO1xyXG4gIHRvZ2dsZUFwcHJvdmVJZHM/OiBhcGk7XHJcbiAgdG9nZ2xlVW5hcHByb3ZlSWRzPzogYXBpO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElYbHN4SW1wb3J0T2JqZWN0IHtcclxuICB4bHN4U2lkOiBzdHJpbmcsXHJcbiAgeGxzeEV4Q29kZTogc3RyaW5nLFxyXG4gIHhsc3hTZXNzaW9uOiBudW1iZXIsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdFN0YXR1c1RhYiB7XHJcbiAgaWQ6IG51bWJlciB8IG51bGw7XHJcbiAgaW50bENvZGU/OiBzdHJpbmc7XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIGNvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVUYWJsZUZsYXRDb2x1bW5JdGVtIHtcclxuICBjYXB0aW9uOiBzdHJpbmc7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIHBpcGU/OiBzdHJpbmc7XHJcbiAgYWxpZ24/OiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgaGlkZGVuPzogYm9vbGVhbjtcclxufVxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY29yZS1wYWdlLWxpc3QnLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBSb3V0ZXJNb2R1bGUsXHJcbiAgICAgICAgQ29yZVRhYmxlQ29tcG9uZW50LFxyXG4gICAgICAgIENvcmVQYWdpbmF0aW9uRnVsbENvbXBvbmVudCxcclxuICAgICAgICBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCxcclxuICAgICAgICBDb3JlQ29tcG9zaXRpb25Db21wb25lbnQsXHJcbiAgICAgICAgQ29yZUNvbW1vblBhcmFtS2l0Q29tcG9uZW50LFxyXG4gICAgICAgIENvcmVBcGlQcm9ncmVzc0NvbXBvbmVudCxcclxuICAgICAgICBGdWxsc2NyZWVuTW9kYWxMb2FkZXJDb21wb25lbnQsXHJcbiAgICAgICAgQ29yZVRhYnNDb21wb25lbnQsXHJcbiAgICAgICAgQ29yZUZpbHRlcktpdENvbXBvbmVudCxcclxuICAgICAgICBDb3JlRmlsdGVySHViQ29tcG9uZW50LFxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBDb3JlUGFnZUxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBDb3JlUGFnZUxpc3RTdGF0ZSxcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVQYWdlTGlzdENvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAvKiBXSEVOIFlPVSBETyBOT1QgV0FOVCBQT1BVUCwgcGFzcyBbbm9ybWFsTW9kZV09XCJ0cnVlXCIgKi9cclxuICBASW5wdXQoKSBub3JtYWxNb2RlITogYm9vbGVhbjtcclxuICAvKiBTVEFSVDogU29tZSByb3V0ZWQgY29tcG9uZW50cywgc3VjaCBhcyBTdGFmZlByb2ZpbGUsIG1heSBiZSByZXVzZWQgYXMgcmVhZG9ubHkgZm9yIHNlZWtpbmcgKi9cclxuICBASW5wdXQoKSBoaWRlSGVhZGVyITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoaWRlQnV0dG9uR3JvdXAhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNlZWtlck1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG1jY01vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhlaWdodCE6IG51bWJlcjtcclxuICAvKiBFTkQ6IFNvbWUgcm91dGVkIGNvbXBvbmVudHMsIHN1Y2ggYXMgU3RhZmZQcm9maWxlLCBtYXkgYmUgcmV1c2VkIGFzIHJlYWRvbmx5IGZvciBzZWVraW5nICovXHJcblxyXG4gIC8qIGNoYW5nZSB0aGVzZSAyIHByb3BzIHRvIHdyYXAgaGVhZGVyIHRleHRzICovXHJcbiAgQElucHV0KCkgaGVhZGVyV3JhcCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVhZGVyRmlyc3RSb3dIZWlnaHQhOiBudW1iZXI7XHJcbiAgLyoqICovXHJcblxyXG4gIC8qKlNob3cgUGFyYW1LaXQgKi9cclxuICBASW5wdXQoKSBlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVycyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd1BhcmFtS2l0ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBlbmFibGVGaWx0ZXJLaXQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRhdGVQZXJpb2RDb21wYXJpc29uRm9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXkhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIHN0YXR1c0luY2x1c2lvbkZvciE6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgc3RhdHVzT3B0aW9uc0FwaSE6IGFwaTtcclxuICBASW5wdXQoKSBzdGF0dXNPcHRpb25zJDogQmVoYXZpb3JTdWJqZWN0PElDb3JlQ2hlY2tsaXN0T3B0aW9uW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQ29yZUNoZWNrbGlzdE9wdGlvbltdPihbXSk7XHJcbiAgQElucHV0KCkgc2hvd09yZ1BhcmFtITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93T3JnUGFyYW1Ecm9wZG93biE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGlkZUdlbmVyYWxTZWFyY2ghOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvbiE6IGJvb2xlYW47IC8vIGlmIHdlIHdhbnQgbm90IHRvIHVzZSBkYXRlIHAgZmlsdGVyXHJcbiAgQElucHV0KCkgaGlkZVN0YXR1c0luY2x1c2lvbiE6IGJvb2xlYW47IC8vIGlmIHdlIHdhbnQgbm90IHRvIHVzZSBzdGF0IHVzIGZpbHRlclxyXG5cclxuICBASW5wdXQoKSBmaWx0ZXJPcGVyYXRvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRmlsdGVyT3BlcmF0b3JbXT4oW10pO1xyXG5cclxuICBASW5wdXQoKSBjYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGdyaWRTdGF0dXNDb2x1bW4hOiBzdHJpbmc7XHJcblxyXG4gIC8qKkVuZCBTaG93IFBhcmFtS2l0ICovXHJcblxyXG4gIEBJbnB1dCgpIHRpdGxlITogRW51bVRyYW5zbGF0ZUtleSB8IHN0cmluZztcclxuICBASW5wdXQoKSBoYXNJZE9mU3RyaW5nVHlwZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGlkZUNoZWNrITogYm9vbGVhbjtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBhcGlEZWZpbml0aW9uITogSUNvcmVQYWdlTGlzdEFwaURlZmluaXRpb247XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29sdW1ucyE6IElDb3JlVGFibGVDb2x1bW5JdGVtW107XHJcbiAgQElucHV0KCkgdXNlVGhlc2VDb2x1bW5zITogc3RyaW5nW107XHJcbiAgQElucHV0KCkgaGlkZU9yZ1RyZWUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGZyb3plbiE6IG51bWJlcjtcclxuICBASW5wdXQoKSBpbmxpbmVUb29scyE6IElDb3JlVGFibGVUb29sSXRlbVtdO1xyXG4gIEBJbnB1dCgpIGlubGluZVRvb2xJdGVtcyE6IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdO1xyXG4gIEBJbnB1dCgpIGVkaXRSb3V0ZSE6IElDb3JlUGFnZUxpc3RFZGl0Um91dGluZztcclxuICBASW5wdXQoKSBjcnVkITogSUNvcmVQYWdlTGlzdENSVUQ7XHJcbiAgQElucHV0KCkgc2hvd0xpc3RJbmxpbmVUb29scyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgdG9wITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBsZWZ0ITogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBoaWRlTGVmdCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgb3V0ZXJQYXJhbSQhOiBCZWhhdmlvclN1YmplY3Q8YW55PjtcclxuICBASW5wdXQoKSBvdXRlckZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElGaWx0ZXJPcGVyYXRvcltdIHwgdW5kZWZpbmVkPihbXSk7XHJcbiAgQElucHV0KCkgb3V0ZXJTb3J0ITogSVNvcnRJdGVtW107XHJcbiAgQElucHV0KCkgb3V0ZXJGaWx0ZXJPcGVyYXRvcnMhOiBJRmlsdGVyT3BlcmF0b3JbXTtcclxuICBASW5wdXQoKSBvdXRlckluT3BlcmF0b3JzITogSUluT3BlcmF0b3JbXSB8IG51bGw7XHJcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZVdpdGhXaW5kb3chOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGV4dHJhTWFudWFsT2Zmc2V0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHdyYXAhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHJvd0hlaWdodCE6IHN0cmluZztcclxuICBASW5wdXQoKSBzZWxmUmVzb2x2ZUNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2shOiBib29sZWFuOyAvLyBUaGUgY2FsbGVyIHdpbGwgaXRzZWxmIHJlc29sdmUgZXZlbnRzIGVtbWl0ZWQgYnkgQ29yZVBhZ2VIZWFkZXIgYnV0dG9ucyAoZm9yIHNvbWUpXHJcbiAgQElucHV0KCkgY2xlYXJEYXRhJCE6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcclxuICBASW5wdXQoKSBkZWxldGVWYWxpZGF0ZUZuITogRnVuY3Rpb247XHJcbiAgQElucHV0KCkgZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QhOiBJR2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q7XHJcbiAgQElucHV0KCkgaW1wb3J0UHJldmlld1BhdGghOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29sdW1uU2VhcmNoRGVmYXVsdE9wZW4hOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGZpeGVkUGFnZVNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgZGlzYWJsZURvdWJsZUNsaWNrITogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KCkgbm9QYWRkaW5nQ2VsbCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2shOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgQElucHV0KCkgZXhjbHVkZWRJZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXJbXT4oW10pO1xyXG5cclxuICBASW5wdXQoKSBkaXNhYmxlRGlhbG9nSW5mb3JtYXRpb25MaW5lczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBjaGFuZ2VUcmFja2luZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcHJpbWFyeUtleTogc3RyaW5nID0gJ2lkJzsgLy8gJ2lkJyBvciAndmlydHVhbElkJ1xyXG4gIEBJbnB1dCgpIGNoYW5nZWRJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XHJcblxyXG4gIEBJbnB1dCgpIHRhYk1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwYXJhbVJvd3MhOiBJQ29yZVBhcmFtQ29udHJvbFtdW107XHJcbiAgQElucHV0KCkgZGlzYWJsZUZpbHRlckh1YiE6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIGF1dG9Db2x1bW5GaXRBdmFpbGFibGVTcGFjZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBPdXRwdXQoKSBjb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29yZUJ1dHRvblZOUz4oKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd0RvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZElkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWREYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkluc3RhbmNlQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBvbklucHV0RmlsZUJhc2U2NERhdGFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbGlzdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnY29yZVBhZ2VMaXN0Q29udGFpbmVyJykgY29yZVBhZ2VMaXN0Q29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwYWdpbmF0aW9uQ29udGFpbmVyJykgcGFnaW5hdGlvbkNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZUltcG9ydCcpIGZpbGVJbXBvcnQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBnZW9tZXRyaWNEb25lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGhlaWdodFJlc2l6aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICB0b3BQbGFjZUhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gIHJlc2l6ZUhlaWdodEZsYWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHBhZ2luYXRpb25IZWlnaHQhOiBudW1iZXI7XHJcbiAgY29tcG9zaXRpb25IZWlnaHQhOiBudW1iZXI7XHJcbiAgY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcbiAgZGlhbG9nSW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcblxyXG4gIHJlc2l6ZVN0cmVhbSQgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJyk7XHJcblxyXG4gIGNsaWNrR2VuZXJhdGVUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcXVlcnlMaXN0U3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG4gIGxvYWRpbmchOiBib29sZWFuO1xyXG5cclxuICBzZWxlY3RlZElkczogc3RyaW5nW10gfCBudW1iZXJbXSA9IFtdO1xyXG4gIHNlbGVjdGVkRGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgaXNBZG1pbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB2aWV3SW5pdERvbmUhOiBib29sZWFuO1xyXG5cclxuICAvKiBzdGFydDogcGFzc2luZyB0aGlzIHZhciB0byBQYWdpbmF0aW9uICovXHJcblxyXG4gIHBhZ2VDb3VudCE6IG51bWJlcjtcclxuXHJcbiAgLy8gUGFzc2luZyBCZWhhdmlvclN1YmplY3QgdG8gb3RoZXIgY29tcG9uZW50IGlzIGxpa2UgdXNpbmcgYSBzZXJ2aWNlICh0aGF0IGhvbGRzIHRoaXMgQmVoYXZpb3JTdWJqZWN0KSBpbmplY3RlZCB0byBib3RoIGNvbXBvbmVudHNcclxuICBjdXJyZW50UGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMSk7XHJcblxyXG4gIC8qIGVuZDogcGFzc2luZyB0aGlzIHZhciB0byBQYWdpbmF0aW9uICovXHJcblxyXG4gIHBhZ2VTaXplJCE6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xyXG5cclxuICBmaWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG5cclxuICBpbk9wZXJhdG9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElJbk9wZXJhdG9yW10+KFtdKTtcclxuICBnZW5lcmFsU2VhcmNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgc2VhcmNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUNvcmVQYWdlTGlzdFNlYXJjaE9iamVjdCB8IG51bGw+KG51bGwpO1xyXG4gIHNvcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU29ydEl0ZW1bXT4oW10pO1xyXG4gIHBhZ2luYXRpb24kITogQmVoYXZpb3JTdWJqZWN0PElQYWdpbmF0aW9uPjtcclxuICBmb3JjZVJlbG9hZGluZ0ZsYWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcXVlcnlMaXN0UmVxdWVzdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElRdWVyeUxpc3RSZXF1ZXN0Pih7IGxhbmc6ICd2aScsIGR0b1N0YXR1c0lkRmllbGQ6IHRoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZCB9KTtcclxuICBxdWVyeUxpc3RTdHJlYW0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIGlubmVyQm9keUNvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcclxuXHJcbiAgcGF1c2VTdWJzY3RpcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsaXN0ITogYW55W107XHJcbiAgLy9jaGFuZ2VkTGlzdDogYW55W10gPSBbXTtcclxuICB0YWJsZUhlaWdodCE6IG51bWJlcjtcclxuICBhdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaCE6IHN0cmluZ1tdO1xyXG4gIGRhdGFJbXBvcnQhOiBhbnk7XHJcbiAgcGVuZGluZ0FjdGlvbiE6IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB8IG51bGw7XHJcbiAgaWRTdGF0ZTogYW55O1xyXG4gIHRlbXBsYXRlRmlsZU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gIGxvbmdBcGlSdW5uaW5nITogYm9vbGVhbjtcclxuICBwcmVmZXRjaExvYWRpbmchOiBib29sZWFuO1xyXG5cclxuICBidXR0b25Hcm91cFN0YXR1cyE6IElDb3JlQnV0dG9uR3JvdXBTdGF0dXM7XHJcblxyXG4gIGV4cG9ydENvcmVQYWdlTGlzdEdyaWRUb0V4Y2VsU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBzdGF0dXNUYWJzOiBNYXA8bnVtYmVyLCBJQ29yZVBhZ2VMaXN0U3RhdHVzVGFiPiA9IG5ldyBNYXAoKTtcclxuICB0YWJIZWFkZXJzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGZpbHRlcktpdFpJbmRleCE6IG51bWJlcjtcclxuXHJcbiAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25maXJtYXRpb25Db2x1bW5zITogSUNvcmVUYWJsZUNvbHVtbkl0ZW1bXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlTGlzdFNlcnZpY2U6IENvcmVQYWdlTGlzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlTGlzdFN0YXRlOiBDb3JlUGFnZUxpc3RTdGF0ZSxcclxuICAgIHByaXZhdGUgY29yZVBhZ2VFZGl0U2VydmljZTogQ29yZVBhZ2VFZGl0U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBwU2VydmljZTogQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGluZ1NlcnZpY2U6IFJvdXRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb25nVGFza1NlcnZpY2U6IExvbmdUYXNrU2VydmljZSxcclxuICAgIHB1YmxpYyBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlQ29tcG9zaXRpb25TZXJ2aWNlOiBDb3JlQ29tcG9zaXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlQnV0dG9uR3JvdXBTZXJ2aWNlOiBDb3JlQnV0dG9uR3JvdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBqc29uU2VydmljZTogSnNvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdvcmtTaGlmdERuZFNlcnZpY2U6IFdvcmtTaGlmdERuZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRvbVNlcnZpY2U6IERvbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZpbHRlcktpdFNlcnZpY2U6IEZpbHRlcktpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVGaWx0ZXJIdWJTZXJ2aWNlOiBDb3JlRmlsdGVySHViU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZVRhYmxlU2VydmljZTogQ29yZVRhYmxlU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICBpZiAoISEhdGhpcy5pbmxpbmVUb29sSXRlbXMpIHtcclxuICAgICAgdGhpcy5pbmxpbmVUb29sSXRlbXMgPSBbXHJcbiAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgbmF2aWdhdGlvbiA9IHRoaXMucm91dGVyPy5nZXRDdXJyZW50TmF2aWdhdGlvbigpXHJcbiAgICBpZiAobmF2aWdhdGlvbikge1xyXG4gICAgICBjb25zdCBleHRyYXMgPSBuYXZpZ2F0aW9uLmV4dHJhcztcclxuICAgICAgaWYgKCEhZXh0cmFzICYmICdzdGF0ZScgaW4gZXh0cmFzKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKGBDb3JlUGFnZUxpc3QgaXMgdXNpbmcgb2xkIGluc3RhbmNlIG51bWJlciAke3RoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJ9YCwgYWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISFleHRyYXMuc3RhdGUgJiYgJ2lkJyBpbiBleHRyYXMuc3RhdGUhKSB7XHJcbiAgICAgICAgICB0aGlzLmlkU3RhdGUgPSBleHRyYXMuc3RhdGVbJ2lkJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWV4dHJhcy5zdGF0ZSAmJiAnaW5zdGFuY2VOdW1iZXInIGluIGV4dHJhcy5zdGF0ZSEpIHtcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgPSBleHRyYXMuc3RhdGVbJ2luc3RhbmNlTnVtYmVyJ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIFRISVMgQ09ERSBXSUxMIERFRklORSBvdXRlclBhcmFtJCBGSUxURVIgZm9yIGltcG9ydCBwcmV2aWV3IHRhc2sgKi9cclxuICAgIGlmIChuYXZpZ2F0aW9uPy5leHRyYXM/LnN0YXRlKSB7XHJcbiAgICAgIGNvbnN0IGltcG9ydFByZXZpZXdPdXRlclBhcmFtID0gbmF2aWdhdGlvbj8uZXh0cmFzPy5zdGF0ZSFbXCJpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbVwiXVxyXG4gICAgICBpZiAoISF0aGlzLm91dGVyUGFyYW0kKSB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5vdXRlclBhcmFtJD8udmFsdWUpIHtcclxuICAgICAgICAgIGlmICghIWltcG9ydFByZXZpZXdPdXRlclBhcmFtKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdPdXRlclBhcmFtID0gdGhpcy5vdXRlclBhcmFtJC52YWx1ZTtcclxuICAgICAgICAgICAgbmV3T3V0ZXJQYXJhbSA9IHtcclxuICAgICAgICAgICAgICAuLi5uZXdPdXRlclBhcmFtLFxyXG4gICAgICAgICAgICAgIC4uLmltcG9ydFByZXZpZXdPdXRlclBhcmFtLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dChuZXdPdXRlclBhcmFtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCEhaW1wb3J0UHJldmlld091dGVyUGFyYW0pIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRlclBhcmFtJC5uZXh0KGltcG9ydFByZXZpZXdPdXRlclBhcmFtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCEhaW1wb3J0UHJldmlld091dGVyUGFyYW0pIHtcclxuICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oaW1wb3J0UHJldmlld091dGVyUGFyYW0pXHJcbiAgICAgICAgICB0aGlzLm91dGVyUGFyYW1TdWJzY3JpYmVGbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAgIGlmICghISF0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLnB1c2goe1xyXG4gICAgICBpbnN0YW5jZU51bWJlcjogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcixcclxuICAgICAgcmVsb2FkRmxhZyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpLFxyXG4gICAgICBpZCQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKSxcclxuICAgICAgdmlydHVhbElkJDogbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpLFxyXG4gICAgICB0Ym9keUhlaWdodCQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKSxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghIXRoaXMuaWRTdGF0ZSkge1xyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgaWQ6IHRoaXMuaWRTdGF0ZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGVtcGxhdGVGaWxlTmFtZSA9IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q/LmV4Q29kZTtcclxuXHJcbiAgICBpZiAoISF0aGlzLm91dGVyRmlsdGVyJCkge1xyXG4gICAgICB0aGlzLm91dGVyRmlsdGVyJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycyA9IHggfHwgW107XHJcbiAgICAgICAgdGhpcy5tZXJnZUZpbHRlck9wZXJhdG9yKCk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cclxuICAgIGlmIChjaGFuZ2VzWydvdXRlckluT3BlcmF0b3JzJ10pIHtcclxuXHJcbiAgICAgIGlmICghIXRoaXMuaGlkZU9yZ1RyZWUgJiYgY2hhbmdlc1snb3V0ZXJJbk9wZXJhdG9ycyddLmN1cnJlbnRWYWx1ZS5maWx0ZXIoeCA9PiB4LmZpZWxkID09PSAnb3JnSWQnKS5sZW5ndGgpIHtcclxuICAgICAgICAvLyBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAvLyAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiV2hlbiB0aGlzLmhpZGVPcmdUcmVlID09PSB0cnVlLCBvdXRlckluT3BlcmF0b3JzIG11c3Qgbm90IGluY2x1ZGUgJ29yZ0lkJyBmaWVsZFwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjdXJyZW50SW5PcGVyYXRvcnM6IElJbk9wZXJhdG9yW10gPSB0aGlzLmluT3BlcmF0b3JzJC52YWx1ZTtcclxuICAgICAgY29uc3QgY2hhbmdlZEluT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gY2hhbmdlc1snb3V0ZXJJbk9wZXJhdG9ycyddLmN1cnJlbnRWYWx1ZSB8fCBbXTtcclxuICAgICAgY29uc3QgcmVtYWluSW5PcGVyYXRvcnMgPSBjdXJyZW50SW5PcGVyYXRvcnMuZmlsdGVyKHggPT4gISEhY2hhbmdlZEluT3BlcmF0b3JzLmZpbHRlcih5ID0+IHkuZmllbGQgPT09IHguZmllbGQpLmxlbmd0aCk7XHJcbiAgICAgIGNvbnN0IG5ld0luT3BlcmF0b3JzID0gWy4uLnJlbWFpbkluT3BlcmF0b3JzLCAuLi5jaGFuZ2VkSW5PcGVyYXRvcnNdO1xyXG5cclxuICAgICAgdGhpcy5pbk9wZXJhdG9ycyQubmV4dChuZXdJbk9wZXJhdG9ycyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ2NhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQnXSkge1xyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgZHRvU3RhdHVzSWRGaWVsZDogY2hhbmdlc1snY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZCddLmN1cnJlbnRWYWx1ZVxyXG4gICAgICB9KVxyXG5cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10pIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb25Db2x1bW5zID0gY2hhbmdlc1snY29sdW1ucyddLmN1cnJlbnRWYWx1ZT8uZmlsdGVyKHggPT4gISF4LnNob3dGb3JDb25maXJtYXRpb24pIHx8IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWyd1c2VUaGVzZUNvbHVtbnMnXSkge1xyXG4gICAgICBpZiAoISFjaGFuZ2VzWyd1c2VUaGVzZUNvbHVtbnMnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLnJlc29sdmVVc2VUaGVzZUNvbHVtbnMoY2hhbmdlc1sndXNlVGhlc2VDb2x1bW5zJ10uY3VycmVudFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG5cclxuICAgICAgLy8gS2jDtG5nIHRo4buDIHTDrW5oIMSRxrDhu6NjIHPhu5EgxJFvIGjDrG5oIGjhu41jIG7hur91IEFmdGVyVmlld0luaXQgY2jGsGEgY2jhuqF5XHJcbiAgICAgIC8vIE7Dqm4g4bufIMSRw6J5IHRhIGNo4buJIMSRxqFuIGdp4bqjbiBsw6AgZ8OhbiB0aGF5IMSR4buVaSBj4bunYSBoZWlnaHQgdsOgbyBoZWlnaHQkXHJcbiAgICAgIHRoaXMuaGVpZ2h0JC5uZXh0KGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgICBpZiAoISFjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHRCYXNlZE9uSGVpZ2h0QW5kVG9wUmVmSGVpZ2h0KGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSwgdGhpcy50b3BQbGFjZUhlaWdodCQudmFsdWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qXHJcbiAgICAgIGlmICghIWNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIC8vIE7hur91IGNoaeG7gXUgY2FvIGPhu6dhIENvcmVQYWdlTGlzdCDEkcaw4bujYyB0cnV54buBbiB2w6BvXHJcbiAgICAgICAgLy8gVGjDrCBj4bqnbiB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSBDb3JlQ29tcG9zaXRpb24gPSB0aGlzLmhlaWdodFxyXG4gICAgICAgIC8vIE7hur91IGhp4buDbiB0aOG7iyBDb3JlUGFnZUhlYWRlciB0aMOsIGPhuqduIHRy4burIHRp4bq/cCDEkWkgY29yZVBhZ2VIZWFkZXJIZWlnaHRcclxuICAgICAgICB0aGlzLmNvbXBvc2l0aW9uSGVpZ2h0ID0gY2hhbmdlc1snaGVpZ2h0J10uY3VycmVudFZhbHVlIC0gKCEhdGhpcy5oaWRlSGVhZGVyID8gMCA6IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCk7XHJcbiAgICAgICAgLy8gVMOtbmggbHXDtG4gY2hp4buBdSBjYW8gdGFibGVIZWlnaHRcclxuICAgICAgICAvLyBO4bq/dSBleHRyYU1hbnVhbE9mZnNldCDEkcaw4bujYyB0cnV54buBbiB2w6BvIG3hu5l0IGPDoWNoIHRo4bunIGPDtG5nXHJcbiAgICAgICAgaWYgKCEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZUhlaWdodCA9IGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSAtIHRoaXMuZXggdHJhTWFudWFsT2Zmc2V0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBD4bqnbiB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSBwaOG6p24gdG9wIGtoaSBob29rIEFmdGVyVmlld0luaXQgxJHGsOG7o2Mga8OtY2ggaG/huqF0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICovXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ291dGVyRmlsdGVyT3BlcmF0b3JzJ10pIHtcclxuICAgICAgdGhpcy5tZXJnZUZpbHRlck9wZXJhdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5xdWVyeUxpc3RTdWJzY3JpYmUoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKiBRdWVyeUxpc3Qgc3ViICovXHJcbiAgc3Vic2NyaWJlUXVlcnlMaXN0KHg6IGFueSkge1xyXG4gICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgY29uc3QgaW5uZXJCb2R5OiBJUXVlcnlMaXN0UmVzcG9uc2UgPSBib2R5LmlubmVyQm9keTtcclxuICAgICAgICBpZiAoISFpbm5lckJvZHkpIHtcclxuXHJcbiAgICAgICAgICAvKiAjcmVnaW9uIFRyaWNraWx5IHJlc2V0IGlkJCwgdG1wRmlsdGVyJCBhbmQgdG1wSW5PcGVyYXRvcnMkICovXHJcbiAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gdHJ1ZTsgLy8gPD09IFBhdXNlXHJcblxyXG4gICAgICAgICAgY29uc3QgbmV3UXVlcnlMaXN0UmVxdWVzdCA9IHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTdGF0ZS5pZCQubmV4dChudWxsKVxyXG4gICAgICAgICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLyogVGhpcyBjb2RlIGJsb2NrIHJhaXNlcyBhIGJ1ZyBnZW5lcmFsbHkgKi9cclxuICAgICAgICAgIC8vIGlmICghIXRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLnZhbHVlKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLm5leHQobnVsbClcclxuICAgICAgICAgIC8vICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcbiAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gICBuZXdRdWVyeUxpc3RSZXF1ZXN0LmlkID0gbnVsbDtcclxuICAgICAgICAgIC8vIH07XHJcblxyXG4gICAgICAgICAgaWYgKCEhdGhpcy50bXBGaWx0ZXJBY3RpdmUpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkRmlsdGVyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnByaW1hcnlGaWx0ZXIpKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQob2xkRmlsdGVyKTtcclxuICAgICAgICAgICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5maWx0ZXIgPSBvbGRGaWx0ZXI7XHJcbiAgICAgICAgICAgIHRoaXMucHJpbWFyeUZpbHRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy50bXBGaWx0ZXJBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoISF0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZEluT3BlcnRvcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucHJpbWFyeUluT3BlcmF0b3JzKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQob2xkSW5PcGVydG9ycyk7XHJcbiAgICAgICAgICAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuaW5PcGVyYXRvcnMgPSBvbGRJbk9wZXJ0b3JzO1xyXG4gICAgICAgICAgICB0aGlzLnByaW1hcnlJbk9wZXJhdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KG5ld1F1ZXJ5TGlzdFJlcXVlc3QpO1xyXG5cclxuICAgICAgICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSBmYWxzZTsgLy8gPD09IEFjdGl2ZSBiYWNrIGFnYWluXHJcblxyXG4gICAgICAgICAgLyogI2VuZHJlZ2lvbiBUcmlja2lseSByZXNldCBpZCQsIHRtcEZpbHRlciQgYW5kIHRtcEluT3BlcmF0b3JzJCAqL1xyXG5cclxuICAgICAgICAgIHRoaXMubGlzdCA9IGlubmVyQm9keS5saXN0IHx8IFtdO1xyXG5cclxuICAgICAgICAgIC8vIHNlbGVjdCB0aG9zZSBsaW5lcyBtYXJrZWQgYXMgY2hhbmdlZCBmcm9tIHRoZSBjYWNoZSBhbmQgdXBkYXRlIHRoZSBuZXcgbGlzdFxyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jaGFuZ2VUcmFja2luZykge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRyeUZpbmQgPSB0aGlzLmNoYW5nZWRJdGVtcyQudmFsdWUuZmlsdGVyKHggPT4geFt0aGlzLnByaW1hcnlLZXldID09PSBpdGVtW3RoaXMucHJpbWFyeUtleV0pO1xyXG4gICAgICAgICAgICAgIGlmICh0cnlGaW5kLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0W2luZGV4XSA9IHRyeUZpbmRbMF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLndvcmtTaGlmdERuZFNlcnZpY2Uuc2hpZnRDb2xsZWN0aW9uT3BlbiQubmV4dChmYWxzZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5saXN0Q2hhbmdlLmVtaXQodGhpcy5saXN0KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmlubmVyQm9keUNvdW50JC5uZXh0KGlubmVyQm9keS5jb3VudCEpO1xyXG4gICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSBNYXRoLmNlaWwoaW5uZXJCb2R5LmNvdW50ISAvIHRoaXMucGFnZVNpemUkLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICBpZiAoaW5uZXJCb2R5LnBhZ2UgIT09IHRoaXMuY3VycmVudFBhZ2UkLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSB0cnVlOyAvLyA8PT0gUGF1c2VcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSQubmV4dChpbm5lckJvZHkucGFnZSEpO1xyXG4gICAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gZmFsc2U7IC8vIDw9PSBBY3RpdmUgYmFjayBhZ2FpblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFVwZGF0ZSB0YWJIZWFkZXJzXHJcbiAgICAgICAgICBpZiAodGhpcy50YWJNb2RlICYmIGlubmVyQm9keS5zdGF0dXNDb3VudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3VGFiSGVhZGVyczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXNUYWJzLmZvckVhY2goc3RhdHVzVGFiID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IGlubmVyQm9keS5zdGF0dXNDb3VudHNbc3RhdHVzVGFiLmlkIS50b1N0cmluZygpXSB8fCAwO1xyXG4gICAgICAgICAgICAgIHN0YXR1c1RhYi5jb3VudCA9IGNvdW50O1xyXG4gICAgICAgICAgICAgIG5ld1RhYkhlYWRlcnMucHVzaChgJHtzdGF0dXNUYWIudGV4dH0gKCR7Y291bnR9KWApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLnRhYkhlYWRlcnMgPSBuZXdUYWJIZWFkZXJzO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5saXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdChbXSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xyXG4gICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdChbXSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gMDtcclxuICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAvLyAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAvLyAgICAgSlNPTi5zdHJpbmdpZnkoeCwgbnVsbCwgMiksXHJcbiAgICAgIC8vICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICAvLyAgICk7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1lcmdlRmlsdGVyT3BlcmF0b3IoKTogdm9pZCB7XHJcbiAgICAvKiBTVEFSVDogTWVyZ2UgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuICAgIGlmICghIXRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzLm1hcCgob2ZvKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLmZpbHRlcigobykgPT4gby5maWVsZCA9PT0gb2ZvLmZpZWxkICYmIG8ub3BlcmF0b3IgPT09IG9mby5vcGVyYXRvcik7XHJcbiAgICAgICAgICAvLyBvcHRpbWlzdGljYWxseSBmaWx0ZXIubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICBpZiAoISFmaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclswXS5kYXRlVGltZVZhbHVlID0gb2ZvLmRhdGVUaW1lVmFsdWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLnB1c2gob2ZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChjdXJyZW50RmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyogRU5EOiBDcmVhdGUvTWVyZ2UvT3ZlcndyaXRlIGZpbHRlck9wZXJhdG9yIHdpdGggb3V0ZXIgb25lICovXHJcbiAgfVxyXG4gIHRtcEZpbHRlckFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgdG1wSW5PcGVyYXRvcnNBY3RpdmUhOiBib29sZWFuO1xyXG4gIHByaW1hcnlGaWx0ZXIhOiBhbnk7XHJcbiAgcHJpbWFyeUluT3BlcmF0b3JzITogSUluT3BlcmF0b3JbXTtcclxuXHJcbiAgb3V0ZXJQYXJhbVN1YnNjcmliZUZuKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMub3V0ZXJQYXJhbSQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgLy8gbWVyZ2Ugb3Igb3ZlcndyaXJlIGN1cnJlbnQgZmlsdGVyXHJcbiAgICAgICAgY29uc3QgY3VycmVudEZpbHRlciA9IHRoaXMuZmlsdGVyJC52YWx1ZTtcclxuICAgICAgICBpZiAoISFjdXJyZW50RmlsdGVyKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIC4uLmN1cnJlbnRGaWx0ZXIsXHJcbiAgICAgICAgICAgIC4uLngsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQobmV3RmlsdGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQoeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlc29sdmVVc2VUaGVzZUNvbHVtbnModmFsdWU6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXdDb2x1bW5zID0gdGhpcy5jb3JlVGFibGVTZXJ2aWNlLm1ha2VTZWVrZXJDb2x1bW5zKHRoaXMuY29sdW1ucywgdmFsdWUpXHJcbiAgICB0aGlzLmNvbHVtbnMgPSBuZXdDb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCEhdGhpcy51c2VUaGVzZUNvbHVtbnMpIHtcclxuICAgICAgdGhpcy5yZXNvbHZlVXNlVGhlc2VDb2x1bW5zKHRoaXMudXNlVGhlc2VDb2x1bW5zKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjaGVjayBmb3Igc2hvd0ZvckNvbmZpcm1hdGlvblxyXG4gICAgY29uc3QgY2hlY2sgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LnNob3dGb3JDb25maXJtYXRpb24pO1xyXG4gICAgaWYgKGNoZWNrLmxlbmd0aCA9PT0gMCAmJiBpc0Rldk1vZGUoKSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcih0aGlzLm1scy50cmFucyh0aGlzLnRpdGxlKSArIFwiIGPhuqduIHThu5NuIHThuqFpIMOtdCBuaOG6pXQgMSBj4buZdCBjw7MgdGh14buZYyB0w61uaCAnc2hvd0ZvckNvbmZpcm1hdGlvbjogdHJ1ZSdcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmNsaWNrR2VuZXJhdGVUZW1wbGF0ZSQucGlwZShcclxuICAgICAgICBtYXAoeCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4geDtcclxuICAgICAgICB9KSxcclxuICAgICAgICBmaWx0ZXIoeCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gISF4XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlRmlsZU5hbWUgPSB0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0Py5leENvZGUgKyBcIl9cIiArIHggKyBcIi54bHN4XCJcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuZ2VuZXJhdGVUZW1wbGF0ZSh0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgaWYgKHguYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHJldHVyblxyXG5cclxuICAgICAgICAgIGxldCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3guYm9keV0pKVxyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIHRoaXMudGVtcGxhdGVGaWxlTmFtZSk7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkTGluayk7XHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcIkRvd25sb2FkIGZhaWxlZC4gUGxlYXNlIGNvbnRhY3QgeW91ciBkZXZlbG9wZXIgdGVhbSB0byByZXNvbHZlXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfSkpXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS50bXBGaWx0ZXIkLnBpcGUoZmlsdGVyKHggPT4gISF4ICYmICEhIXRoaXMudG1wRmlsdGVyQWN0aXZlKSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUZpbHRlciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXIkLnZhbHVlKSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQoeCk7XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEZpbHRlciQubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnRtcEZpbHRlckFjdGl2ZSA9IHRydWU7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEluT3BlcmF0b3JzJC5waXBlKGZpbHRlcih4ID0+ICEheC5sZW5ndGggJiYgISEhdGhpcy50bXBJbk9wZXJhdG9yc0FjdGl2ZSkpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLnByaW1hcnlJbk9wZXJhdG9ycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5pbk9wZXJhdG9ycyQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLmluT3BlcmF0b3JzJC5uZXh0KHgpO1xyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS50bXBJbk9wZXJhdG9ycyQubmV4dChbXSk7XHJcbiAgICAgICAgdGhpcy50bXBJbk9wZXJhdG9yc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICBpZiAoISF0aGlzLm91dGVyU29ydCkge1xyXG4gICAgICB0aGlzLnNvcnQkLm5leHQodGhpcy5vdXRlclNvcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25JbnN0YW5jZUNyZWF0ZWQuZW1pdCh0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmZpeGVkUGFnZVNpemUpIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odGhpcy5maXhlZFBhZ2VTaXplKTtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVBhZ2luYXRpb24+KHtcclxuICAgICAgICBza2lwOiAwLFxyXG4gICAgICAgIHRha2U6IHRoaXMuZml4ZWRQYWdlU2l6ZSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihkZWZhdWx0UGFnaW5nLnRha2UpO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGFnaW5hdGlvbj4oe1xyXG4gICAgICAgIHNraXA6IDAsXHJcbiAgICAgICAgdGFrZTogZGVmYXVsdFBhZ2luZy50YWtlLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3QXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2g6IHN0cmluZ1tdID0gW107XHJcbiAgICB0aGlzLmNvbHVtbnMubWFwKCh4KSA9PiB7XHJcbiAgICAgIC8vIGlmICh4LnR5cGUgPT09ICd0ZXh0JyB8fCB4LnR5cGUgPT09ICdzdHJpbmcnIHx8IHgudHlwZSA9PT0gJ2RhdGUnIHx8IHgudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICAvLyBpZiAoeC50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgaWYgKHgudHlwZSA9PT0gJ3RleHQnIHx8IHgudHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBuZXdBdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaC5wdXNoKHguZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2ggPSBuZXdBdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaDtcclxuXHJcbiAgICBpZiAoISF0aGlzLmNsZWFyRGF0YSQpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5jbGVhckRhdGEkXHJcbiAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEheDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5saXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMubGlzdENoYW5nZS5lbWl0KFtdKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckRhdGEkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25IZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIHNldCBkZWZhdWx0IHNvcnQgZGlyZWN0aW9uXHJcblxyXG4gICAgY29uc3QgbmV3U29ydDogSVNvcnRJdGVtW10gPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmZpZWxkICE9PSBcImlkXCIpLm1hcCgoYykgPT4ge1xyXG4gICAgICBuZXdTb3J0LnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBjLmZpZWxkLFxyXG4gICAgICAgIHNvcnREaXJlY3Rpb246IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICAvLyBhY2NlcHQgZGVmYXVsdHNvcnQgcGFyYW1cclxuICAgIHRoaXMuc29ydCQubmV4dChuZXdTb3J0Lm1hcCh0MSA9PiAoeyAuLi50MSwgLi4udGhpcy5zb3J0JC52YWx1ZS5maW5kKHQyID0+IHQyLmZpZWxkID09PSB0MS5maWVsZCkgfSkpKTtcclxuXHJcbiAgICAvKiBTVEFSVDogTWVyZ2UgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuICAgIGlmICghIXRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMubWFwKChvZm8pID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAobykgPT4gby5maWVsZCA9PT0gb2ZvLmZpZWxkICYmIG8ub3BlcmF0b3IgPT09IG9mby5vcGVyYXRvclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIG9wdGltaXN0aWNhbGx5IGZpbHRlci5sZW5ndGggPT09IDFcclxuICAgICAgICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclswXS5vcGVyYXRvciA9IG9mby5vcGVyYXRvcjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLnB1c2gob2ZvKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJvdXRlckZpbHRlck9wZXJhdG9ycyB3ZXJlIGludmFsaWRcIilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChjdXJyZW50RmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyogRU5EOiBDcmVhdGUvTWVyZ2UvT3ZlcndyaXRlIGZpbHRlck9wZXJhdG9yIHdpdGggb3V0ZXIgb25lICovXHJcblxyXG4gICAgLyogU1RBUlQ6IFN1YnNjcmlwdGlvbiBmb3Igb3V0ZXJQYXJhbSQgKi9cclxuICAgIC8vIFNvbWUgc2ltcGxlIG1hc3RlciBkYXRhIGRvIG5vdCBoYXZlIG91dGVyUGFyYW0kIElNUE9SVEFOVCEhIVxyXG4gICAgaWYgKCEhdGhpcy5vdXRlclBhcmFtJCkge1xyXG4gICAgICB0aGlzLm91dGVyUGFyYW1TdWJzY3JpYmVGbigpO1xyXG4gICAgfVxyXG4gICAgLyogRU5EOiBTdWJzY3JpcHRpb24gZm9yIG91dGVyUGFyYW0kICovXHJcblxyXG4gICAgLyogU1RBUlQ6IFN1YnNjcmlwdGlvbnMgZm9yIHF1ZXJ5TGlzdFJlcXVlc3QkICovXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgbGFuZzogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZXhjbHVkZWRJZHMkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgZXhjbHVkZWRJZHM6IHhcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZ2VuZXJhbFNlYXJjaCRcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgICBnZW5lcmFsU2VhcmNoOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZS5nZW5lcmFsU2VhcmNoLFxyXG4gICAgICAgICAgICAgIHNlYXJjaEZvcjogeCxcclxuICAgICAgICAgICAgICBhdmFpbGFibGVDb2x1bW5zOiB0aGlzLmF2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZmlsdGVyJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGZpbHRlcjogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGZpbHRlck9wZXJhdG9yczogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgaW5PcGVyYXRvcnM6IHgsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgJ3RoaXMucXVlcnlMaXN0UmVxdWVzdCQgY2hhbmdlZDogJyxcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5zZWFyY2gkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCEhcHJldiB8fCAhIWN1cnIpIHtcclxuICAgICAgICAgICAgICBjb25kaXRpb24gPSBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgIHNlYXJjaDogISF4Py5jdXJyZW50XHJcbiAgICAgICAgICAgICAgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHg/LmN1cnJlbnQpKVxyXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuc29ydCQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSkpLFxyXG4gICAgICAgICAgc29ydDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh4KSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLnBhZ2luYXRpb24kLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgcGFnaW5hdGlvbjogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAuZmlsdGVyKCh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKVswXVxyXG4gICAgICAgIC5yZWxvYWRGbGFnJCEuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckIGlzIGJlaW5nIGNoYW5nZWQuLi4nLCB4KTtcclxuICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KHgpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBmb3JjZVJlbG9hZGluZ0ZsYWc6IHgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlJFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSAvLyBJTVBPUlRBTlQhXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiY3VycmVudFBhZ2UgY2hhbmdlIHRvXCIsIHgpXHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZT8ucGFnaW5hdGlvbiEsXHJcbiAgICAgICAgICAgICAgc2tpcDogKHggLSAxKSAqIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWU/LnBhZ2luYXRpb24/LnRha2UhLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5sb2FkaW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxvYWRpbmcgPSB4KVxyXG4gICAgKVxyXG5cclxuICAgIC8qIEVORDogU3Vic2NyaXB0aW9ucyBmb3IgcXVlcnlMaXN0UmVxdWVzdCQgKi9cclxuXHJcbiAgICAvLyBRdWFuIHRy4buNbmc6IENvcmVQYWdlTGlzdCBj4bqnbiBiaeG6v3QgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW9cclxuICAgIC8vIFR1eSBuaGnDqm4gY8OzIG5oaeG7gXUgdHLGsOG7nW5nIGjhu6NwIGNoaeG7gXUgY2FvIG7DoHkga2jDtG5nIMSRxrDhu6NjIHRydXnhu4FuIHbDoG8ga2hpIHRyaeG7g24ga2hhaVxyXG4gICAgLy8gWMOpdCB0csaw4budbmcgaOG7o3AgY8OhYyBmb3JtIGRhbmggbeG7pWMgY8ahIGLhuqNuXHJcbiAgICAvLyBjb250ZW50LWNvbnRhaW5lciA9PiBjb25zdW1lIGNvbXBvbmVudCA9PiBjb3JlLXBhZ2UtbGlzdCA9PiBjb3JlLXBhZ2UtaGVhZGVyID0+IGNvcmUtY29tcG9zaXRpb24gPT4gdG9wUmVmICsgdGFibGUgKyBwYWdpbmF0aW9uXHJcbiAgICAvLyB0YSBjw7MgdGjhu4MgdMOtbmggc+G7kSBt4bq3YyDEkeG7i25oIChu4bq/dSBoZWlnaHQga2jDtG5nIMSRxrDhu6NjIHRydXnhu4FuIHbDoG8pXHJcbiAgICBpZiAodGhpcy5oZWlnaHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmxheW91dFNlcnZpY2UuY29udGVudENvbnRhaW5lckhlaWdodCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgLy8gYmFzaWNTcGFjaW5nIGzDoCBwYWRkaW5nQm90dG9tIGPhu6dhIGzhu5twIGNvbnRlbnQtY29udGFpbmVyXHJcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IHggLSB0aGlzLmxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nO1xyXG4gICAgICAgICAgdGhpcy5oZWlnaHQkLm5leHQoeCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG9uUm93RG91YmxlQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCEhdGhpcy5zZWVrZXJNb2RlIHx8ICEhdGhpcy5tY2NNb2RlIHx8ICEhdGhpcy5kaXNhYmxlRG91YmxlQ2xpY2spIHtcclxuICAgICAgdGhpcy5yb3dEb3VibGVDbGljay5lbWl0KGV2ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghISF0aGlzLnNlbGZSZXNvbHZlQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljaykge1xyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VFZGl0U2VydmljZS5mcm9tVXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgICAgIGlmICghIXRoaXMubm9ybWFsTW9kZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5oYXNJZE9mU3RyaW5nVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBidG9hKGV2ZW50LmlkKSxcclxuICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLnBhcmVudCxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBidG9hKGV2ZW50LmlkLnRvU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5oYXNJZE9mU3RyaW5nVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQudG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yb3dEb3VibGVDbGljay5lbWl0KGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Sb3dDbGljayhlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdDb3JQYWdlTGlzdCBvblJvd0NsaWNrIGUnLCBlKTtcclxuICAgIGlmICghIWUuaWQpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZShlLmlkKTtcclxuICAgIH0gZWxzZSBpZiAoISFlLnZpcnR1YWxJZCkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKGUudmlydHVhbElkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgIFwiQm90aCAnaWQnIGFuZCAndmlydHVhbElkJyBjb2x1bW5zIGFyZSBudWxsLiBQbGVhc2UgY2hlY2sgd2h5XCIsXHJcbiAgICAgICAgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMucm93Q2xpY2suZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uVG9vbENsaWNrKGV2ZW50OiBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSkgeyB9XHJcblxyXG4gIG9uU2VhcmNoaW5nKGU6IElTZWFyY2hJdGVtW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IHByZXYgPSAhIXRoaXMuc2VhcmNoJC52YWx1ZT8uY3VycmVudFxyXG4gICAgICA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWFyY2gkLnZhbHVlPy5jdXJyZW50KSlcclxuICAgICAgOiBudWxsO1xyXG4gICAgdGhpcy5zZWFyY2gkLm5leHQoe1xyXG4gICAgICBwcmV2aW91czogcHJldiEsXHJcbiAgICAgIGN1cnJlbnQ6IGUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc0ZpeGVkSGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICBjb25zdCBwYWdpbmF0aW9uSGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnaW5hdGlvbi1oZWlnaHQnKVxyXG4gICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRhYmxlQm9yZGVyVG9wID0gTnVtYmVyKFxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtdGFibGUtYm9yZGVyLXRvcCcpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGJsb2NrQ2VsbFNwYWNpbmcgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtbGF5b3V0LWJsb2NrLWNlbGwtc3BhY2luZycpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29yZVBhZ2VMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICctLWhlaWdodCcsXHJcbiAgICAgIGNvbnRhaW5lckhlaWdodCArICdweCdcclxuICAgICk7XHJcbiAgICBjb25zdCByZWxhdGVkVGFibGVGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICk7XHJcbiAgICBpZiAoISFyZWxhdGVkVGFibGVGaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRUYWJsZUZpbHRlclswXS5jb3JlVGFibGVSZWY7XHJcbiAgICAgIGlmICghIXJlbGF0ZWRUYWJsZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBGT1VORCEhIScpO1xyXG4gICAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZUhlaWdodCA9XHJcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQgLVxyXG4gICAgICAgICAgcGFnaW5hdGlvbkhlaWdodCAtXHJcbiAgICAgICAgICB0YWJsZUJvcmRlclRvcCAtXHJcbiAgICAgICAgICAyICogYmxvY2tDZWxsU3BhY2luZyAqIDAgLyogcGFkZGluZyBpbmNsdWVkIGluIG9iamVjdCBpdHNlbGYgKi8gLVxyXG4gICAgICAgICAgKHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgfHwgMCk7XHJcbiAgICAgICAgcmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICAgICAgZmVhdHVyZUhlaWdodCArICdweCdcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUocmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlYWRlci0xc3Qtcm93LWhlaWdodCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kSGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0taGVhZGVyLTJuZC1yb3ctaGVpZ2h0JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmVhdHVyZVRib2R5SGVpZ2h0ID1cclxuICAgICAgICAgIGZlYXR1cmVIZWlnaHQgLSBmaXJzdEhlYWRlclJvd0hlaWdodCAtIHNlY29uZEhlYWRlclJvd0hlaWdodDtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ2ZlYXR1cmVUYm9keUhlaWdodCcsIGZlYXR1cmVUYm9keUhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgICApWzBdXHJcbiAgICAgICAgICAudGJvZHlIZWlnaHQkLm5leHQoZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuICAgICAgICAvL30pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIHdhcyB1bmRlZmluZWQnKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHJlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodFdoZW5Db250YWluZXJIYXNVbmRlZmluZWRIZWlnaHQoKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbnRlbnRDb250YWluZXJIZWlnaHQkLnZhbHVlO1xyXG4gICAgY29uc3QgcGFnZUhlYWRlckhlaWdodCA9IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodDtcclxuICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQ7XHJcbiAgICBjb25zdCB0YWJsZUJvcmRlclRvcCA9IHRoaXMubGF5b3V0U2VydmljZS50YWJsZUJvcmRlclRvcDtcclxuICAgIGNvbnN0IGJhc2ljU3BhY2luZyA9IHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmc7XHJcblxyXG4gICAgdGhpcy5jb3JlUGFnZUxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgJy0taGVpZ2h0JyxcclxuICAgICAgY29udGFpbmVySGVpZ2h0IC0gMiAqIGJhc2ljU3BhY2luZyArICdweCdcclxuICAgICk7XHJcbiAgICBjb25zdCByZWxhdGVkVGFibGVGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICk7XHJcbiAgICBpZiAoISFyZWxhdGVkVGFibGVGaWx0ZXIubGVuZ3RoKSB7XHJcblxyXG4gICAgICBpZiAoISF0aGlzLmF1dG9SZXNpemVXaXRoV2luZG93KSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRUYWJsZUZpbHRlclswXS5jb3JlVGFibGVSZWY7XHJcbiAgICAgICAgaWYgKCEhcmVsYXRlZFRhYmxlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgRk9VTkQhISEnKTtcclxuICAgICAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmZWF0dXJlSGVpZ2h0ID1cclxuICAgICAgICAgICAgY29udGFpbmVySGVpZ2h0IC1cclxuICAgICAgICAgICAgcGFnZUhlYWRlckhlaWdodCAtXHJcbiAgICAgICAgICAgIHBhZ2luYXRpb25IZWlnaHQgLVxyXG4gICAgICAgICAgICB0YWJsZUJvcmRlclRvcCAtXHJcbiAgICAgICAgICAgIDIgKiBiYXNpY1NwYWNpbmcgLVxyXG4gICAgICAgICAgICAodGhpcy5leHRyYU1hbnVhbE9mZnNldCB8fCAwKTtcclxuICAgICAgICAgIHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICAgICAgICBmZWF0dXJlSGVpZ2h0ICsgJ3B4J1xyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmaXJzdEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMXN0LXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IHNlY29uZEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMm5kLXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmZWF0dXJlVGJvZHlIZWlnaHQgPVxyXG4gICAgICAgICAgICBmZWF0dXJlSGVpZ2h0IC0gZmlyc3RIZWFkZXJSb3dIZWlnaHQgLSBzZWNvbmRIZWFkZXJSb3dIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2ZlYXR1cmVUYm9keUhlaWdodCcsIGZlYXR1cmVUYm9keUhlaWdodCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgICAgIClbMF1cclxuICAgICAgICAgICAgLnRib2R5SGVpZ2h0JC5uZXh0KGZlYXR1cmVUYm9keUhlaWdodCk7XHJcbiAgICAgICAgICAvL30pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiB3YXMgdW5kZWZpbmVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyByZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBmb3VuZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHQkKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICB0aGlzLmhlaWdodFJlc2l6aW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZXNpemVIZWlnaHQoKTtcclxuICAgICAgdGhpcy5oZWlnaHRSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgICBvYnNlcnZlci5uZXh0KG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgaWYgKCEhIXRoaXMuc2Vla2VyTW9kZSkge1xyXG4gICAgICAvKiAjc3RhcnQgRURJVElORyBDT0RFIEJMT0NLIEJFTExPVyBPTkxZIElGIFlPVSBLTk9XIEFMTCBUSEUgQVBQIERFU0lHTiBGTE9XUyAqL1xyXG4gICAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG4gICAgICBpZiAoISF0aGlzLmhlaWdodCkge1xyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc0ZpeGVkSGVpZ2h0KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRXaGVuQ29udGFpbmVySGFzVW5kZWZpbmVkSGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRvIGRvIHNtdGggbWF5YmVcclxuICAgIH1cclxuICAgIC8qICNlbmQgRURJVElORyBDT0RFIEJMT0NLIEJFTExPVyBPTkxZIElGIFlPVSBLTk9XIEFMTCBUSEUgQVBQIERFU0lHTiBGTE9XUyAqL1xyXG4gIH1cclxuXHJcbiAgcXVlcnlMaXN0U3Vic2NyaWJlKCk6IHZvaWQge1xyXG4gICAgaWYgKCEhIXRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uICYmICEhdGhpcy5xdWVyeUxpc3RTdHJlYW0kKSB7XHJcbiAgICAgIHRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeUxpc3RTdHJlYW0kLnN1YnNjcmliZSh4ID0+IHRoaXMuc3Vic2NyaWJlUXVlcnlMaXN0KHgpKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsY3VsYXRlVGFibGVIZWlnaHRCYXNlZE9uSGVpZ2h0QW5kVG9wUmVmSGVpZ2h0KGhlaWdodDogbnVtYmVyLCB0b3BSZWZIZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkIHx8IHRvcFJlZkhlaWdodCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICB0aGlzLmNvbXBvc2l0aW9uSGVpZ2h0ID0gaGVpZ2h0IC0gKCEhdGhpcy5oaWRlSGVhZGVyID8gMCA6IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCk7XHJcbiAgICAvLyAoIXRvcFJlZkhlaWdodCA/IDE1IDogMCkgPT4gTuG6v3UgY8OzIHBo4bqnbiBUb3Agc+G6vSBjw7MgdGjDqm0gbWFyZ2luQm90dG9tIDE1cHggY+G7p2EgbsOzLlxyXG4gICAgaWYgKCF0aGlzLnRhYk1vZGUpIHtcclxuICAgICAgdGhpcy50YWJsZUhlaWdodCA9IGhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCAtIHRvcFJlZkhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCAtICghIXRvcFJlZkhlaWdodCA/IDE1IDogMCkgIC8vIDE1cHggaXMgbWFyZ2luQm90dG9tIG9mIHRvcFJlZlxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50YWJsZUhlaWdodCA9IGhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCAtICg0NSkgLSB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgLy8gPGNvcmUtdGFicyBbaGVpZ2h0XT1cIjU1XCIuLi4+XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLyoqIFNUQVJUIHNldFRpbWVvdXQgKi9cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5oZWlnaHQkLm5leHQodGhpcy5oZWlnaHQpO1xyXG5cclxuICAgICAgdGhpcy5maWx0ZXJLaXRaSW5kZXggPSB0aGlzLmRvbVNlcnZpY2UuZ2V0TWF4WkluZGV4KCkgKyAxO1xyXG5cclxuICAgICAgY29uc3QgdHJ5RmluZCA9IHRoaXMuY29yZUJ1dHRvbkdyb3VwU2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKHggPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcik7XHJcbiAgICAgIGlmICghIXRyeUZpbmQubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cyA9IHRyeUZpbmRbMF07XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdIaWRkZW5JdGVtcyA9IHRoaXMuYnV0dG9uR3JvdXBTdGF0dXMubXVzdEJlSGlkZGVuJC52YWx1ZVxyXG4gICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXMubXVzdEJlSGlkZGVuJC5uZXh0KFtcclxuICAgICAgICAgIC4uLmV4aXN0aW5nSGlkZGVuSXRlbXMsXHJcbiAgICAgICAgICAuLi5FTVBUWV9TRUxFQ1RJT05fSElEREVOX0JVVFRPTlxyXG4gICAgICAgIF0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmICEoIXRoaXMuc2Vla2VyTW9kZSB8fCAhdGhpcy5oaWRlQnV0dG9uR3JvdXApKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKFwiS2jDtG5nIHTDrG0gdGjhuqV5IGluc3RhbmNlIG51bWJlciBj4bunYSBi4buZIG7DunQgxJFp4buBdSBraGnhu4NuXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEhdGhpcy50YWJNb2RlICYmICEhdGhpcy5zdGF0dXNPcHRpb25zQXBpKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5nZXQodGhpcy5zdGF0dXNPcHRpb25zQXBpICsgJz9sYW5nPScgKyB4KS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDAgJiYgeC5ib2R5Py5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50U3RhdGU6IHsgaWQ6IG51bWJlciB8IG51bGwsIGNvdW50OiBudW1iZXIgfVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzVGFicy5mb3JFYWNoKGkgPT4gY291bnRTdGF0ZS5wdXNoKHsgaWQ6IGkuaWQsIGNvdW50OiBpLmNvdW50IH0pKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNUYWJzLmNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudGFiSGVhZGVycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICBib2R5LmlubmVyQm9keS5mb3JFYWNoKChtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnRGaWx0ZXIgPSBjb3VudFN0YXRlLmZpbHRlcihvID0+IG8uaWQgPT09IG0uaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9ICEhY3VycmVudENvdW50RmlsdGVyLmxlbmd0aCA/IGN1cnJlbnRDb3VudEZpbHRlclswXS5jb3VudCA6IDBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c1RhYnMuc2V0KGluZGV4LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZDogbS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGludGxDb2RlOiBtLk5hbWVJbnRsQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IG0udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBjdXJyZW50Q291bnRcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFiSGVhZGVycy5wdXNoKGAke20udGV4dH0gKCR7Y3VycmVudENvdW50fSlgKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNvbXBvc2l0aW9uRmlsdGVyID0gdGhpcy5jb3JlQ29tcG9zaXRpb25TZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoeCA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKTtcclxuICAgICAgaWYgKCEhY29tcG9zaXRpb25GaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICBjb21wb3NpdGlvbkZpbHRlclswXS50b3BSZWYkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b3BQbGFjZUhlaWdodCQubmV4dCh4Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlRmlsdGVySHViKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLmNvcmVGaWx0ZXJIdWJTZXJ2aWNlLm9wZW4kLnN1YnNjcmliZSh4ID0+IHRoaXMuc2hvd0ZpbHRlciA9IHgpXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmxvbmdUYXNrU2VydmljZS5sb25nQXBpUnVubmluZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sb25nQXBpUnVubmluZyA9IHgpXHJcbiAgICAgIClcclxuXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmhlaWdodCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVUYWJsZUhlaWdodEJhc2VkT25IZWlnaHRBbmRUb3BSZWZIZWlnaHQoeCwgdGhpcy50b3BQbGFjZUhlaWdodCQudmFsdWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy50b3BQbGFjZUhlaWdodCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVUYWJsZUhlaWdodEJhc2VkT25IZWlnaHRBbmRUb3BSZWZIZWlnaHQodGhpcy5oZWlnaHQkLnZhbHVlLCB4KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQucGlwZShcclxuICAgICAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZW9tZXRyaWNEb25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc2l6ZUhlaWdodCQoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVzaXplSGVpZ2h0RmxhZyQgc3dpdGNoTWFwIGZpbmFsIHZhbHVlXCIsIHgpXHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5oZWlnaHRSZXNpemluZykgdGhpcy5nZW9tZXRyaWNEb25lID0gdHJ1ZTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgKVxyXG4gICAgICAvLyB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0KCk7XHJcblxyXG4gICAgICBpZiAoISF0aGlzLnNob3dQYXJhbUtpdCkge1xyXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIGNhbGN1bGF0aW5nIG9mZnNldCBvZiB0aGUgdG9wXHJcbiAgICAgICAgY29uc3QgdHJ5RmluZENvcmVIZWFkZXJQYXJhbXNFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICcuY29yZS1oZWFkZXItcGFyYW1zLWNvbnRhaW5lcidcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChBcnJheS5mcm9tKHRyeUZpbmRDb3JlSGVhZGVyUGFyYW1zRWxlbWVudCkubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gQXJyYXkuZnJvbSh0cnlGaW5kQ29yZUhlYWRlclBhcmFtc0VsZW1lbnQpWzBdO1xyXG4gICAgICAgICAgY29uc3QgcmVjdCA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICB0aGlzLmV4dHJhTWFudWFsT2Zmc2V0ID0gcmVjdC5oZWlnaHQgKyAxNTsgLy8gbWIxNSBpcyBtYXJnaW4tYm90dG9tIDE1cHggb2YgZm9ybSByb3dcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkgdGhpcy5leHRyYU1hbnVhbE9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCEhIXRoaXMuZXh0cmFNYW51YWxPZmZzZXQpIHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgPSAwO1xyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdHJ5RmlsdGVyID0gdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG4gICAgICBpZiAoISEhdHJ5RmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoYENvcmVQYWdlTGlzdCBpbnN0YW5jZXMgZG8gbm90IGluY2x1ZGUgbnVtYmVyICR7dGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcn1gLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpWzBdXHJcbiAgICAgICAgICAgIC5pZCQucGlwZShcclxuICAgICAgICAgICAgICBmaWx0ZXIoXyA9PiAhISF0aGlzLmlkU3RhdGUpXHJcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKCh4OiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2UgaWQkIGhhcyBjaGFuZ2VkLCB4ID0gJywgeCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBpZDogeCxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gb3V0ZXItcHVzaFxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb25maXJtZWQkLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIoaSA9PiAhISF0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSAmJiAhIWk/LmNvbmZpcm1lZCAmJiBpLmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmRpYWxvZ0luc3RhbmNlTnVtYmVyKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVzZXRTZXJ2aWNlKClcclxuXHJcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMucGVuZGluZ0FjdGlvbikge1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVVBMT0FEOlxyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTm93IHVwbG9hZGluZy4uLiBcIiwgdGhpcy5kYXRhSW1wb3J0KTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gbWlkZGVtLXB1c2hcclxuICAgICAgICAgICAgICAvLyApXHJcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURTpcclxuICAgICAgICAgICAgICBjb25zdCBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdDogSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgc3lzRnVuY3Rpb25Db2RlOiB0aGlzLnJvdXRpbmdTZXJ2aWNlLmN1cnJlbnRGdW5jdGlvbiQudmFsdWU/LmNvZGUhLFxyXG4gICAgICAgICAgICAgICAgc3lzQWN0aW9uQ29kZTogRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEUsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmU6IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWREYXRhKSxcclxuICAgICAgICAgICAgICAgIGFmdGVyOiAnXCJcIicsXHJcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8udXNlck5hbWUhXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0OiBJSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICAgICAgICAgIHN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0XHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgLmRlbGV0ZUlkcyhyZXF1ZXN0LCB0aGlzLmNydWQuZGVsZXRlSWRzISlcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BQ1RJVkFURTpcclxuICAgICAgICAgICAgICBjb25zdCBhY3RpdmF0ZVJlcXVlc3Q6IElUb2dnbGVBY3RpdmVJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVUb0JpbmQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAoISF0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcywgYWN0aXZhdGVSZXF1ZXN0KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZVJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4odGhpcy5tbHMudHJhbnMoRW51bVRyYW5zbGF0ZUtleS5OT19BUElfRU5EX1BPSU5UX1BST1ZJREVEX0ZPUl9BQ1RJVkFUSU9OKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfSU5BQ1RJVkFURTpcclxuICAgICAgICAgICAgICBjb25zdCBpbmFjdGl2YXRlUmVxdWVzdDogSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVRvQmluZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAoISF0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcywgaW5hY3RpdmF0ZVJlcXVlc3QpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluYWN0aXZhdGVSZXF1ZXN0LmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRTpcclxuICAgICAgICAgICAgICBjb25zdCBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyU2VuZFVuYXBwcm92ZTogSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgc3lzRnVuY3Rpb25Db2RlOiB0aGlzLnJvdXRpbmdTZXJ2aWNlLmN1cnJlbnRGdW5jdGlvbiQudmFsdWU/LmNvZGUhLFxyXG4gICAgICAgICAgICAgICAgc3lzQWN0aW9uQ29kZTogRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkUsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmU6IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWREYXRhKSxcclxuICAgICAgICAgICAgICAgIGFmdGVyOiAnXCJcIicsXHJcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8udXNlck5hbWUhXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzZW5kUmVxdWVzdDogSVRvbmdsZVVuQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICByZWFzb246IHRoaXMuZGlhbG9nU2VydmljZS5yZWFzb24kLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVUb0JpbmQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgLnBvc3QodGhpcy5jcnVkLnRvZ2dsZVVuYXBwcm92ZUlkcyEsIHNlbmRSZXF1ZXN0KVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDAgfHwgeC5ib2R5LnN0YXR1c0NvZGUgPT0gJzIwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG5cclxuICAgICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZVdpdGhXaW5kb3cpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMucmVzaXplU3RyZWFtJC5waXBlKGRlYm91bmNlVGltZSgyMDApKS5zdWJzY3JpYmUoKF86IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpO1xyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLyogU1RBUlQ6IFN1YnNjcmlwdGlvbiBmb3IgbGlzdCAqL1xyXG5cclxuICAgICAgdGhpcy5xdWVyeUxpc3RTdHJlYW0kID0gdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5waXBlKFxyXG4gICAgICAgIG1hcCh4ID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWFwIHggPT4gXCIsIHgpXHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIxQ29uZGl0aW9uID0gISF4ICYmIC8qISF4LnNvcnQgJiYgKi8gISF4LnBhZ2luYXRpb25cclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWFwIGZpbHRlcjFDb25kaXRpb24gPT4gXCIsIGZpbHRlcjFDb25kaXRpb24pXHJcbiAgICAgICAgICByZXR1cm4geFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbHRlcigoeDogSVF1ZXJ5TGlzdFJlcXVlc3QpID0+ICEheCAmJiAvKiEheC5zb3J0ICYmICovICEheC5wYWdpbmF0aW9uKSxcclxuICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLnBhdXNlU3Vic2N0aXB0aW9uKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4ge1xyXG5cclxuICAgICAgICAgIC8qIFNUQVJUOiBBc3NpbWlsYXRpb24gbnVsbCBhbmQgbm90LWV4aXN0aW5nIHByb3BlcnR5ICovXHJcbiAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgbGFuZzogc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgZ2VuZXJhbFNlYXJjaD86IElHZW5lcmFsU2VhcmNoO1xyXG4gICAgICAgICAgICAgICAgc29ydD86IElTb3J0SXRlbVtdO1xyXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbj86IElQYWdpbmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyPzogYW55O1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyT3BlcmF0b3JzPzogSUZpbHRlck9wZXJhdG9yW107XHJcbiAgICAgICAgICAgICAgICBpbk9wZXJhdG9ycz86IElJbk9wZXJhdG9yW107XHJcbiAgICAgICAgICAgICAgICBzZWFyY2g/OiBJU2VhcmNoSXRlbVtdO1xyXG4gICAgICAgICAgICAgICAgaWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsLFxyXG4gICAgICAgICAgICAgICAgZm9yY2VSZWxvYWRpbmdGbGFnPzogYm9vbGVhbjtcclxuICAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAvL2dlbmVyYWxTZWFyY2hcclxuICAgICAgICAgIGlmICghISFwcmV2LmdlbmVyYWxTZWFyY2g/LnNlYXJjaEZvcikgcHJldi5nZW5lcmFsU2VhcmNoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgaWYgKCEhIWN1cnIuZ2VuZXJhbFNlYXJjaD8uc2VhcmNoRm9yKSBjdXJyLmdlbmVyYWxTZWFyY2ggPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgLy8gc29ydFxyXG4gICAgICAgICAgaWYgKCEhcHJldi5zb3J0KSB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2LnNvcnQubGVuZ3RoID09PSAwKSBwcmV2LnNvcnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoISFjdXJyLnNvcnQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnIuc29ydC5sZW5ndGggPT09IDApIGN1cnIuc29ydCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBzZWFyY2hcclxuICAgICAgICAgIGlmICghIXByZXYuc2VhcmNoKSB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2LnNlYXJjaC5sZW5ndGggPT09IDApIHByZXYuc2VhcmNoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCEhY3Vyci5zZWFyY2gpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnIuc2VhcmNoLmxlbmd0aCA9PT0gMCkgY3Vyci5zZWFyY2ggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gaWRcclxuICAgICAgICAgIGlmICghISFwcmV2LmlkKSBwcmV2LmlkID0gbnVsbDtcclxuICAgICAgICAgIGlmICghISFjdXJyLmlkKSBjdXJyLmlkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvKiBFTkQ6IEFzc2ltaWxhdGlvbiBudWxsIGFuZCBub3QtZXhpc3RpbmcgcHJvcGVydHkgKi9cclxuXHJcbiAgICAgICAgICBjb25zdCBjb25kaXRpb24gPSBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XHJcblxyXG4gICAgICAgICAgaWYgKCEhIWNvbmRpdGlvbikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwKCdDT01QQVJJU09OJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwcmV2JywgcHJldik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjdXJyJywgY3Vycik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjb25kaXRpb24nLCBjb25kaXRpb24pO1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gY29uZGl0aW9uO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAvKiBTVEFSVDogdXNlIHN3aXRjaE1hcCBmb3IgY2FuY2VsbGF0aW9uXHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5ncm91cCgnc3dpdGNoTWFwIHRyaWdnZXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJ4LmlkID0gXCIsIHguaWQpXHJcbiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5hcGlEZWZpbml0aW9uLnF1ZXJ5TGlzdFJlbGF0aXZlUGF0aCArIFwiP2NvbXB1dGluZ1dpdGhMb2NhbFRpbWVab25lPXRydWVcIjtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UucXVlcnlMaXN0KHgsIHVybCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvKlxyXG4gICAgICAgIC8qIEVORDogdXNlIHN3aXRjaE1hcCBmb3IgY2FuY2VsbGF0aW9uXHJcbiAgICAgICAgKi9cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMucXVlcnlMaXN0U3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAvKiBFTkQ6IFN1YnNjcmlwdGlvbiBmb3IgbGlzdCAqL1xyXG4gICAgICAvL30pO1xyXG4gICAgfSlcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKSwgNTAwKVxyXG5cclxuICAgIC8qKiBFTkQgc2V0VGltZW91dCovXHJcbiAgfVxyXG5cclxuICBvblBhcmFtS2l0VmFsdWVDaGFuZ2UoZGF0YTogSUNvcmVDb21tb25QYXJhbUtpdEV2ZW50RW1pdHRlckRhdGEpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAoZGF0YS5maWVsZCkge1xyXG4gICAgICBjYXNlICdvcmdJZHMnOlxyXG4gICAgICAgIGNvbnN0IG5ld09yZ0luT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuaW5PcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgaW5PcmdmaWx0ZXIgPSBuZXdPcmdJbk9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT4geC5maWVsZCA9PT0gJ29yZ0lkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGluT3JnZmlsdGVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgaW5PcmdmaWx0ZXJbMF0udmFsdWVzID0gZGF0YS52YWx1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGluT3JnZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgbmV3T3JnSW5PcGVyYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnb3JnSWQnLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IGRhdGEudmFsdWUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBJbk9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogZmllbGQgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5PcGVyYXRvcnMkLm5leHQobmV3T3JnSW5PcGVyYXRvcnMpKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZ2VuZXJhbFNlYXJjaCc6XHJcbiAgICAgICAgdGhpcy5nZW5lcmFsU2VhcmNoJC5uZXh0KGRhdGEudmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkYXRlRnJvbSc6XHJcbiAgICAgICAgbGV0IG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlckZyb20gPSBuZXdGcm9tRmlsdGVyT3BlcmF0b3JzLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PlxyXG4gICAgICAgICAgICB4LmZpZWxkID09PSB0aGlzLmRhdGVQZXJpb2RDb21wYXJpc29uRm9yICYmXHJcbiAgICAgICAgICAgIHgub3BlcmF0b3IgPT09IEVudW1GaWx0ZXJPcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChmaWx0ZXJGcm9tLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgaWYgKCEhZGF0YS52YWx1ZSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJGcm9tWzBdLmRhdGVUaW1lVmFsdWUgPSBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygwLCAwLCAwLCAwKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZmlsdGVyRnJvbVswXS5kYXRlVGltZVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlckZyb20ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IsXHJcbiAgICAgICAgICAgICAgb3BlcmF0b3I6IEVudW1GaWx0ZXJPcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUwsXHJcbiAgICAgICAgICAgICAgZGF0ZVRpbWVWYWx1ZTogbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygwLCAwLCAwLCAwKVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgYEZpbHRlck9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogY29tYmluYXRpb24gb2YgZmllbGQgbmFtZSBhbmQgb3BlcmF0b3IgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBmcm9tIG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMsIHJlbW92ZSB0aG9zZSBpdGVtcyB3aXRoIGhhdmUgZGF0ZVRpbWVWYWx1ZSA9PT0gbnVsbFxyXG4gICAgICAgIG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMgPSBuZXdGcm9tRmlsdGVyT3BlcmF0b3JzLmZpbHRlcih4ID0+IHguZGF0ZVRpbWVWYWx1ZSAhPT0gbnVsbClcclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLm5leHQobmV3RnJvbUZpbHRlck9wZXJhdG9ycyk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkYXRlVG8nOlxyXG4gICAgICAgIGxldCBuZXdUb0ZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyVG8gPSBuZXdUb0ZpbHRlck9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT5cclxuICAgICAgICAgICAgeC5maWVsZCA9PT0gdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvciAmJlxyXG4gICAgICAgICAgICB4Lm9wZXJhdG9yID09PSBFbnVtRmlsdGVyT3BlcmF0b3IuTEVTU19USEFOX09SX0VRVUFMXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZmlsdGVyVG8ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclRvWzBdLmRhdGVUaW1lVmFsdWUgPSBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJUb1swXS5kYXRlVGltZVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclRvLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKCEhZGF0YS52YWx1ZSkge1xyXG4gICAgICAgICAgICBuZXdUb0ZpbHRlck9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBmaWVsZDogdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvcixcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkxFU1NfVEhBTl9PUl9FUVVBTCxcclxuICAgICAgICAgICAgICBkYXRlVGltZVZhbHVlOiBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSlcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBGaWx0ZXJPcGVyYXRvcnMgZXJyb3IgZm9yICR7ZGF0YS5maWVsZH06IGNvbWJpbmF0aW9uIG9mIGZpZWxkIG5hbWUgYW5kIG9wZXJhdG9yIG5hbWUgaXMgbm90IHVuaXF1ZSBpbiB0aGUgYXJyYXlgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZnJvbSBuZXdGcm9tRmlsdGVyT3BlcmF0b3JzLCByZW1vdmUgdGhvc2UgaXRlbXMgd2l0aCBoYXZlIGRhdGVUaW1lVmFsdWUgPT09IG51bGxcclxuICAgICAgICBuZXdUb0ZpbHRlck9wZXJhdG9ycyA9IG5ld1RvRmlsdGVyT3BlcmF0b3JzLmZpbHRlcih4ID0+IHguZGF0ZVRpbWVWYWx1ZSAhPT0gbnVsbClcclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLm5leHQobmV3VG9GaWx0ZXJPcGVyYXRvcnMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc3RhdHVzSWRzJzpcclxuICAgICAgICBjb25zdCBuZXdJbk9wZXJhdG9yczogSUluT3BlcmF0b3JbXSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmluT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGluZmlsdGVyID0gbmV3SW5PcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+IHguZmllbGQgPT09IHRoaXMuc3RhdHVzSW5jbHVzaW9uRm9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW5maWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpbmZpbHRlclswXS52YWx1ZXMgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5maWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBuZXdJbk9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc3RhdHVzSW5jbHVzaW9uRm9yLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IGRhdGEudmFsdWUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBJbk9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogZmllbGQgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5PcGVyYXRvcnMkLm5leHQobmV3SW5PcGVyYXRvcnMpKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydFRvRXhjZWwoKTogdm9pZCB7XHJcbiAgICAvKiBQaMawxqFuZyBwaMOhcCB4deG6pXQgQ1NWICovXHJcbiAgICAvKiBD4bqnbiB0aGF5IGLhurFuZyB4deG6pXQgRVhDRUwgYuG6sW5nIEJhY2tlbmQgKi9cclxuICAgIC8qXHJcbiAgICBjb25zdCBjc3ZEYXRhOiBhbnlbXVtdID0gW107XHJcblxyXG4gICAgbGV0IHJvdzE6IGFueVtdID0gW107XHJcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKCh4KSA9PiB4LmZpZWxkICE9ICdpZCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5jb2x1bW5zKVxyXG4gICAgdGhpcy5jb2x1bW5zLm1hcCgoeCkgPT4ge1xyXG4gICAgICByb3cxLnB1c2godGhpcy5tbHMudHJhbnMoeC5jYXB0aW9uKSk7XHJcbiAgICB9KTtcclxuICAgIGNzdkRhdGEucHVzaChyb3cxKTtcclxuXHJcbiAgICB0aGlzLmxpc3QubWFwKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRSb3c6IGFueVtdID0gW107XHJcbiAgICAgIHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgIT0gJ2lkJykge1xyXG4gICAgICAgICAgbGV0IGN1cnJlbnRDZWxsID0gcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRDZWxsPy5yZXBsYWNlQWxsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRDZWxsID0gY3VycmVudENlbGwucmVwbGFjZUFsbCgnLCcsICc7Jyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjdXJyZW50Um93LnB1c2goY3VycmVudENlbGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjc3ZEYXRhLnB1c2goY3VycmVudFJvdyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgY3N2Q29udGVudCA9IGNzdkRhdGEubWFwKChlKSA9PiBlLmpvaW4oJywnKSkuam9pbignXFxuJyk7XHJcblxyXG4gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZShcclxuICAgICAgJ2hyZWYnLFxyXG4gICAgICAnZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04LCVFRiVCQiVCRicgKyBlbmNvZGVVUkkoY3N2Q29udGVudClcclxuICAgICk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnRXhwb3J0RXhlbC5jc3YnKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAqL1xyXG4gICAgLypcclxuICAgIELhuq90IMSR4bqndSB4deG6pXQgRXhjZWwgYuG6sW5nIEJhY2tlbmRcclxuICAgICovXHJcblxyXG4gICAgLy8gVGh1IHRo4bqtcCBuaGnDqm4gbGnhu4d1XHJcblxyXG4gICAgaWYgKCF0aGlzLmlubmVyQm9keUNvdW50JC52YWx1ZSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKHRoaXMubWxzLnRyYW5zKCdYTFNYX05PX1JFU1VMVF9UT19FWFBPUlQnKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVybCA9IHRoaXMuYXBpRGVmaW5pdGlvbi5xdWVyeUxpc3RSZWxhdGl2ZVBhdGg7XHJcbiAgICBjb25zdCB4ID0gdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZTsgLy8gQ+G6p24gbG/huqFpIGLhu48gcGFnaW5nIGto4buPaSDEkeG7kWkgdMaw4bujbmcgbsOgeVxyXG5cclxuICAgIHgucGFnaW5hdGlvbiA9IHtcclxuICAgICAgc2tpcDogMCxcclxuICAgICAgdGFrZTogdGhpcy5pbm5lckJvZHlDb3VudCQudmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXBpU3RyZWFtJDogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgLy8gTuG6v3UgY8OzIGTDsm5nIGThu68gbGnhu4d1IGNoZWNrZWQgdGjDrCBjaOG7iSB4deG6pXQgY8OhYyBkw7JuZyBuw6B5XHJcbiAgICBpZiAoISF0aGlzLnNlbGVjdGVkRGF0YS5sZW5ndGgpIHtcclxuICAgICAgYXBpU3RyZWFtJCA9IG5ldyBPYnNlcnZhYmxlPGFueT4ob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoe1xyXG4gICAgICAgICAgb2s6IHRydWUsXHJcbiAgICAgICAgICBzdGF0dXM6IDIwMCxcclxuICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxyXG4gICAgICAgICAgICBpbm5lckJvZHk6IHtcclxuICAgICAgICAgICAgICBsaXN0OiB0aGlzLnNlbGVjdGVkRGF0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUcsOhaSBs4bqhaSwgeHXhuqV0IDEwMCUgc2F1IGtoaSDEkcOjIGzhu41jICh0b8OgbiBi4buZIGPDoWMgdHJhbmcpXHJcbiAgICAgIGFwaVN0cmVhbSQgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UucXVlcnlMaXN0KHgsIHVybCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBJdCdzIHRpbWUgdG8gc3Vic2NyaWJlIGFwaVN0cmVhbSRcclxuICAgIHRoaXMucHJlZmV0Y2hMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICBhcGlTdHJlYW0kLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLnByZWZldGNoTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhgJHtib2R5LmlubmVyQm9keS5jb3VudH0gcm93cyBvZiBkYXRhIGZldGNoZWQuIEl0IGlzIHRpbWUgdG8gZG8gd2l0aCBiYWNrZW5kIGV4Y2VsIGV4cG9ydGluZ2AsIGFsZXJ0T3B0aW9ucylcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFwaVBvaW50ID0gYXBpLlhMU1hfRVhQT1JUX0NPUkVfUEFHRV9MSVNUX1RPX0VYQ0VMO1xyXG4gICAgICAgICAgICBjb25zdCBmbGF0Q29sdW1uczogSUNvcmVUYWJsZUZsYXRDb2x1bW5JdGVtW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAheC5oaWRkZW4pLm1hcChjID0+IHtcclxuICAgICAgICAgICAgICBmbGF0Q29sdW1ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBjYXB0aW9uOiBjLmNhcHRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICB0eXBlOiBjLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgIHBpcGU6IGMucGlwZSxcclxuICAgICAgICAgICAgICAgICAgYWxpZ246IGMuYWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBjLndpZHRoLFxyXG4gICAgICAgICAgICAgICAgICBoaWRkZW46IGMuaGlkZGVuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgY29uc3QgZmxhdERhdGE6IGFueVtdID0gW107XHJcbiAgICAgICAgICAgIGNvbnN0IGtleXM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgIGZsYXRDb2x1bW5zLm1hcChjID0+IGtleXMucHVzaChjLmZpZWxkKSk7XHJcbiAgICAgICAgICAgIGJvZHkuaW5uZXJCb2R5Lmxpc3QubWFwKChyb3c6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IGU6IGFueSA9IHt9O1xyXG4gICAgICAgICAgICAgIGtleXMubWFwKGsgPT4ge1xyXG4gICAgICAgICAgICAgICAgZVtrXSA9IHJvd1trXTtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgIGZsYXREYXRhLnB1c2goZSk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBjb25zdCBvYmogPSB7XHJcbiAgICAgICAgICAgICAgY29sdW1uczogZmxhdENvbHVtbnMsXHJcbiAgICAgICAgICAgICAgZGF0YTogZmxhdERhdGFcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgY29uc3QgcGF5bG9hZCA9IHRoaXMuanNvblNlcnZpY2Uuc3RyaW5naWZ5KG9iaik7XHJcblxyXG4gICAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuZXhwb3J0Q29yZVBhZ2VMaXN0R3JpZFRvRXhjZWxTdWJzY3JpcHRpb24gPSB0aGlzLmFwcFNlcnZpY2UuYmxvYlBvc3QoYXBpUG9pbnQsIHBheWxvYWQpLnN1YnNjcmliZShyZXNwb25zZSA9PiB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIGlmIChyZXNwb25zZS5ib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkgcmV0dXJuXHJcblxyXG4gICAgICAgICAgICAgIGxldCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFtyZXNwb25zZS5ib2R5XSkpXHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIHRoaXMubWxzLnRyYW5zKHRoaXMudGl0bGUpICsgXCIueGxzeFwiKTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkTGluayk7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG5cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApXHJcblxyXG4gIH1cclxuXHJcbiAgb25Db3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKGU6IElDb3JlQnV0dG9uVk5TKTogdm9pZCB7XHJcbiAgICB0aGlzLmNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2suZW1pdChlKTtcclxuXHJcbiAgICBzd2l0Y2ggKGUuY29kZSkge1xyXG5cclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0ZJTFRFUjpcclxuICAgICAgICAvL3RoaXMuZmlsdGVyS2l0U2VydmljZS5vcGVuJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIHRoaXMuY29yZUZpbHRlckh1YlNlcnZpY2Uub3BlbiQubmV4dCghdGhpcy5jb3JlRmlsdGVySHViU2VydmljZS5vcGVuJC52YWx1ZSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9DUkVBVEU6XHJcblxyXG4gICAgICAgIGlmICghISF0aGlzLnNlbGZSZXNvbHZlQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljaykge1xyXG5cclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VFZGl0U2VydmljZS5mcm9tVXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG5cclxuICAgICAgICAgIGlmICh0aGlzLm5vcm1hbE1vZGUpIHtcclxuXHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtidG9hKCcwJyksIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH1dLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgIFtcclxuICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvcmVQYWdlTGlzdEF1eDogW1xyXG4gICAgICAgICAgICAgICAgICAgICAgYnRvYSgnMCcpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQ6XHJcbiAgICAgICAgaWYgKCEhIXRoaXMuc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUVkaXRTZXJ2aWNlLmZyb21VcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKCdTRUxFQ1RfT05MWV9PTkVfUkVDT1JEX1RPX0VESVQnKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgICAgICAgIGlmICghIXRoaXMubm9ybWFsTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbYnRvYSgnJyArIHRoaXMuc2VsZWN0ZWRJZHNbMF0pLCB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9XSxcclxuICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50LFxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnRvYSgnJyArIHRoaXMuc2VsZWN0ZWRJZHNbMF0pLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcih0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fRURJVCcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQUNUSVZBVEU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuQ09SRV9QQUdFX0xJU1RfQUNUSVZFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9UWVBFXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19BQ1RJVkFURScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGxldCBsaXN0SWRzVG9BY3RpdmU6IGFueVtdID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgIGxpc3RJZHNUb0FjdGl2ZS5wdXNoKHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5nZXRVbmlxdWVTdHJpbmcoeCwgdGhpcy5jb25maXJtYXRpb25Db2x1bW5zKSlcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BQ1RJVkFURVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jcmVhdGVOZXcoXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQ09ORklSTUFUSU9OLFxyXG4gICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DT05GSVJNLFxyXG4gICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DQU5DRUwsXHJcbiAgICAgICAgICBmYWxzZSxcclxuICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9BUkVfWU9VX1NVUkVfVE9fQUNUSVZFLFxyXG4gICAgICAgICAgbGlzdElkc1RvQWN0aXZlXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfSU5BQ1RJVkFURTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0FDVElWQVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGxpc3RJZHNUb0luYWN0aXZlOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICBsaXN0SWRzVG9JbmFjdGl2ZS5wdXNoKHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5nZXRVbmlxdWVTdHJpbmcoeCwgdGhpcy5jb25maXJtYXRpb25Db2x1bW5zKSlcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9JTkFDVElWQVRFXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNyZWF0ZU5ldyhcclxuICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04sXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NPTkZJUk0sXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NBTkNFTCxcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0FSRV9ZT1VfU1VSRV9UT19JTkFDVElWRSxcclxuICAgICAgICAgIGxpc3RJZHNUb0luYWN0aXZlXHJcbiAgICAgICAgKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFOlxyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnbnVtYmVyJyAmJlxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ3N0cmluZydcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgJ0NPUkVfUEFHRV9MSVNUX0RFTEVURV9JRFNfTUVUSE9EX1NVUE9SVFNfT05MWV9OVU1CRVJfQU5EX1NUUklOR19UWVBFUydcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0RFTEVURScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICghIXRoaXMuZGVsZXRlVmFsaWRhdGVGbikge1xyXG5cclxuICAgICAgICAgIGNvbnN0IHZhbGlkYXRlZDogYm9vbGVhbiA9IHRoaXMuZGVsZXRlVmFsaWRhdGVGbih0aGlzLnNlbGVjdGVkRGF0YSk7XHJcbiAgICAgICAgICBpZiAoISEhdmFsaWRhdGVkKSByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS50aXRsZSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQ09ORklSTUFUSU9OKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5va0J1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DT05GSVJNKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5jYW5jZWxCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q2FuY2VsT25seSQubmV4dChmYWxzZSk7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJ1c3kgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5ib2R5JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9BUkVfWU9VX1NVUkVfVE9fREVMRVRFKTtcclxuICAgICAgICBsZXQgbGlzdERlbGV0ZUlkczogYW55W10gPSBbXTtcclxuICAgICAgICBjb25zdCBjb25maXJtYXRpb25Db2x1bW5zID0gdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+ICEheC5zaG93Rm9yQ29uZmlybWF0aW9uKTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YS5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgbGlzdERlbGV0ZUlkcy5wdXNoKHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5nZXRVbmlxdWVTdHJpbmcoeCwgY29uZmlybWF0aW9uQ29sdW1ucykpXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgaWYgKCF0aGlzLmRpc2FibGVEaWFsb2dJbmZvcm1hdGlvbkxpbmVzKSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mb3JtYXRpb25MaW5lcyQubmV4dChsaXN0RGVsZXRlSWRzKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuaW5mb3JtYXRpb25MaW5lcyQubmV4dChbXSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICAnQ09SRV9QQUdFX0xJU1RfREVMRVRFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9BTkRfU1RSSU5HX1RZUEVTJ1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fREVMRVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5kZWxldGVWYWxpZGF0ZUZuKSB7XHJcblxyXG4gICAgICAgICAgY29uc3QgdmFsaWRhdGVkOiBib29sZWFuID0gdGhpcy5kZWxldGVWYWxpZGF0ZUZuKHRoaXMuc2VsZWN0ZWREYXRhKTtcclxuICAgICAgICAgIGlmICghISF2YWxpZGF0ZWQpIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5BUFBST1ZFXHJcbiAgICAgICAgLy8gdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9rQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NPTkZJUk0pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbmNlbEJ1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DQU5DRUwpXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJvZHkkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0FSRV9ZT1VfVU5BUFBST1ZFX0lOUFVUX1JFQVNPTik7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dpbmdVcCQubmV4dCh0cnVlKVxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5zaG93Q29uZmlybURpYWxvZyQubmV4dCh0cnVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FQUFJPVkU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuQ09SRV9QQUdFX0xJU1RfQUNUSVZFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9UWVBFXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19BUFBST1ZFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCByZXF1ZXN0QXBwcm92ZTogSVRvZ2dsZUFwcHJvdmVJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgdmFsdWVUb0JpbmQ6IHRydWUsXHJcbiAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBjb25maXJtQXBwcm92ZSA9IHdpbmRvdy5jb25maXJtKFxyXG4gICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ2NvbW1vbi5jb25maXJtLmFwcHJvdmUucHJlZml4JykgK1xyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZElkcykgK1xyXG4gICAgICAgICAgJz8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlybUFwcHJvdmUpIHtcclxuICAgICAgICAgIGlmICghIXRoaXMuY3J1ZC50b2dnbGVBcHByb3ZlSWRzKSB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5wb3N0KHRoaXMuY3J1ZC50b2dnbGVBcHByb3ZlSWRzLCByZXF1ZXN0QXBwcm92ZSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RBcHByb3ZlLmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4odGhpcy5tbHMudHJhbnMoRW51bVRyYW5zbGF0ZUtleS5OT19BUElfRU5EX1BPSU5UX1BST1ZJREVEX0ZPUl9BQ1RJVkFUSU9OKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QRU5ESU5HX0FQUFJPVkU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuQ09SRV9QQUdFX0xJU1RfQUNUSVZFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9UWVBFXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19QRU5ESU5HX0FQUFJPVkUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RQZW5kaW5nQXBwcm92ZTogSVRvZ2dsZUFwcHJvdmVJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgdmFsdWVUb0JpbmQ6IGZhbHNlLFxyXG4gICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgY29uZmlybVBlbmRpbmdBcHByb3ZlID0gd2luZG93LmNvbmZpcm0oXHJcbiAgICAgICAgICB0aGlzLm1scy50cmFucygnY29tbW9uLmNvbmZpcm0ucGVuZGluZy5hcHByb3ZlLnByZWZpeCcpICtcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWRJZHMpICtcclxuICAgICAgICAgICc/J1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGNvbmZpcm1QZW5kaW5nQXBwcm92ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMsIHJlcXVlc3RQZW5kaW5nQXBwcm92ZSlcclxuICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RQZW5kaW5nQXBwcm92ZS5pZHMgPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRVhQT1JURVhFTDpcclxuXHJcbiAgICAgICAgdGhpcy5leHBvcnRUb0V4Y2VsKCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ET1dOTE9BRDpcclxuICAgICAgICBjb25zdCBub3cgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICBjb25zb2xlLmxvZyhcIkhFQURFUl9ET1dOTE9BRCBjbGlja2VkXCIsIG5vdyk7XHJcbiAgICAgICAgaWYgKHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGltcG9ydC1zYWxhcnktYmFja2RhdGVgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBzYWxhcnktaW1wb3J0YCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LWFkZGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGltcG9ydC1tb250aGx5LXRheGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYHNoaWZ0c29ydGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGRlY2xhcmVzdW5wZXJgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGByZWdpc3RlcmxlYXZlYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgb3ZlcnRpbWVgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBpbXBvcnQtdGF4LWFubnVhbGApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGNtcy9wcm9maWxlL2xpc3QvZXZhbHVhdGVgKSEgPCAwXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGlzLmNsaWNrR2VuZXJhdGVUZW1wbGF0ZSQubmV4dChub3cpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VQTE9BRDpcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgY21zL3Byb2ZpbGUvbGlzdC9ldmFsdWF0ZWApID49IDApIHtcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljay5lbWl0KGUpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYnJvd3NlRmlsZUlucHV0KCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTE9DSzpcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOTE9DSzpcclxuICAgICAgICB0aGlzLmNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2suZW1pdChlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUubG9nKGUuY29kZSlcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWRJZHNDaGFuZ2UoZTogc3RyaW5nW10gfCBudW1iZXJbXSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZElkcyA9IGU7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzQ2hhbmdlLmVtaXQoZSk7XHJcbiAgfVxyXG5cclxuICBvblNlbGVjdGVkRGF0YUNoYW5nZShlOiBhbnlbXSkge1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGEgPSBlO1xyXG4gICAgdGhpcy5zZWxlY3RlZERhdGFDaGFuZ2UuZW1pdChlKTtcclxuICAgIGlmICghIWUubGVuZ3RoKSB7XHJcbiAgICAgIGlmIChlLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoW1xyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MSVFVSURBVEVfQ09OVFJBQ1RcclxuICAgICAgICBdKVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgICBpZiAoISFlWzBdLmlzTG9jaykge1xyXG4gICAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cz8ubXVzdEJlSGlkZGVuJC5uZXh0KFtFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xPQ0tdKVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoW0VudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5MT0NLXSlcclxuICAgICAgICB9XHJcblxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoRU1QVFlfU0VMRUNUSU9OX0hJRERFTl9CVVRUT04pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgb25Db2x1bW5DYXB0aW9uQ2xpY2soZTogSUNvcmVUYWJsZUNvbHVtbkl0ZW0pIHtcclxuICAgIGNvbnN0IG5ld1NvcnQ6IElTb3J0SXRlbVtdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnNvcnQkLnZhbHVlKSk7XHJcbiAgICBuZXdTb3J0Lm1hcCgoYykgPT4ge1xyXG4gICAgICBpZiAoYy5maWVsZCA9PT0gZS5maWVsZCkge1xyXG4gICAgICAgIGlmIChjLnNvcnREaXJlY3Rpb24gPT09IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkUpIHtcclxuICAgICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLkFTQztcclxuICAgICAgICB9IGVsc2UgaWYgKGMuc29ydERpcmVjdGlvbiA9PT0gRW51bVNvcnREaXJlY3Rpb24uQVNDKSB7XHJcbiAgICAgICAgICBjLnNvcnREaXJlY3Rpb24gPSBFbnVtU29ydERpcmVjdGlvbi5ERVNDO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjLnNvcnREaXJlY3Rpb24gPSBFbnVtU29ydERpcmVjdGlvbi5OT05FO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjLnNvcnREaXJlY3Rpb24gPSBFbnVtU29ydERpcmVjdGlvbi5OT05FO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuc29ydCQubmV4dChuZXdTb3J0KTtcclxuICB9XHJcblxyXG4gIGlucHV0RmlsZSA9IGFzeW5jIChlOiBhbnkpID0+IHtcclxuICAgIGNvbnNvbGUubG9nKFwiaW5wdXRGaWxlIGVcIiwgZSlcclxuICAgIGNvbnN0IGZpbGVzID0gZS50YXJnZXQuZmlsZXM7XHJcbiAgICBjb25zdCBmaWxlID0gZmlsZXNbMF07XHJcbiAgICBsZXQgZmlsZU5hbWUgPSBmaWxlLm5hbWU7XHJcblxyXG4gICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtmaWxlXSk7XHJcblxyXG4gICAgYmxvYlRvQmFzZTY0KGJsb2IpLnRoZW4oKGJhc2U2NDogYW55KSA9PiB7XHJcbiAgICAgIHRoaXMub25JbnB1dEZpbGVCYXNlNjREYXRhUmVhZHkuZW1pdChiYXNlNjQpO1xyXG5cclxuICAgICAgLy8gTuG6v3UgdGhhbSBz4buRIGdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0IMSRxrDhu6NjIHRydXnhu4FuIHbDoG9cclxuICAgICAgLy8gSW1wb3J0IHPhur0gdGjhu7FjIHRoaSB0aGVvIHF1eSB0csOsbmggQ29yZVxyXG4gICAgICBpZiAodGhpcy5nZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdCkge1xyXG4gICAgICAgIGNvbnN0IGltcG9ydFhsc3hUb0RiUmVxdWVzdDogSUltcG9ydFhsc3hUb0RiUmVxdWVzdCA9IHtcclxuICAgICAgICAgIGZpbGVOYW1lLFxyXG4gICAgICAgICAgZXhDb2RlOiB0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0LmV4Q29kZSxcclxuICAgICAgICAgIGJhc2U2NFN0cmluZzogYmFzZTY0XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSB0cnVlO1xyXG4gICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmltcG9ydFhsc3hUb0RiKGltcG9ydFhsc3hUb0RiUmVxdWVzdCkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgICBjb25zdCBzZXNzaW9uID0gTnVtYmVyKHRoaXMubG9uZ1Rhc2tTZXJ2aWNlLmRhdGEkLnZhbHVlPy5vdXRlck1lc3NhZ2UpO1xyXG4gICAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICBsZXQgZG93bmxvYWRMaW5rID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImFcIik7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbeC5ib2R5XSkpXHJcbiAgICAgICAgICAgICAgZmlsZU5hbWUgPSBmaWxlTmFtZS5zcGxpdChcIi54bHN4XCIpWzBdICsgXCJfcHJvY2Vzc2VkX1wiICsgbmV3IERhdGUoKS5nZXRUaW1lKCkgKyBcIi54bHN4XCI7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIGZpbGVOYW1lKTtcclxuICAgICAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkTGluayk7XHJcbiAgICAgICAgICAgICAgZG93bmxvYWRMaW5rLmNsaWNrKCk7XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IGltcG9ydFByZXZpZXdPdXRlclBhcmFtOiBJWGxzeEltcG9ydE9iamVjdCA9IHtcclxuICAgICAgICAgICAgICAgIHhsc3hTaWQ6IHRoaXMuYXV0aFNlcnZpY2UuZGF0YSQudmFsdWU/LmlkISxcclxuICAgICAgICAgICAgICAgIHhsc3hFeENvZGU6IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QuZXhDb2RlLFxyXG4gICAgICAgICAgICAgICAgeGxzeFNlc3Npb246IHNlc3Npb25cclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmICghISF0aGlzLmltcG9ydFByZXZpZXdQYXRoKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiJ2ltcG9ydFByZXZpZXdQYXRoJyBpbnB1dCBwcm9wZXJ0eSB3YXMgbWlzc2luZyFcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG5cclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pbXBvcnRQcmV2aWV3UGF0aCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSwgc3RhdGU6IHtcclxuICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24sXHJcbiAgICAgICAgICAgICAgICAgICAgICBpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgIClcclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9KTtcclxuXHJcblxyXG4gIH07XHJcblxyXG4gIGJyb3dzZUZpbGVJbnB1dCgpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKFwiYnJvd3NlRmlsZUlucHV0XCIpXHJcbiAgICB0aGlzLmZpbGVJbXBvcnQubmF0aXZlRWxlbWVudC52YWx1ZSA9IG51bGw7XHJcbiAgICB0aGlzLmZpbGVJbXBvcnQubmF0aXZlRWxlbWVudC5jbGljaygpO1xyXG4gIH1cclxuXHJcbiAgb25Qcm9ncmVzc1dpbmRvd0Nsb3NlKF86IGFueSkge1xyXG4gICAgdGhpcy5sb25nQXBpUnVubmluZyA9IGZhbHNlO1xyXG4gICAgdGhpcy5leHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKVxyXG4gIH1cclxuXHJcbiAgb25Db3JlVGFic0hlYWRlckNsaWNrKGU6IGFueSk6IHZvaWQge1xyXG5cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgY29uc29sZS5sb2coXCJvbkNvcmVUYWJzSGVhZGVyQ2xpY2tcIiwgZSk7XHJcbiAgICAgIGNvbnN0IHRhYiA9IHRoaXMuc3RhdHVzVGFicy5nZXQoZS5pbmRleCk7XHJcbiAgXHJcbiAgICAgIGxldCBuZXdGaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpXHJcbiAgICAgICk7XHJcbiAgXHJcbiAgICAgIGxldCBuZXdPdXRlclBhcmFtOiBhbnk7XHJcbiAgXHJcbiAgICAgIGlmICh0YWI/LmlkID09PSAwKSB7IC8vIEFsbFxyXG4gIFxyXG4gICAgICAgIC8vIHNob3cgc3RhdHVzIGNvbHVtblxyXG4gICAgICAgIGNvbnN0IHRyeUZpbmQgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4geC5maWVsZCA9PT0gdGhpcy5ncmlkU3RhdHVzQ29sdW1uKTtcclxuICAgICAgICBpZiAodHJ5RmluZC5sZW5ndGgpIHtcclxuICAgICAgICAgIHRyeUZpbmRbMF0uaGlkZGVuID0gZmFsc2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnNdO1xyXG4gIFxyXG4gICAgICAgIG5ld091dGVyUGFyYW0gPSB0aGlzLm91dGVyUGFyYW0kLnZhbHVlO1xyXG4gIFxyXG4gICAgICAgIC8vRGVsZXRpbmcgYSBwcm9wZXJ0eSBmcm9tIGFuIG9iamVjdCBjYW4gY2F1c2UgaXNzdWVzIHdoZW4gbWVyZ2luZyBvYmplY3RzIGxhdGVyXHJcbiAgICAgICAgLy9kZWxldGUgbmV3T3V0ZXJQYXJhbVt0aGlzLmNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGRdO1xyXG4gIFxyXG4gICAgICAgIC8vU2V0dGluZyB0aGUgUHJvcGVydHkgdG8gbnVsbDpcclxuICAgICAgICBuZXdPdXRlclBhcmFtW3RoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZF0gPSBudWxsO1xyXG4gIFxyXG4gICAgICAgIG5ld0ZpbHRlck9wZXJhdG9ycyA9IG5ld0ZpbHRlck9wZXJhdG9ycy5maWx0ZXIoeCA9PiB4LmZpZWxkICE9PSB0aGlzLmNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQpXHJcbiAgXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgXHJcbiAgICAgICAgLy8gaGlkZSBzdGF0dXMgY29sdW1uXHJcbiAgICAgICAgY29uc3QgdHJ5RmluZCA9IHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmZpZWxkID09PSB0aGlzLmdyaWRTdGF0dXNDb2x1bW4pO1xyXG4gICAgICAgIGlmICh0cnlGaW5kLmxlbmd0aCkge1xyXG4gICAgICAgICAgdHJ5RmluZFswXS5oaWRkZW4gPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmNvbHVtbnMgPSBbLi4udGhpcy5jb2x1bW5zXTtcclxuICBcclxuICAgICAgICBpZiAodGFiPy5pZCA9PT0gLTEpIHsgLy8gVW5kZWZpbmVkXHJcbiAgICAgICAgICBuZXdPdXRlclBhcmFtID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm91dGVyUGFyYW0kLnZhbHVlLFxyXG4gICAgICAgICAgICBbdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkXTogbnVsbFxyXG4gICAgICAgICAgfTtcclxuICBcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbmV3T3V0ZXJQYXJhbSA9IHtcclxuICAgICAgICAgICAgLi4udGhpcy5vdXRlclBhcmFtJC52YWx1ZSxcclxuICAgICAgICAgICAgW3RoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZF06IHRhYj8uaWQgLy8gVXNlIGJyYWNrZXQgbm90YXRpb24gZm9yIGR5bmFtaWMgcHJvcGVydHlcclxuICAgICAgICAgIH07XHJcbiAgXHJcbiAgICAgICAgfVxyXG4gIFxyXG4gICAgICAgIGNvbnN0IGZpbHRlclN0YXR1cyA9IG5ld0ZpbHRlck9wZXJhdG9ycy5maWx0ZXIoKHgpID0+IHguZmllbGQgPT09IHRoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZCAmJiB4Lm9wZXJhdG9yID09PSBFbnVtRmlsdGVyT3BlcmF0b3IuRVFVQUwpO1xyXG4gICAgICAgIGlmICghZmlsdGVyU3RhdHVzLmxlbmd0aCkge1xyXG4gICAgICAgICAgZmlsdGVyU3RhdHVzLnB1c2goe1xyXG4gICAgICAgICAgICBmaWVsZDogdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkLFxyXG4gICAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkVRVUFMLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSBlbHNlIGlmIChmaWx0ZXJTdGF0dXMubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBGaWx0ZXJPcGVyYXRvcnMgZXJyb3IgZm9yICR7dGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkfTogY29tYmluYXRpb24gb2YgZmllbGQgbmFtZSBhbmQgb3BlcmF0b3IgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIG5ld0ZpbHRlck9wZXJhdG9ycyA9IFtcclxuICAgICAgICAgIC4uLm5ld0ZpbHRlck9wZXJhdG9ycy5maWx0ZXIoeCA9PiB4LmZpZWxkICE9PSB0aGlzLmNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQpLFxyXG4gICAgICAgICAgLi4uZmlsdGVyU3RhdHVzXHJcbiAgICAgICAgXVxyXG4gIFxyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSB0cnVlXHJcbiAgICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dChuZXdPdXRlclBhcmFtKTtcclxuICAgICAgdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiA9IGZhbHNlO1xyXG4gICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChuZXdGaWx0ZXJPcGVyYXRvcnMpO1xyXG5cclxuICAgIH0pXHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMubWFwKCh4KSA9PiB4Py51bnN1YnNjcmliZSgpKTtcclxuICAgIGlmICghIXRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uKSB0aGlzLnF1ZXJ5TGlzdFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xyXG4gIH1cclxufVxyXG4iLCI8ZGl2ICNjb250YWluZXIgY2xhc3M9XCJjb3JlLXBhZ2UtbGlzdC1jb250YWluZXIgcC1yZWxhdGl2ZVwiICNjb3JlUGFnZUxpc3RDb250YWluZXJcclxuICAgIFtuZ1N0eWxlXT1cInsgaGVpZ2h0OiBoZWlnaHQgKyAncHgnIH1cIj5cclxuXHJcbiAgICBAaWYgKCFoaWRlSGVhZGVyKSB7XHJcbiAgICA8Y29yZS1wYWdlLWhlYWRlciBbaW5zdGFuY2VOdW1iZXJdPVwiY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcIiBbdGl0bGVdPVwidGl0bGVcIlxyXG4gICAgICAgIChidXR0b25DbGljayk9XCJvbkNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgW2hpZGVCdXR0b25Hcm91cF09XCIhIXNlZWtlck1vZGUgfHwgISFoaWRlQnV0dG9uR3JvdXBcIj48L2NvcmUtcGFnZS1oZWFkZXI+XHJcbiAgICB9XHJcblxyXG4gICAgPGlucHV0ICNmaWxlSW1wb3J0IHR5cGU9XCJmaWxlXCIgbmFtZT1cIm5hbWVcIlxyXG4gICAgICAgIGFjY2VwdD1cImFwcGxpY2F0aW9uL3ZuZC5vcGVueG1sZm9ybWF0cy1vZmZpY2Vkb2N1bWVudC5zcHJlYWRzaGVldG1sLnNoZWV0LCBhcHBsaWNhdGlvbi92bmQubXMtZXhjZWxcIlxyXG4gICAgICAgIHN0eWxlPVwiZGlzcGxheTogbm9uZTtcIiAoY2hhbmdlKT0naW5wdXRGaWxlKCRldmVudCknIC8+XHJcblxyXG4gICAgPCEtLVxyXG4gICAgICAgIEtoaSDEkcOjIHTDrW5oIMSRxrDhu6NjIGNow61uaCB4w6FjIGNoaeG7gXUgY2FvIGNvbXBvc2l0aW9uSGVpZ2h0IGPhu6dhIGNvcmUtY29tcG9zaXRpb25cclxuICAgICAgICBD4bqnbiB0w61uaCDEkcaw4bujYyBjaMOtbmggeMOhYyBjaGnhu4F1IGNhbyBjb3JlVGFibGVIZWlnaHQgY+G7p2EgQ29yZVRhYmxlXHJcbiAgICAgICAgTuG6v3UgcGjhuqduIHRvcCBj4bunYSBjb21wb3NpdGlvbiBj4buRIMSR4buLbmggKHbDrSBk4bulIGtoaSBz4butIGThu6VuZyBDb3JlUGFyYW1LaXQpIHRow6wgcGjDqXAgdHLhu6sgxJHGoW4gZ2nhuqNuXHJcbiAgICAgICAgTmjGsG5nIG7hur91IHBo4bqnbiB0b3AgxJHGsOG7o2MgY3VzdG9taXplLCB0YSBwaOG6o2kgc+G7rSBk4bulbmcgZXh0cmFNYW51YWxPZmZzZXRcclxuICAgIC0tPlxyXG4gICAgPGNvcmUtY29tcG9zaXRpb24gW2NvcmVDb21wb3NpdGlvbkluc3RhbmNlTnVtYmVyXT1cImNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXCIgW3RvcF09XCJ0b3BQbGFjZVwiXHJcbiAgICAgICAgW2xlZnRdPVwiISFoaWRlTGVmdD8gdW5kZWZpbmVkIDpsZWZ0XCIgW21haW5dPVwiY29yZVRhYmxlXCIgW2hlaWdodF09XCJjb21wb3NpdGlvbkhlaWdodFwiPlxyXG4gICAgPC9jb3JlLWNvbXBvc2l0aW9uPlxyXG5cclxuICAgIDxyb3V0ZXItb3V0bGV0IG5hbWU9XCJjb3JlUGFnZUxpc3RBdXhcIj48L3JvdXRlci1vdXRsZXQ+XHJcblxyXG4gICAgPCEtLSBAaWYgKCEhdGFiTW9kZSAmJiBzaG93RmlsdGVyS2l0KSB7XHJcbiAgICAgICAgPGRpdiBjbGFzcyA9IFwiZmlsdGVyLWtpdC1kcm9wZG93blwiIFtuZ1N0eWxlXT1cIntcclxuICAgICAgICAgICAgekluZGV4OiBmaWx0ZXJLaXRaSW5kZXhcclxuICAgICAgICB9XCI+XHJcbiAgICAgICAgICAgIDxjb3JlLWNvbW1vbi1wYXJhbS1raXQgW2hpZGRlbk1vZGVdPVwidHJ1ZVwiIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvcl09XCJkYXRlUGVyaW9kQ29tcGFyaXNvbkZvclwiXHJcbiAgICAgICAgICAgICAgICBbZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNdPVwiZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNcIlxyXG4gICAgICAgICAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXldPVwiZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgICAgICBbc3RhdHVzSW5jbHVzaW9uRm9yXT1cInN0YXR1c0luY2x1c2lvbkZvclwiIFtzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleV09XCJzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgICAgICBbc3RhdHVzT3B0aW9uc0FwaV09XCJzdGF0dXNPcHRpb25zQXBpXCIgW3N0YXR1c09wdGlvbnMkXT1cInN0YXR1c09wdGlvbnMkXCIgW3Nob3dPcmdQYXJhbV09XCJzaG93T3JnUGFyYW1cIlxyXG4gICAgICAgICAgICAgICAgW2hpZGVHZW5lcmFsU2VhcmNoXT1cImhpZGVHZW5lcmFsU2VhcmNoXCIgW2hpZGVEYXRlUGVyaW9kQ29tcGFyaXNvbl09XCJoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb25cIlxyXG4gICAgICAgICAgICAgICAgW2hpZGVTdGF0dXNJbmNsdXNpb25dPVwiaGlkZVN0YXR1c0luY2x1c2lvblwiXHJcbiAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25QYXJhbUtpdFZhbHVlQ2hhbmdlKCRldmVudClcIj48L2NvcmUtY29tbW9uLXBhcmFtLWtpdD5cclxuICAgICAgICA8L2Rpdj5cclxuICAgIH0gLS0+XHJcblxyXG4gICAgQGlmICghZGlzYWJsZUZpbHRlckh1YiAmJiBzaG93RmlsdGVyICYmICEhcGFyYW1Sb3dzKSB7XHJcbiAgICAgICAgPGNvcmUtZmlsdGVyLWh1YiBbcGFyYW1Sb3dzXT1cInBhcmFtUm93c1wiPjwvY29yZS1maWx0ZXItaHViPlxyXG4gICAgfVxyXG5cclxuPC9kaXY+XHJcblxyXG48bmctdGVtcGxhdGUgI3RvcFBsYWNlPlxyXG5cclxuICAgIEBpZiAoIXRhYk1vZGUpIHtcclxuICAgICAgICBAaWYgKCEhc2hvd1BhcmFtS2l0KSB7XHJcbiAgICAgICAgICAgIDxkaXY+XHJcbiAgICAgICAgICAgICAgICA8Y29yZS1jb21tb24tcGFyYW0ta2l0IFtoaWRkZW5Nb2RlXT1cImZhbHNlXCIgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yXT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yXCJcclxuICAgICAgICAgICAgICAgICAgICBbZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNdPVwiZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JdPVwic3RhdHVzSW5jbHVzaW9uRm9yXCIgW3N0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XT1cInN0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICAgICAgICAgICAgICBbc3RhdHVzT3B0aW9uc0FwaV09XCJzdGF0dXNPcHRpb25zQXBpXCIgW3N0YXR1c09wdGlvbnMkXT1cInN0YXR1c09wdGlvbnMkXCIgW3Nob3dPcmdQYXJhbV09XCJzaG93T3JnUGFyYW1cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlR2VuZXJhbFNlYXJjaF09XCJoaWRlR2VuZXJhbFNlYXJjaFwiIFtoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb25dPVwiaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXCJcclxuICAgICAgICAgICAgICAgICAgICBbaGlkZVN0YXR1c0luY2x1c2lvbl09XCJoaWRlU3RhdHVzSW5jbHVzaW9uXCJcclxuICAgICAgICAgICAgICAgICAgICAob25DaGFuZ2UpPVwib25QYXJhbUtpdFZhbHVlQ2hhbmdlKCRldmVudClcIj48L2NvcmUtY29tbW9uLXBhcmFtLWtpdD5cclxuICAgICAgICAgICAgPC9kaXY+XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICA8IS0tIEBpZiAoZW5hYmxlRmlsdGVyS2l0KSB7XHJcbiAgICAgICAgICAgIDxjb3JlLWZpbHRlci1raXQgXHJcbiAgICAgICAgICAgIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvcl09XCJkYXRlUGVyaW9kQ29tcGFyaXNvbkZvclwiXHJcbiAgICAgICAgICAgIFtlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc109XCJlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgICAgICBbc3RhdHVzSW5jbHVzaW9uRm9yXT1cInN0YXR1c0luY2x1c2lvbkZvclwiIFxyXG4gICAgICAgICAgICBbc3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXldPVwic3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgICAgICBbc3RhdHVzT3B0aW9uc0FwaV09XCJzdGF0dXNPcHRpb25zQXBpXCIgXHJcbiAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zJF09XCJzdGF0dXNPcHRpb25zJFwiIFxyXG4gICAgICAgICAgICBbc2hvd09yZ1BhcmFtXT1cInNob3dPcmdQYXJhbVwiXHJcbiAgICAgICAgICAgIFtzaG93T3JnUGFyYW1Ecm9wZG93bl09XCJzaG93T3JnUGFyYW1Ecm9wZG93blwiXHJcbiAgICAgICAgICAgIFtoaWRlR2VuZXJhbFNlYXJjaF09XCJoaWRlR2VuZXJhbFNlYXJjaFwiXHJcbiAgICAgICAgICAgIFtoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb25dPVwiaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXCJcclxuICAgICAgICAgICAgW2hpZGVTdGF0dXNJbmNsdXNpb25dPVwiaGlkZVN0YXR1c0luY2x1c2lvblwiXHJcbiAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvblBhcmFtS2l0VmFsdWVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgPjwvY29yZS1maWx0ZXIta2l0PiAgICAgICAgICAgIFxyXG4gICAgICAgIH0gLS0+XHJcbiAgICB9IEBlbHNlIHtcclxuICAgIDxjb3JlLXRhYnMgW2hlYWRlcnNdPVwidGFiSGVhZGVyc1wiIFtjb250ZW50c109XCJbXVwiIFtoZWlnaHRdPVwiNDVcIiBbaGVhZGVyTGluZUhlaWdodF09XCI0NVwiXHJcbiAgICAgICAgKG9uSGVhZGVyQ2xpY2spPVwib25Db3JlVGFic0hlYWRlckNsaWNrKCRldmVudClcIj5cclxuICAgIDwvY29yZS10YWJzPlxyXG4gICAgPCEtLSA8Y29yZS1maWx0ZXIta2l0IFxyXG4gICAgICAgIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvcl09XCJkYXRlUGVyaW9kQ29tcGFyaXNvbkZvclwiXHJcbiAgICAgICAgW2VuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzXT1cImVuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzXCJcclxuICAgICAgICBbZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleV09XCJkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICBbc3RhdHVzSW5jbHVzaW9uRm9yXT1cInN0YXR1c0luY2x1c2lvbkZvclwiIFxyXG4gICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleV09XCJzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgW3N0YXR1c09wdGlvbnNBcGldPVwic3RhdHVzT3B0aW9uc0FwaVwiIFxyXG4gICAgICAgIFtzdGF0dXNPcHRpb25zJF09XCJzdGF0dXNPcHRpb25zJFwiIFxyXG4gICAgICAgIFtzaG93T3JnUGFyYW1dPVwic2hvd09yZ1BhcmFtXCJcclxuICAgICAgICBbc2hvd09yZ1BhcmFtRHJvcGRvd25dPVwic2hvd09yZ1BhcmFtRHJvcGRvd25cIlxyXG4gICAgICAgIFtoaWRlR2VuZXJhbFNlYXJjaF09XCJoaWRlR2VuZXJhbFNlYXJjaFwiXHJcbiAgICAgICAgW2hpZGVEYXRlUGVyaW9kQ29tcGFyaXNvbl09XCJoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb25cIlxyXG4gICAgICAgIFtoaWRlU3RhdHVzSW5jbHVzaW9uXT1cImhpZGVTdGF0dXNJbmNsdXNpb25cIlxyXG4gICAgICAgIChvbkNoYW5nZSk9XCJvblBhcmFtS2l0VmFsdWVDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICA+PC9jb3JlLWZpbHRlci1raXQ+IC0tPlxyXG4gICAgfVxyXG5cclxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJ0b3BcIj5cclxuICAgIDwvbmctY29udGFpbmVyPlxyXG5cclxuPC9uZy10ZW1wbGF0ZT5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjY29yZVRhYmxlPlxyXG5cclxuICAgIDxkaXYgW2NsYXNzLm9wYWNpdHkwXT1cIiEhIWdlb21ldHJpY0RvbmVcIj5cclxuXHJcbiAgICAgICAgPCEtLVxyXG4gICAgICAgICAgICBLaGkgxJHDoyB0w61uaCDEkcaw4bujYyBjaMOtbmggeMOhYyBjaGnhu4F1IGNhbyBjb21wb3NpdGlvbkhlaWdodCBj4bunYSBjb3JlLWNvbXBvc2l0aW9uXHJcbiAgICAgICAgICAgIEPhuqduIHTDrW5oIMSRxrDhu6NjIGNow61uaCB4w6FjIGNoaeG7gXUgY2FvIGNvcmVUYWJsZUhlaWdodCBj4bunYSBDb3JlVGFibGVcclxuICAgICAgICAgICAgTuG6v3UgcGjhuqduIHRvcCBj4bunYSBjb21wb3NpdGlvbiBj4buRIMSR4buLbmggKHbDrSBk4bulIGtoaSBz4butIGThu6VuZyBDb3JlUGFyYW1LaXQpIHRow6wgcGjDqXAgdHLhu6sgxJHGoW4gZ2nhuqNuXHJcbiAgICAgICAgICAgIE5oxrBuZyBu4bq/dSBwaOG6p24gdG9wIMSRxrDhu6NjIGN1c3RvbWl6ZSwgdGEgcGjhuqNpIHPhu60gZOG7pW5nIGV4dHJhTWFudWFsT2Zmc2V0XHJcblxyXG4gICAgICAgICAgICBD4bqnbiB0w61uaCB0YWJsZUhlaWdodCBuaMawIHRo4bq/IG7DoG8/XHJcbiAgICAgICAgLS0+XHJcbiAgICAgICAgPGNvcmUtdGFibGUgI2NvcmVUYWJsZUFsb25lIHdpZHRoPVwiMTAwJVwiIFtoZWlnaHRdPVwidGFibGVIZWlnaHRcIiBbcm93SGVpZ2h0XT1cInJvd0hlaWdodCB8fCAnNDZweCdcIiBbd3JhcF09XCJ3cmFwXCJcclxuICAgICAgICAgICAgW3ByaW1hcnlLZXldPVwicHJpbWFyeUtleVwiXHJcbiAgICAgICAgICAgIFtjb2x1bW5zXT1cImNvbHVtbnNcIiBbZGF0YV09XCJsaXN0XCIgW3Nob3dDaGVja2JveF09XCIhISFoaWRlQ2hlY2tcIiBoZWFkZXJIZWlnaHQ9XCI2MHB4XCJcclxuICAgICAgICAgICAgW3Nob3dUb29sc109XCJzaG93TGlzdElubGluZVRvb2xzXCIgW3Rvb2xzXT1cImlubGluZVRvb2xzXCIgKG9uVG9vbENsaWNrKT1cIm9uVG9vbENsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAob25Sb3dDbGljayk9XCJvblJvd0NsaWNrKCRldmVudClcIiAob25Sb3dEb3VibGVDbGljayk9XCJvblJvd0RvdWJsZUNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICAob25TZWxlY3RlZElkc0NoYW5nZSk9XCJvblNlbGVjdGVkSWRzQ2hhbmdlKCRldmVudClcIiAob25TZWxlY3RlZERhdGFDaGFuZ2UpPVwib25TZWxlY3RlZERhdGFDaGFuZ2UoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIFtmcm96ZW5dPVwiZnJvemVuIHx8IDFcIiAob25TZWFyY2hpbmcpPVwib25TZWFyY2hpbmcoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChvbkNvbHVtbkNhcHRpb25DbGljayk9XCJvbkNvbHVtbkNhcHRpb25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2NvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXT1cImNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXCIgW2xvYWRpbmddPVwibG9hZGluZ1wiXHJcbiAgICAgICAgICAgIFtjb2x1bW5TZWFyY2hEZWZhdWx0T3Blbl09XCJjb2x1bW5TZWFyY2hEZWZhdWx0T3BlblwiIFtsYXp5TG9hZGluZ109XCJ0cnVlXCIgW2hlYWRlcldyYXBdPVwiaGVhZGVyV3JhcFwiXHJcbiAgICAgICAgICAgIFtoZWFkZXJGaXJzdFJvd0hlaWdodF09XCJoZWFkZXJGaXJzdFJvd0hlaWdodFwiIFtub1BhZGRpbmdDZWxsXT1cIm5vUGFkZGluZ0NlbGxcIlxyXG4gICAgICAgICAgICBbZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2tdPVwiZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2tcIiBbcHJpbWFyeUtleV09XCJwcmltYXJ5S2V5XCJcclxuICAgICAgICAgICAgW2F1dG9Db2x1bW5GaXRBdmFpbGFibGVTcGFjZV09XCJhdXRvQ29sdW1uRml0QXZhaWxhYmxlU3BhY2VcIlxyXG4gICAgICAgICAgICA+PC9jb3JlLXRhYmxlPlxyXG5cclxuICAgICAgICA8ZGl2IGNsYXNzPVwiZC1mbGV4IGQtZmxleC1iZXR3ZWVuIHBhZ2luYXRpb24td3JhcHBlciB3LTEwMFwiICNwYWdpbmF0aW9uQ29udGFpbmVyPlxyXG4gICAgICAgICAgICA8Y29yZS1wYWdpbmF0aW9uLWZ1bGwgW2hlaWdodF09XCJwYWdpbmF0aW9uSGVpZ2h0XCIgW2N1cnJlbnRQYWdlJF09XCJjdXJyZW50UGFnZSRcIiBbcGFnZVNpemUkXT1cInBhZ2VTaXplJFwiXHJcbiAgICAgICAgICAgICAgICBbcGFnZUNvdW50XT1cInBhZ2VDb3VudFwiIFtpbm5lckJvZHlDb3VudCRdPVwiaW5uZXJCb2R5Q291bnQkXCIgW3BhZ2luYXRpb24kXT1cInBhZ2luYXRpb24kXCJcclxuICAgICAgICAgICAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIiBbZml4ZWRQYWdlU2l6ZV09XCJmaXhlZFBhZ2VTaXplXCIgW2JhY2tncm91bmRdPVwiJyM4NDg0ODQnXCI+PC9jb3JlLXBhZ2luYXRpb24tZnVsbD5cclxuXHJcbiAgICAgICAgPC9kaXY+XHJcblxyXG4gICAgPC9kaXY+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPGNvcmUtYXBpLXByb2dyZXNzICpuZ0lmPVwibG9uZ0FwaVJ1bm5pbmdcIiAob25DbG9zZSk9XCJvblByb2dyZXNzV2luZG93Q2xvc2UoJGV2ZW50KVwiPjwvY29yZS1hcGktcHJvZ3Jlc3M+XHJcblxyXG48YXBwLWZ1bGxzY3JlZW4tbW9kYWwtbG9hZGVyICpuZ0lmPVwicHJlZmV0Y2hMb2FkaW5nXCI+PC9hcHAtZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXI+Il19
2045
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS1wYWdlLWxpc3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LWhpc3RhZmYtYWxwaGEvc3JjL2xpYi9hcHAvbGlicmFyaWVzL2NvcmUtcGFnZS1saXN0L2NvcmUtcGFnZS1saXN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1oaXN0YWZmLWFscGhhL3NyYy9saWIvYXBwL2xpYnJhcmllcy9jb3JlLXBhZ2UtbGlzdC9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFjLEtBQUssRUFBb0MsU0FBUyxFQUFlLE1BQU0sRUFBRSxZQUFZLEVBQTRCLFNBQVMsR0FBRyxNQUFNLGVBQWUsQ0FBQztBQUNuTCxPQUFPLEVBQTBCLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3ZFLE9BQU8sRUFBRSxrQkFBa0IsR0FBNEQsTUFBTSxvQ0FBb0MsQ0FBQztBQUlsSSxPQUFPLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBZ0IsWUFBWSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLFNBQVMsR0FBRyxNQUFNLE1BQU0sQ0FBQztBQUN6SSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUUzRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxzRUFBc0UsQ0FBQztBQUM3RyxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSw0REFBNEQsQ0FBQztBQUMxRyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNuRCxPQUFPLEVBQUUsMkJBQTJCLEVBQXVDLE1BQU0sZ0ZBQWdGLENBQUM7QUFLbEssT0FBTyxFQUFFLGtCQUFrQixFQUF3RixNQUFNLG9DQUFvQyxDQUFD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QWM7c0JBQXZCLE1BQU07Z0JBQ0csaUJBQWlCO3NCQUExQixNQUFNO2dCQUNHLGtCQUFrQjtzQkFBM0IsTUFBTTtnQkFDRyxpQkFBaUI7c0JBQTFCLE1BQU07Z0JBQ0csMEJBQTBCO3NCQUFuQyxNQUFNO2dCQUNHLFVBQVU7c0JBQW5CLE1BQU07Z0JBRWlCLFNBQVM7c0JBQWhDLFNBQVM7dUJBQUMsV0FBVztnQkFDYyxxQkFBcUI7c0JBQXhELFNBQVM7dUJBQUMsdUJBQXVCO2dCQUNBLG1CQUFtQjtzQkFBcEQsU0FBUzt1QkFBQyxxQkFBcUI7Z0JBQ1AsVUFBVTtzQkFBbEMsU0FBUzt1QkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIEFmdGVyVmlld0luaXQsIFZpZXdDaGlsZCwgVGVtcGxhdGVSZWYsIE91dHB1dCwgRXZlbnRFbWl0dGVyLCBPbkNoYW5nZXMsIFNpbXBsZUNoYW5nZXMsIGlzRGV2TW9kZSwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgUm91dGVyLCBBY3RpdmF0ZWRSb3V0ZSwgUm91dGVyTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcclxuaW1wb3J0IHsgQ29yZVRhYmxlQ29tcG9uZW50LCBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSwgSUNvcmVUYWJsZVRvb2xJdGVtLCB9IGZyb20gJy4uL2NvcmUtdGFibGUvY29yZS10YWJsZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUxpc3RTZXJ2aWNlLCBJR2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QsIElJbXBvcnRYbHN4VG9EYlJlcXVlc3QgfSBmcm9tICcuL2NvcmUtcGFnZS1saXN0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUVkaXRTZXJ2aWNlIH0gZnJvbSAnLi4vY29yZS1wYWdlLWVkaXQvY29yZS1wYWdlLWVkaXQuc2VydmljZSc7XHJcbmltcG9ydCB7IEFsZXJ0U2VydmljZSB9IGZyb20gJy4uL2FsZXJ0L2FsZXJ0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBmcm9tRXZlbnQsIG1hcCwgc3dpdGNoTWFwLCB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUxpc3RTdGF0ZSB9IGZyb20gJy4vY29yZS1wYWdlLWxpc3Quc3RhdGUnO1xyXG5pbXBvcnQgeyBJQ29yZUJ1dHRvblZOUyB9IGZyb20gJy4uL2NvcmUtYnV0dG9uLWdyb3VwLXZucy9jb3JlLWJ1dHRvbi1ncm91cC12bnMvSUNvcmVCdXR0b25WTlMnO1xyXG5pbXBvcnQgeyBFbnVtQ29yZUJ1dHRvblZOU0NvZGUgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtdm5zL0VudW1Db3JlQnV0dG9uVk5TQ29kZSc7XHJcbmltcG9ydCB7IENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWZvcm0tY29udHJvbC1iYXNlL2NvcmUtZm9ybS1jb250cm9sLWJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENvcmVDb21tb25QYXJhbUtpdENvbXBvbmVudCwgSUNvcmVDb21tb25QYXJhbUtpdEV2ZW50RW1pdHRlckRhdGEgfSBmcm9tICcuLi9jb3JlLWNvbW1vbi1wYXJhbS1raXQvY29yZS1jb21tb24tcGFyYW0ta2l0L2NvcmUtY29tbW9uLXBhcmFtLWtpdC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBMb25nVGFza1NlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9sb25nLXRhc2suc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVDb21wb3NpdGlvblNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLWNvbXBvc2l0aW9uL2NvcmUtY29tcG9zaXRpb24uc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVCdXR0b25Hcm91cFNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtc2VydmljZSc7XHJcbmltcG9ydCB7IElDb3JlQnV0dG9uR3JvdXBTdGF0dXMgfSBmcm9tICcuLi9jb3JlLWJ1dHRvbi1ncm91cC12bnMvY29yZS1idXR0b24tZ3JvdXAtc2VydmljZSc7XHJcbmltcG9ydCB7IEVudW1GaWx0ZXJPcGVyYXRvciwgSUZpbHRlck9wZXJhdG9yLCBJSW5PcGVyYXRvciwgSVBhZ2luYXRpb24sIElRdWVyeUxpc3RSZXF1ZXN0LCBJU2VhcmNoSXRlbSwgSVNvcnRJdGVtIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JUXVlcnlMaXN0UmVxdWVzdCc7XHJcbmltcG9ydCB7IGFwaSB9IGZyb20gXCJhbHBoYS1nbG9iYWwtY29uc3RhbnRzXCI7XHJcbmltcG9ydCB7IEVudW1UcmFuc2xhdGVLZXkgfSBmcm9tIFwiYWxwaGEtZ2xvYmFsLWNvbnN0YW50c1wiO1xyXG5pbXBvcnQgeyBNdWx0aUxhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL211bHRpLWxhbmd1YWdlLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBBdXRoU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2F1dGguc2VydmljZSc7XHJcbmltcG9ydCB7IEFwcFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9hcHAuc2VydmljZSc7XHJcbmltcG9ydCB7IERpYWxvZ1NlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9kaWFsb2cuc2VydmljZSc7XHJcbmltcG9ydCB7IFJvdXRpbmdTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvcm91dGluZy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgTGF5b3V0U2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2xheW91dC5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSnNvblNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9qc29uLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBhbGVydE9wdGlvbnMsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zIH0gZnJvbSAnLi4vLi4vY29uc3RhbnRzL2FsZXJ0T3B0aW9ucyc7XHJcbmltcG9ydCB7IElGb3JtYXRlZFJlc3BvbnNlIH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JRm9ybWF0ZWRSZXNwb25zZSc7XHJcbmltcG9ydCB7IElRdWVyeUxpc3RSZXNwb25zZSB9IGZyb20gJy4uLy4uL2ludGVyZmFjZXMvSVF1ZXJ5TGlzdFJlc3BvbnNlJztcclxuaW1wb3J0IHsgZGVmYXVsdFBhZ2luZyB9IGZyb20gJy4uLy4uL2NvbnN0YW50cy9kZWZhdWx0UGFnaW5nJztcclxuaW1wb3J0IHsgSUlkc1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lJZHNSZXF1ZXN0JztcclxuaW1wb3J0IHsgSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QsIElUb2dnbGVBcHByb3ZlSWRzUmVxdWVzdCwgSVRvbmdsZVVuQXBwcm92ZUlkc1JlcXVlc3QgfSBmcm9tICcuLi8uLi9pbnRlcmZhY2VzL0lUb2dnbGVBY3RpdmVJZHNSZXF1ZXN0JztcclxuaW1wb3J0IHsgRW51bVNvcnREaXJlY3Rpb24gfSBmcm9tICcuLi8uLi9lbnVtL0VudW1Tb3J0RGlyZWN0aW9uJztcclxuaW1wb3J0IHsgSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0IH0gZnJvbSAnLi4vLi4vaW50ZXJmYWNlcy9JU3lzTXV0YXRpb25Mb2dCZWZvcmVBZnRlclJlcXVlc3QnO1xyXG5pbXBvcnQgeyBJQ29yZVRhYmxlQ29sdW1uSXRlbSB9IGZyb20gJy4uL2NvcmUtdGFibGUvSUNvcmVUYWJsZUNvbHVtbkl0ZW0nO1xyXG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xyXG5pbXBvcnQgeyBDb3JlUGFnaW5hdGlvbkZ1bGxDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLXBhZ2luYXRpb24tZnVsbC9jb3JlLXBhZ2luYXRpb24tZnVsbC9jb3JlLXBhZ2luYXRpb24tZnVsbC5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtcGFnZS1oZWFkZXIvY29yZS1wYWdlLWhlYWRlci9jb3JlLXBhZ2UtaGVhZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVDb21wb3NpdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtY29tcG9zaXRpb24vY29yZS1jb21wb3NpdGlvbi9jb3JlLWNvbXBvc2l0aW9uLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENvcmVBcGlQcm9ncmVzc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtYXBpLXByb2dyZXNzL2NvcmUtYXBpLXByb2dyZXNzL2NvcmUtYXBpLXByb2dyZXNzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZ1bGxzY3JlZW5Nb2RhbExvYWRlckNvbXBvbmVudCB9IGZyb20gJy4uL2Z1bGxzY3JlZW4tbW9kYWwtbG9hZGVyL2Z1bGxzY3JlZW4tbW9kYWwtbG9hZGVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IElDb3JlQ2hlY2tsaXN0T3B0aW9uIH0gZnJvbSAnLi4vY29yZS1jaGVja2xpc3QvY29yZS1jaGVja2xpc3QvY29yZS1jaGVja2xpc3QuY29tcG9uZW50JztcclxuaW1wb3J0IHsgV29ya1NoaWZ0RG5kU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3dvcmstc2hpZnQtZG5kLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlVGFic0NvbXBvbmVudCB9IGZyb20gJy4uL2NvcmUtdGFicy9jb3JlLXRhYnMvY29yZS10YWJzLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IERvbVNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kb20uc2VydmljZSc7XHJcbmltcG9ydCB7IENvcmVGaWx0ZXJLaXRDb21wb25lbnQgfSBmcm9tICcuLi9jb3JlLWZpbHRlci1raXQvY29yZS1maWx0ZXIta2l0LmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IEZpbHRlcktpdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9maWx0ZXIta2l0LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBJQ29yZVBhcmFtQ29udHJvbCB9IGZyb20gJy4uL2NvcmUtaGVhZGVyLXBhcmFtcy9lbnVtLWFuZC1pbnRlcmZhY2VzJztcclxuaW1wb3J0IHsgQ29yZUZpbHRlckh1YlNlcnZpY2UgfSBmcm9tICcuLi9jb3JlLWZpbHRlci1odWIvY29yZS1maWx0ZXItaHViLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb3JlRmlsdGVySHViQ29tcG9uZW50IH0gZnJvbSAnLi4vY29yZS1maWx0ZXItaHViL2NvcmUtZmlsdGVyLWh1Yi5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBDb3JlVGFibGVTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvY29yZS10YWJsZS5zZXJ2aWNlJztcclxuXHJcbi8qIEtoaSBraMO0bmcgY8OzIGTDsm5nIG7DoG8gxJHGsOG7o2MgdGljayBjaOG7jW4sIGPDoWMgbsO6dCBzYXUgc+G6vSDEkcaw4bujYyDhuqluIMSRaTogKi9cclxuY29uc3QgRU1QVFlfU0VMRUNUSU9OX0hJRERFTl9CVVRUT046IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdID0gW1xyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVCwgLy8gU+G7rWFcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xPQ0ssIC8vIEtow7NhXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkxPQ0ssIC8vIE3hu58ga2jDs2FcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FDVElWQVRFLCAvLyDDgXAgZOG7pW5nXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9JTkFDVElWQVRFLCAvLyBOZ+G7q25nIMOhcCBk4bulbmdcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1JFU0VULCAvLyBSZXNldCAobeG6rXQga2jhuql1KVxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQ09QWSwgLy8gU2FvIGNow6lwXHJcblxyXG4gIC8vIEPDoWMgdGjhu4MgbG/huqFpIGluXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9QUklOVCxcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5UXzJDLFxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfUFJJTlRfMkNfMjAwOCxcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BSSU5UXzJDXzk4LFxyXG4gIC8vXHJcblxyXG4gIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFLCAvLyB4w7NhXHJcbiAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BUFBST1ZFLCAvLyBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1JFSkVDVCwgLy8gdOG7qyBjaOG7kWlcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRSwgLy8gYuG7jyBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BFTkRJTkdfQVBQUk9WRSwgLy8gbeG7nyBjaOG7nSBwaMOqIGR1eeG7h3RcclxuICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xJUVVJREFURV9DT05UUkFDVCwgLy8gdGhhbmggbMO9IGjhu6NwIMSR4buTbmdcclxuXVxyXG5cclxuLy9kZWNsYXJlIGxldCBjb3JlRmlsZVV0aWxzOiBhbnk7XHJcbi8vaW1wb3J0IHsgY29yZUZpbGVVdGlscyB9IGZyb20gJy4uLy4uLy4uL2Fzc2V0cy9qcy9jb3JlRmlsZVV0aWxzJztcclxuLy9jb25zdCBibG9iVG9CYXNlNjQgPSBjb3JlRmlsZVV0aWxzLnByb3RvdHlwZS5ibG9iVG9CYXNlNjQ7XHJcblxyXG5jb25zdCBibG9iVG9CYXNlNjQgPSBhc3luYyAoYmxvYikgPT4ge1xyXG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgXykgPT4ge1xyXG4gICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxyXG4gICAgcmVhZGVyLm9ubG9hZGVuZCA9ICgpID0+IHJlc29sdmUocmVhZGVyLnJlc3VsdClcclxuICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGJsb2IpXHJcbiAgfSlcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0QXBpRGVmaW5pdGlvbiB7XHJcbiAgcXVlcnlMaXN0UmVsYXRpdmVQYXRoOiBzdHJpbmc7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdFNlYXJjaE9iamVjdCB7XHJcbiAgcHJldmlvdXM6IElTZWFyY2hJdGVtW107XHJcbiAgY3VycmVudDogSVNlYXJjaEl0ZW1bXTtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBJQ29yZVBhZ2VMaXN0RWRpdFJvdXRpbmcge1xyXG4gIGF1eGlsaWFyeTogc3RyaW5nO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElDb3JlUGFnZUxpc3RDUlVEIHtcclxuICBkZWxldGVJZHM/OiBhcGk7XHJcbiAgdG9nZ2xlQWN0aXZlSWRzPzogYXBpO1xyXG4gIHRvZ2dsZUFwcHJvdmVJZHM/OiBhcGk7XHJcbiAgdG9nZ2xlVW5hcHByb3ZlSWRzPzogYXBpO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIElYbHN4SW1wb3J0T2JqZWN0IHtcclxuICB4bHN4U2lkOiBzdHJpbmcsXHJcbiAgeGxzeEV4Q29kZTogc3RyaW5nLFxyXG4gIHhsc3hTZXNzaW9uOiBudW1iZXIsXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVQYWdlTGlzdFN0YXR1c1RhYiB7XHJcbiAgaWQ6IG51bWJlciB8IG51bGw7XHJcbiAgaW50bENvZGU/OiBzdHJpbmc7XHJcbiAgdGV4dDogc3RyaW5nO1xyXG4gIGNvdW50OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgSUNvcmVUYWJsZUZsYXRDb2x1bW5JdGVtIHtcclxuICBjYXB0aW9uOiBzdHJpbmc7XHJcbiAgZmllbGQ6IHN0cmluZztcclxuICB0eXBlPzogc3RyaW5nO1xyXG4gIHBpcGU/OiBzdHJpbmc7XHJcbiAgYWxpZ24/OiBzdHJpbmc7XHJcbiAgd2lkdGg/OiBudW1iZXI7XHJcbiAgaGlkZGVuPzogYm9vbGVhbjtcclxufVxyXG5AQ29tcG9uZW50KHtcclxuICAgIHNlbGVjdG9yOiAnY29yZS1wYWdlLWxpc3QnLFxyXG4gICAgaW1wb3J0czogW1xyXG4gICAgICAgIENvbW1vbk1vZHVsZSxcclxuICAgICAgICBSb3V0ZXJNb2R1bGUsXHJcbiAgICAgICAgQ29yZVRhYmxlQ29tcG9uZW50LFxyXG4gICAgICAgIENvcmVQYWdpbmF0aW9uRnVsbENvbXBvbmVudCxcclxuICAgICAgICBDb3JlUGFnZUhlYWRlckNvbXBvbmVudCxcclxuICAgICAgICBDb3JlQ29tcG9zaXRpb25Db21wb25lbnQsXHJcbiAgICAgICAgQ29yZUNvbW1vblBhcmFtS2l0Q29tcG9uZW50LFxyXG4gICAgICAgIENvcmVBcGlQcm9ncmVzc0NvbXBvbmVudCxcclxuICAgICAgICBGdWxsc2NyZWVuTW9kYWxMb2FkZXJDb21wb25lbnQsXHJcbiAgICAgICAgQ29yZVRhYnNDb21wb25lbnQsXHJcbiAgICAgICAgQ29yZUZpbHRlcktpdENvbXBvbmVudCxcclxuICAgICAgICBDb3JlRmlsdGVySHViQ29tcG9uZW50LFxyXG4gICAgXSxcclxuICAgIHRlbXBsYXRlVXJsOiAnLi9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuaHRtbCcsXHJcbiAgICBzdHlsZVVybHM6IFsnLi9jb3JlLXBhZ2UtbGlzdC5jb21wb25lbnQuc2NzcyddLFxyXG4gICAgcHJvdmlkZXJzOiBbXHJcbiAgICAgICAge1xyXG4gICAgICAgICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcclxuICAgICAgICAgICAgbXVsdGk6IHRydWUsXHJcbiAgICAgICAgICAgIHVzZUV4aXN0aW5nOiBDb3JlUGFnZUxpc3RDb21wb25lbnQsXHJcbiAgICAgICAgfSxcclxuICAgICAgICBDb3JlUGFnZUxpc3RTdGF0ZSxcclxuICAgIF1cclxufSlcclxuZXhwb3J0IGNsYXNzIENvcmVQYWdlTGlzdENvbXBvbmVudCBleHRlbmRzIENvcmVGb3JtQ29udHJvbEJhc2VDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQsIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcclxuICAvKiBXSEVOIFlPVSBETyBOT1QgV0FOVCBQT1BVUCwgcGFzcyBbbm9ybWFsTW9kZV09XCJ0cnVlXCIgKi9cclxuICBASW5wdXQoKSBub3JtYWxNb2RlITogYm9vbGVhbjtcclxuICAvKiBTVEFSVDogU29tZSByb3V0ZWQgY29tcG9uZW50cywgc3VjaCBhcyBTdGFmZlByb2ZpbGUsIG1heSBiZSByZXVzZWQgYXMgcmVhZG9ubHkgZm9yIHNlZWtpbmcgKi9cclxuICBASW5wdXQoKSBoaWRlSGVhZGVyITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBoaWRlQnV0dG9uR3JvdXAhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHNlZWtlck1vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIG1jY01vZGUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhlaWdodCE6IG51bWJlcjtcclxuICAvKiBFTkQ6IFNvbWUgcm91dGVkIGNvbXBvbmVudHMsIHN1Y2ggYXMgU3RhZmZQcm9maWxlLCBtYXkgYmUgcmV1c2VkIGFzIHJlYWRvbmx5IGZvciBzZWVraW5nICovXHJcblxyXG4gIC8qIGNoYW5nZSB0aGVzZSAyIHByb3BzIHRvIHdyYXAgaGVhZGVyIHRleHRzICovXHJcbiAgQElucHV0KCkgaGVhZGVyV3JhcCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGVhZGVyRmlyc3RSb3dIZWlnaHQhOiBudW1iZXI7XHJcbiAgLyoqICovXHJcblxyXG4gIC8qKlNob3cgUGFyYW1LaXQgKi9cclxuICBASW5wdXQoKSBlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVycyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgc2hvd1BhcmFtS2l0ITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBlbmFibGVGaWx0ZXJLaXQhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGRhdGVQZXJpb2RDb21wYXJpc29uRm9yITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXkhOiBFbnVtVHJhbnNsYXRlS2V5O1xyXG4gIEBJbnB1dCgpIHN0YXR1c0luY2x1c2lvbkZvciE6IHN0cmluZztcclxuICBASW5wdXQoKSBzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleSE6IEVudW1UcmFuc2xhdGVLZXk7XHJcbiAgQElucHV0KCkgc3RhdHVzT3B0aW9uc0FwaSE6IGFwaTtcclxuICBASW5wdXQoKSBzdGF0dXNPcHRpb25zJDogQmVoYXZpb3JTdWJqZWN0PElDb3JlQ2hlY2tsaXN0T3B0aW9uW10+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJQ29yZUNoZWNrbGlzdE9wdGlvbltdPihbXSk7XHJcbiAgQElucHV0KCkgc2hvd09yZ1BhcmFtITogYm9vbGVhbjtcclxuICBASW5wdXQoKSBzaG93T3JnUGFyYW1Ecm9wZG93biE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGlkZUdlbmVyYWxTZWFyY2ghOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvbiE6IGJvb2xlYW47IC8vIGlmIHdlIHdhbnQgbm90IHRvIHVzZSBkYXRlIHAgZmlsdGVyXHJcbiAgQElucHV0KCkgaGlkZVN0YXR1c0luY2x1c2lvbiE6IGJvb2xlYW47IC8vIGlmIHdlIHdhbnQgbm90IHRvIHVzZSBzdGF0IHVzIGZpbHRlclxyXG5cclxuICBASW5wdXQoKSBmaWx0ZXJPcGVyYXRvcnMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJRmlsdGVyT3BlcmF0b3JbXT4oW10pO1xyXG5cclxuICBASW5wdXQoKSBjYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkITogc3RyaW5nO1xyXG4gIEBJbnB1dCgpIGdyaWRTdGF0dXNDb2x1bW4hOiBzdHJpbmc7XHJcblxyXG4gIC8qKkVuZCBTaG93IFBhcmFtS2l0ICovXHJcblxyXG4gIEBJbnB1dCgpIHRpdGxlITogRW51bVRyYW5zbGF0ZUtleSB8IHN0cmluZztcclxuICBASW5wdXQoKSBoYXNJZE9mU3RyaW5nVHlwZSE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgaGlkZUNoZWNrITogYm9vbGVhbjtcclxuICBASW5wdXQoeyByZXF1aXJlZDogdHJ1ZSB9KSBhcGlEZWZpbml0aW9uITogSUNvcmVQYWdlTGlzdEFwaURlZmluaXRpb247XHJcbiAgQElucHV0KHsgcmVxdWlyZWQ6IHRydWUgfSkgY29sdW1ucyE6IElDb3JlVGFibGVDb2x1bW5JdGVtW107XHJcbiAgQElucHV0KCkgdXNlVGhlc2VDb2x1bW5zITogc3RyaW5nW107XHJcbiAgQElucHV0KCkgaGlkZU9yZ1RyZWUhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGZyb3plbiE6IG51bWJlcjtcclxuICBASW5wdXQoKSBpbmxpbmVUb29scyE6IElDb3JlVGFibGVUb29sSXRlbVtdO1xyXG4gIEBJbnB1dCgpIGlubGluZVRvb2xJdGVtcyE6IEVudW1Db3JlQnV0dG9uVk5TQ29kZVtdO1xyXG4gIEBJbnB1dCgpIGVkaXRSb3V0ZSE6IElDb3JlUGFnZUxpc3RFZGl0Um91dGluZztcclxuICBASW5wdXQoKSBjcnVkITogSUNvcmVQYWdlTGlzdENSVUQ7XHJcbiAgQElucHV0KCkgc2hvd0xpc3RJbmxpbmVUb29scyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgdG9wITogVGVtcGxhdGVSZWY8YW55PjtcclxuICBASW5wdXQoKSBsZWZ0ITogVGVtcGxhdGVSZWY8YW55PiB8IHVuZGVmaW5lZDtcclxuICBASW5wdXQoKSBoaWRlTGVmdCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgb3V0ZXJQYXJhbSQhOiBCZWhhdmlvclN1YmplY3Q8YW55PjtcclxuICBASW5wdXQoKSBvdXRlckZpbHRlciQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElGaWx0ZXJPcGVyYXRvcltdIHwgdW5kZWZpbmVkPihbXSk7XHJcbiAgQElucHV0KCkgb3V0ZXJTb3J0ITogSVNvcnRJdGVtW107XHJcbiAgQElucHV0KCkgb3V0ZXJGaWx0ZXJPcGVyYXRvcnMhOiBJRmlsdGVyT3BlcmF0b3JbXTtcclxuICBASW5wdXQoKSBvdXRlckluT3BlcmF0b3JzITogSUluT3BlcmF0b3JbXSB8IG51bGw7XHJcbiAgQElucHV0KCkgYXV0b1Jlc2l6ZVdpdGhXaW5kb3chOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGV4dHJhTWFudWFsT2Zmc2V0ITogbnVtYmVyO1xyXG4gIEBJbnB1dCgpIHdyYXAhOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIHJvd0hlaWdodCE6IHN0cmluZztcclxuICBASW5wdXQoKSBzZWxmUmVzb2x2ZUNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2shOiBib29sZWFuOyAvLyBUaGUgY2FsbGVyIHdpbGwgaXRzZWxmIHJlc29sdmUgZXZlbnRzIGVtbWl0ZWQgYnkgQ29yZVBhZ2VIZWFkZXIgYnV0dG9ucyAoZm9yIHNvbWUpXHJcbiAgQElucHV0KCkgY2xlYXJEYXRhJCE6IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPjtcclxuICBASW5wdXQoKSBkZWxldGVWYWxpZGF0ZUZuITogRnVuY3Rpb247XHJcbiAgQElucHV0KCkgZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QhOiBJR2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q7XHJcbiAgQElucHV0KCkgaW1wb3J0UHJldmlld1BhdGghOiBzdHJpbmc7XHJcbiAgQElucHV0KCkgY29sdW1uU2VhcmNoRGVmYXVsdE9wZW4hOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGZpeGVkUGFnZVNpemUhOiBudW1iZXI7XHJcbiAgQElucHV0KCkgZGlzYWJsZURvdWJsZUNsaWNrITogYm9vbGVhbjtcclxuXHJcbiAgQElucHV0KCkgbm9QYWRkaW5nQ2VsbCE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgZGlzYWJsZUhpZ2hsaWdodE9uQ2xpY2shOiBib29sZWFuO1xyXG4gIEBJbnB1dCgpIGxvYWRpbmckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgQElucHV0KCkgZXhjbHVkZWRJZHMkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXJbXT4oW10pO1xyXG5cclxuICBASW5wdXQoKSBkaXNhYmxlRGlhbG9nSW5mb3JtYXRpb25MaW5lczogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBASW5wdXQoKSBjaGFuZ2VUcmFja2luZyE6IGJvb2xlYW47XHJcbiAgQElucHV0KCkgcHJpbWFyeUtleTogc3RyaW5nID0gJ2lkJzsgLy8gJ2lkJyBvciAndmlydHVhbElkJ1xyXG4gIEBJbnB1dCgpIGNoYW5nZWRJdGVtcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueVtdPihbXSk7XHJcblxyXG4gIEBJbnB1dCgpIHRhYk1vZGU6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBASW5wdXQoKSBwYXJhbVJvd3MhOiBJQ29yZVBhcmFtQ29udHJvbFtdW107XHJcbiAgQElucHV0KCkgZGlzYWJsZUZpbHRlckh1YiE6IGJvb2xlYW47XHJcblxyXG4gIEBJbnB1dCgpIGF1dG9Db2x1bW5GaXRBdmFpbGFibGVTcGFjZTogYm9vbGVhbiA9IHRydWU7XHJcblxyXG4gIEBPdXRwdXQoKSBjb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxJQ29yZUJ1dHRvblZOUz4oKTtcclxuICBAT3V0cHV0KCkgcm93Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyKCk7XHJcbiAgQE91dHB1dCgpIHJvd0RvdWJsZUNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBzZWxlY3RlZElkc0NoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgc2VsZWN0ZWREYXRhQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcigpO1xyXG4gIEBPdXRwdXQoKSBvbkluc3RhbmNlQ3JlYXRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8bnVtYmVyPigpO1xyXG4gIEBPdXRwdXQoKSBvbklucHV0RmlsZUJhc2U2NERhdGFSZWFkeSA9IG5ldyBFdmVudEVtaXR0ZXIoKTtcclxuICBAT3V0cHV0KCkgbGlzdENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55W10+KCk7XHJcblxyXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lcicpIGNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnY29yZVBhZ2VMaXN0Q29udGFpbmVyJykgY29yZVBhZ2VMaXN0Q29udGFpbmVyITogRWxlbWVudFJlZjtcclxuICBAVmlld0NoaWxkKCdwYWdpbmF0aW9uQ29udGFpbmVyJykgcGFnaW5hdGlvbkNvbnRhaW5lciE6IEVsZW1lbnRSZWY7XHJcbiAgQFZpZXdDaGlsZCgnZmlsZUltcG9ydCcpIGZpbGVJbXBvcnQhOiBFbGVtZW50UmVmO1xyXG5cclxuICBnZW9tZXRyaWNEb25lOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGhlaWdodFJlc2l6aW5nOiBib29sZWFuID0gZmFsc2U7XHJcbiAgaGVpZ2h0JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigwKTtcclxuICB0b3BQbGFjZUhlaWdodCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gIHJlc2l6ZUhlaWdodEZsYWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcblxyXG4gIHBhZ2luYXRpb25IZWlnaHQhOiBudW1iZXI7XHJcbiAgY29tcG9zaXRpb25IZWlnaHQhOiBudW1iZXI7XHJcbiAgY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcbiAgZGlhbG9nSW5zdGFuY2VOdW1iZXIhOiBudW1iZXI7XHJcblxyXG4gIHJlc2l6ZVN0cmVhbSQgPSBmcm9tRXZlbnQod2luZG93LCAncmVzaXplJyk7XHJcblxyXG4gIGNsaWNrR2VuZXJhdGVUZW1wbGF0ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMCk7XHJcblxyXG4gIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbltdID0gW107XHJcbiAgcXVlcnlMaXN0U3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG4gIGxvYWRpbmchOiBib29sZWFuO1xyXG5cclxuICBzZWxlY3RlZElkczogc3RyaW5nW10gfCBudW1iZXJbXSA9IFtdO1xyXG4gIHNlbGVjdGVkRGF0YTogYW55W10gPSBbXTtcclxuXHJcbiAgaXNBZG1pbjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICB2aWV3SW5pdERvbmUhOiBib29sZWFuO1xyXG5cclxuICAvKiBzdGFydDogcGFzc2luZyB0aGlzIHZhciB0byBQYWdpbmF0aW9uICovXHJcblxyXG4gIHBhZ2VDb3VudCE6IG51bWJlcjtcclxuXHJcbiAgLy8gUGFzc2luZyBCZWhhdmlvclN1YmplY3QgdG8gb3RoZXIgY29tcG9uZW50IGlzIGxpa2UgdXNpbmcgYSBzZXJ2aWNlICh0aGF0IGhvbGRzIHRoaXMgQmVoYXZpb3JTdWJqZWN0KSBpbmplY3RlZCB0byBib3RoIGNvbXBvbmVudHNcclxuICBjdXJyZW50UGFnZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4oMSk7XHJcblxyXG4gIC8qIGVuZDogcGFzc2luZyB0aGlzIHZhciB0byBQYWdpbmF0aW9uICovXHJcblxyXG4gIHBhZ2VTaXplJCE6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+O1xyXG5cclxuICBmaWx0ZXIkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpO1xyXG5cclxuICBpbk9wZXJhdG9ycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElJbk9wZXJhdG9yW10+KFtdKTtcclxuICBnZW5lcmFsU2VhcmNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPignJyk7XHJcbiAgc2VhcmNoJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SUNvcmVQYWdlTGlzdFNlYXJjaE9iamVjdCB8IG51bGw+KG51bGwpO1xyXG4gIHNvcnQkID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJU29ydEl0ZW1bXT4oW10pO1xyXG4gIHBhZ2luYXRpb24kITogQmVoYXZpb3JTdWJqZWN0PElQYWdpbmF0aW9uPjtcclxuICBmb3JjZVJlbG9hZGluZ0ZsYWckID0gbmV3IEJlaGF2aW9yU3ViamVjdDxib29sZWFuPihmYWxzZSk7XHJcbiAgcXVlcnlMaXN0UmVxdWVzdCQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PElRdWVyeUxpc3RSZXF1ZXN0Pih7IGxhbmc6ICd2aScsIGR0b1N0YXR1c0lkRmllbGQ6IHRoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZCB9KTtcclxuICBxdWVyeUxpc3RTdHJlYW0kITogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gIGlubmVyQm9keUNvdW50JCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPigxKTtcclxuXHJcbiAgcGF1c2VTdWJzY3RpcHRpb246IGJvb2xlYW4gPSBmYWxzZTtcclxuICBsaXN0ITogYW55W107XHJcbiAgLy9jaGFuZ2VkTGlzdDogYW55W10gPSBbXTtcclxuICB0YWJsZUhlaWdodCE6IG51bWJlcjtcclxuICBhdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaCE6IHN0cmluZ1tdO1xyXG4gIGRhdGFJbXBvcnQhOiBhbnk7XHJcbiAgcGVuZGluZ0FjdGlvbiE6IEVudW1Db3JlQnV0dG9uVk5TQ29kZSB8IG51bGw7XHJcbiAgaWRTdGF0ZTogYW55O1xyXG4gIHRlbXBsYXRlRmlsZU5hbWUhOiBzdHJpbmc7XHJcblxyXG4gIGxvbmdBcGlSdW5uaW5nITogYm9vbGVhbjtcclxuICBwcmVmZXRjaExvYWRpbmchOiBib29sZWFuO1xyXG5cclxuICBidXR0b25Hcm91cFN0YXR1cyE6IElDb3JlQnV0dG9uR3JvdXBTdGF0dXM7XHJcblxyXG4gIGV4cG9ydENvcmVQYWdlTGlzdEdyaWRUb0V4Y2VsU3Vic2NyaXB0aW9uITogU3Vic2NyaXB0aW9uO1xyXG5cclxuICBzdGF0dXNUYWJzOiBNYXA8bnVtYmVyLCBJQ29yZVBhZ2VMaXN0U3RhdHVzVGFiPiA9IG5ldyBNYXAoKTtcclxuICB0YWJIZWFkZXJzOiBzdHJpbmdbXSA9IFtdO1xyXG4gIGZpbHRlcktpdFpJbmRleCE6IG51bWJlcjtcclxuXHJcbiAgc2hvd0ZpbHRlcjogYm9vbGVhbiA9IGZhbHNlO1xyXG5cclxuICBjb25maXJtYXRpb25Db2x1bW5zITogSUNvcmVUYWJsZUNvbHVtbkl0ZW1bXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlTGlzdFNlcnZpY2U6IENvcmVQYWdlTGlzdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVQYWdlTGlzdFN0YXRlOiBDb3JlUGFnZUxpc3RTdGF0ZSxcclxuICAgIHByaXZhdGUgY29yZVBhZ2VFZGl0U2VydmljZTogQ29yZVBhZ2VFZGl0U2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIHJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgbWxzOiBNdWx0aUxhbmd1YWdlU2VydmljZSxcclxuICAgIHByaXZhdGUgYWxlcnRTZXJ2aWNlOiBBbGVydFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGF1dGhTZXJ2aWNlOiBBdXRoU2VydmljZSxcclxuICAgIHByaXZhdGUgYXBwU2VydmljZTogQXBwU2VydmljZSxcclxuICAgIHByaXZhdGUgZGlhbG9nU2VydmljZTogRGlhbG9nU2VydmljZSxcclxuICAgIHByaXZhdGUgcm91dGluZ1NlcnZpY2U6IFJvdXRpbmdTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBsb25nVGFza1NlcnZpY2U6IExvbmdUYXNrU2VydmljZSxcclxuICAgIHB1YmxpYyBsYXlvdXRTZXJ2aWNlOiBMYXlvdXRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlQ29tcG9zaXRpb25TZXJ2aWNlOiBDb3JlQ29tcG9zaXRpb25TZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb3JlQnV0dG9uR3JvdXBTZXJ2aWNlOiBDb3JlQnV0dG9uR3JvdXBTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBqc29uU2VydmljZTogSnNvblNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdvcmtTaGlmdERuZFNlcnZpY2U6IFdvcmtTaGlmdERuZFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGRvbVNlcnZpY2U6IERvbVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGZpbHRlcktpdFNlcnZpY2U6IEZpbHRlcktpdFNlcnZpY2UsXHJcbiAgICBwcml2YXRlIGNvcmVGaWx0ZXJIdWJTZXJ2aWNlOiBDb3JlRmlsdGVySHViU2VydmljZSxcclxuICAgIHByaXZhdGUgY29yZVRhYmxlU2VydmljZTogQ29yZVRhYmxlU2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICBpZiAoISEhdGhpcy5pbmxpbmVUb29sSXRlbXMpIHtcclxuICAgICAgdGhpcy5pbmxpbmVUb29sSXRlbXMgPSBbXHJcbiAgICAgICAgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FRElULFxyXG4gICAgICAgIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgICAgIF1cclxuICAgIH1cclxuXHJcbiAgICBsZXQgbmF2aWdhdGlvbiA9IHRoaXMucm91dGVyPy5nZXRDdXJyZW50TmF2aWdhdGlvbigpXHJcbiAgICBpZiAobmF2aWdhdGlvbikge1xyXG4gICAgICBjb25zdCBleHRyYXMgPSBuYXZpZ2F0aW9uLmV4dHJhcztcclxuICAgICAgaWYgKCEhZXh0cmFzICYmICdzdGF0ZScgaW4gZXh0cmFzKSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKGBDb3JlUGFnZUxpc3QgaXMgdXNpbmcgb2xkIGluc3RhbmNlIG51bWJlciAke3RoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJ9YCwgYWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAoISFleHRyYXMuc3RhdGUgJiYgJ2lkJyBpbiBleHRyYXMuc3RhdGUhKSB7XHJcbiAgICAgICAgICB0aGlzLmlkU3RhdGUgPSBleHRyYXMuc3RhdGVbJ2lkJ107XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmICghIWV4dHJhcy5zdGF0ZSAmJiAnaW5zdGFuY2VOdW1iZXInIGluIGV4dHJhcy5zdGF0ZSEpIHtcclxuICAgICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgPSBleHRyYXMuc3RhdGVbJ2luc3RhbmNlTnVtYmVyJ107XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG5cclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIC8qIFRISVMgQ09ERSBXSUxMIERFRklORSBvdXRlclBhcmFtJCBGSUxURVIgZm9yIGltcG9ydCBwcmV2aWV3IHRhc2sgKi9cclxuICAgIGlmIChuYXZpZ2F0aW9uPy5leHRyYXM/LnN0YXRlKSB7XHJcbiAgICAgIGNvbnN0IGltcG9ydFByZXZpZXdPdXRlclBhcmFtID0gbmF2aWdhdGlvbj8uZXh0cmFzPy5zdGF0ZSFbXCJpbXBvcnRQcmV2aWV3T3V0ZXJQYXJhbVwiXVxyXG4gICAgICBpZiAoISF0aGlzLm91dGVyUGFyYW0kKSB7XHJcbiAgICAgICAgaWYgKCEhdGhpcy5vdXRlclBhcmFtJD8udmFsdWUpIHtcclxuICAgICAgICAgIGlmICghIWltcG9ydFByZXZpZXdPdXRlclBhcmFtKSB7XHJcbiAgICAgICAgICAgIGxldCBuZXdPdXRlclBhcmFtID0gdGhpcy5vdXRlclBhcmFtJC52YWx1ZTtcclxuICAgICAgICAgICAgbmV3T3V0ZXJQYXJhbSA9IHtcclxuICAgICAgICAgICAgICAuLi5uZXdPdXRlclBhcmFtLFxyXG4gICAgICAgICAgICAgIC4uLmltcG9ydFByZXZpZXdPdXRlclBhcmFtLFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQubmV4dChuZXdPdXRlclBhcmFtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCEhaW1wb3J0UHJldmlld091dGVyUGFyYW0pIHtcclxuICAgICAgICAgICAgdGhpcy5vdXRlclBhcmFtJC5uZXh0KGltcG9ydFByZXZpZXdPdXRlclBhcmFtKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCEhaW1wb3J0UHJldmlld091dGVyUGFyYW0pIHtcclxuICAgICAgICAgIHRoaXMub3V0ZXJQYXJhbSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PGFueT4oaW1wb3J0UHJldmlld091dGVyUGFyYW0pXHJcbiAgICAgICAgICB0aGlzLm91dGVyUGFyYW1TdWJzY3JpYmVGbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xyXG5cclxuICAgIGlmICghISF0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyID0gbmV3IERhdGUoKS5nZXRUaW1lKCk7XHJcbiAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLnB1c2goe1xyXG4gICAgICBpbnN0YW5jZU51bWJlcjogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcixcclxuICAgICAgcmVsb2FkRmxhZyQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8Ym9vbGVhbj4oZmFsc2UpLFxyXG4gICAgICBpZCQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKSxcclxuICAgICAgdmlydHVhbElkJDogbmV3IEJlaGF2aW9yU3ViamVjdDxhbnk+KG51bGwpLFxyXG4gICAgICB0Ym9keUhlaWdodCQ6IG5ldyBCZWhhdmlvclN1YmplY3Q8YW55PihudWxsKSxcclxuICAgIH0pO1xyXG5cclxuICAgIGlmICghIXRoaXMuaWRTdGF0ZSkge1xyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgaWQ6IHRoaXMuaWRTdGF0ZVxyXG4gICAgICB9KVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudGVtcGxhdGVGaWxlTmFtZSA9IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3Q/LmV4Q29kZTtcclxuXHJcbiAgICBpZiAoISF0aGlzLm91dGVyRmlsdGVyJCkge1xyXG4gICAgICB0aGlzLm91dGVyRmlsdGVyJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgdGhpcy5vdXRlckZpbHRlck9wZXJhdG9ycyA9IHggfHwgW107XHJcbiAgICAgICAgdGhpcy5tZXJnZUZpbHRlck9wZXJhdG9yKCk7XHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xyXG5cclxuICAgIGlmIChjaGFuZ2VzWydvdXRlckluT3BlcmF0b3JzJ10pIHtcclxuXHJcbiAgICAgIGlmICghIXRoaXMuaGlkZU9yZ1RyZWUgJiYgY2hhbmdlc1snb3V0ZXJJbk9wZXJhdG9ycyddLmN1cnJlbnRWYWx1ZS5maWx0ZXIoeCA9PiB4LmZpZWxkID09PSAnb3JnSWQnKS5sZW5ndGgpIHtcclxuICAgICAgICAvLyBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAvLyAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFwiV2hlbiB0aGlzLmhpZGVPcmdUcmVlID09PSB0cnVlLCBvdXRlckluT3BlcmF0b3JzIG11c3Qgbm90IGluY2x1ZGUgJ29yZ0lkJyBmaWVsZFwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAvLyB9XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBjb25zdCBjdXJyZW50SW5PcGVyYXRvcnM6IElJbk9wZXJhdG9yW10gPSB0aGlzLmluT3BlcmF0b3JzJC52YWx1ZTtcclxuICAgICAgY29uc3QgY2hhbmdlZEluT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gY2hhbmdlc1snb3V0ZXJJbk9wZXJhdG9ycyddLmN1cnJlbnRWYWx1ZSB8fCBbXTtcclxuICAgICAgY29uc3QgcmVtYWluSW5PcGVyYXRvcnMgPSBjdXJyZW50SW5PcGVyYXRvcnMuZmlsdGVyKHggPT4gISEhY2hhbmdlZEluT3BlcmF0b3JzLmZpbHRlcih5ID0+IHkuZmllbGQgPT09IHguZmllbGQpLmxlbmd0aCk7XHJcbiAgICAgIGNvbnN0IG5ld0luT3BlcmF0b3JzID0gWy4uLnJlbWFpbkluT3BlcmF0b3JzLCAuLi5jaGFuZ2VkSW5PcGVyYXRvcnNdO1xyXG5cclxuICAgICAgdGhpcy5pbk9wZXJhdG9ycyQubmV4dChuZXdJbk9wZXJhdG9ycyk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ2NhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQnXSkge1xyXG4gICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgZHRvU3RhdHVzSWRGaWVsZDogY2hhbmdlc1snY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZCddLmN1cnJlbnRWYWx1ZVxyXG4gICAgICB9KVxyXG5cclxuICAgIH1cclxuICAgIGlmIChjaGFuZ2VzWydjb2x1bW5zJ10pIHtcclxuICAgICAgdGhpcy5jb25maXJtYXRpb25Db2x1bW5zID0gY2hhbmdlc1snY29sdW1ucyddLmN1cnJlbnRWYWx1ZT8uZmlsdGVyKHggPT4gISF4LnNob3dGb3JDb25maXJtYXRpb24pIHx8IFtdO1xyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWyd1c2VUaGVzZUNvbHVtbnMnXSkge1xyXG4gICAgICBpZiAoISFjaGFuZ2VzWyd1c2VUaGVzZUNvbHVtbnMnXS5jdXJyZW50VmFsdWUpIHtcclxuICAgICAgICB0aGlzLnJlc29sdmVVc2VUaGVzZUNvbHVtbnMoY2hhbmdlc1sndXNlVGhlc2VDb2x1bW5zJ10uY3VycmVudFZhbHVlKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIGlmIChjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG5cclxuICAgICAgLy8gS2jDtG5nIHRo4buDIHTDrW5oIMSRxrDhu6NjIHPhu5EgxJFvIGjDrG5oIGjhu41jIG7hur91IEFmdGVyVmlld0luaXQgY2jGsGEgY2jhuqF5XHJcbiAgICAgIC8vIE7Dqm4g4bufIMSRw6J5IHRhIGNo4buJIMSRxqFuIGdp4bqjbiBsw6AgZ8OhbiB0aGF5IMSR4buVaSBj4bunYSBoZWlnaHQgdsOgbyBoZWlnaHQkXHJcbiAgICAgIHRoaXMuaGVpZ2h0JC5uZXh0KGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSk7XHJcblxyXG4gICAgICBpZiAoISFjaGFuZ2VzWydoZWlnaHQnXSkge1xyXG4gICAgICAgIHRoaXMuY2FsY3VsYXRlVGFibGVIZWlnaHRCYXNlZE9uSGVpZ2h0QW5kVG9wUmVmSGVpZ2h0KGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSwgdGhpcy50b3BQbGFjZUhlaWdodCQudmFsdWUpXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8qXHJcbiAgICAgIGlmICghIWNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSkge1xyXG4gICAgICAgIC8vIE7hur91IGNoaeG7gXUgY2FvIGPhu6dhIENvcmVQYWdlTGlzdCDEkcaw4bujYyB0cnV54buBbiB2w6BvXHJcbiAgICAgICAgLy8gVGjDrCBj4bqnbiB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSBDb3JlQ29tcG9zaXRpb24gPSB0aGlzLmhlaWdodFxyXG4gICAgICAgIC8vIE7hur91IGhp4buDbiB0aOG7iyBDb3JlUGFnZUhlYWRlciB0aMOsIGPhuqduIHRy4burIHRp4bq/cCDEkWkgY29yZVBhZ2VIZWFkZXJIZWlnaHRcclxuICAgICAgICB0aGlzLmNvbXBvc2l0aW9uSGVpZ2h0ID0gY2hhbmdlc1snaGVpZ2h0J10uY3VycmVudFZhbHVlIC0gKCEhdGhpcy5oaWRlSGVhZGVyID8gMCA6IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCk7XHJcbiAgICAgICAgLy8gVMOtbmggbHXDtG4gY2hp4buBdSBjYW8gdGFibGVIZWlnaHRcclxuICAgICAgICAvLyBO4bq/dSBleHRyYU1hbnVhbE9mZnNldCDEkcaw4bujYyB0cnV54buBbiB2w6BvIG3hu5l0IGPDoWNoIHRo4bunIGPDtG5nXHJcbiAgICAgICAgaWYgKCEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkge1xyXG4gICAgICAgICAgdGhpcy50YWJsZUhlaWdodCA9IGNoYW5nZXNbJ2hlaWdodCddLmN1cnJlbnRWYWx1ZSAtIHRoaXMuZXggdHJhTWFudWFsT2Zmc2V0IC0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvcmVQYWdpbmF0aW9uSGVpZ2h0O1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBD4bqnbiB0w61uaCBjaGnhu4F1IGNhbyBj4bunYSBwaOG6p24gdG9wIGtoaSBob29rIEFmdGVyVmlld0luaXQgxJHGsOG7o2Mga8OtY2ggaG/huqF0XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgICovXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGNoYW5nZXNbJ291dGVyRmlsdGVyT3BlcmF0b3JzJ10pIHtcclxuICAgICAgdGhpcy5tZXJnZUZpbHRlck9wZXJhdG9yKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5xdWVyeUxpc3RTdWJzY3JpYmUoKTtcclxuXHJcbiAgfVxyXG5cclxuICAvKiBRdWVyeUxpc3Qgc3ViICovXHJcbiAgc3Vic2NyaWJlUXVlcnlMaXN0KHg6IGFueSkge1xyXG4gICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgY29uc3QgaW5uZXJCb2R5OiBJUXVlcnlMaXN0UmVzcG9uc2UgPSBib2R5LmlubmVyQm9keTtcclxuICAgICAgICBpZiAoISFpbm5lckJvZHkpIHtcclxuXHJcbiAgICAgICAgICAvKiAjcmVnaW9uIFRyaWNraWx5IHJlc2V0IGlkJCwgdG1wRmlsdGVyJCBhbmQgdG1wSW5PcGVyYXRvcnMkICovXHJcbiAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gdHJ1ZTsgLy8gPD09IFBhdXNlXHJcblxyXG4gICAgICAgICAgY29uc3QgbmV3UXVlcnlMaXN0UmVxdWVzdCA9IHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWU7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTdGF0ZS5pZCQubmV4dChudWxsKVxyXG4gICAgICAgICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcblxyXG4gICAgICAgICAgLyogVGhpcyBjb2RlIGJsb2NrIHJhaXNlcyBhIGJ1ZyBnZW5lcmFsbHkgKi9cclxuICAgICAgICAgIC8vIGlmICghIXRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLnZhbHVlKSB7XHJcbiAgICAgICAgICAvLyAgIHRoaXMuY29yZVBhZ2VMaXN0U3RhdGUuaWQkLm5leHQobnVsbClcclxuICAgICAgICAgIC8vICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5pZCA9IG51bGw7XHJcbiAgICAgICAgICAvLyB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gICBuZXdRdWVyeUxpc3RSZXF1ZXN0LmlkID0gbnVsbDtcclxuICAgICAgICAgIC8vIH07XHJcblxyXG4gICAgICAgICAgaWYgKCEhdGhpcy50bXBGaWx0ZXJBY3RpdmUpIHtcclxuICAgICAgICAgICAgY29uc3Qgb2xkRmlsdGVyID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLnByaW1hcnlGaWx0ZXIpKTtcclxuICAgICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQob2xkRmlsdGVyKTtcclxuICAgICAgICAgICAgbmV3UXVlcnlMaXN0UmVxdWVzdC5maWx0ZXIgPSBvbGRGaWx0ZXI7XHJcbiAgICAgICAgICAgIHRoaXMucHJpbWFyeUZpbHRlciA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgICAgdGhpcy50bXBGaWx0ZXJBY3RpdmUgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBpZiAoISF0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9sZEluT3BlcnRvcnMgPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMucHJpbWFyeUluT3BlcmF0b3JzKSk7XHJcbiAgICAgICAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLm5leHQob2xkSW5PcGVydG9ycyk7XHJcbiAgICAgICAgICAgIG5ld1F1ZXJ5TGlzdFJlcXVlc3QuaW5PcGVyYXRvcnMgPSBvbGRJbk9wZXJ0b3JzO1xyXG4gICAgICAgICAgICB0aGlzLnByaW1hcnlJbk9wZXJhdG9ycyA9IFtdO1xyXG4gICAgICAgICAgICB0aGlzLnRtcEluT3BlcmF0b3JzQWN0aXZlID0gZmFsc2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KG5ld1F1ZXJ5TGlzdFJlcXVlc3QpO1xyXG5cclxuICAgICAgICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSBmYWxzZTsgLy8gPD09IEFjdGl2ZSBiYWNrIGFnYWluXHJcblxyXG4gICAgICAgICAgLyogI2VuZHJlZ2lvbiBUcmlja2lseSByZXNldCBpZCQsIHRtcEZpbHRlciQgYW5kIHRtcEluT3BlcmF0b3JzJCAqL1xyXG5cclxuICAgICAgICAgIHRoaXMubGlzdCA9IGlubmVyQm9keS5saXN0IHx8IFtdO1xyXG5cclxuICAgICAgICAgIC8vIHNlbGVjdCB0aG9zZSBsaW5lcyBtYXJrZWQgYXMgY2hhbmdlZCBmcm9tIHRoZSBjYWNoZSBhbmQgdXBkYXRlIHRoZSBuZXcgbGlzdFxyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jaGFuZ2VUcmFja2luZykge1xyXG4gICAgICAgICAgICB0aGlzLmxpc3QubWFwKChpdGVtLCBpbmRleCkgPT4ge1xyXG4gICAgICAgICAgICAgIGNvbnN0IHRyeUZpbmQgPSB0aGlzLmNoYW5nZWRJdGVtcyQudmFsdWUuZmlsdGVyKHggPT4geFt0aGlzLnByaW1hcnlLZXldID09PSBpdGVtW3RoaXMucHJpbWFyeUtleV0pO1xyXG4gICAgICAgICAgICAgIGlmICh0cnlGaW5kLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5saXN0W2luZGV4XSA9IHRyeUZpbmRbMF07XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICB0aGlzLndvcmtTaGlmdERuZFNlcnZpY2Uuc2hpZnRDb2xsZWN0aW9uT3BlbiQubmV4dChmYWxzZSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5saXN0Q2hhbmdlLmVtaXQodGhpcy5saXN0KTtcclxuXHJcbiAgICAgICAgICB0aGlzLmlubmVyQm9keUNvdW50JC5uZXh0KGlubmVyQm9keS5jb3VudCEpO1xyXG4gICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSBNYXRoLmNlaWwoaW5uZXJCb2R5LmNvdW50ISAvIHRoaXMucGFnZVNpemUkLnZhbHVlKTtcclxuXHJcbiAgICAgICAgICBpZiAoaW5uZXJCb2R5LnBhZ2UgIT09IHRoaXMuY3VycmVudFBhZ2UkLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIHRoaXMucGF1c2VTdWJzY3RpcHRpb24gPSB0cnVlOyAvLyA8PT0gUGF1c2VcclxuICAgICAgICAgICAgdGhpcy5jdXJyZW50UGFnZSQubmV4dChpbm5lckJvZHkucGFnZSEpO1xyXG4gICAgICAgICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gZmFsc2U7IC8vIDw9PSBBY3RpdmUgYmFjayBhZ2FpblxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFVwZGF0ZSB0YWJIZWFkZXJzXHJcbiAgICAgICAgICBpZiAodGhpcy50YWJNb2RlICYmIGlubmVyQm9keS5zdGF0dXNDb3VudHMpIHtcclxuICAgICAgICAgICAgY29uc3QgbmV3VGFiSGVhZGVyczogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgdGhpcy5zdGF0dXNUYWJzLmZvckVhY2goc3RhdHVzVGFiID0+IHtcclxuICAgICAgICAgICAgICBjb25zdCBjb3VudCA9IGlubmVyQm9keS5zdGF0dXNDb3VudHNbc3RhdHVzVGFiLmlkIS50b1N0cmluZygpXSB8fCAwO1xyXG4gICAgICAgICAgICAgIHN0YXR1c1RhYi5jb3VudCA9IGNvdW50O1xyXG4gICAgICAgICAgICAgIG5ld1RhYkhlYWRlcnMucHVzaChgJHtzdGF0dXNUYWIudGV4dH0gKCR7Y291bnR9KWApO1xyXG4gICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB0aGlzLnRhYkhlYWRlcnMgPSBuZXdUYWJIZWFkZXJzO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5saXN0ID0gW107XHJcbiAgICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdChbXSk7XHJcblxyXG4gICAgICAgICAgdGhpcy5wYWdlQ291bnQgPSAwO1xyXG4gICAgICAgICAgLy90aGlzLnJlc3BvbnNlU2VydmljZS5yZXNvbHZlKGJvZHkpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmxpc3QgPSBbXTtcclxuICAgICAgICB0aGlzLmxpc3RDaGFuZ2UuZW1pdChbXSk7XHJcblxyXG4gICAgICAgIHRoaXMucGFnZUNvdW50ID0gMDtcclxuICAgICAgICAvL3RoaXMucmVzcG9uc2VTZXJ2aWNlLnJlc29sdmUoYm9keSk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAvLyAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAvLyAgICAgSlNPTi5zdHJpbmdpZnkoeCwgbnVsbCwgMiksXHJcbiAgICAgIC8vICAgICBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9uc1xyXG4gICAgICAvLyAgICk7XHJcbiAgICAgIC8vIH1cclxuICAgIH1cclxuXHJcbiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIG1lcmdlRmlsdGVyT3BlcmF0b3IoKTogdm9pZCB7XHJcbiAgICAvKiBTVEFSVDogTWVyZ2UgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuICAgIGlmICghIXRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh0aGlzLmZpbHRlck9wZXJhdG9ycyQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzLm1hcCgob2ZvKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIgPSBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLmZpbHRlcigobykgPT4gby5maWVsZCA9PT0gb2ZvLmZpZWxkICYmIG8ub3BlcmF0b3IgPT09IG9mby5vcGVyYXRvcik7XHJcbiAgICAgICAgICAvLyBvcHRpbWlzdGljYWxseSBmaWx0ZXIubGVuZ3RoID09PSAxXHJcbiAgICAgICAgICBpZiAoISFmaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclswXS5kYXRlVGltZVZhbHVlID0gb2ZvLmRhdGVUaW1lVmFsdWU7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLnB1c2gob2ZvKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChjdXJyZW50RmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyogRU5EOiBDcmVhdGUvTWVyZ2UvT3ZlcndyaXRlIGZpbHRlck9wZXJhdG9yIHdpdGggb3V0ZXIgb25lICovXHJcbiAgfVxyXG4gIHRtcEZpbHRlckFjdGl2ZSE6IGJvb2xlYW47XHJcbiAgdG1wSW5PcGVyYXRvcnNBY3RpdmUhOiBib29sZWFuO1xyXG4gIHByaW1hcnlGaWx0ZXIhOiBhbnk7XHJcbiAgcHJpbWFyeUluT3BlcmF0b3JzITogSUluT3BlcmF0b3JbXTtcclxuXHJcbiAgb3V0ZXJQYXJhbVN1YnNjcmliZUZuKCk6IHZvaWQge1xyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMub3V0ZXJQYXJhbSQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgLy8gbWVyZ2Ugb3Igb3ZlcndyaXJlIGN1cnJlbnQgZmlsdGVyXHJcbiAgICAgICAgY29uc3QgY3VycmVudEZpbHRlciA9IHRoaXMuZmlsdGVyJC52YWx1ZTtcclxuICAgICAgICBpZiAoISFjdXJyZW50RmlsdGVyKSB7XHJcbiAgICAgICAgICBjb25zdCBuZXdGaWx0ZXIgPSB7XHJcbiAgICAgICAgICAgIC4uLmN1cnJlbnRGaWx0ZXIsXHJcbiAgICAgICAgICAgIC4uLngsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQobmV3RmlsdGVyKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQoeCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIHJlc29sdmVVc2VUaGVzZUNvbHVtbnModmFsdWU6IHN0cmluZ1tdKTogdm9pZCB7XHJcbiAgICBjb25zdCBuZXdDb2x1bW5zID0gdGhpcy5jb3JlVGFibGVTZXJ2aWNlLm1ha2VTZWVrZXJDb2x1bW5zKHRoaXMuY29sdW1ucywgdmFsdWUpXHJcbiAgICB0aGlzLmNvbHVtbnMgPSBuZXdDb2x1bW5zO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKTogdm9pZCB7XHJcblxyXG4gICAgaWYgKCEhdGhpcy51c2VUaGVzZUNvbHVtbnMpIHtcclxuICAgICAgdGhpcy5yZXNvbHZlVXNlVGhlc2VDb2x1bW5zKHRoaXMudXNlVGhlc2VDb2x1bW5zKTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBjaGVjayBmb3Igc2hvd0ZvckNvbmZpcm1hdGlvblxyXG4gICAgY29uc3QgY2hlY2sgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LnNob3dGb3JDb25maXJtYXRpb24pO1xyXG4gICAgaWYgKGNoZWNrLmxlbmd0aCA9PT0gMCAmJiBpc0Rldk1vZGUoKSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcih0aGlzLm1scy50cmFucyh0aGlzLnRpdGxlKSArIFwiIGPhuqduIHThu5NuIHThuqFpIMOtdCBuaOG6pXQgMSBj4buZdCBjw7MgdGh14buZYyB0w61uaCAnc2hvd0ZvckNvbmZpcm1hdGlvbjogdHJ1ZSdcIiwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmNsaWNrR2VuZXJhdGVUZW1wbGF0ZSQucGlwZShcclxuICAgICAgICBtYXAoeCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4geDtcclxuICAgICAgICB9KSxcclxuICAgICAgICBmaWx0ZXIoeCA9PiB7XHJcbiAgICAgICAgICByZXR1cm4gISF4XHJcbiAgICAgICAgfSksXHJcbiAgICAgICAgc3dpdGNoTWFwKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgICB0aGlzLnRlbXBsYXRlRmlsZU5hbWUgPSB0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0Py5leENvZGUgKyBcIl9cIiArIHggKyBcIi54bHN4XCJcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuZ2VuZXJhdGVUZW1wbGF0ZSh0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0KVxyXG4gICAgICAgIH0pXHJcbiAgICAgICkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgaWYgKHguYm9keS5zdGF0dXNDb2RlID09PSA0MDApIHJldHVyblxyXG5cclxuICAgICAgICAgIGxldCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgIGRvd25sb2FkTGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3guYm9keV0pKVxyXG4gICAgICAgICAgZG93bmxvYWRMaW5rLnNldEF0dHJpYnV0ZShcImRvd25sb2FkXCIsIHRoaXMudGVtcGxhdGVGaWxlTmFtZSk7XHJcbiAgICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRvd25sb2FkTGluayk7XHJcbiAgICAgICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcIkRvd25sb2FkIGZhaWxlZC4gUGxlYXNlIGNvbnRhY3QgeW91ciBkZXZlbG9wZXIgdGVhbSB0byByZXNvbHZlXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfSkpXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS50bXBGaWx0ZXIkLnBpcGUoZmlsdGVyKHggPT4gISF4ICYmICEhIXRoaXMudG1wRmlsdGVyQWN0aXZlKSkuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgIHRoaXMucHJpbWFyeUZpbHRlciA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXIkLnZhbHVlKSk7XHJcbiAgICAgICAgdGhpcy5maWx0ZXIkLm5leHQoeCk7XHJcbiAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEZpbHRlciQubmV4dChudWxsKTtcclxuICAgICAgICB0aGlzLnRtcEZpbHRlckFjdGl2ZSA9IHRydWU7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLnRtcEluT3BlcmF0b3JzJC5waXBlKGZpbHRlcih4ID0+ICEheC5sZW5ndGggJiYgISEhdGhpcy50bXBJbk9wZXJhdG9yc0FjdGl2ZSkpLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLnByaW1hcnlJbk9wZXJhdG9ycyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5pbk9wZXJhdG9ycyQudmFsdWUpKTtcclxuICAgICAgICB0aGlzLmluT3BlcmF0b3JzJC5uZXh0KHgpO1xyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS50bXBJbk9wZXJhdG9ycyQubmV4dChbXSk7XHJcbiAgICAgICAgdGhpcy50bXBJbk9wZXJhdG9yc0FjdGl2ZSA9IHRydWU7XHJcbiAgICAgIH0pXHJcbiAgICApXHJcbiAgICBpZiAoISF0aGlzLm91dGVyU29ydCkge1xyXG4gICAgICB0aGlzLnNvcnQkLm5leHQodGhpcy5vdXRlclNvcnQpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMub25JbnN0YW5jZUNyZWF0ZWQuZW1pdCh0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKTtcclxuXHJcbiAgICBpZiAoISF0aGlzLmZpeGVkUGFnZVNpemUpIHtcclxuICAgICAgdGhpcy5wYWdlU2l6ZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4odGhpcy5maXhlZFBhZ2VTaXplKTtcclxuICAgICAgdGhpcy5wYWdpbmF0aW9uJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8SVBhZ2luYXRpb24+KHtcclxuICAgICAgICBza2lwOiAwLFxyXG4gICAgICAgIHRha2U6IHRoaXMuZml4ZWRQYWdlU2l6ZSxcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLnBhZ2VTaXplJCA9IG5ldyBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPihkZWZhdWx0UGFnaW5nLnRha2UpO1xyXG4gICAgICB0aGlzLnBhZ2luYXRpb24kID0gbmV3IEJlaGF2aW9yU3ViamVjdDxJUGFnaW5hdGlvbj4oe1xyXG4gICAgICAgIHNraXA6IDAsXHJcbiAgICAgICAgdGFrZTogZGVmYXVsdFBhZ2luZy50YWtlLFxyXG4gICAgICB9KTtcclxuXHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbmV3QXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2g6IHN0cmluZ1tdID0gW107XHJcbiAgICB0aGlzLmNvbHVtbnMubWFwKCh4KSA9PiB7XHJcbiAgICAgIC8vIGlmICh4LnR5cGUgPT09ICd0ZXh0JyB8fCB4LnR5cGUgPT09ICdzdHJpbmcnIHx8IHgudHlwZSA9PT0gJ2RhdGUnIHx8IHgudHlwZSA9PT0gJ2RhdGV0aW1lJykge1xyXG4gICAgICAvLyBpZiAoeC50eXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgaWYgKHgudHlwZSA9PT0gJ3RleHQnIHx8IHgudHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICBuZXdBdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaC5wdXNoKHguZmllbGQpO1xyXG4gICAgICB9XHJcbiAgICB9KTtcclxuICAgIHRoaXMuYXZhaWxhYmxlQ29sdW1uc0ZvckdlbmVyYWxTZWFyY2ggPSBuZXdBdmFpbGFibGVDb2x1bW5zRm9yR2VuZXJhbFNlYXJjaDtcclxuXHJcbiAgICBpZiAoISF0aGlzLmNsZWFyRGF0YSQpIHtcclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy5jbGVhckRhdGEkXHJcbiAgICAgICAgICAucGlwZShcclxuICAgICAgICAgICAgZmlsdGVyKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgcmV0dXJuICEheDtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICAgIClcclxuICAgICAgICAgIC5zdWJzY3JpYmUoKF8pID0+IHtcclxuICAgICAgICAgICAgdGhpcy5saXN0ID0gW107XHJcbiAgICAgICAgICAgIHRoaXMubGlzdENoYW5nZS5lbWl0KFtdKTtcclxuICAgICAgICAgICAgdGhpcy5jbGVhckRhdGEkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgICAgfSlcclxuICAgICAgKTtcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnBhZ2luYXRpb25IZWlnaHQgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtY29yZS1wYWdpbmF0aW9uLWhlaWdodCcpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIC8vIHNldCBkZWZhdWx0IHNvcnQgZGlyZWN0aW9uXHJcblxyXG4gICAgY29uc3QgbmV3U29ydDogSVNvcnRJdGVtW10gPSBbXTtcclxuICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmZpZWxkICE9PSBcImlkXCIpLm1hcCgoYykgPT4ge1xyXG4gICAgICBuZXdTb3J0LnB1c2goe1xyXG4gICAgICAgIGZpZWxkOiBjLmZpZWxkLFxyXG4gICAgICAgIHNvcnREaXJlY3Rpb246IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkUsXHJcbiAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgICAvLyBhY2NlcHQgZGVmYXVsdHNvcnQgcGFyYW1cclxuICAgIHRoaXMuc29ydCQubmV4dChuZXdTb3J0Lm1hcCh0MSA9PiAoeyAuLi50MSwgLi4udGhpcy5zb3J0JC52YWx1ZS5maW5kKHQyID0+IHQyLmZpZWxkID09PSB0MS5maWVsZCkgfSkpKTtcclxuXHJcbiAgICAvKiBTVEFSVDogTWVyZ2UgZmlsdGVyT3BlcmF0b3Igd2l0aCBvdXRlciBvbmUgKi9cclxuICAgIGlmICghIXRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMpIHtcclxuICAgICAgaWYgKHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSkge1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMub3V0ZXJGaWx0ZXJPcGVyYXRvcnMubWFwKChvZm8pID0+IHtcclxuICAgICAgICAgIGNvbnN0IGZpbHRlciA9IGN1cnJlbnRGaWx0ZXJPcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAobykgPT4gby5maWVsZCA9PT0gb2ZvLmZpZWxkICYmIG8ub3BlcmF0b3IgPT09IG9mby5vcGVyYXRvclxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIG9wdGltaXN0aWNhbGx5IGZpbHRlci5sZW5ndGggPT09IDFcclxuICAgICAgICAgIGlmIChmaWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclswXS5vcGVyYXRvciA9IG9mby5vcGVyYXRvcjtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICBjdXJyZW50RmlsdGVyT3BlcmF0b3JzLnB1c2gob2ZvKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoXCJvdXRlckZpbHRlck9wZXJhdG9ycyB3ZXJlIGludmFsaWRcIilcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dChjdXJyZW50RmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICB0aGlzLmZpbHRlck9wZXJhdG9ycyQubmV4dCh0aGlzLm91dGVyRmlsdGVyT3BlcmF0b3JzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgLyogRU5EOiBDcmVhdGUvTWVyZ2UvT3ZlcndyaXRlIGZpbHRlck9wZXJhdG9yIHdpdGggb3V0ZXIgb25lICovXHJcblxyXG4gICAgLyogU1RBUlQ6IFN1YnNjcmlwdGlvbiBmb3Igb3V0ZXJQYXJhbSQgKi9cclxuICAgIC8vIFNvbWUgc2ltcGxlIG1hc3RlciBkYXRhIGRvIG5vdCBoYXZlIG91dGVyUGFyYW0kIElNUE9SVEFOVCEhIVxyXG4gICAgaWYgKCEhdGhpcy5vdXRlclBhcmFtJCkge1xyXG4gICAgICB0aGlzLm91dGVyUGFyYW1TdWJzY3JpYmVGbigpO1xyXG4gICAgfVxyXG4gICAgLyogRU5EOiBTdWJzY3JpcHRpb24gZm9yIG91dGVyUGFyYW0kICovXHJcblxyXG4gICAgLyogU1RBUlQ6IFN1YnNjcmlwdGlvbnMgZm9yIHF1ZXJ5TGlzdFJlcXVlc3QkICovXHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMubWxzLmxhbmckLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgbGFuZzogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZXhjbHVkZWRJZHMkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgZXhjbHVkZWRJZHM6IHhcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZ2VuZXJhbFNlYXJjaCRcclxuICAgICAgICAucGlwZShkZWJvdW5jZVRpbWUoNTAwKSwgZGlzdGluY3RVbnRpbENoYW5nZWQoKSlcclxuICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgICBnZW5lcmFsU2VhcmNoOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZS5nZW5lcmFsU2VhcmNoLFxyXG4gICAgICAgICAgICAgIHNlYXJjaEZvcjogeCxcclxuICAgICAgICAgICAgICBhdmFpbGFibGVDb2x1bW5zOiB0aGlzLmF2YWlsYWJsZUNvbHVtbnNGb3JHZW5lcmFsU2VhcmNoLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZmlsdGVyJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGZpbHRlcjogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSxcclxuICAgICAgICAgIGZpbHRlck9wZXJhdG9yczogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuaW5PcGVyYXRvcnMkLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgaW5PcGVyYXRvcnM6IHgsXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgJ3RoaXMucXVlcnlMaXN0UmVxdWVzdCQgY2hhbmdlZDogJyxcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWVcclxuICAgICAgICApO1xyXG4gICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5zZWFyY2gkXHJcbiAgICAgICAgLnBpcGUoXHJcbiAgICAgICAgICBkZWJvdW5jZVRpbWUoNTAwKSxcclxuICAgICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKChwcmV2LCBjdXJyKSA9PiB7XHJcbiAgICAgICAgICAgIGxldCBjb25kaXRpb24gPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKCEhcHJldiB8fCAhIWN1cnIpIHtcclxuICAgICAgICAgICAgICBjb25kaXRpb24gPSBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGNvbmRpdGlvbjtcclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgIHNlYXJjaDogISF4Py5jdXJyZW50XHJcbiAgICAgICAgICAgICAgPyBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHg/LmN1cnJlbnQpKVxyXG4gICAgICAgICAgICAgIDogdW5kZWZpbmVkLFxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuc29ydCQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLkpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZSkpLFxyXG4gICAgICAgICAgc29ydDogSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeSh4KSksXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLnBhZ2luYXRpb24kLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQubmV4dCh7XHJcbiAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgcGFnaW5hdGlvbjogeCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSlcclxuICAgICk7XHJcblxyXG4gICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAuZmlsdGVyKCh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKVswXVxyXG4gICAgICAgIC5yZWxvYWRGbGFnJCEuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygndGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckIGlzIGJlaW5nIGNoYW5nZWQuLi4nLCB4KTtcclxuICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KHgpO1xyXG4gICAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICBmb3JjZVJlbG9hZGluZ0ZsYWc6IHgsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICB0aGlzLmN1cnJlbnRQYWdlJFxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgZGlzdGluY3RVbnRpbENoYW5nZWQoKSAvLyBJTVBPUlRBTlQhXHJcbiAgICAgICAgKVxyXG4gICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiY3VycmVudFBhZ2UgY2hhbmdlIHRvXCIsIHgpXHJcbiAgICAgICAgICB0aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLm5leHQoe1xyXG4gICAgICAgICAgICAuLi50aGlzLnF1ZXJ5TGlzdFJlcXVlc3QkLnZhbHVlLFxyXG4gICAgICAgICAgICBwYWdpbmF0aW9uOiB7XHJcbiAgICAgICAgICAgICAgLi4udGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZT8ucGFnaW5hdGlvbiEsXHJcbiAgICAgICAgICAgICAgc2tpcDogKHggLSAxKSAqIHRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWU/LnBhZ2luYXRpb24/LnRha2UhLFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgfSlcclxuICAgICAgICB9KVxyXG4gICAgKTtcclxuXHJcbiAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgdGhpcy5sb2FkaW5nJC5zdWJzY3JpYmUoeCA9PiB0aGlzLmxvYWRpbmcgPSB4KVxyXG4gICAgKVxyXG5cclxuICAgIC8qIEVORDogU3Vic2NyaXB0aW9ucyBmb3IgcXVlcnlMaXN0UmVxdWVzdCQgKi9cclxuXHJcbiAgICAvLyBRdWFuIHRy4buNbmc6IENvcmVQYWdlTGlzdCBj4bqnbiBiaeG6v3QgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW9cclxuICAgIC8vIFR1eSBuaGnDqm4gY8OzIG5oaeG7gXUgdHLGsOG7nW5nIGjhu6NwIGNoaeG7gXUgY2FvIG7DoHkga2jDtG5nIMSRxrDhu6NjIHRydXnhu4FuIHbDoG8ga2hpIHRyaeG7g24ga2hhaVxyXG4gICAgLy8gWMOpdCB0csaw4budbmcgaOG7o3AgY8OhYyBmb3JtIGRhbmggbeG7pWMgY8ahIGLhuqNuXHJcbiAgICAvLyBjb250ZW50LWNvbnRhaW5lciA9PiBjb25zdW1lIGNvbXBvbmVudCA9PiBjb3JlLXBhZ2UtbGlzdCA9PiBjb3JlLXBhZ2UtaGVhZGVyID0+IGNvcmUtY29tcG9zaXRpb24gPT4gdG9wUmVmICsgdGFibGUgKyBwYWdpbmF0aW9uXHJcbiAgICAvLyB0YSBjw7MgdGjhu4MgdMOtbmggc+G7kSBt4bq3YyDEkeG7i25oIChu4bq/dSBoZWlnaHQga2jDtG5nIMSRxrDhu6NjIHRydXnhu4FuIHbDoG8pXHJcbiAgICBpZiAodGhpcy5oZWlnaHQgPT09IHVuZGVmaW5lZCkge1xyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmxheW91dFNlcnZpY2UuY29udGVudENvbnRhaW5lckhlaWdodCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgLy8gYmFzaWNTcGFjaW5nIGzDoCBwYWRkaW5nQm90dG9tIGPhu6dhIGzhu5twIGNvbnRlbnQtY29udGFpbmVyXHJcbiAgICAgICAgICB0aGlzLmhlaWdodCA9IHggLSB0aGlzLmxheW91dFNlcnZpY2UuYmFzaWNTcGFjaW5nO1xyXG4gICAgICAgICAgdGhpcy5oZWlnaHQkLm5leHQoeCAtIHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmcpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG4gICAgfVxyXG5cclxuICB9XHJcblxyXG4gIG9uUm93RG91YmxlQ2xpY2soZXZlbnQ6IGFueSkge1xyXG4gICAgaWYgKCEhdGhpcy5zZWVrZXJNb2RlIHx8ICEhdGhpcy5tY2NNb2RlIHx8ICEhdGhpcy5kaXNhYmxlRG91YmxlQ2xpY2spIHtcclxuICAgICAgdGhpcy5yb3dEb3VibGVDbGljay5lbWl0KGV2ZW50KTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGlmICghISF0aGlzLnNlbGZSZXNvbHZlQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljaykge1xyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VFZGl0U2VydmljZS5mcm9tVXJsID0gdGhpcy5yb3V0ZXIudXJsO1xyXG4gICAgICAgIGlmICghIXRoaXMubm9ybWFsTW9kZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5oYXNJZE9mU3RyaW5nVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBidG9hKGV2ZW50LmlkKSxcclxuICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLnBhcmVudCxcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICBidG9hKGV2ZW50LmlkLnRvU3RyaW5nKCkpLFxyXG4gICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMucm91dGUucGFyZW50LFxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5oYXNJZE9mU3RyaW5nVHlwZSkge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICAgIHsgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZSB9XHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgIG91dGxldHM6IHtcclxuICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgIGJ0b2EoZXZlbnQuaWQudG9TdHJpbmcoKSksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yb3dEb3VibGVDbGljay5lbWl0KGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25Sb3dDbGljayhlOiBhbnkpOiB2b2lkIHtcclxuICAgIGNvbnNvbGUubG9nKCdDb3JQYWdlTGlzdCBvblJvd0NsaWNrIGUnLCBlKTtcclxuICAgIGlmICghIWUuaWQpIHtcclxuICAgICAgdGhpcy5vbkNoYW5nZShlLmlkKTtcclxuICAgIH0gZWxzZSBpZiAoISFlLnZpcnR1YWxJZCkge1xyXG4gICAgICB0aGlzLm9uQ2hhbmdlKGUudmlydHVhbElkKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgIFwiQm90aCAnaWQnIGFuZCAndmlydHVhbElkJyBjb2x1bW5zIGFyZSBudWxsLiBQbGVhc2UgY2hlY2sgd2h5XCIsXHJcbiAgICAgICAgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnNcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIHRoaXMucm93Q2xpY2suZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uVG9vbENsaWNrKGV2ZW50OiBJQ29yZVRhYmxlVG9vbENsaWNrRXZlbnRFbWl0dGVyRGF0YSkgeyB9XHJcblxyXG4gIG9uU2VhcmNoaW5nKGU6IElTZWFyY2hJdGVtW10pOiB2b2lkIHtcclxuICAgIGNvbnN0IHByZXYgPSAhIXRoaXMuc2VhcmNoJC52YWx1ZT8uY3VycmVudFxyXG4gICAgICA/IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkodGhpcy5zZWFyY2gkLnZhbHVlPy5jdXJyZW50KSlcclxuICAgICAgOiBudWxsO1xyXG4gICAgdGhpcy5zZWFyY2gkLm5leHQoe1xyXG4gICAgICBwcmV2aW91czogcHJldiEsXHJcbiAgICAgIGN1cnJlbnQ6IGUsXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc0ZpeGVkSGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5oZWlnaHQ7XHJcbiAgICBjb25zdCBwYWdpbmF0aW9uSGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtcGFnaW5hdGlvbi1oZWlnaHQnKVxyXG4gICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgKTtcclxuICAgIGNvbnN0IHRhYmxlQm9yZGVyVG9wID0gTnVtYmVyKFxyXG4gICAgICBnZXRDb21wdXRlZFN0eWxlKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudClcclxuICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1zaXplLWNvcmUtdGFibGUtYm9yZGVyLXRvcCcpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIGNvbnN0IGJsb2NrQ2VsbFNwYWNpbmcgPSBOdW1iZXIoXHJcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KVxyXG4gICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLXNpemUtbGF5b3V0LWJsb2NrLWNlbGwtc3BhY2luZycpXHJcbiAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICApO1xyXG5cclxuICAgIHRoaXMuY29yZVBhZ2VMaXN0Q29udGFpbmVyLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICctLWhlaWdodCcsXHJcbiAgICAgIGNvbnRhaW5lckhlaWdodCArICdweCdcclxuICAgICk7XHJcbiAgICBjb25zdCByZWxhdGVkVGFibGVGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICk7XHJcbiAgICBpZiAoISFyZWxhdGVkVGFibGVGaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgIGNvbnN0IHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRUYWJsZUZpbHRlclswXS5jb3JlVGFibGVSZWY7XHJcbiAgICAgIGlmICghIXJlbGF0ZWRUYWJsZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBGT1VORCEhIScpO1xyXG4gICAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZUhlaWdodCA9XHJcbiAgICAgICAgICBjb250YWluZXJIZWlnaHQgLVxyXG4gICAgICAgICAgcGFnaW5hdGlvbkhlaWdodCAtXHJcbiAgICAgICAgICB0YWJsZUJvcmRlclRvcCAtXHJcbiAgICAgICAgICAyICogYmxvY2tDZWxsU3BhY2luZyAqIDAgLyogcGFkZGluZyBpbmNsdWVkIGluIG9iamVjdCBpdHNlbGYgKi8gLVxyXG4gICAgICAgICAgKHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgfHwgMCk7XHJcbiAgICAgICAgcmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQuc3R5bGUuc2V0UHJvcGVydHkoXHJcbiAgICAgICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICAgICAgZmVhdHVyZUhlaWdodCArICdweCdcclxuICAgICAgICApO1xyXG5cclxuICAgICAgICBjb25zdCBmaXJzdEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgIGdldENvbXB1dGVkU3R5bGUocmVsYXRlZFRhYmxlLm5hdGl2ZUVsZW1lbnQpXHJcbiAgICAgICAgICAgIC5nZXRQcm9wZXJ0eVZhbHVlKCctLWhlYWRlci0xc3Qtcm93LWhlaWdodCcpXHJcbiAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3Qgc2Vjb25kSGVhZGVyUm93SGVpZ2h0ID0gTnVtYmVyKFxyXG4gICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgLmdldFByb3BlcnR5VmFsdWUoJy0taGVhZGVyLTJuZC1yb3ctaGVpZ2h0JylcclxuICAgICAgICAgICAgLnJlcGxhY2UoJ3B4JywgJycpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgY29uc3QgZmVhdHVyZVRib2R5SGVpZ2h0ID1cclxuICAgICAgICAgIGZlYXR1cmVIZWlnaHQgLSBmaXJzdEhlYWRlclJvd0hlaWdodCAtIHNlY29uZEhlYWRlclJvd0hlaWdodDtcclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coJ2ZlYXR1cmVUYm9keUhlaWdodCcsIGZlYXR1cmVUYm9keUhlaWdodCk7XHJcblxyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VMaXN0U2VydmljZS5pbnN0YW5jZXNcclxuICAgICAgICAgIC5maWx0ZXIoXHJcbiAgICAgICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgICApWzBdXHJcbiAgICAgICAgICAudGJvZHlIZWlnaHQkLm5leHQoZmVhdHVyZVRib2R5SGVpZ2h0KTtcclxuICAgICAgICAvL30pO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUuZXJyb3IoJ1JlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIHdhcyB1bmRlZmluZWQnKTtcclxuICAgICAgfVxyXG5cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ05vIHJlbGF0ZWQgQ29yZVRhYmxlQ29tcG9uZW50UmVmIGZvdW5kJyk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHJlc2l6ZUhlaWdodFdoZW5Db250YWluZXJIYXNVbmRlZmluZWRIZWlnaHQoKTogdm9pZCB7XHJcblxyXG4gICAgY29uc3QgY29udGFpbmVySGVpZ2h0ID0gdGhpcy5sYXlvdXRTZXJ2aWNlLmNvbnRlbnRDb250YWluZXJIZWlnaHQkLnZhbHVlO1xyXG4gICAgY29uc3QgcGFnZUhlYWRlckhlaWdodCA9IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodDtcclxuICAgIGNvbnN0IHBhZ2luYXRpb25IZWlnaHQgPSB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQ7XHJcbiAgICBjb25zdCB0YWJsZUJvcmRlclRvcCA9IHRoaXMubGF5b3V0U2VydmljZS50YWJsZUJvcmRlclRvcDtcclxuICAgIGNvbnN0IGJhc2ljU3BhY2luZyA9IHRoaXMubGF5b3V0U2VydmljZS5iYXNpY1NwYWNpbmc7XHJcblxyXG4gICAgdGhpcy5jb3JlUGFnZUxpc3RDb250YWluZXIubmF0aXZlRWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eShcclxuICAgICAgJy0taGVpZ2h0JyxcclxuICAgICAgY29udGFpbmVySGVpZ2h0IC0gMiAqIGJhc2ljU3BhY2luZyArICdweCdcclxuICAgICk7XHJcbiAgICBjb25zdCByZWxhdGVkVGFibGVGaWx0ZXIgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzLmZpbHRlcihcclxuICAgICAgKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcclxuICAgICk7XHJcbiAgICBpZiAoISFyZWxhdGVkVGFibGVGaWx0ZXIubGVuZ3RoKSB7XHJcblxyXG4gICAgICBpZiAoISF0aGlzLmF1dG9SZXNpemVXaXRoV2luZG93KSB7XHJcblxyXG4gICAgICAgIGNvbnN0IHJlbGF0ZWRUYWJsZSA9IHJlbGF0ZWRUYWJsZUZpbHRlclswXS5jb3JlVGFibGVSZWY7XHJcbiAgICAgICAgaWYgKCEhcmVsYXRlZFRhYmxlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnUmVsYXRlZCBDb3JlVGFibGVDb21wb25lbnRSZWYgRk9VTkQhISEnKTtcclxuICAgICAgICAgIC8vc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBjb25zdCBmZWF0dXJlSGVpZ2h0ID1cclxuICAgICAgICAgICAgY29udGFpbmVySGVpZ2h0IC1cclxuICAgICAgICAgICAgcGFnZUhlYWRlckhlaWdodCAtXHJcbiAgICAgICAgICAgIHBhZ2luYXRpb25IZWlnaHQgLVxyXG4gICAgICAgICAgICB0YWJsZUJvcmRlclRvcCAtXHJcbiAgICAgICAgICAgIDIgKiBiYXNpY1NwYWNpbmcgLVxyXG4gICAgICAgICAgICAodGhpcy5leHRyYU1hbnVhbE9mZnNldCB8fCAwKTtcclxuICAgICAgICAgIHJlbGF0ZWRUYWJsZS5uYXRpdmVFbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KFxyXG4gICAgICAgICAgICAnLS1oZWlnaHQnLFxyXG4gICAgICAgICAgICBmZWF0dXJlSGVpZ2h0ICsgJ3B4J1xyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmaXJzdEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMXN0LXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGNvbnN0IHNlY29uZEhlYWRlclJvd0hlaWdodCA9IE51bWJlcihcclxuICAgICAgICAgICAgZ2V0Q29tcHV0ZWRTdHlsZShyZWxhdGVkVGFibGUubmF0aXZlRWxlbWVudClcclxuICAgICAgICAgICAgICAuZ2V0UHJvcGVydHlWYWx1ZSgnLS1oZWFkZXItMm5kLXJvdy1oZWlnaHQnKVxyXG4gICAgICAgICAgICAgIC5yZXBsYWNlKCdweCcsICcnKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICBjb25zdCBmZWF0dXJlVGJvZHlIZWlnaHQgPVxyXG4gICAgICAgICAgICBmZWF0dXJlSGVpZ2h0IC0gZmlyc3RIZWFkZXJSb3dIZWlnaHQgLSBzZWNvbmRIZWFkZXJSb3dIZWlnaHQ7XHJcblxyXG4gICAgICAgICAgY29uc29sZS5sb2coJ2ZlYXR1cmVUYm9keUhlaWdodCcsIGZlYXR1cmVUYm9keUhlaWdodCk7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgICAgICAuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICh4KSA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyXHJcbiAgICAgICAgICAgIClbMF1cclxuICAgICAgICAgICAgLnRib2R5SGVpZ2h0JC5uZXh0KGZlYXR1cmVUYm9keUhlaWdodCk7XHJcbiAgICAgICAgICAvL30pO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBjb25zb2xlLmVycm9yKCdSZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiB3YXMgdW5kZWZpbmVkJyk7XHJcbiAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgIH1cclxuXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLmVycm9yKCdObyByZWxhdGVkIENvcmVUYWJsZUNvbXBvbmVudFJlZiBmb3VuZCcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZXNpemVIZWlnaHQkKCk6IE9ic2VydmFibGU8YW55PiB7XHJcbiAgICByZXR1cm4gbmV3IE9ic2VydmFibGUob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICB0aGlzLmhlaWdodFJlc2l6aW5nID0gdHJ1ZTtcclxuICAgICAgdGhpcy5yZXNpemVIZWlnaHQoKTtcclxuICAgICAgdGhpcy5oZWlnaHRSZXNpemluZyA9IGZhbHNlO1xyXG4gICAgICBvYnNlcnZlci5uZXh0KG5ldyBEYXRlKCkuZ2V0VGltZSgpKVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVzaXplSGVpZ2h0KCk6IHZvaWQge1xyXG4gICAgaWYgKCEhIXRoaXMuc2Vla2VyTW9kZSkge1xyXG4gICAgICAvKiAjc3RhcnQgRURJVElORyBDT0RFIEJMT0NLIEJFTExPVyBPTkxZIElGIFlPVSBLTk9XIEFMTCBUSEUgQVBQIERFU0lHTiBGTE9XUyAqL1xyXG4gICAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xyXG4gICAgICBpZiAoISF0aGlzLmhlaWdodCkge1xyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0V2hlbkNvbnRhaW5lckhhc0ZpeGVkSGVpZ2h0KCk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRXaGVuQ29udGFpbmVySGFzVW5kZWZpbmVkSGVpZ2h0KCk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIHRvIGRvIHNtdGggbWF5YmVcclxuICAgIH1cclxuICAgIC8qICNlbmQgRURJVElORyBDT0RFIEJMT0NLIEJFTExPVyBPTkxZIElGIFlPVSBLTk9XIEFMTCBUSEUgQVBQIERFU0lHTiBGTE9XUyAqL1xyXG4gIH1cclxuXHJcbiAgcXVlcnlMaXN0U3Vic2NyaWJlKCk6IHZvaWQge1xyXG4gICAgaWYgKCEhIXRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uICYmICEhdGhpcy5xdWVyeUxpc3RTdHJlYW0kKSB7XHJcbiAgICAgIHRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uID0gdGhpcy5xdWVyeUxpc3RTdHJlYW0kLnN1YnNjcmliZSh4ID0+IHRoaXMuc3Vic2NyaWJlUXVlcnlMaXN0KHgpKVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsY3VsYXRlVGFibGVIZWlnaHRCYXNlZE9uSGVpZ2h0QW5kVG9wUmVmSGVpZ2h0KGhlaWdodDogbnVtYmVyLCB0b3BSZWZIZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG4gICAgaWYgKGhlaWdodCA9PT0gdW5kZWZpbmVkIHx8IHRvcFJlZkhlaWdodCA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcbiAgICB0aGlzLmNvbXBvc2l0aW9uSGVpZ2h0ID0gaGVpZ2h0IC0gKCEhdGhpcy5oaWRlSGVhZGVyID8gMCA6IHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCk7XHJcbiAgICAvLyAoIXRvcFJlZkhlaWdodCA/IDE1IDogMCkgPT4gTuG6v3UgY8OzIHBo4bqnbiBUb3Agc+G6vSBjw7MgdGjDqm0gbWFyZ2luQm90dG9tIDE1cHggY+G7p2EgbsOzLlxyXG4gICAgaWYgKCF0aGlzLnRhYk1vZGUpIHtcclxuICAgICAgdGhpcy50YWJsZUhlaWdodCA9IGhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCAtIHRvcFJlZkhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnaW5hdGlvbkhlaWdodCAtICghIXRvcFJlZkhlaWdodCA/IDE1IDogMCkgIC8vIDE1cHggaXMgbWFyZ2luQm90dG9tIG9mIHRvcFJlZlxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy50YWJsZUhlaWdodCA9IGhlaWdodCAtIHRoaXMubGF5b3V0U2VydmljZS5jb3JlUGFnZUhlYWRlckhlaWdodCAtICg0NSkgLSB0aGlzLmxheW91dFNlcnZpY2UuY29yZVBhZ2luYXRpb25IZWlnaHQgLy8gPGNvcmUtdGFicyBbaGVpZ2h0XT1cIjU1XCIuLi4+XHJcbiAgICB9XHJcblxyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xyXG4gICAgLyoqIFNUQVJUIHNldFRpbWVvdXQgKi9cclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG5cclxuICAgICAgdGhpcy5oZWlnaHQkLm5leHQodGhpcy5oZWlnaHQpO1xyXG5cclxuICAgICAgdGhpcy5maWx0ZXJLaXRaSW5kZXggPSB0aGlzLmRvbVNlcnZpY2UuZ2V0TWF4WkluZGV4KCkgKyAxO1xyXG5cclxuICAgICAgY29uc3QgdHJ5RmluZCA9IHRoaXMuY29yZUJ1dHRvbkdyb3VwU2VydmljZS5pbnN0YW5jZXMuZmlsdGVyKHggPT4geC5pbnN0YW5jZU51bWJlciA9PT0gdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcik7XHJcbiAgICAgIGlmICghIXRyeUZpbmQubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5idXR0b25Hcm91cFN0YXR1cyA9IHRyeUZpbmRbMF07XHJcbiAgICAgICAgY29uc3QgZXhpc3RpbmdIaWRkZW5JdGVtcyA9IHRoaXMuYnV0dG9uR3JvdXBTdGF0dXMubXVzdEJlSGlkZGVuJC52YWx1ZVxyXG4gICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXMubXVzdEJlSGlkZGVuJC5uZXh0KFtcclxuICAgICAgICAgIC4uLmV4aXN0aW5nSGlkZGVuSXRlbXMsXHJcbiAgICAgICAgICAuLi5FTVBUWV9TRUxFQ1RJT05fSElEREVOX0JVVFRPTlxyXG4gICAgICAgIF0pXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKGlzRGV2TW9kZSgpICYmICEoIXRoaXMuc2Vla2VyTW9kZSB8fCAhdGhpcy5oaWRlQnV0dG9uR3JvdXApKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKFwiS2jDtG5nIHTDrG0gdGjhuqV5IGluc3RhbmNlIG51bWJlciBj4bunYSBi4buZIG7DunQgxJFp4buBdSBraGnhu4NuXCIsIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKCEhdGhpcy50YWJNb2RlICYmICEhdGhpcy5zdGF0dXNPcHRpb25zQXBpKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLm1scy5sYW5nJC5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgICAgICAgIHRoaXMuYXBwU2VydmljZS5nZXQodGhpcy5zdGF0dXNPcHRpb25zQXBpICsgJz9sYW5nPScgKyB4KS5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDAgJiYgeC5ib2R5Py5zdGF0dXNDb2RlID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGNvdW50U3RhdGU6IHsgaWQ6IG51bWJlciB8IG51bGwsIGNvdW50OiBudW1iZXIgfVtdID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuc3RhdHVzVGFicy5mb3JFYWNoKGkgPT4gY291bnRTdGF0ZS5wdXNoKHsgaWQ6IGkuaWQsIGNvdW50OiBpLmNvdW50IH0pKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5zdGF0dXNUYWJzLmNsZWFyKCk7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMudGFiSGVhZGVycyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICBib2R5LmlubmVyQm9keS5mb3JFYWNoKChtOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50Q291bnRGaWx0ZXIgPSBjb3VudFN0YXRlLmZpbHRlcihvID0+IG8uaWQgPT09IG0uaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRDb3VudCA9ICEhY3VycmVudENvdW50RmlsdGVyLmxlbmd0aCA/IGN1cnJlbnRDb3VudEZpbHRlclswXS5jb3VudCA6IDBcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnN0YXR1c1RhYnMuc2V0KGluZGV4LCB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZDogbS5pZCxcclxuICAgICAgICAgICAgICAgICAgICAgIGludGxDb2RlOiBtLk5hbWVJbnRsQ29kZSxcclxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IG0udGV4dCxcclxuICAgICAgICAgICAgICAgICAgICAgIGNvdW50OiBjdXJyZW50Q291bnRcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMudGFiSGVhZGVycy5wdXNoKGAke20udGV4dH0gKCR7Y3VycmVudENvdW50fSlgKTtcclxuICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IGNvbXBvc2l0aW9uRmlsdGVyID0gdGhpcy5jb3JlQ29tcG9zaXRpb25TZXJ2aWNlLmluc3RhbmNlcy5maWx0ZXIoeCA9PiB4Lmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyKTtcclxuICAgICAgaWYgKCEhY29tcG9zaXRpb25GaWx0ZXIubGVuZ3RoKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICBjb21wb3NpdGlvbkZpbHRlclswXS50b3BSZWYkLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgICAgdGhpcy50b3BQbGFjZUhlaWdodCQubmV4dCh4Lm5hdGl2ZUVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApXHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICghdGhpcy5kaXNhYmxlRmlsdGVySHViKSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLmNvcmVGaWx0ZXJIdWJTZXJ2aWNlLm9wZW4kLnN1YnNjcmliZSh4ID0+IHRoaXMuc2hvd0ZpbHRlciA9IHgpXHJcbiAgICAgICAgKVxyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmxvbmdUYXNrU2VydmljZS5sb25nQXBpUnVubmluZyQuc3Vic2NyaWJlKHggPT4gdGhpcy5sb25nQXBpUnVubmluZyA9IHgpXHJcbiAgICAgIClcclxuXHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICB0aGlzLmhlaWdodCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVUYWJsZUhlaWdodEJhc2VkT25IZWlnaHRBbmRUb3BSZWZIZWlnaHQoeCwgdGhpcy50b3BQbGFjZUhlaWdodCQudmFsdWUpXHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgdGhpcy50b3BQbGFjZUhlaWdodCQuc3Vic2NyaWJlKHggPT4ge1xyXG4gICAgICAgICAgdGhpcy5jYWxjdWxhdGVUYWJsZUhlaWdodEJhc2VkT25IZWlnaHRBbmRUb3BSZWZIZWlnaHQodGhpcy5oZWlnaHQkLnZhbHVlLCB4KVxyXG4gICAgICAgIH0pXHJcbiAgICAgIClcclxuXHJcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQucGlwZShcclxuICAgICAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICAgICAgdGhpcy5nZW9tZXRyaWNEb25lID0gZmFsc2U7XHJcbiAgICAgICAgICAgIHJldHVybiB0aGlzLnJlc2l6ZUhlaWdodCQoKVxyXG4gICAgICAgICAgfSlcclxuICAgICAgICApLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwicmVzaXplSGVpZ2h0RmxhZyQgc3dpdGNoTWFwIGZpbmFsIHZhbHVlXCIsIHgpXHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5oZWlnaHRSZXNpemluZykgdGhpcy5nZW9tZXRyaWNEb25lID0gdHJ1ZTtcclxuICAgICAgICB9KVxyXG5cclxuICAgICAgKVxyXG4gICAgICAvLyB0aGlzLmNhbGN1bGF0ZVRhYmxlSGVpZ2h0KCk7XHJcblxyXG4gICAgICBpZiAoISF0aGlzLnNob3dQYXJhbUtpdCkge1xyXG4gICAgICAgIC8vIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgIC8vIGNhbGN1bGF0aW5nIG9mZnNldCBvZiB0aGUgdG9wXHJcbiAgICAgICAgY29uc3QgdHJ5RmluZENvcmVIZWFkZXJQYXJhbXNFbGVtZW50ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChcclxuICAgICAgICAgICcuY29yZS1oZWFkZXItcGFyYW1zLWNvbnRhaW5lcidcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChBcnJheS5mcm9tKHRyeUZpbmRDb3JlSGVhZGVyUGFyYW1zRWxlbWVudCkubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBjb25zdCBpdGVtID0gQXJyYXkuZnJvbSh0cnlGaW5kQ29yZUhlYWRlclBhcmFtc0VsZW1lbnQpWzBdO1xyXG4gICAgICAgICAgY29uc3QgcmVjdCA9IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7XHJcbiAgICAgICAgICB0aGlzLmV4dHJhTWFudWFsT2Zmc2V0ID0gcmVjdC5oZWlnaHQgKyAxNTsgLy8gbWIxNSBpcyBtYXJnaW4tYm90dG9tIDE1cHggb2YgZm9ybSByb3dcclxuXHJcbiAgICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSk7XHJcblxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBpZiAoISEhdGhpcy5leHRyYU1hbnVhbE9mZnNldCkgdGhpcy5leHRyYU1hbnVhbE9mZnNldCA9IDA7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLnJlc2l6ZUhlaWdodEZsYWckLm5leHQoISEhdGhpcy5yZXNpemVIZWlnaHRGbGFnJC52YWx1ZSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgaWYgKCEhIXRoaXMuZXh0cmFNYW51YWxPZmZzZXQpIHRoaXMuZXh0cmFNYW51YWxPZmZzZXQgPSAwO1xyXG4gICAgICAgIHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgdHJ5RmlsdGVyID0gdGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmluc3RhbmNlc1xyXG4gICAgICAgIC5maWx0ZXIoKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpO1xyXG4gICAgICBpZiAoISEhdHJ5RmlsdGVyLmxlbmd0aCkge1xyXG4gICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoYENvcmVQYWdlTGlzdCBpbnN0YW5jZXMgZG8gbm90IGluY2x1ZGUgbnVtYmVyICR7dGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlcn1gLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICB9XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2VzXHJcbiAgICAgICAgICAgIC5maWx0ZXIoKHgpID0+IHguaW5zdGFuY2VOdW1iZXIgPT09IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIpWzBdXHJcbiAgICAgICAgICAgIC5pZCQucGlwZShcclxuICAgICAgICAgICAgICBmaWx0ZXIoXyA9PiAhISF0aGlzLmlkU3RhdGUpXHJcbiAgICAgICAgICAgICkuc3Vic2NyaWJlKCh4OiBhbnkpID0+IHtcclxuXHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ2NvcmVQYWdlTGlzdFNlcnZpY2UuaW5zdGFuY2UgaWQkIGhhcyBjaGFuZ2VkLCB4ID0gJywgeCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5uZXh0KHtcclxuICAgICAgICAgICAgICAgIC4uLnRoaXMucXVlcnlMaXN0UmVxdWVzdCQudmFsdWUsXHJcbiAgICAgICAgICAgICAgICBpZDogeCxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfSlcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gb3V0ZXItcHVzaFxyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5kaWFsb2dDb25maXJtZWQkLnBpcGUoXHJcbiAgICAgICAgICBmaWx0ZXIoaSA9PiAhISF0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSAmJiAhIWk/LmNvbmZpcm1lZCAmJiBpLmluc3RhbmNlTnVtYmVyID09PSB0aGlzLmRpYWxvZ0luc3RhbmNlTnVtYmVyKVxyXG4gICAgICAgICkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UucmVzZXRTZXJ2aWNlKClcclxuXHJcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMucGVuZGluZ0FjdGlvbikge1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVVBMT0FEOlxyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKFwiTm93IHVwbG9hZGluZy4uLiBcIiwgdGhpcy5kYXRhSW1wb3J0KTtcclxuICAgICAgICAgICAgICAvLyB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaCggLy8gbWlkZGVtLXB1c2hcclxuICAgICAgICAgICAgICAvLyApXHJcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RFTEVURTpcclxuICAgICAgICAgICAgICBjb25zdCBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyUmVxdWVzdDogSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgc3lzRnVuY3Rpb25Db2RlOiB0aGlzLnJvdXRpbmdTZXJ2aWNlLmN1cnJlbnRGdW5jdGlvbiQudmFsdWU/LmNvZGUhLFxyXG4gICAgICAgICAgICAgICAgc3lzQWN0aW9uQ29kZTogRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEUsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmU6IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWREYXRhKSxcclxuICAgICAgICAgICAgICAgIGFmdGVyOiAnXCJcIicsXHJcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8udXNlck5hbWUhXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0OiBJSWRzUmVxdWVzdCA9IHtcclxuICAgICAgICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICAgICAgICAgIHN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0XHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgLmRlbGV0ZUlkcyhyZXF1ZXN0LCB0aGlzLmNydWQuZGVsZXRlSWRzISlcclxuICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICEhIXRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC52YWx1ZVxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDQwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9IG51bGw7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BQ1RJVkFURTpcclxuICAgICAgICAgICAgICBjb25zdCBhY3RpdmF0ZVJlcXVlc3Q6IElUb2dnbGVBY3RpdmVJZHNSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgdmFsdWVUb0JpbmQ6IHRydWUsXHJcbiAgICAgICAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAoISF0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcywgYWN0aXZhdGVSZXF1ZXN0KVxyXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoKHgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChib2R5LnN0YXR1c0NvZGUgPT09IDIwMCB8fCB4LmJvZHkuc3RhdHVzQ29kZSA9PSAnMjAwJykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9yY2VSZWxvYWRpbmdGbGFnJC5uZXh0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBhY3RpdmF0ZVJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4odGhpcy5tbHMudHJhbnMoRW51bVRyYW5zbGF0ZUtleS5OT19BUElfRU5EX1BPSU5UX1BST1ZJREVEX0ZPUl9BQ1RJVkFUSU9OKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfSU5BQ1RJVkFURTpcclxuICAgICAgICAgICAgICBjb25zdCBpbmFjdGl2YXRlUmVxdWVzdDogSVRvZ2dsZUFjdGl2ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICB2YWx1ZVRvQmluZDogZmFsc2UsXHJcbiAgICAgICAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICBpZiAoISF0aGlzLmNydWQudG9nZ2xlQWN0aXZlSWRzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFjdGl2ZUlkcywgaW5hY3RpdmF0ZVJlcXVlc3QpXHJcbiAgICAgICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBib2R5OiBJRm9ybWF0ZWRSZXNwb25zZSA9IHguYm9keTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAhISF0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQudmFsdWVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGluYWN0aXZhdGVSZXF1ZXN0LmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS53YXJuKHRoaXMubWxzLnRyYW5zKEVudW1UcmFuc2xhdGVLZXkuTk9fQVBJX0VORF9QT0lOVF9QUk9WSURFRF9GT1JfQUNUSVZBVElPTiksIG5vbmVBdXRvQ2xvc2VkQWxlcnRPcHRpb25zKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRTpcclxuICAgICAgICAgICAgICBjb25zdCBzeXNNdXRhdGlvbkxvZ0JlZm9yZUFmdGVyU2VuZFVuYXBwcm92ZTogSVN5c011dGF0aW9uTG9nQmVmb3JlQWZ0ZXJSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICAgICAgc3lzRnVuY3Rpb25Db2RlOiB0aGlzLnJvdXRpbmdTZXJ2aWNlLmN1cnJlbnRGdW5jdGlvbiQudmFsdWU/LmNvZGUhLFxyXG4gICAgICAgICAgICAgICAgc3lzQWN0aW9uQ29kZTogRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkUsXHJcbiAgICAgICAgICAgICAgICBiZWZvcmU6IEpTT04uc3RyaW5naWZ5KHRoaXMuc2VsZWN0ZWREYXRhKSxcclxuICAgICAgICAgICAgICAgIGFmdGVyOiAnXCJcIicsXHJcbiAgICAgICAgICAgICAgICB1c2VybmFtZTogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8udXNlck5hbWUhXHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzZW5kUmVxdWVzdDogSVRvbmdsZVVuQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICAgICAgICByZWFzb246IHRoaXMuZGlhbG9nU2VydmljZS5yZWFzb24kLnZhbHVlLFxyXG4gICAgICAgICAgICAgICAgaWRzOiB0aGlzLnNlbGVjdGVkSWRzIGFzIG51bWJlcltdLFxyXG4gICAgICAgICAgICAgICAgdmFsdWVUb0JpbmQ6IGZhbHNlXHJcbiAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2VcclxuICAgICAgICAgICAgICAgICAgLnBvc3QodGhpcy5jcnVkLnRvZ2dsZVVuYXBwcm92ZUlkcyEsIHNlbmRSZXF1ZXN0KVxyXG4gICAgICAgICAgICAgICAgICAuc3Vic2NyaWJlKCh4KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBpZiAoYm9keS5zdGF0dXNDb2RlID09PSAyMDAgfHwgeC5ib2R5LnN0YXR1c0NvZGUgPT0gJzIwMCcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLm5leHQoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gbnVsbDtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KVxyXG4gICAgICApXHJcblxyXG5cclxuICAgICAgaWYgKHRoaXMuYXV0b1Jlc2l6ZVdpdGhXaW5kb3cpIHtcclxuICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgIHRoaXMucmVzaXplU3RyZWFtJC5waXBlKGRlYm91bmNlVGltZSgyMDApKS5zdWJzY3JpYmUoKF86IGFueSkgPT4ge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yZXNpemVIZWlnaHRGbGFnJC5uZXh0KCEhIXRoaXMucmVzaXplSGVpZ2h0RmxhZyQudmFsdWUpO1xyXG5cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9zZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgLyogU1RBUlQ6IFN1YnNjcmlwdGlvbiBmb3IgbGlzdCAqL1xyXG5cclxuICAgICAgdGhpcy5xdWVyeUxpc3RTdHJlYW0kID0gdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC5waXBlKFxyXG4gICAgICAgIG1hcCh4ID0+IHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWFwIHggPT4gXCIsIHgpXHJcbiAgICAgICAgICBjb25zdCBmaWx0ZXIxQ29uZGl0aW9uID0gISF4ICYmIC8qISF4LnNvcnQgJiYgKi8gISF4LnBhZ2luYXRpb25cclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwibWFwIGZpbHRlcjFDb25kaXRpb24gPT4gXCIsIGZpbHRlcjFDb25kaXRpb24pXHJcbiAgICAgICAgICByZXR1cm4geFxyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIGZpbHRlcigoeDogSVF1ZXJ5TGlzdFJlcXVlc3QpID0+ICEheCAmJiAvKiEheC5zb3J0ICYmICovICEheC5wYWdpbmF0aW9uKSxcclxuICAgICAgICBmaWx0ZXIoKF8pID0+ICF0aGlzLnBhdXNlU3Vic2N0aXB0aW9uKSxcclxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgocHJldiwgY3VycikgPT4ge1xyXG5cclxuICAgICAgICAgIC8qIFNUQVJUOiBBc3NpbWlsYXRpb24gbnVsbCBhbmQgbm90LWV4aXN0aW5nIHByb3BlcnR5ICovXHJcbiAgICAgICAgICAvKlxyXG4gICAgICAgICAgICAgICAgbGFuZzogc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgZ2VuZXJhbFNlYXJjaD86IElHZW5lcmFsU2VhcmNoO1xyXG4gICAgICAgICAgICAgICAgc29ydD86IElTb3J0SXRlbVtdO1xyXG4gICAgICAgICAgICAgICAgcGFnaW5hdGlvbj86IElQYWdpbmF0aW9uO1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyPzogYW55O1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyT3BlcmF0b3JzPzogSUZpbHRlck9wZXJhdG9yW107XHJcbiAgICAgICAgICAgICAgICBpbk9wZXJhdG9ycz86IElJbk9wZXJhdG9yW107XHJcbiAgICAgICAgICAgICAgICBzZWFyY2g/OiBJU2VhcmNoSXRlbVtdO1xyXG4gICAgICAgICAgICAgICAgaWQ/OiBudW1iZXIgfCBzdHJpbmcgfCBudWxsLFxyXG4gICAgICAgICAgICAgICAgZm9yY2VSZWxvYWRpbmdGbGFnPzogYm9vbGVhbjtcclxuICAgICAgICAgICAgKi9cclxuXHJcbiAgICAgICAgICAvL2dlbmVyYWxTZWFyY2hcclxuICAgICAgICAgIGlmICghISFwcmV2LmdlbmVyYWxTZWFyY2g/LnNlYXJjaEZvcikgcHJldi5nZW5lcmFsU2VhcmNoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgaWYgKCEhIWN1cnIuZ2VuZXJhbFNlYXJjaD8uc2VhcmNoRm9yKSBjdXJyLmdlbmVyYWxTZWFyY2ggPSB1bmRlZmluZWQ7XHJcblxyXG4gICAgICAgICAgLy8gc29ydFxyXG4gICAgICAgICAgaWYgKCEhcHJldi5zb3J0KSB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2LnNvcnQubGVuZ3RoID09PSAwKSBwcmV2LnNvcnQgPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBpZiAoISFjdXJyLnNvcnQpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnIuc29ydC5sZW5ndGggPT09IDApIGN1cnIuc29ydCA9IHVuZGVmaW5lZDtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBzZWFyY2hcclxuICAgICAgICAgIGlmICghIXByZXYuc2VhcmNoKSB7XHJcbiAgICAgICAgICAgIGlmIChwcmV2LnNlYXJjaC5sZW5ndGggPT09IDApIHByZXYuc2VhcmNoID0gdW5kZWZpbmVkO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgaWYgKCEhY3Vyci5zZWFyY2gpIHtcclxuICAgICAgICAgICAgaWYgKGN1cnIuc2VhcmNoLmxlbmd0aCA9PT0gMCkgY3Vyci5zZWFyY2ggPSB1bmRlZmluZWQ7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gaWRcclxuICAgICAgICAgIGlmICghISFwcmV2LmlkKSBwcmV2LmlkID0gbnVsbDtcclxuICAgICAgICAgIGlmICghISFjdXJyLmlkKSBjdXJyLmlkID0gbnVsbDtcclxuXHJcbiAgICAgICAgICAvKiBFTkQ6IEFzc2ltaWxhdGlvbiBudWxsIGFuZCBub3QtZXhpc3RpbmcgcHJvcGVydHkgKi9cclxuXHJcbiAgICAgICAgICBjb25zdCBjb25kaXRpb24gPSBKU09OLnN0cmluZ2lmeShwcmV2KSA9PT0gSlNPTi5zdHJpbmdpZnkoY3Vycik7XHJcblxyXG4gICAgICAgICAgaWYgKCEhIWNvbmRpdGlvbikge1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwKCdDT01QQVJJU09OJyk7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdwcmV2JywgcHJldik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjdXJyJywgY3Vycik7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdjb25kaXRpb24nLCBjb25kaXRpb24pO1xyXG4gICAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gY29uZGl0aW9uO1xyXG4gICAgICAgIH0pLFxyXG4gICAgICAgIC8qXHJcbiAgICAgICAgICAvKiBTVEFSVDogdXNlIHN3aXRjaE1hcCBmb3IgY2FuY2VsbGF0aW9uXHJcbiAgICAgICAgICAqL1xyXG4gICAgICAgIHN3aXRjaE1hcCgoeCkgPT4ge1xyXG4gICAgICAgICAgY29uc29sZS5ncm91cCgnc3dpdGNoTWFwIHRyaWdnZXJlZCcpO1xyXG4gICAgICAgICAgY29uc29sZS5sb2coXCJ4LmlkID0gXCIsIHguaWQpXHJcbiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7XHJcbiAgICAgICAgICB0aGlzLmxvYWRpbmcgPSB0cnVlO1xyXG4gICAgICAgICAgY29uc3QgdXJsID0gdGhpcy5hcGlEZWZpbml0aW9uLnF1ZXJ5TGlzdFJlbGF0aXZlUGF0aCArIFwiP2NvbXB1dGluZ1dpdGhMb2NhbFRpbWVab25lPXRydWVcIjtcclxuICAgICAgICAgIHJldHVybiB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UucXVlcnlMaXN0KHgsIHVybCk7XHJcbiAgICAgICAgfSlcclxuICAgICAgICAvKlxyXG4gICAgICAgIC8qIEVORDogdXNlIHN3aXRjaE1hcCBmb3IgY2FuY2VsbGF0aW9uXHJcbiAgICAgICAgKi9cclxuICAgICAgKTtcclxuXHJcbiAgICAgIHRoaXMucXVlcnlMaXN0U3Vic2NyaWJlKCk7XHJcblxyXG4gICAgICAvKiBFTkQ6IFN1YnNjcmlwdGlvbiBmb3IgbGlzdCAqL1xyXG4gICAgICAvL30pO1xyXG4gICAgfSlcclxuXHJcbiAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMucmVzaXplSGVpZ2h0RmxhZyQubmV4dCghISF0aGlzLnJlc2l6ZUhlaWdodEZsYWckLnZhbHVlKSwgNTAwKVxyXG5cclxuICAgIC8qKiBFTkQgc2V0VGltZW91dCovXHJcbiAgfVxyXG5cclxuICBvblBhcmFtS2l0VmFsdWVDaGFuZ2UoZGF0YTogSUNvcmVDb21tb25QYXJhbUtpdEV2ZW50RW1pdHRlckRhdGEpOiB2b2lkIHtcclxuICAgIHN3aXRjaCAoZGF0YS5maWVsZCkge1xyXG4gICAgICBjYXNlICdvcmdJZHMnOlxyXG4gICAgICAgIGNvbnN0IG5ld09yZ0luT3BlcmF0b3JzOiBJSW5PcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuaW5PcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgaW5PcmdmaWx0ZXIgPSBuZXdPcmdJbk9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT4geC5maWVsZCA9PT0gJ29yZ0lkJ1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgaWYgKGluT3JnZmlsdGVyLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgaW5PcmdmaWx0ZXJbMF0udmFsdWVzID0gZGF0YS52YWx1ZTtcclxuICAgICAgICB9IGVsc2UgaWYgKGluT3JnZmlsdGVyLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgbmV3T3JnSW5PcGVyYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgIGZpZWxkOiAnb3JnSWQnLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IGRhdGEudmFsdWUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBJbk9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogZmllbGQgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5PcGVyYXRvcnMkLm5leHQobmV3T3JnSW5PcGVyYXRvcnMpKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnZ2VuZXJhbFNlYXJjaCc6XHJcbiAgICAgICAgdGhpcy5nZW5lcmFsU2VhcmNoJC5uZXh0KGRhdGEudmFsdWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkYXRlRnJvbSc6XHJcbiAgICAgICAgbGV0IG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnM6IElGaWx0ZXJPcGVyYXRvcltdID0gSlNPTi5wYXJzZShcclxuICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGZpbHRlckZyb20gPSBuZXdGcm9tRmlsdGVyT3BlcmF0b3JzLmZpbHRlcihcclxuICAgICAgICAgICh4KSA9PlxyXG4gICAgICAgICAgICB4LmZpZWxkID09PSB0aGlzLmRhdGVQZXJpb2RDb21wYXJpc29uRm9yICYmXHJcbiAgICAgICAgICAgIHgub3BlcmF0b3IgPT09IEVudW1GaWx0ZXJPcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUxcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChmaWx0ZXJGcm9tLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgICAgICAgaWYgKCEhZGF0YS52YWx1ZSkge1xyXG4gICAgICAgICAgICBmaWx0ZXJGcm9tWzBdLmRhdGVUaW1lVmFsdWUgPSBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygwLCAwLCAwLCAwKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZmlsdGVyRnJvbVswXS5kYXRlVGltZVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlckZyb20ubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMucHVzaCh7XHJcbiAgICAgICAgICAgICAgZmllbGQ6IHRoaXMuZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3IsXHJcbiAgICAgICAgICAgICAgb3BlcmF0b3I6IEVudW1GaWx0ZXJPcGVyYXRvci5HUkVBVEVSX1RIQU5fT1JfRVFVQUwsXHJcbiAgICAgICAgICAgICAgZGF0ZVRpbWVWYWx1ZTogbmV3IERhdGUoXHJcbiAgICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygwLCAwLCAwLCAwKVxyXG4gICAgICAgICAgICAgICksXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgYEZpbHRlck9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogY29tYmluYXRpb24gb2YgZmllbGQgbmFtZSBhbmQgb3BlcmF0b3IgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBmcm9tIG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMsIHJlbW92ZSB0aG9zZSBpdGVtcyB3aXRoIGhhdmUgZGF0ZVRpbWVWYWx1ZSA9PT0gbnVsbFxyXG4gICAgICAgIG5ld0Zyb21GaWx0ZXJPcGVyYXRvcnMgPSBuZXdGcm9tRmlsdGVyT3BlcmF0b3JzLmZpbHRlcih4ID0+IHguZGF0ZVRpbWVWYWx1ZSAhPT0gbnVsbClcclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLm5leHQobmV3RnJvbUZpbHRlck9wZXJhdG9ycyk7XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlICdkYXRlVG8nOlxyXG4gICAgICAgIGxldCBuZXdUb0ZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5maWx0ZXJPcGVyYXRvcnMkLnZhbHVlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyVG8gPSBuZXdUb0ZpbHRlck9wZXJhdG9ycy5maWx0ZXIoXHJcbiAgICAgICAgICAoeCkgPT5cclxuICAgICAgICAgICAgeC5maWVsZCA9PT0gdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvciAmJlxyXG4gICAgICAgICAgICB4Lm9wZXJhdG9yID09PSBFbnVtRmlsdGVyT3BlcmF0b3IuTEVTU19USEFOX09SX0VRVUFMXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoZmlsdGVyVG8ubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpZiAoISFkYXRhLnZhbHVlKSB7XHJcbiAgICAgICAgICAgIGZpbHRlclRvWzBdLmRhdGVUaW1lVmFsdWUgPSBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAoZGF0YS52YWx1ZSBhcyBEYXRlKS5zZXRIb3VycygyMywgNTksIDU5LCA5OTkpXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBmaWx0ZXJUb1swXS5kYXRlVGltZVZhbHVlID0gbnVsbDtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclRvLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgaWYgKCEhZGF0YS52YWx1ZSkge1xyXG4gICAgICAgICAgICBuZXdUb0ZpbHRlck9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgICBmaWVsZDogdGhpcy5kYXRlUGVyaW9kQ29tcGFyaXNvbkZvcixcclxuICAgICAgICAgICAgICBvcGVyYXRvcjogRW51bUZpbHRlck9wZXJhdG9yLkxFU1NfVEhBTl9PUl9FUVVBTCxcclxuICAgICAgICAgICAgICBkYXRlVGltZVZhbHVlOiBuZXcgRGF0ZShcclxuICAgICAgICAgICAgICAgIChkYXRhLnZhbHVlIGFzIERhdGUpLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSlcclxuICAgICAgICAgICAgICApLFxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBGaWx0ZXJPcGVyYXRvcnMgZXJyb3IgZm9yICR7ZGF0YS5maWVsZH06IGNvbWJpbmF0aW9uIG9mIGZpZWxkIG5hbWUgYW5kIG9wZXJhdG9yIG5hbWUgaXMgbm90IHVuaXF1ZSBpbiB0aGUgYXJyYXlgXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gZnJvbSBuZXdGcm9tRmlsdGVyT3BlcmF0b3JzLCByZW1vdmUgdGhvc2UgaXRlbXMgd2l0aCBoYXZlIGRhdGVUaW1lVmFsdWUgPT09IG51bGxcclxuICAgICAgICBuZXdUb0ZpbHRlck9wZXJhdG9ycyA9IG5ld1RvRmlsdGVyT3BlcmF0b3JzLmZpbHRlcih4ID0+IHguZGF0ZVRpbWVWYWx1ZSAhPT0gbnVsbClcclxuXHJcbiAgICAgICAgdGhpcy5maWx0ZXJPcGVyYXRvcnMkLm5leHQobmV3VG9GaWx0ZXJPcGVyYXRvcnMpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSAnc3RhdHVzSWRzJzpcclxuICAgICAgICBjb25zdCBuZXdJbk9wZXJhdG9yczogSUluT3BlcmF0b3JbXSA9IEpTT04ucGFyc2UoXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLmluT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IGluZmlsdGVyID0gbmV3SW5PcGVyYXRvcnMuZmlsdGVyKFxyXG4gICAgICAgICAgKHgpID0+IHguZmllbGQgPT09IHRoaXMuc3RhdHVzSW5jbHVzaW9uRm9yXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoaW5maWx0ZXIubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgICBpbmZpbHRlclswXS52YWx1ZXMgPSBkYXRhLnZhbHVlO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoaW5maWx0ZXIubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgICBuZXdJbk9wZXJhdG9ycy5wdXNoKHtcclxuICAgICAgICAgICAgZmllbGQ6IHRoaXMuc3RhdHVzSW5jbHVzaW9uRm9yLFxyXG4gICAgICAgICAgICB2YWx1ZXM6IGRhdGEudmFsdWUsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIGBJbk9wZXJhdG9ycyBlcnJvciBmb3IgJHtkYXRhLmZpZWxkfTogZmllbGQgbmFtZSBpcyBub3QgdW5pcXVlIGluIHRoZSBhcnJheWBcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuaW5PcGVyYXRvcnMkLm5leHQobmV3SW5PcGVyYXRvcnMpKVxyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgZGVmYXVsdDpcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGV4cG9ydFRvRXhjZWwoKTogdm9pZCB7XHJcbiAgICAvKiBQaMawxqFuZyBwaMOhcCB4deG6pXQgQ1NWICovXHJcbiAgICAvKiBD4bqnbiB0aGF5IGLhurFuZyB4deG6pXQgRVhDRUwgYuG6sW5nIEJhY2tlbmQgKi9cclxuICAgIC8qXHJcbiAgICBjb25zdCBjc3ZEYXRhOiBhbnlbXVtdID0gW107XHJcblxyXG4gICAgbGV0IHJvdzE6IGFueVtdID0gW107XHJcbiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKCh4KSA9PiB4LmZpZWxkICE9ICdpZCcpO1xyXG4gICAgY29uc29sZS5sb2codGhpcy5jb2x1bW5zKVxyXG4gICAgdGhpcy5jb2x1bW5zLm1hcCgoeCkgPT4ge1xyXG4gICAgICByb3cxLnB1c2godGhpcy5tbHMudHJhbnMoeC5jYXB0aW9uKSk7XHJcbiAgICB9KTtcclxuICAgIGNzdkRhdGEucHVzaChyb3cxKTtcclxuXHJcbiAgICB0aGlzLmxpc3QubWFwKChyb3csIGluZGV4KSA9PiB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRSb3c6IGFueVtdID0gW107XHJcbiAgICAgIHRoaXMuY29sdW1ucy5tYXAoKGNvbHVtbikgPT4ge1xyXG4gICAgICAgIGlmIChjb2x1bW4uZmllbGQgIT0gJ2lkJykge1xyXG4gICAgICAgICAgbGV0IGN1cnJlbnRDZWxsID0gcm93W2NvbHVtbi5maWVsZF07XHJcbiAgICAgICAgICBpZiAodHlwZW9mIGN1cnJlbnRDZWxsPy5yZXBsYWNlQWxsID09PSAnZnVuY3Rpb24nKSB7XHJcbiAgICAgICAgICAgIGN1cnJlbnRDZWxsID0gY3VycmVudENlbGwucmVwbGFjZUFsbCgnLCcsICc7Jyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjdXJyZW50Um93LnB1c2goY3VycmVudENlbGwpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcblxyXG4gICAgICBjc3ZEYXRhLnB1c2goY3VycmVudFJvdyk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBsZXQgY3N2Q29udGVudCA9IGNzdkRhdGEubWFwKChlKSA9PiBlLmpvaW4oJywnKSkuam9pbignXFxuJyk7XHJcblxyXG4gICAgdmFyIGxpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZShcclxuICAgICAgJ2hyZWYnLFxyXG4gICAgICAnZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04LCVFRiVCQiVCRicgKyBlbmNvZGVVUkkoY3N2Q29udGVudClcclxuICAgICk7XHJcbiAgICBsaW5rLnNldEF0dHJpYnV0ZSgnZG93bmxvYWQnLCAnRXhwb3J0RXhlbC5jc3YnKTtcclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobGluayk7XHJcbiAgICBsaW5rLmNsaWNrKCk7XHJcbiAgICAqL1xyXG4gICAgLypcclxuICAgIELhuq90IMSR4bqndSB4deG6pXQgRXhjZWwgYuG6sW5nIEJhY2tlbmRcclxuICAgICovXHJcblxyXG4gICAgLy8gVGh1IHRo4bqtcCBuaGnDqm4gbGnhu4d1XHJcblxyXG4gICAgaWYgKCF0aGlzLmlubmVyQm9keUNvdW50JC52YWx1ZSkge1xyXG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKHRoaXMubWxzLnRyYW5zKCdYTFNYX05PX1JFU1VMVF9UT19FWFBPUlQnKSwgYWxlcnRPcHRpb25zKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHVybCA9IHRoaXMuYXBpRGVmaW5pdGlvbi5xdWVyeUxpc3RSZWxhdGl2ZVBhdGg7XHJcbiAgICBjb25zdCB4ID0gdGhpcy5xdWVyeUxpc3RSZXF1ZXN0JC52YWx1ZTsgLy8gQ+G6p24gbG/huqFpIGLhu48gcGFnaW5nIGto4buPaSDEkeG7kWkgdMaw4bujbmcgbsOgeVxyXG5cclxuICAgIHgucGFnaW5hdGlvbiA9IHtcclxuICAgICAgc2tpcDogMCxcclxuICAgICAgdGFrZTogdGhpcy5pbm5lckJvZHlDb3VudCQudmFsdWVcclxuICAgIH1cclxuXHJcbiAgICBsZXQgYXBpU3RyZWFtJDogT2JzZXJ2YWJsZTxhbnk+O1xyXG4gICAgLy8gTuG6v3UgY8OzIGTDsm5nIGThu68gbGnhu4d1IGNoZWNrZWQgdGjDrCBjaOG7iSB4deG6pXQgY8OhYyBkw7JuZyBuw6B5XHJcbiAgICBpZiAoISF0aGlzLnNlbGVjdGVkRGF0YS5sZW5ndGgpIHtcclxuICAgICAgYXBpU3RyZWFtJCA9IG5ldyBPYnNlcnZhYmxlPGFueT4ob2JzZXJ2ZXIgPT4ge1xyXG4gICAgICAgIG9ic2VydmVyLm5leHQoe1xyXG4gICAgICAgICAgb2s6IHRydWUsXHJcbiAgICAgICAgICBzdGF0dXM6IDIwMCxcclxuICAgICAgICAgIGJvZHk6IHtcclxuICAgICAgICAgICAgc3RhdHVzQ29kZTogMjAwLFxyXG4gICAgICAgICAgICBpbm5lckJvZHk6IHtcclxuICAgICAgICAgICAgICBsaXN0OiB0aGlzLnNlbGVjdGVkRGF0YVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSlcclxuICAgICAgfSk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICAvLyBUcsOhaSBs4bqhaSwgeHXhuqV0IDEwMCUgc2F1IGtoaSDEkcOjIGzhu41jICh0b8OgbiBi4buZIGPDoWMgdHJhbmcpXHJcbiAgICAgIGFwaVN0cmVhbSQgPSB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UucXVlcnlMaXN0KHgsIHVybCk7XHJcbiAgICB9XHJcblxyXG5cclxuXHJcbiAgICAvLyBJdCdzIHRpbWUgdG8gc3Vic2NyaWJlIGFwaVN0cmVhbSRcclxuICAgIHRoaXMucHJlZmV0Y2hMb2FkaW5nID0gdHJ1ZTtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5wdXNoKFxyXG4gICAgICBhcGlTdHJlYW0kLnN1YnNjcmliZSh4ID0+IHtcclxuICAgICAgICB0aGlzLnByZWZldGNoTG9hZGluZyA9IGZhbHNlO1xyXG4gICAgICAgIGlmICh4Lm9rICYmIHguc3RhdHVzID09PSAyMDApIHtcclxuICAgICAgICAgIGNvbnN0IGJvZHk6IElGb3JtYXRlZFJlc3BvbnNlID0geC5ib2R5O1xyXG4gICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgIC8vdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhgJHtib2R5LmlubmVyQm9keS5jb3VudH0gcm93cyBvZiBkYXRhIGZldGNoZWQuIEl0IGlzIHRpbWUgdG8gZG8gd2l0aCBiYWNrZW5kIGV4Y2VsIGV4cG9ydGluZ2AsIGFsZXJ0T3B0aW9ucylcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGFwaVBvaW50ID0gYXBpLlhMU1hfRVhQT1JUX0NPUkVfUEFHRV9MSVNUX1RPX0VYQ0VMO1xyXG4gICAgICAgICAgICBjb25zdCBmbGF0Q29sdW1uczogSUNvcmVUYWJsZUZsYXRDb2x1bW5JdGVtW10gPSBbXTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiAheC5oaWRkZW4pLm1hcChjID0+IHtcclxuICAgICAgICAgICAgICBmbGF0Q29sdW1ucy5wdXNoKFxyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBjYXB0aW9uOiBjLmNhcHRpb24sXHJcbiAgICAgICAgICAgICAgICAgIGZpZWxkOiBjLmZpZWxkLFxyXG4gICAgICAgICAgICAgICAgICB0eXBlOiBjLnR5cGUsXHJcbiAgICAgICAgICAgICAgICAgIHBpcGU6IGMucGlwZSxcclxuICAgICAgICAgICAgICAgICAgYWxpZ246IGMuYWxpZ24sXHJcbiAgICAgICAgICAgICAgICAgIHdpZHRoOiBNYXRoLnJvdW5kKGMud2lkdGggfHwgMCksXHJcbiAgICAgICAgICAgICAgICAgIGhpZGRlbjogYy5oaWRkZW5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBjb25zdCBmbGF0RGF0YTogYW55W10gPSBbXTtcclxuICAgICAgICAgICAgY29uc3Qga2V5czogc3RyaW5nW10gPSBbXTtcclxuICAgICAgICAgICAgZmxhdENvbHVtbnMubWFwKGMgPT4ga2V5cy5wdXNoKGMuZmllbGQpKTtcclxuICAgICAgICAgICAgYm9keS5pbm5lckJvZHkubGlzdC5tYXAoKHJvdzogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgY29uc3QgZTogYW55ID0ge307XHJcbiAgICAgICAgICAgICAga2V5cy5tYXAoayA9PiB7XHJcbiAgICAgICAgICAgICAgICBlW2tdID0gcm93W2tdO1xyXG4gICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgZmxhdERhdGEucHVzaChlKTtcclxuICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IG9iaiA9IHtcclxuICAgICAgICAgICAgICBjb2x1bW5zOiBmbGF0Q29sdW1ucyxcclxuICAgICAgICAgICAgICBkYXRhOiBmbGF0RGF0YVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBjb25zdCBwYXlsb2FkID0gdGhpcy5qc29uU2VydmljZS5zdHJpbmdpZnkob2JqKTtcclxuXHJcbiAgICAgICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSB0cnVlO1xyXG5cclxuICAgICAgICAgICAgdGhpcy5leHBvcnRDb3JlUGFnZUxpc3RHcmlkVG9FeGNlbFN1YnNjcmlwdGlvbiA9IHRoaXMuYXBwU2VydmljZS5ibG9iUG9zdChhcGlQb2ludCwgcGF5bG9hZCkuc3Vic2NyaWJlKHJlc3BvbnNlID0+IHtcclxuICAgICAgICAgICAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgaWYgKHJlc3BvbnNlLmJvZHkuc3RhdHVzQ29kZSA9PT0gNDAwKSByZXR1cm5cclxuXHJcbiAgICAgICAgICAgICAgbGV0IGRvd25sb2FkTGluayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJhXCIpO1xyXG4gICAgICAgICAgICAgIGRvd25sb2FkTGluay5ocmVmID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwobmV3IEJsb2IoW3Jlc3BvbnNlLmJvZHldKSlcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgdGhpcy5tbHMudHJhbnModGhpcy50aXRsZSkgKyBcIi54bHN4XCIpO1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcclxuICAgICAgICAgICAgfSlcclxuXHJcblxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgIClcclxuXHJcbiAgfVxyXG5cclxuICBvbkNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2soZTogSUNvcmVCdXR0b25WTlMpOiB2b2lkIHtcclxuICAgIHRoaXMuY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljay5lbWl0KGUpO1xyXG5cclxuICAgIHN3aXRjaCAoZS5jb2RlKSB7XHJcblxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRklMVEVSOlxyXG4gICAgICAgIC8vdGhpcy5maWx0ZXJLaXRTZXJ2aWNlLm9wZW4kLm5leHQodHJ1ZSk7XHJcbiAgICAgICAgdGhpcy5jb3JlRmlsdGVySHViU2VydmljZS5vcGVuJC5uZXh0KCF0aGlzLmNvcmVGaWx0ZXJIdWJTZXJ2aWNlLm9wZW4kLnZhbHVlKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0NSRUFURTpcclxuXHJcbiAgICAgICAgaWYgKCEhIXRoaXMuc2VsZlJlc29sdmVDb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrKSB7XHJcblxyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUVkaXRTZXJ2aWNlLmZyb21VcmwgPSB0aGlzLnJvdXRlci51cmw7XHJcblxyXG4gICAgICAgICAgaWYgKHRoaXMubm9ybWFsTW9kZSkge1xyXG5cclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW2J0b2EoJzAnKSwgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfV0sXHJcbiAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICBvdXRsZXRzOiB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29yZVBhZ2VMaXN0QXV4OiBbXHJcbiAgICAgICAgICAgICAgICAgICAgICBidG9hKCcwJyksXHJcbiAgICAgICAgICAgICAgICAgICAgICB7IGxpc3RJbnN0YW5jZTogdGhpcy5jb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlciB9LFxyXG4gICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfRURJVDpcclxuICAgICAgICBpZiAoISEhdGhpcy5zZWxmUmVzb2x2ZUNvcmVQYWdlSGVhZGVyQnV0dG9uQ2xpY2spIHtcclxuXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlRWRpdFNlcnZpY2UuZnJvbVVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA+IDEpIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IodGhpcy5tbHMudHJhbnMoJ1NFTEVDVF9PTkxZX09ORV9SRUNPUkRfVE9fRURJVCcpLCBhbGVydE9wdGlvbnMpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgICAgICAgaWYgKCEhdGhpcy5ub3JtYWxNb2RlKSB7XHJcblxyXG4gICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgICAgICAgIFtidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH1dLFxyXG4gICAgICAgICAgICAgICAgICB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5yb3V0ZS5wYXJlbnQsXHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICBidG9hKCcnICsgdGhpcy5zZWxlY3RlZElkc1swXSksXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgeyBsaXN0SW5zdGFuY2U6IHRoaXMuY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXIgfSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgICAgICAgeyByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlIH1cclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19FRElUJyksIGFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9BQ1RJVkFURTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0FDVElWQVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgbGV0IGxpc3RJZHNUb0FjdGl2ZTogYW55W10gPSBbXTtcclxuICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YS5mb3JFYWNoKHggPT4ge1xyXG4gICAgICAgICAgbGlzdElkc1RvQWN0aXZlLnB1c2godGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmdldFVuaXF1ZVN0cmluZyh4LCB0aGlzLmNvbmZpcm1hdGlvbkNvbHVtbnMpKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0FDVElWQVRFXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNyZWF0ZU5ldyhcclxuICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04sXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NPTkZJUk0sXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NBTkNFTCxcclxuICAgICAgICAgIGZhbHNlLFxyXG4gICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0FSRV9ZT1VfU1VSRV9UT19BQ1RJVkUsXHJcbiAgICAgICAgICBsaXN0SWRzVG9BY3RpdmVcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9JTkFDVElWQVRFOlxyXG4gICAgICAgIGlmICghIXRoaXMuc2VsZWN0ZWRJZHMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnbnVtYmVyJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LkNPUkVfUEFHRV9MSVNUX0FDVElWRV9JRFNfTUVUSE9EX1NVUE9SVFNfT05MWV9OVU1CRVJfVFlQRVxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fQUNUSVZBVEUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBsZXQgbGlzdElkc1RvSW5hY3RpdmU6IGFueVtdID0gW107XHJcbiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGEuZm9yRWFjaCh4ID0+IHtcclxuICAgICAgICAgIGxpc3RJZHNUb0luYWN0aXZlLnB1c2godGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmdldFVuaXF1ZVN0cmluZyh4LCB0aGlzLmNvbmZpcm1hdGlvbkNvbHVtbnMpKVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICB0aGlzLnBlbmRpbmdBY3Rpb24gPSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0lOQUNUSVZBVEVcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY3JlYXRlTmV3KFxyXG4gICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0NPTkZJUk1BVElPTixcclxuICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ09ORklSTSxcclxuICAgICAgICAgIEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ0FOQ0VMLFxyXG4gICAgICAgICAgZmFsc2UsXHJcbiAgICAgICAgICBFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9TVVJFX1RPX0lOQUNUSVZFLFxyXG4gICAgICAgICAgbGlzdElkc1RvSW5hY3RpdmVcclxuICAgICAgICApXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9ERUxFVEU6XHJcbiAgICAgICAgaWYgKCEhdGhpcy5zZWxlY3RlZElkcy5sZW5ndGgpIHtcclxuICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdudW1iZXInICYmXHJcbiAgICAgICAgICAgIHR5cGVvZiB0aGlzLnNlbGVjdGVkSWRzWzBdICE9PSAnc3RyaW5nJ1xyXG4gICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmluZm8oXHJcbiAgICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoXHJcbiAgICAgICAgICAgICAgICAnQ09SRV9QQUdFX0xJU1RfREVMRVRFX0lEU19NRVRIT0RfU1VQT1JUU19PTkxZX05VTUJFUl9BTkRfU1RSSU5HX1RZUEVTJ1xyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmVycm9yKFxyXG4gICAgICAgICAgICB0aGlzLm1scy50cmFucygnTk9fU0VMRUNURURfSURfVE9fREVMRVRFJyksXHJcbiAgICAgICAgICAgIGFsZXJ0T3B0aW9uc1xyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKCEhdGhpcy5kZWxldGVWYWxpZGF0ZUZuKSB7XHJcblxyXG4gICAgICAgICAgY29uc3QgdmFsaWRhdGVkOiBib29sZWFuID0gdGhpcy5kZWxldGVWYWxpZGF0ZUZuKHRoaXMuc2VsZWN0ZWREYXRhKTtcclxuICAgICAgICAgIGlmICghISF2YWxpZGF0ZWQpIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHRoaXMucGVuZGluZ0FjdGlvbiA9IEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfREVMRVRFXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnRpdGxlJC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9ESUFMT0dfU0VSVklDRV9DT05GSVJNQVRJT04pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLm9rQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NPTkZJUk0pXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmNhbmNlbEJ1dHRvblRleHQkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0NPTkZJUk1fRElBTE9HX0JVVFRPTl9DQU5DRUwpXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDYW5jZWxPbmx5JC5uZXh0KGZhbHNlKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYnVzeSA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLmJvZHkkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0FSRV9ZT1VfU1VSRV9UT19ERUxFVEUpO1xyXG4gICAgICAgIGxldCBsaXN0RGVsZXRlSWRzOiBhbnlbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1hdGlvbkNvbHVtbnMgPSB0aGlzLmNvbHVtbnMuZmlsdGVyKHggPT4gISF4LnNob3dGb3JDb25maXJtYXRpb24pO1xyXG4gICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhLmZvckVhY2goeCA9PiB7XHJcbiAgICAgICAgICBsaXN0RGVsZXRlSWRzLnB1c2godGhpcy5jb3JlUGFnZUxpc3RTZXJ2aWNlLmdldFVuaXF1ZVN0cmluZyh4LCBjb25maXJtYXRpb25Db2x1bW5zKSlcclxuICAgICAgICB9KTtcclxuICAgICAgICBpZiAoIXRoaXMuZGlzYWJsZURpYWxvZ0luZm9ybWF0aW9uTGluZXMpIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KGxpc3REZWxldGVJZHMpXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5pbmZvcm1hdGlvbkxpbmVzJC5uZXh0KFtdKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtRGlhbG9nJC5uZXh0KHRydWUpO1xyXG5cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1VOQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcicgJiZcclxuICAgICAgICAgICAgdHlwZW9mIHRoaXMuc2VsZWN0ZWRJZHNbMF0gIT09ICdzdHJpbmcnXHJcbiAgICAgICAgICApIHtcclxuICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuaW5mbyhcclxuICAgICAgICAgICAgICB0aGlzLm1scy50cmFucyhcclxuICAgICAgICAgICAgICAgICdDT1JFX1BBR0VfTElTVF9ERUxFVEVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX0FORF9TVFJJTkdfVFlQRVMnXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgIH1cclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXHJcbiAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdOT19TRUxFQ1RFRF9JRF9UT19ERUxFVEUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBpZiAoISF0aGlzLmRlbGV0ZVZhbGlkYXRlRm4pIHtcclxuXHJcbiAgICAgICAgICBjb25zdCB2YWxpZGF0ZWQ6IGJvb2xlYW4gPSB0aGlzLmRlbGV0ZVZhbGlkYXRlRm4odGhpcy5zZWxlY3RlZERhdGEpO1xyXG4gICAgICAgICAgaWYgKCEhIXZhbGlkYXRlZCkgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5wZW5kaW5nQWN0aW9uID0gRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkFQUFJPVkVcclxuICAgICAgICAvLyB0aGlzLmRpYWxvZ1NlcnZpY2UudGl0bGUkLm5leHQoRW51bVRyYW5zbGF0ZUtleS5VSV9DT1JFX0RJQUxPR19TRVJWSUNFX0NPTkZJUk1BVElPTilcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uub2tCdXR0b25UZXh0JC5uZXh0KEVudW1UcmFuc2xhdGVLZXkuVUlfQ09SRV9DT05GSVJNX0RJQUxPR19CVVRUT05fQ09ORklSTSlcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuY2FuY2VsQnV0dG9uVGV4dCQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfQ09ORklSTV9ESUFMT0dfQlVUVE9OX0NBTkNFTClcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd0NhbmNlbE9ubHkkLm5leHQoZmFsc2UpO1xyXG4gICAgICAgIHRoaXMuZGlhbG9nU2VydmljZS5idXN5ID0gdHJ1ZTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2UuYm9keSQubmV4dChFbnVtVHJhbnNsYXRlS2V5LlVJX0NPUkVfRElBTE9HX1NFUlZJQ0VfQVJFX1lPVV9VTkFQUFJPVkVfSU5QVVRfUkVBU09OKTtcclxuICAgICAgICB0aGlzLmRpYWxvZ1NlcnZpY2Uuc2hvd2luZ1VwJC5uZXh0KHRydWUpXHJcbiAgICAgICAgdGhpcy5kaWFsb2dTZXJ2aWNlLnNob3dDb25maXJtRGlhbG9nJC5uZXh0KHRydWUpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX0FQUFJPVkUnKSxcclxuICAgICAgICAgICAgYWxlcnRPcHRpb25zXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IHJlcXVlc3RBcHByb3ZlOiBJVG9nZ2xlQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICB2YWx1ZVRvQmluZDogdHJ1ZSxcclxuICAgICAgICAgIGlkczogdGhpcy5zZWxlY3RlZElkcyBhcyBudW1iZXJbXSxcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGNvbmZpcm1BcHByb3ZlID0gd2luZG93LmNvbmZpcm0oXHJcbiAgICAgICAgICB0aGlzLm1scy50cmFucygnY29tbW9uLmNvbmZpcm0uYXBwcm92ZS5wcmVmaXgnKSArXHJcbiAgICAgICAgICBKU09OLnN0cmluZ2lmeSh0aGlzLnNlbGVjdGVkSWRzKSArXHJcbiAgICAgICAgICAnPydcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChjb25maXJtQXBwcm92ZSkge1xyXG4gICAgICAgICAgaWYgKCEhdGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMpIHtcclxuICAgICAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICAgICAgdGhpcy5hcHBTZXJ2aWNlLnBvc3QodGhpcy5jcnVkLnRvZ2dsZUFwcHJvdmVJZHMsIHJlcXVlc3RBcHByb3ZlKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdEFwcHJvdmUuaWRzID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2Uud2Fybih0aGlzLm1scy50cmFucyhFbnVtVHJhbnNsYXRlS2V5Lk5PX0FQSV9FTkRfUE9JTlRfUFJPVklERURfRk9SX0FDVElWQVRJT04pLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucylcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX1BFTkRJTkdfQVBQUk9WRTpcclxuICAgICAgICBpZiAoISF0aGlzLnNlbGVjdGVkSWRzLmxlbmd0aCkge1xyXG4gICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICB0eXBlb2YgdGhpcy5zZWxlY3RlZElkc1swXSAhPT0gJ251bWJlcidcclxuICAgICAgICAgICkge1xyXG4gICAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5pbmZvKFxyXG4gICAgICAgICAgICAgIHRoaXMubWxzLnRyYW5zKFxyXG4gICAgICAgICAgICAgICAgRW51bVRyYW5zbGF0ZUtleS5DT1JFX1BBR0VfTElTVF9BQ1RJVkVfSURTX01FVEhPRF9TVVBPUlRTX09OTFlfTlVNQkVSX1RZUEVcclxuICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgdGhpcy5tbHMudHJhbnMoJ05PX1NFTEVDVEVEX0lEX1RPX1BFTkRJTkdfQVBQUk9WRScpLFxyXG4gICAgICAgICAgICBhbGVydE9wdGlvbnNcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICB9XHJcbiAgICAgICAgY29uc3QgcmVxdWVzdFBlbmRpbmdBcHByb3ZlOiBJVG9nZ2xlQXBwcm92ZUlkc1JlcXVlc3QgPSB7XHJcbiAgICAgICAgICB2YWx1ZVRvQmluZDogZmFsc2UsXHJcbiAgICAgICAgICBpZHM6IHRoaXMuc2VsZWN0ZWRJZHMgYXMgbnVtYmVyW10sXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBjb25maXJtUGVuZGluZ0FwcHJvdmUgPSB3aW5kb3cuY29uZmlybShcclxuICAgICAgICAgIHRoaXMubWxzLnRyYW5zKCdjb21tb24uY29uZmlybS5wZW5kaW5nLmFwcHJvdmUucHJlZml4JykgK1xyXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkodGhpcy5zZWxlY3RlZElkcykgK1xyXG4gICAgICAgICAgJz8nXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAoY29uZmlybVBlbmRpbmdBcHByb3ZlKSB7XHJcbiAgICAgICAgICBpZiAoISF0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcykge1xyXG4gICAgICAgICAgICB0aGlzLnN1YnNjcmlwdGlvbnMucHVzaChcclxuICAgICAgICAgICAgICB0aGlzLmFwcFNlcnZpY2UucG9zdCh0aGlzLmNydWQudG9nZ2xlQXBwcm92ZUlkcywgcmVxdWVzdFBlbmRpbmdBcHByb3ZlKVxyXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgoeCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBpZiAoeC5vayAmJiB4LnN0YXR1cyA9PT0gMjAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keTogSUZvcm1hdGVkUmVzcG9uc2UgPSB4LmJvZHk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGJvZHkuc3RhdHVzQ29kZSA9PT0gMjAwIHx8IHguYm9keS5zdGF0dXNDb2RlID09ICcyMDAnKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZvcmNlUmVsb2FkaW5nRmxhZyQubmV4dChcclxuICAgICAgICAgICAgICAgICAgICAgICAgISEhdGhpcy5mb3JjZVJlbG9hZGluZ0ZsYWckLnZhbHVlXHJcbiAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdFBlbmRpbmdBcHByb3ZlLmlkcyA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLndhcm4odGhpcy5tbHMudHJhbnMoRW51bVRyYW5zbGF0ZUtleS5OT19BUElfRU5EX1BPSU5UX1BST1ZJREVEX0ZPUl9BQ1RJVkFUSU9OKSwgbm9uZUF1dG9DbG9zZWRBbGVydE9wdGlvbnMpXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9FWFBPUlRFWEVMOlxyXG5cclxuICAgICAgICB0aGlzLmV4cG9ydFRvRXhjZWwoKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0RPV05MT0FEOlxyXG4gICAgICAgIGNvbnN0IG5vdyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiSEVBREVSX0RPV05MT0FEIGNsaWNrZWRcIiwgbm93KTtcclxuICAgICAgICBpZiAod2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LXNhbGFyeS1iYWNrZGF0ZWApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYHNhbGFyeS1pbXBvcnRgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBpbXBvcnQtYWRkYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgaW1wb3J0LW1vbnRobHktdGF4YCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgc2hpZnRzb3J0YCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgZGVjbGFyZXN1bnBlcmApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYHJlZ2lzdGVybGVhdmVgKSEgPCAwXHJcbiAgICAgICAgICAmJiB3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBvdmVydGltZWApISA8IDBcclxuICAgICAgICAgICYmIHdpbmRvdy5sb2NhdGlvbi5ocmVmLmluZGV4T2YoYGltcG9ydC10YXgtYW5udWFsYCkhIDwgMFxyXG4gICAgICAgICAgJiYgd2luZG93LmxvY2F0aW9uLmhyZWYuaW5kZXhPZihgY21zL3Byb2ZpbGUvbGlzdC9ldmFsdWF0ZWApISA8IDBcclxuICAgICAgICApIHtcclxuICAgICAgICAgIHRoaXMuY2xpY2tHZW5lcmF0ZVRlbXBsYXRlJC5uZXh0KG5vdyk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVVBMT0FEOlxyXG4gICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaHJlZi5pbmRleE9mKGBjbXMvcHJvZmlsZS9saXN0L2V2YWx1YXRlYCkgPj0gMCkge1xyXG4gICAgICAgICAgdGhpcy5jb3JlUGFnZUhlYWRlckJ1dHRvbkNsaWNrLmVtaXQoZSlcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgdGhpcy5icm93c2VGaWxlSW5wdXQoKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9MT0NLOlxyXG4gICAgICBjYXNlIEVudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfVU5MT0NLOlxyXG4gICAgICAgIHRoaXMuY29yZVBhZ2VIZWFkZXJCdXR0b25DbGljay5lbWl0KGUpXHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS5sb2coZS5jb2RlKVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgb25TZWxlY3RlZElkc0NoYW5nZShlOiBzdHJpbmdbXSB8IG51bWJlcltdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkSWRzID0gZTtcclxuICAgIHRoaXMuc2VsZWN0ZWRJZHNDaGFuZ2UuZW1pdChlKTtcclxuICB9XHJcblxyXG4gIG9uU2VsZWN0ZWREYXRhQ2hhbmdlKGU6IGFueVtdKSB7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YSA9IGU7XHJcbiAgICB0aGlzLnNlbGVjdGVkRGF0YUNoYW5nZS5lbWl0KGUpO1xyXG4gICAgaWYgKCEhZS5sZW5ndGgpIHtcclxuICAgICAgaWYgKGUubGVuZ3RoID4gMSkge1xyXG4gICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChbXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0VESVQsXHJcbiAgICAgICAgICBFbnVtQ29yZUJ1dHRvblZOU0NvZGUuSEVBREVSX0xJUVVJREFURV9DT05UUkFDVFxyXG4gICAgICAgIF0pXHJcbiAgICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAgIGlmICghIWVbMF0uaXNMb2NrKSB7XHJcbiAgICAgICAgICB0aGlzLmJ1dHRvbkdyb3VwU3RhdHVzPy5tdXN0QmVIaWRkZW4kLm5leHQoW0VudW1Db3JlQnV0dG9uVk5TQ29kZS5IRUFERVJfTE9DS10pXHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChbRW51bUNvcmVCdXR0b25WTlNDb2RlLkhFQURFUl9VTkxPQ0tdKVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuYnV0dG9uR3JvdXBTdGF0dXM/Lm11c3RCZUhpZGRlbiQubmV4dChFTVBUWV9TRUxFQ1RJT05fSElEREVOX0JVVFRPTilcclxuICAgIH1cclxuXHJcbiAgfVxyXG5cclxuICBvbkNvbHVtbkNhcHRpb25DbGljayhlOiBJQ29yZVRhYmxlQ29sdW1uSXRlbSkge1xyXG4gICAgY29uc3QgbmV3U29ydDogSVNvcnRJdGVtW10gPSBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuc29ydCQudmFsdWUpKTtcclxuICAgIG5ld1NvcnQubWFwKChjKSA9PiB7XHJcbiAgICAgIGlmIChjLmZpZWxkID09PSBlLmZpZWxkKSB7XHJcbiAgICAgICAgaWYgKGMuc29ydERpcmVjdGlvbiA9PT0gRW51bVNvcnREaXJlY3Rpb24uTk9ORSkge1xyXG4gICAgICAgICAgYy5zb3J0RGlyZWN0aW9uID0gRW51bVNvcnREaXJlY3Rpb24uQVNDO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYy5zb3J0RGlyZWN0aW9uID09PSBFbnVtU29ydERpcmVjdGlvbi5BU0MpIHtcclxuICAgICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLkRFU0M7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGMuc29ydERpcmVjdGlvbiA9IEVudW1Tb3J0RGlyZWN0aW9uLk5PTkU7XHJcbiAgICAgIH1cclxuICAgIH0pO1xyXG4gICAgdGhpcy5zb3J0JC5uZXh0KG5ld1NvcnQpO1xyXG4gIH1cclxuXHJcbiAgaW5wdXRGaWxlID0gYXN5bmMgKGU6IGFueSkgPT4ge1xyXG4gICAgY29uc29sZS5sb2coXCJpbnB1dEZpbGUgZVwiLCBlKVxyXG4gICAgY29uc3QgZmlsZXMgPSBlLnRhcmdldC5maWxlcztcclxuICAgIGNvbnN0IGZpbGUgPSBmaWxlc1swXTtcclxuICAgIGxldCBmaWxlTmFtZSA9IGZpbGUubmFtZTtcclxuXHJcbiAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW2ZpbGVdKTtcclxuXHJcbiAgICBibG9iVG9CYXNlNjQoYmxvYikudGhlbigoYmFzZTY0OiBhbnkpID0+IHtcclxuICAgICAgdGhpcy5vbklucHV0RmlsZUJhc2U2NERhdGFSZWFkeS5lbWl0KGJhc2U2NCk7XHJcblxyXG4gICAgICAvLyBO4bq/dSB0aGFtIHPhu5EgZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QgxJHGsOG7o2MgdHJ1eeG7gW4gdsOgb1xyXG4gICAgICAvLyBJbXBvcnQgc+G6vSB0aOG7sWMgdGhpIHRoZW8gcXV5IHRyw6xuaCBDb3JlXHJcbiAgICAgIGlmICh0aGlzLmdlbmVyYXRlVGVtcGxhdGVSZXF1ZXN0KSB7XHJcbiAgICAgICAgY29uc3QgaW1wb3J0WGxzeFRvRGJSZXF1ZXN0OiBJSW1wb3J0WGxzeFRvRGJSZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgZmlsZU5hbWUsXHJcbiAgICAgICAgICBleENvZGU6IHRoaXMuZ2VuZXJhdGVUZW1wbGF0ZVJlcXVlc3QuZXhDb2RlLFxyXG4gICAgICAgICAgYmFzZTY0U3RyaW5nOiBiYXNlNjRcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sb25nQXBpUnVubmluZyA9IHRydWU7XHJcbiAgICAgICAgdGhpcy5zdWJzY3JpcHRpb25zLnB1c2goXHJcbiAgICAgICAgICB0aGlzLmNvcmVQYWdlTGlzdFNlcnZpY2UuaW1wb3J0WGxzeFRvRGIoaW1wb3J0WGxzeFRvRGJSZXF1ZXN0KS5zdWJzY3JpYmUoeCA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHNlc3Npb24gPSBOdW1iZXIodGhpcy5sb25nVGFza1NlcnZpY2UuZGF0YSQudmFsdWU/Lm91dGVyTWVzc2FnZSk7XHJcbiAgICAgICAgICAgIHRoaXMubG9uZ0FwaVJ1bm5pbmcgPSBmYWxzZTtcclxuICAgICAgICAgICAgaWYgKHgub2sgJiYgeC5zdGF0dXMgPT09IDIwMCkge1xyXG4gICAgICAgICAgICAgIGxldCBkb3dubG9hZExpbmsgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYVwiKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuaHJlZiA9IHdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt4LmJvZHldKSlcclxuICAgICAgICAgICAgICBmaWxlTmFtZSA9IGZpbGVOYW1lLnNwbGl0KFwiLnhsc3hcIilbMF0gKyBcIl9wcm9jZXNzZWRfXCIgKyBuZXcgRGF0ZSgpLmdldFRpbWUoKSArIFwiLnhsc3hcIjtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuc2V0QXR0cmlidXRlKFwiZG93bmxvYWRcIiwgZmlsZU5hbWUpO1xyXG4gICAgICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZG93bmxvYWRMaW5rKTtcclxuICAgICAgICAgICAgICBkb3dubG9hZExpbmsuY2xpY2soKTtcclxuXHJcbiAgICAgICAgICAgICAgY29uc3QgaW1wb3J0UHJldmlld091dGVyUGFyYW06IElYbHN4SW1wb3J0T2JqZWN0ID0ge1xyXG4gICAgICAgICAgICAgICAgeGxzeFNpZDogdGhpcy5hdXRoU2VydmljZS5kYXRhJC52YWx1ZT8uaWQhLFxyXG4gICAgICAgICAgICAgICAgeGxzeEV4Q29kZTogdGhpcy5nZW5lcmF0ZVRlbXBsYXRlUmVxdWVzdC5leENvZGUsXHJcbiAgICAgICAgICAgICAgICB4bHN4U2Vzc2lvbjogc2Vzc2lvblxyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKCEhIXRoaXMuaW1wb3J0UHJldmlld1BhdGgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZXJyb3IoXCInaW1wb3J0UHJldmlld1BhdGgnIGlucHV0IHByb3BlcnR5IHdhcyBtaXNzaW5nIVwiLCBub25lQXV0b0Nsb3NlZEFsZXJ0T3B0aW9ucyk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIH0gZWxzZSB7XHJcblxyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgICAgICAge1xyXG4gICAgICAgICAgICAgICAgICAgICAgb3V0bGV0czoge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3JlUGFnZUxpc3RBdXg6IFtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmltcG9ydFByZXZpZXdQYXRoLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHsgbGlzdEluc3RhbmNlOiB0aGlzLmNvcmVQYWdlTGlzdEluc3RhbmNlTnVtYmVyIH0sXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgICAgICAgIHtcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLnJvdXRlLCBzdGF0ZToge1xyXG4gICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgIGltcG9ydFByZXZpZXdPdXRlclBhcmFtXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKVxyXG5cclxuICAgICAgfVxyXG5cclxuICAgIH0pO1xyXG5cclxuXHJcbiAgfTtcclxuXHJcbiAgYnJvd3NlRmlsZUlucHV0KCk6IHZvaWQge1xyXG4gICAgY29uc29sZS5sb2coXCJicm93c2VGaWxlSW5wdXRcIilcclxuICAgIHRoaXMuZmlsZUltcG9ydC5uYXRpdmVFbGVtZW50LnZhbHVlID0gbnVsbDtcclxuICAgIHRoaXMuZmlsZUltcG9ydC5uYXRpdmVFbGVtZW50LmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICBvblByb2dyZXNzV2luZG93Q2xvc2UoXzogYW55KSB7XHJcbiAgICB0aGlzLmxvbmdBcGlSdW5uaW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmV4cG9ydENvcmVQYWdlTGlzdEdyaWRUb0V4Y2VsU3Vic2NyaXB0aW9uPy51bnN1YnNjcmliZSgpXHJcbiAgfVxyXG5cclxuICBvbkNvcmVUYWJzSGVhZGVyQ2xpY2soZTogYW55KTogdm9pZCB7XHJcblxyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcblxyXG4gICAgICBjb25zb2xlLmxvZyhcIm9uQ29yZVRhYnNIZWFkZXJDbGlja1wiLCBlKTtcclxuICAgICAgY29uc3QgdGFiID0gdGhpcy5zdGF0dXNUYWJzLmdldChlLmluZGV4KTtcclxuICBcclxuICAgICAgbGV0IG5ld0ZpbHRlck9wZXJhdG9yczogSUZpbHRlck9wZXJhdG9yW10gPSBKU09OLnBhcnNlKFxyXG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHRoaXMuZmlsdGVyT3BlcmF0b3JzJC52YWx1ZSlcclxuICAgICAgKTtcclxuICBcclxuICAgICAgbGV0IG5ld091dGVyUGFyYW06IGFueTtcclxuICBcclxuICAgICAgaWYgKHRhYj8uaWQgPT09IDApIHsgLy8gQWxsXHJcbiAgXHJcbiAgICAgICAgLy8gc2hvdyBzdGF0dXMgY29sdW1uXHJcbiAgICAgICAgY29uc3QgdHJ5RmluZCA9IHRoaXMuY29sdW1ucy5maWx0ZXIoeCA9PiB4LmZpZWxkID09PSB0aGlzLmdyaWRTdGF0dXNDb2x1bW4pO1xyXG4gICAgICAgIGlmICh0cnlGaW5kLmxlbmd0aCkge1xyXG4gICAgICAgICAgdHJ5RmluZFswXS5oaWRkZW4gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5jb2x1bW5zID0gWy4uLnRoaXMuY29sdW1uc107XHJcbiAgXHJcbiAgICAgICAgbmV3T3V0ZXJQYXJhbSA9IHRoaXMub3V0ZXJQYXJhbSQudmFsdWU7XHJcbiAgXHJcbiAgICAgICAgLy9EZWxldGluZyBhIHByb3BlcnR5IGZyb20gYW4gb2JqZWN0IGNhbiBjYXVzZSBpc3N1ZXMgd2hlbiBtZXJnaW5nIG9iamVjdHMgbGF0ZXJcclxuICAgICAgICAvL2RlbGV0ZSBuZXdPdXRlclBhcmFtW3RoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZF07XHJcbiAgXHJcbiAgICAgICAgLy9TZXR0aW5nIHRoZSBQcm9wZXJ0eSB0byBudWxsOlxyXG4gICAgICAgIG5ld091dGVyUGFyYW1bdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkXSA9IG51bGw7XHJcbiAgXHJcbiAgICAgICAgbmV3RmlsdGVyT3BlcmF0b3JzID0gbmV3RmlsdGVyT3BlcmF0b3JzLmZpbHRlcih4ID0+IHguZmllbGQgIT09IHRoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZClcclxuICBcclxuICAgICAgfSBlbHNlIHtcclxuICBcclxuICAgICAgICAvLyBoaWRlIHN0YXR1cyBjb2x1bW5cclxuICAgICAgICBjb25zdCB0cnlGaW5kID0gdGhpcy5jb2x1bW5zLmZpbHRlcih4ID0+IHguZmllbGQgPT09IHRoaXMuZ3JpZFN0YXR1c0NvbHVtbik7XHJcbiAgICAgICAgaWYgKHRyeUZpbmQubGVuZ3RoKSB7XHJcbiAgICAgICAgICB0cnlGaW5kWzBdLmhpZGRlbiA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMuY29sdW1ucyA9IFsuLi50aGlzLmNvbHVtbnNdO1xyXG4gIFxyXG4gICAgICAgIGlmICh0YWI/LmlkID09PSAtMSkgeyAvLyBVbmRlZmluZWRcclxuICAgICAgICAgIG5ld091dGVyUGFyYW0gPSB7XHJcbiAgICAgICAgICAgIC4uLnRoaXMub3V0ZXJQYXJhbSQudmFsdWUsXHJcbiAgICAgICAgICAgIFt0aGlzLmNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGRdOiBudWxsXHJcbiAgICAgICAgICB9O1xyXG4gIFxyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBuZXdPdXRlclBhcmFtID0ge1xyXG4gICAgICAgICAgICAuLi50aGlzLm91dGVyUGFyYW0kLnZhbHVlLFxyXG4gICAgICAgICAgICBbdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkXTogdGFiPy5pZCAvLyBVc2UgYnJhY2tldCBub3RhdGlvbiBmb3IgZHluYW1pYyBwcm9wZXJ0eVxyXG4gICAgICAgICAgfTtcclxuICBcclxuICAgICAgICB9XHJcbiAgXHJcbiAgICAgICAgY29uc3QgZmlsdGVyU3RhdHVzID0gbmV3RmlsdGVyT3BlcmF0b3JzLmZpbHRlcigoeCkgPT4geC5maWVsZCA9PT0gdGhpcy5jYW1lbENhc2VEdG9TdGF0dXNJZEZpZWxkICYmIHgub3BlcmF0b3IgPT09IEVudW1GaWx0ZXJPcGVyYXRvci5FUVVBTCk7XHJcbiAgICAgICAgaWYgKCFmaWx0ZXJTdGF0dXMubGVuZ3RoKSB7XHJcbiAgICAgICAgICBmaWx0ZXJTdGF0dXMucHVzaCh7XHJcbiAgICAgICAgICAgIGZpZWxkOiB0aGlzLmNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGQsXHJcbiAgICAgICAgICAgIG9wZXJhdG9yOiBFbnVtRmlsdGVyT3BlcmF0b3IuRVFVQUwsXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9IGVsc2UgaWYgKGZpbHRlclN0YXR1cy5sZW5ndGggPiAxKSB7XHJcbiAgICAgICAgICB0aGlzLmFsZXJ0U2VydmljZS5lcnJvcihcclxuICAgICAgICAgICAgYEZpbHRlck9wZXJhdG9ycyBlcnJvciBmb3IgJHt0aGlzLmNhbWVsQ2FzZUR0b1N0YXR1c0lkRmllbGR9OiBjb21iaW5hdGlvbiBvZiBmaWVsZCBuYW1lIGFuZCBvcGVyYXRvciBuYW1lIGlzIG5vdCB1bmlxdWUgaW4gdGhlIGFycmF5YFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgbmV3RmlsdGVyT3BlcmF0b3JzID0gW1xyXG4gICAgICAgICAgLi4ubmV3RmlsdGVyT3BlcmF0b3JzLmZpbHRlcih4ID0+IHguZmllbGQgIT09IHRoaXMuY2FtZWxDYXNlRHRvU3RhdHVzSWRGaWVsZCksXHJcbiAgICAgICAgICAuLi5maWx0ZXJTdGF0dXNcclxuICAgICAgICBdXHJcbiAgXHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdGhpcy5wYXVzZVN1YnNjdGlwdGlvbiA9IHRydWVcclxuICAgICAgdGhpcy5vdXRlclBhcmFtJC5uZXh0KG5ld091dGVyUGFyYW0pO1xyXG4gICAgICB0aGlzLnBhdXNlU3Vic2N0aXB0aW9uID0gZmFsc2U7XHJcbiAgICAgIHRoaXMuZmlsdGVyT3BlcmF0b3JzJC5uZXh0KG5ld0ZpbHRlck9wZXJhdG9ycyk7XHJcblxyXG4gICAgfSlcclxuXHJcbiAgfVxyXG5cclxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc3Vic2NyaXB0aW9ucy5tYXAoKHgpID0+IHg/LnVuc3Vic2NyaWJlKCkpO1xyXG4gICAgaWYgKCEhdGhpcy5xdWVyeUxpc3RTdWJzY3JpcHRpb24pIHRoaXMucXVlcnlMaXN0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XHJcbiAgfVxyXG59XHJcbiIsIjxkaXYgI2NvbnRhaW5lciBjbGFzcz1cImNvcmUtcGFnZS1saXN0LWNvbnRhaW5lciBwLXJlbGF0aXZlXCIgI2NvcmVQYWdlTGlzdENvbnRhaW5lclxyXG4gICAgW25nU3R5bGVdPVwieyBoZWlnaHQ6IGhlaWdodCArICdweCcgfVwiPlxyXG5cclxuICAgIEBpZiAoIWhpZGVIZWFkZXIpIHtcclxuICAgIDxjb3JlLXBhZ2UtaGVhZGVyIFtpbnN0YW5jZU51bWJlcl09XCJjb3JlUGFnZUxpc3RJbnN0YW5jZU51bWJlclwiIFt0aXRsZV09XCJ0aXRsZVwiXHJcbiAgICAgICAgKGJ1dHRvbkNsaWNrKT1cIm9uQ29yZVBhZ2VIZWFkZXJCdXR0b25DbGljaygkZXZlbnQpXCJcclxuICAgICAgICBbaGlkZUJ1dHRvbkdyb3VwXT1cIiEhc2Vla2VyTW9kZSB8fCAhIWhpZGVCdXR0b25Hcm91cFwiPjwvY29yZS1wYWdlLWhlYWRlcj5cclxuICAgIH1cclxuXHJcbiAgICA8aW5wdXQgI2ZpbGVJbXBvcnQgdHlwZT1cImZpbGVcIiBuYW1lPVwibmFtZVwiXHJcbiAgICAgICAgYWNjZXB0PVwiYXBwbGljYXRpb24vdm5kLm9wZW54bWxmb3JtYXRzLW9mZmljZWRvY3VtZW50LnNwcmVhZHNoZWV0bWwuc2hlZXQsIGFwcGxpY2F0aW9uL3ZuZC5tcy1leGNlbFwiXHJcbiAgICAgICAgc3R5bGU9XCJkaXNwbGF5OiBub25lO1wiIChjaGFuZ2UpPSdpbnB1dEZpbGUoJGV2ZW50KScgLz5cclxuXHJcbiAgICA8IS0tXHJcbiAgICAgICAgS2hpIMSRw6MgdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29tcG9zaXRpb25IZWlnaHQgY+G7p2EgY29yZS1jb21wb3NpdGlvblxyXG4gICAgICAgIEPhuqduIHTDrW5oIMSRxrDhu6NjIGNow61uaCB4w6FjIGNoaeG7gXUgY2FvIGNvcmVUYWJsZUhlaWdodCBj4bunYSBDb3JlVGFibGVcclxuICAgICAgICBO4bq/dSBwaOG6p24gdG9wIGPhu6dhIGNvbXBvc2l0aW9uIGPhu5EgxJHhu4tuaCAodsOtIGThu6Uga2hpIHPhu60gZOG7pW5nIENvcmVQYXJhbUtpdCkgdGjDrCBwaMOpcCB0cuG7qyDEkcahbiBnaeG6o25cclxuICAgICAgICBOaMawbmcgbuG6v3UgcGjhuqduIHRvcCDEkcaw4bujYyBjdXN0b21pemUsIHRhIHBo4bqjaSBz4butIGThu6VuZyBleHRyYU1hbnVhbE9mZnNldFxyXG4gICAgLS0+XHJcbiAgICA8Y29yZS1jb21wb3NpdGlvbiBbY29yZUNvbXBvc2l0aW9uSW5zdGFuY2VOdW1iZXJdPVwiY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcIiBbdG9wXT1cInRvcFBsYWNlXCJcclxuICAgICAgICBbbGVmdF09XCIhIWhpZGVMZWZ0PyB1bmRlZmluZWQgOmxlZnRcIiBbbWFpbl09XCJjb3JlVGFibGVcIiBbaGVpZ2h0XT1cImNvbXBvc2l0aW9uSGVpZ2h0XCI+XHJcbiAgICA8L2NvcmUtY29tcG9zaXRpb24+XHJcblxyXG4gICAgPHJvdXRlci1vdXRsZXQgbmFtZT1cImNvcmVQYWdlTGlzdEF1eFwiPjwvcm91dGVyLW91dGxldD5cclxuXHJcbiAgICA8IS0tIEBpZiAoISF0YWJNb2RlICYmIHNob3dGaWx0ZXJLaXQpIHtcclxuICAgICAgICA8ZGl2IGNsYXNzID0gXCJmaWx0ZXIta2l0LWRyb3Bkb3duXCIgW25nU3R5bGVdPVwie1xyXG4gICAgICAgICAgICB6SW5kZXg6IGZpbHRlcktpdFpJbmRleFxyXG4gICAgICAgIH1cIj5cclxuICAgICAgICAgICAgPGNvcmUtY29tbW9uLXBhcmFtLWtpdCBbaGlkZGVuTW9kZV09XCJ0cnVlXCIgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yXT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yXCJcclxuICAgICAgICAgICAgICAgIFtlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc109XCJlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgICAgICBbZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleV09XCJkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICAgICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JdPVwic3RhdHVzSW5jbHVzaW9uRm9yXCIgW3N0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XT1cInN0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIiBbc3RhdHVzT3B0aW9ucyRdPVwic3RhdHVzT3B0aW9ucyRcIiBbc2hvd09yZ1BhcmFtXT1cInNob3dPcmdQYXJhbVwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZUdlbmVyYWxTZWFyY2hdPVwiaGlkZUdlbmVyYWxTZWFyY2hcIiBbaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXT1cImhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvblwiXHJcbiAgICAgICAgICAgICAgICBbaGlkZVN0YXR1c0luY2x1c2lvbl09XCJoaWRlU3RhdHVzSW5jbHVzaW9uXCJcclxuICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvblBhcmFtS2l0VmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1jb21tb24tcGFyYW0ta2l0PlxyXG4gICAgICAgIDwvZGl2PlxyXG4gICAgfSAtLT5cclxuXHJcbiAgICBAaWYgKCFkaXNhYmxlRmlsdGVySHViICYmIHNob3dGaWx0ZXIgJiYgISFwYXJhbVJvd3MpIHtcclxuICAgICAgICA8Y29yZS1maWx0ZXItaHViIFtwYXJhbVJvd3NdPVwicGFyYW1Sb3dzXCI+PC9jb3JlLWZpbHRlci1odWI+XHJcbiAgICB9XHJcblxyXG48L2Rpdj5cclxuXHJcbjxuZy10ZW1wbGF0ZSAjdG9wUGxhY2U+XHJcblxyXG4gICAgQGlmICghdGFiTW9kZSkge1xyXG4gICAgICAgIEBpZiAoISFzaG93UGFyYW1LaXQpIHtcclxuICAgICAgICAgICAgPGRpdj5cclxuICAgICAgICAgICAgICAgIDxjb3JlLWNvbW1vbi1wYXJhbS1raXQgW2hpZGRlbk1vZGVdPVwiZmFsc2VcIiBbZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JdPVwiZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc109XCJlbmFibGVUaW1lWm9uZUNvbnZlcnRlckZvckRhdGVUaW1lUGVyaW9kUGFyYW1ldGVyc1wiXHJcbiAgICAgICAgICAgICAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXldPVwiZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW3N0YXR1c0luY2x1c2lvbkZvcl09XCJzdGF0dXNJbmNsdXNpb25Gb3JcIiBbc3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXldPVwic3RhdHVzSW5jbHVzaW9uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgICAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIiBbc3RhdHVzT3B0aW9ucyRdPVwic3RhdHVzT3B0aW9ucyRcIiBbc2hvd09yZ1BhcmFtXT1cInNob3dPcmdQYXJhbVwiXHJcbiAgICAgICAgICAgICAgICAgICAgW2hpZGVHZW5lcmFsU2VhcmNoXT1cImhpZGVHZW5lcmFsU2VhcmNoXCIgW2hpZGVEYXRlUGVyaW9kQ29tcGFyaXNvbl09XCJoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIFtoaWRlU3RhdHVzSW5jbHVzaW9uXT1cImhpZGVTdGF0dXNJbmNsdXNpb25cIlxyXG4gICAgICAgICAgICAgICAgICAgIChvbkNoYW5nZSk9XCJvblBhcmFtS2l0VmFsdWVDaGFuZ2UoJGV2ZW50KVwiPjwvY29yZS1jb21tb24tcGFyYW0ta2l0PlxyXG4gICAgICAgICAgICA8L2Rpdj5cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIDwhLS0gQGlmIChlbmFibGVGaWx0ZXJLaXQpIHtcclxuICAgICAgICAgICAgPGNvcmUtZmlsdGVyLWtpdCBcclxuICAgICAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yXT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yXCJcclxuICAgICAgICAgICAgW2VuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzXT1cImVuYWJsZVRpbWVab25lQ29udmVydGVyRm9yRGF0ZVRpbWVQZXJpb2RQYXJhbWV0ZXJzXCJcclxuICAgICAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXldPVwiZGF0ZVBlcmlvZENvbXBhcmlzb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JdPVwic3RhdHVzSW5jbHVzaW9uRm9yXCIgXHJcbiAgICAgICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleV09XCJzdGF0dXNJbmNsdXNpb25Gb3JMYWJlbEtleVwiXHJcbiAgICAgICAgICAgIFtzdGF0dXNPcHRpb25zQXBpXT1cInN0YXR1c09wdGlvbnNBcGlcIiBcclxuICAgICAgICAgICAgW3N0YXR1c09wdGlvbnMkXT1cInN0YXR1c09wdGlvbnMkXCIgXHJcbiAgICAgICAgICAgIFtzaG93T3JnUGFyYW1dPVwic2hvd09yZ1BhcmFtXCJcclxuICAgICAgICAgICAgW3Nob3dPcmdQYXJhbURyb3Bkb3duXT1cInNob3dPcmdQYXJhbURyb3Bkb3duXCJcclxuICAgICAgICAgICAgW2hpZGVHZW5lcmFsU2VhcmNoXT1cImhpZGVHZW5lcmFsU2VhcmNoXCJcclxuICAgICAgICAgICAgW2hpZGVEYXRlUGVyaW9kQ29tcGFyaXNvbl09XCJoaWRlRGF0ZVBlcmlvZENvbXBhcmlzb25cIlxyXG4gICAgICAgICAgICBbaGlkZVN0YXR1c0luY2x1c2lvbl09XCJoaWRlU3RhdHVzSW5jbHVzaW9uXCJcclxuICAgICAgICAgICAgKG9uQ2hhbmdlKT1cIm9uUGFyYW1LaXRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICA+PC9jb3JlLWZpbHRlci1raXQ+ICAgICAgICAgICAgXHJcbiAgICAgICAgfSAtLT5cclxuICAgIH0gQGVsc2Uge1xyXG4gICAgPGNvcmUtdGFicyBbaGVhZGVyc109XCJ0YWJIZWFkZXJzXCIgW2NvbnRlbnRzXT1cIltdXCIgW2hlaWdodF09XCI0NVwiIFtoZWFkZXJMaW5lSGVpZ2h0XT1cIjQ1XCJcclxuICAgICAgICAob25IZWFkZXJDbGljayk9XCJvbkNvcmVUYWJzSGVhZGVyQ2xpY2soJGV2ZW50KVwiPlxyXG4gICAgPC9jb3JlLXRhYnM+XHJcbiAgICA8IS0tIDxjb3JlLWZpbHRlci1raXQgXHJcbiAgICAgICAgW2RhdGVQZXJpb2RDb21wYXJpc29uRm9yXT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yXCJcclxuICAgICAgICBbZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNdPVwiZW5hYmxlVGltZVpvbmVDb252ZXJ0ZXJGb3JEYXRlVGltZVBlcmlvZFBhcmFtZXRlcnNcIlxyXG4gICAgICAgIFtkYXRlUGVyaW9kQ29tcGFyaXNvbkZvckxhYmVsS2V5XT1cImRhdGVQZXJpb2RDb21wYXJpc29uRm9yTGFiZWxLZXlcIlxyXG4gICAgICAgIFtzdGF0dXNJbmNsdXNpb25Gb3JdPVwic3RhdHVzSW5jbHVzaW9uRm9yXCIgXHJcbiAgICAgICAgW3N0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XT1cInN0YXR1c0luY2x1c2lvbkZvckxhYmVsS2V5XCJcclxuICAgICAgICBbc3RhdHVzT3B0aW9uc0FwaV09XCJzdGF0dXNPcHRpb25zQXBpXCIgXHJcbiAgICAgICAgW3N0YXR1c09wdGlvbnMkXT1cInN0YXR1c09wdGlvbnMkXCIgXHJcbiAgICAgICAgW3Nob3dPcmdQYXJhbV09XCJzaG93T3JnUGFyYW1cIlxyXG4gICAgICAgIFtzaG93T3JnUGFyYW1Ecm9wZG93bl09XCJzaG93T3JnUGFyYW1Ecm9wZG93blwiXHJcbiAgICAgICAgW2hpZGVHZW5lcmFsU2VhcmNoXT1cImhpZGVHZW5lcmFsU2VhcmNoXCJcclxuICAgICAgICBbaGlkZURhdGVQZXJpb2RDb21wYXJpc29uXT1cImhpZGVEYXRlUGVyaW9kQ29tcGFyaXNvblwiXHJcbiAgICAgICAgW2hpZGVTdGF0dXNJbmNsdXNpb25dPVwiaGlkZVN0YXR1c0luY2x1c2lvblwiXHJcbiAgICAgICAgKG9uQ2hhbmdlKT1cIm9uUGFyYW1LaXRWYWx1ZUNoYW5nZSgkZXZlbnQpXCJcclxuICAgID48L2NvcmUtZmlsdGVyLWtpdD4gLS0+XHJcbiAgICB9XHJcblxyXG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cInRvcFwiPlxyXG4gICAgPC9uZy1jb250YWluZXI+XHJcblxyXG48L25nLXRlbXBsYXRlPlxyXG5cclxuPG5nLXRlbXBsYXRlICNjb3JlVGFibGU+XHJcblxyXG4gICAgPGRpdiBbY2xhc3Mub3BhY2l0eTBdPVwiISEhZ2VvbWV0cmljRG9uZVwiPlxyXG5cclxuICAgICAgICA8IS0tXHJcbiAgICAgICAgICAgIEtoaSDEkcOjIHTDrW5oIMSRxrDhu6NjIGNow61uaCB4w6FjIGNoaeG7gXUgY2FvIGNvbXBvc2l0aW9uSGVpZ2h0IGPhu6dhIGNvcmUtY29tcG9zaXRpb25cclxuICAgICAgICAgICAgQ+G6p24gdMOtbmggxJHGsOG7o2MgY2jDrW5oIHjDoWMgY2hp4buBdSBjYW8gY29yZVRhYmxlSGVpZ2h0IGPhu6dhIENvcmVUYWJsZVxyXG4gICAgICAgICAgICBO4bq/dSBwaOG6p24gdG9wIGPhu6dhIGNvbXBvc2l0aW9uIGPhu5EgxJHhu4tuaCAodsOtIGThu6Uga2hpIHPhu60gZOG7pW5nIENvcmVQYXJhbUtpdCkgdGjDrCBwaMOpcCB0cuG7qyDEkcahbiBnaeG6o25cclxuICAgICAgICAgICAgTmjGsG5nIG7hur91IHBo4bqnbiB0b3AgxJHGsOG7o2MgY3VzdG9taXplLCB0YSBwaOG6o2kgc+G7rSBk4bulbmcgZXh0cmFNYW51YWxPZmZzZXRcclxuXHJcbiAgICAgICAgICAgIEPhuqduIHTDrW5oIHRhYmxlSGVpZ2h0IG5oxrAgdGjhur8gbsOgbz9cclxuICAgICAgICAtLT5cclxuICAgICAgICA8Y29yZS10YWJsZSAjY29yZVRhYmxlQWxvbmUgd2lkdGg9XCIxMDAlXCIgW2hlaWdodF09XCJ0YWJsZUhlaWdodFwiIFtyb3dIZWlnaHRdPVwicm93SGVpZ2h0IHx8ICc0NnB4J1wiIFt3cmFwXT1cIndyYXBcIlxyXG4gICAgICAgICAgICBbcHJpbWFyeUtleV09XCJwcmltYXJ5S2V5XCJcclxuICAgICAgICAgICAgW2NvbHVtbnNdPVwiY29sdW1uc1wiIFtkYXRhXT1cImxpc3RcIiBbc2hvd0NoZWNrYm94XT1cIiEhIWhpZGVDaGVja1wiIGhlYWRlckhlaWdodD1cIjYwcHhcIlxyXG4gICAgICAgICAgICBbc2hvd1Rvb2xzXT1cInNob3dMaXN0SW5saW5lVG9vbHNcIiBbdG9vbHNdPVwiaW5saW5lVG9vbHNcIiAob25Ub29sQ2xpY2spPVwib25Ub29sQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChvblJvd0NsaWNrKT1cIm9uUm93Q2xpY2soJGV2ZW50KVwiIChvblJvd0RvdWJsZUNsaWNrKT1cIm9uUm93RG91YmxlQ2xpY2soJGV2ZW50KVwiXHJcbiAgICAgICAgICAgIChvblNlbGVjdGVkSWRzQ2hhbmdlKT1cIm9uU2VsZWN0ZWRJZHNDaGFuZ2UoJGV2ZW50KVwiIChvblNlbGVjdGVkRGF0YUNoYW5nZSk9XCJvblNlbGVjdGVkRGF0YUNoYW5nZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgW2Zyb3plbl09XCJmcm96ZW4gfHwgMVwiIChvblNlYXJjaGluZyk9XCJvblNlYXJjaGluZygkZXZlbnQpXCJcclxuICAgICAgICAgICAgKG9uQ29sdW1uQ2FwdGlvbkNsaWNrKT1cIm9uQ29sdW1uQ2FwdGlvbkNsaWNrKCRldmVudClcIlxyXG4gICAgICAgICAgICBbY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJdPVwiY29yZVBhZ2VMaXN0SW5zdGFuY2VOdW1iZXJcIiBbbG9hZGluZ109XCJsb2FkaW5nXCJcclxuICAgICAgICAgICAgW2NvbHVtblNlYXJjaERlZmF1bHRPcGVuXT1cImNvbHVtblNlYXJjaERlZmF1bHRPcGVuXCIgW2xhenlMb2FkaW5nXT1cInRydWVcIiBbaGVhZGVyV3JhcF09XCJoZWFkZXJXcmFwXCJcclxuICAgICAgICAgICAgW2hlYWRlckZpcnN0Um93SGVpZ2h0XT1cImhlYWRlckZpcnN0Um93SGVpZ2h0XCIgW25vUGFkZGluZ0NlbGxdPVwibm9QYWRkaW5nQ2VsbFwiXHJcbiAgICAgICAgICAgIFtkaXNhYmxlSGlnaGxpZ2h0T25DbGlja109XCJkaXNhYmxlSGlnaGxpZ2h0T25DbGlja1wiIFtwcmltYXJ5S2V5XT1cInByaW1hcnlLZXlcIlxyXG4gICAgICAgICAgICBbYXV0b0NvbHVtbkZpdEF2YWlsYWJsZVNwYWNlXT1cImF1dG9Db2x1bW5GaXRBdmFpbGFibGVTcGFjZVwiXHJcbiAgICAgICAgICAgID48L2NvcmUtdGFibGU+XHJcblxyXG4gICAgICAgIDxkaXYgY2xhc3M9XCJkLWZsZXggZC1mbGV4LWJldHdlZW4gcGFnaW5hdGlvbi13cmFwcGVyIHctMTAwXCIgI3BhZ2luYXRpb25Db250YWluZXI+XHJcbiAgICAgICAgICAgIDxjb3JlLXBhZ2luYXRpb24tZnVsbCBbaGVpZ2h0XT1cInBhZ2luYXRpb25IZWlnaHRcIiBbY3VycmVudFBhZ2UkXT1cImN1cnJlbnRQYWdlJFwiIFtwYWdlU2l6ZSRdPVwicGFnZVNpemUkXCJcclxuICAgICAgICAgICAgICAgIFtwYWdlQ291bnRdPVwicGFnZUNvdW50XCIgW2lubmVyQm9keUNvdW50JF09XCJpbm5lckJvZHlDb3VudCRcIiBbcGFnaW5hdGlvbiRdPVwicGFnaW5hdGlvbiRcIlxyXG4gICAgICAgICAgICAgICAgW2xvYWRpbmddPVwibG9hZGluZ1wiIFtmaXhlZFBhZ2VTaXplXT1cImZpeGVkUGFnZVNpemVcIiBbYmFja2dyb3VuZF09XCInIzg0ODQ4NCdcIj48L2NvcmUtcGFnaW5hdGlvbi1mdWxsPlxyXG5cclxuICAgICAgICA8L2Rpdj5cclxuXHJcbiAgICA8L2Rpdj5cclxuXHJcbjwvbmctdGVtcGxhdGU+XHJcblxyXG48Y29yZS1hcGktcHJvZ3Jlc3MgKm5nSWY9XCJsb25nQXBpUnVubmluZ1wiIChvbkNsb3NlKT1cIm9uUHJvZ3Jlc3NXaW5kb3dDbG9zZSgkZXZlbnQpXCI+PC9jb3JlLWFwaS1wcm9ncmVzcz5cclxuXHJcbjxhcHAtZnVsbHNjcmVlbi1tb2RhbC1sb2FkZXIgKm5nSWY9XCJwcmVmZXRjaExvYWRpbmdcIj48L2FwcC1mdWxsc2NyZWVuLW1vZGFsLWxvYWRlcj4iXX0=