@sunbird-cb/consumption 0.0.33 → 0.0.34

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.
@@ -819,13 +819,18 @@ export class ContentStripWithTabsLibComponent extends WidgetBaseComponent {
819
819
  /** @type {?} */
820
820
  const content = response.results.response[strip.request.trendingSearch.responseKey] || [];
821
821
  this.processStrip(strip, this.transformContentsToWidgets(content, strip), 'done', calculateParentStatus, response.viewMoreUrl || '');
822
+ if (!content.length) {
823
+ this.emptyResponse.emit(true);
824
+ }
822
825
  }
823
826
  else {
827
+ this.emptyResponse.emit(true);
824
828
  this.processStrip(strip, [], 'done', calculateParentStatus, null);
825
829
  }
826
830
  }
827
831
  catch (error) {
828
832
  // Handle errors
833
+ this.emptyResponse.emit(true);
829
834
  this.processStrip(strip, [], 'error', calculateParentStatus, null);
830
835
  }
831
836
  }
@@ -2017,4 +2022,4 @@ if (false) {
2017
2022
  */
2018
2023
  ContentStripWithTabsLibComponent.prototype.langtranslations;
2019
2024
  }
2020
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uLyIsInNvdXJjZXMiOlsibGliL19jb21tb24vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFvQixtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUdoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBRUwsYUFBYSxFQUNiLFlBQVksRUFDWixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBR3hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFFekMsb0NBcUNDOzs7SUFwQ0Msb0NBQVk7O0lBQ1osNkNBQXNCOztJQUN0QixxQ0FBYzs7SUFDZCwwQ0FBbUI7O0lBQ25CLGlEQUEwQjs7SUFDMUIsd0NBQXNEOztJ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LG1EQUFrQzs7Ozs7SUFDbEMscURBQW1DOzs7OztJQUNuQyw0REFBeUQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCwgSW5wdXQsIE9uRGVzdHJveSwgSG9zdEJpbmRpbmcsIEluamVjdCwgRXZlbnRFbWl0dGVyLCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5zV2lkZ2V0UmVzb2x2ZXIsIFdpZGdldEJhc2VDb21wb25lbnQgfSBmcm9tICdAc3VuYmlyZC1jYi9yZXNvbHZlci12Mic7XG5pbXBvcnQgeyBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzIH0gZnJvbSAnLi9jb250ZW50LXN0cmlwLXdpdGgtdGFicy1saWIubW9kZWwnO1xuLy8gaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJ1xuaW1wb3J0IHsgV2lkZ2V0Q29udGVudFNlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvd2lkZ2V0LWNvbnRlbnQuc2VydmljZSc7XG5pbXBvcnQgeyBOc0NvbnRlbnQgfSBmcm9tICcuLi8uLi9fbW9kZWxzL3dpZGdldC1jb250ZW50Lm1vZGVsJztcbmltcG9ydCB7IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvbXVsdGlsaW5ndWFsLXRyYW5zbGF0aW9ucy5zZXJ2aWNlJztcbmltcG9ydCB7XG4gIFRGZXRjaFN0YXR1cyxcbiAgTG9nZ2VyU2VydmljZSxcbiAgRXZlbnRTZXJ2aWNlLFxuICBDb25maWd1cmF0aW9uc1NlcnZpY2UsXG4gIFV0aWxpdHlTZXJ2aWNlLFxuICBXc0V2ZW50cyxcbn0gZnJvbSAnQHN1bmJpcmQtY2IvdXRpbHMtdjInO1xuaW1wb3J0IHsgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBmaWx0ZXIgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBXaWRnZXRVc2VyU2VydmljZSB9IGZyb20gJy4uLy4uL19zZXJ2aWNlcy93aWRnZXQtdXNlci5zZXJ2aWNlJztcbi8vIGltcG9ydCB7IGVudmlyb25tZW50IH0gZnJvbSAnc3JjL2Vudmlyb25tZW50cy9lbnZpcm9ubWVudCdcbi8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZVxuaW1wb3J0ICogYXMgXyBmcm9tICdsb2Rhc2gnXG5pbXBvcnQgeyBNYXRUYWJDaGFuZ2VFdmVudCB9IGZyb20gJ0Bhbmd1bGFyL21hdGVyaWFsJztcbmltcG9ydCB7IE5zQ2FyZENvbnRlbnQgfSBmcm9tICcuLi8uLi9fbW9kZWxzL2NhcmQtY29udGVudC12Mi5tb2RlbCc7XG5pbXBvcnQgeyBJVG9kYXlFdmVudHMgfSBmcm9tICcuLi8uLi9fbW9kZWxzL2V2ZW50JztcbmltcG9ydCB7IFRyYW5zbGF0ZVNlcnZpY2UgfSBmcm9tICdAbmd4LXRyYW5zbGF0ZS9jb3JlJztcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XG5cbmludGVyZmFjZSBJU3RyaXBVbml0Q29udGVudERhdGEge1xuICBrZXk6IHN0cmluZztcbiAgY2FuSGlkZVN0cmlwOiBib29sZWFuO1xuICBtb2RlPzogc3RyaW5nO1xuICBzaG93U3RyaXA6IGJvb2xlYW47XG4gIGRpc2FibGVUcmFuc2xhdGU6IGJvb2xlYW47XG4gIHdpZGdldHM/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YVtdO1xuICBzdHJpcFRpdGxlOiBzdHJpbmc7XG4gIHN0cmlwVGl0bGVMaW5rPzoge1xuICAgIGxpbms6ICB7XG4gICAgICBxdWVyeVBhcmFtczogc3RyaW5nXG4gICAgfSxcbiAgICBpY29uOiBzdHJpbmcsXG4gICAgcXVlcnlQYXJhbXM6IHN0cmluZ1xuICB9O1xuICBzbGlkZXJDb25maWc/OiB7XG4gICAgc2hvd05hdnM6IGJvb2xlYW4sXG4gICAgc2hvd0RvdHM6IGJvb2xlYW4sXG4gICAgbWF4V2lkZ2V0cz86IG51bWJlclxuICAgIGNlcmlmaWNhdGVDYXJkTWFyZ2luPzogYm9vbGVhblxuICB9O1xuICBzdHJpcENvbmZpZzogYW55O1xuICB0YWJzPzogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiW10gfCB1bmRlZmluZWQ7XG4gIHN0cmlwTmFtZT86IHN0cmluZztcbiAgc3RyaXBMb2dvPzogc3RyaW5nO1xuICBkZXNjcmlwdGlvbj86IHN0cmluZztcbiAgc3RyaXBJbmZvPzogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JU3RyaXBJbmZvO1xuICBub0RhdGFXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgZXJyb3JXaWRnZXQ/OiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YTtcbiAgc2hvd09uTm9EYXRhOiBib29sZWFuO1xuICBzaG93T25Mb2FkZXI6IGJvb2xlYW47XG4gIHNob3dPbkVycm9yOiBib29sZWFuO1xuICBsb2FkZXJXaWRnZXRzPzogYW55O1xuICBzdHJpcEJhY2tncm91bmQ/OiBzdHJpbmc7XG4gIHNlY29uZGFyeUhlYWRpbmc/OiBhbnk7XG4gIHZpZXdNb3JlVXJsOiBhbnk7XG4gIHJlcXVlc3Q/OiBhbnlcbn1cblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnc2ItdWljLWNvbnRlbnQtc3RyaXAtd2l0aC10YWJzJyxcbiAgdGVtcGxhdGVVcmw6ICcuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWycuL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQuc2NzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDb250ZW50U3RyaXBXaXRoVGFic0xpYkNvbXBvbmVudCBleHRlbmRzIFdpZGdldEJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50c1xuICBPbkluaXQsXG4gIE9uRGVzdHJveSxcbiAgTnNXaWRnZXRSZXNvbHZlci5JV2lkZ2V0RGF0YTxOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBNdWx0aXBsZT4ge1xuICBASW5wdXQoKSB3aWRnZXREYXRhITogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwTXVsdGlwbGU7XG4gIEBPdXRwdXQoKSBlbXB0eVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQE91dHB1dCgpIHZpZXdBbGxSZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSB0ZWxlbXRyeVJlc3BvbnNlID0gbmV3IEV2ZW50RW1pdHRlcjxhbnk+KClcbiAgQElucHV0KCkgcHJvdmlkZXJJZCA6IGFueSA9ICcnXG4gIEBJbnB1dCgpIGVtaXRWaWV3QWxsIDogYm9vbGVhbiA9IGZhbHNlXG4gIEBIb3N0QmluZGluZygnaWQnKVxuICBwdWJsaWMgaWQgPSBgd3Mtc3RyaXAtbWlsdGlwbGVfJHtNYXRoLnJhbmRvbSgpfWA7XG4gIHN0cmlwc1Jlc3VsdERhdGFNYXA6IHsgW2tleTogc3RyaW5nXTogSVN0cmlwVW5pdENvbnRlbnREYXRhIH0gPSB7fTtcbiAgc3RyaXBzS2V5T3JkZXI6IHN0cmluZ1tdID0gW107XG4gIHNob3dBY2NvcmRpb25EYXRhID0gdHJ1ZTtcbiAgc2hvd1BhcmVudExvYWRlciA9IGZhbHNlO1xuICBzaG93UGFyZW50RXJyb3IgPSBmYWxzZTtcbiAgc2hvd1BhcmVudE5vRGF0YSA9IGZhbHNlO1xuICBlcnJvckRhdGFDb3VudCA9IDA7XG4gIG5vRGF0YUNvdW50ID0gMDtcbiAgc3VjY2Vzc0RhdGFDb3VudCA9IDA7XG4gIGNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICBiYXNlVXJsID0gdGhpcy5jb25maWdTdmMuc2l0ZVBhdGggfHwgJyc7XG4gIHZlaWZpZWRLYXJtYXlvZ2kgPSBmYWxzZTtcbiAgZW52aXJvbm1lbnQhOiBhbnk7XG4gIGNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgZGVmYXVsdE1heFdpZGdldHMgPSAxMjtcbiAgZW5yb2xsSW50ZXJ2YWw6IGFueTtcbiAgdG9kYXlzRXZlbnRzOiBhbnkgPSBbXTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAvLyBwcml2YXRlIGNvbnRlbnRTdHJpcFN2YzogQ29udGVudFN0cmlwTmV3TXVsdGlwbGVTZXJ2aWNlLFxuICAgIEBJbmplY3QoJ2Vudmlyb25tZW50JykgZW52aXJvbm1lbnQ6IGFueSxcbiAgICBwcml2YXRlIGNvbnRlbnRTdmM6IFdpZGdldENvbnRlbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgbG9nZ2VyU3ZjOiBMb2dnZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgZXZlbnRTdmM6IEV2ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGNvbmZpZ1N2YzogQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICAgIHB1YmxpYyB1dGlsaXR5U3ZjOiBVdGlsaXR5U2VydmljZSxcbiAgICAvLyBwcml2YXRlIGh0dHA6IEh0dHBDbGllbnQsXG4gICAgLy8gcHJpdmF0ZSBzZWFyY2hTZXJ2U3ZjOiBTZWFyY2hTZXJ2U2VydmljZSxcbiAgICBwdWJsaWMgcm91dGVyOiBSb3V0ZXIsXG4gICAgcHJpdmF0ZSB1c2VyU3ZjOiBXaWRnZXRVc2VyU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGxhbmd0cmFuc2xhdGlvbnM6IE11bHRpbGluZ3VhbFRyYW5zbGF0aW9uc1NlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIoKTtcbiAgICBpZiAobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKSB7XG4gICAgICB0aGlzLnRyYW5zbGF0ZS5zZXREZWZhdWx0TGFuZygnZW4nKTtcbiAgICAgIGxldCBsYW5nID0gSlNPTi5zdHJpbmdpZnkobG9jYWxTdG9yYWdlLmdldEl0ZW0oJ3dlYnNpdGVMYW5ndWFnZScpKTtcbiAgICAgIGxhbmcgPSBsYW5nLnJlcGxhY2UoL1xcXCIvZywgJycpO1xuICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGxhbmcpO1xuICAgIH1cbiAgICB0aGlzLmVudmlyb25tZW50ID0gZW52aXJvbm1lbnRcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIC8vIGNvbnN0IHVybCA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmXG4gICAgdGhpcy5pbml0RGF0YSgpO1xuXG4gICAgdGhpcy5jb250ZW50U3ZjLnRlbGVtZXRyeURhdGEkLnN1YnNjcmliZSgoZGF0YTogYW55KSA9PiB7XG4gICAgICB0aGlzLnRlbGVtdHJ5UmVzcG9uc2UuZW1pdChkYXRhKVxuICAgIH0pXG4gIH1cblxuICBuZ09uRGVzdHJveSgpIHtcbiAgICBpZiAodGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIHNob3dBY2NvcmRpb24oa2V5OiBzdHJpbmcpIHtcbiAgICBpZiAodGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLm1vZGUgPT09ICdhY2NvcmRpb24nKSB7XG4gICAgICByZXR1cm4gdGhpcy5zaG93QWNjb3JkaW9uRGF0YTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICBzZXRIaWRkZW5Gb3JTdHJpcChrZXk6IHN0cmluZykge1xuICAgIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtrZXldLnNob3dTdHJpcCA9IGZhbHNlO1xuICAgIHNlc3Npb25TdG9yYWdlLnNldEl0ZW0oYGNzdHJpcF8ke2tleX1gLCAnMScpO1xuICB9XG4gIHByaXZhdGUgZ2V0SWZTdHJpcEhpZGRlbihrZXk6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHN0b3JhZ2VJdGVtID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShgY3N0cmlwXyR7a2V5fWApO1xuICAgIHJldHVybiBCb29sZWFuKHN0b3JhZ2VJdGVtICE9PSAnMScpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0RGF0YSgpIHtcbiAgICB0aGlzLnN0cmlwc0tleU9yZGVyID0gdGhpcy53aWRnZXREYXRhICYmIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwcy5tYXAoc3RyaXAgPT4gc3RyaXAua2V5KSB8fCBbXTtcbiAgICBpZiAodGhpcy53aWRnZXREYXRhLmxvYWRlciAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzLmxlbmd0aCkge1xuICAgICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gdHJ1ZTtcbiAgICB9XG4gICAgLy8gRmV0Y2ggdGhlIGRhdGFcbiAgICBmb3IgKGNvbnN0IHN0cmlwIG9mIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMpIHtcbiAgICAgIGlmICh0aGlzLmNoZWNrRm9yRW1wdHlXaWRnZXQoc3RyaXApKSB7XG4gICAgICAgIHRoaXMuZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShzdHJpcCwgZmFsc2UpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIHRydWUsIG51bGwpO1xuICAgICAgfVxuICAgIH1cbiAgICAvLyBTdWJzY3JpcHRpb24gZm9yIGNoYW5nZXNcbiAgICBjb25zdCBrZXlBbmRFdmVudDogeyBrZXk6IHN0cmluZzsgdHlwZTogc3RyaW5nOyBmcm9tOiBzdHJpbmcgfVtdID0gdGhpcy53aWRnZXREYXRhLnN0cmlwc1xuICAgICAgLm1hcChzdHJpcCA9PiAoe1xuICAgICAgICBrZXk6IHN0cmlwLmtleSxcbiAgICAgICAgdHlwZTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZXZlbnRUeXBlKSB8fCAnJyxcbiAgICAgICAgZnJvbTogKHN0cmlwLnJlZnJlc2hFdmVudCAmJiBzdHJpcC5yZWZyZXNoRXZlbnQuZnJvbS50b1N0cmluZygpKSB8fCAnJyxcbiAgICAgIH0pKVxuICAgICAgLmZpbHRlcigoeyBrZXksIHR5cGUsIGZyb20gfSkgPT4ga2V5ICYmIHR5cGUgJiYgZnJvbSk7XG4gICAgY29uc3QgZXZlbnRUeXBlU2V0ID0gbmV3IFNldChrZXlBbmRFdmVudC5tYXAoZSA9PiBlLnR5cGUpKTtcbiAgICB0aGlzLmNoYW5nZUV2ZW50U3Vic2NyaXB0aW9uID0gdGhpcy5ldmVudFN2Yy5ldmVudHMkXG4gICAgICAucGlwZShmaWx0ZXIoZXZlbnQgPT4gZXZlbnRUeXBlU2V0LmhhcyhldmVudC5ldmVudFR5cGUpKSlcbiAgICAgIC5zdWJzY3JpYmUoZXZlbnQgPT4ge1xuICAgICAgICBrZXlBbmRFdmVudFxuICAgICAgICAgIC5maWx0ZXIoZSA9PiBlLnR5cGUgPT09IGV2ZW50LmV2ZW50VHlwZSAmJiBlLmZyb20gPT09IGV2ZW50LmZyb20pXG4gICAgICAgICAgLm1hcChlID0+IGUua2V5KVxuICAgICAgICAgIC5mb3JFYWNoKGsgPT4gdGhpcy5mZXRjaFN0cmlwRnJvbUtleShrLCBmYWxzZSkpO1xuICAgICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZldGNoU3RyaXBGcm9tS2V5KGtleTogc3RyaW5nLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0gdGhpcy53aWRnZXREYXRhLnN0cmlwcy5maW5kKHN0cmlwID0+IHN0cmlwLmtleSA9PT0ga2V5KTtcbiAgICBpZiAoc3RyaXBEYXRhKSB7XG4gICAgICB0aGlzLmZldGNoU3RyaXBGcm9tUmVxdWVzdERhdGEoc3RyaXBEYXRhLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIH1cbiAgfVxuXG4gIGlzU3RyaXBTaG93aW5nKGRhdGE6IGFueSkge1xuICAgIGxldCBjb3VudCA9IDA7XG4gICAgaWYgKGRhdGEgJiYgZGF0YS5rZXkgPT09IHRoaXMuZW52aXJvbm1lbnQucHJvZ3JhbVN0cmlwS2V5ICYmICghZGF0YS50YWJzIHx8ICFkYXRhLnRhYnMubGVuZ3RoKSAmJlxuICAgICAgZGF0YS5zdHJpcFRpdGxlID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcE5hbWUgJiYgZGF0YS53aWRnZXRzLmxlbmd0aCA+IDApIHtcbiAgICAgIGRhdGEud2lkZ2V0cy5mb3JFYWNoKChrZXk6IGFueSkgPT4ge1xuICAgICAgICBpZiAoa2V5ICYmIGtleS53aWRnZXREYXRhLmNvbnRlbnQucHJpbWFyeUNhdGVnb3J5ID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcFByaW1hcnlDYXRlZ29yeSkge1xuICAgICAgICAgIGNvdW50ID0gY291bnQgKyAxO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICAgIGlmIChjb3VudCA+IDApIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSB0cnVlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZGF0YS5zaG93U3RyaXAgPSBmYWxzZTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gY29uc29sZS5sb2coJ2RhdGEua2V5JywgZGF0YSwgZGF0YS5rZXksIGRhdGEud2lkZ2V0cyk7XG4gICAgcmV0dXJuIGRhdGEuc2hvd1N0cmlwO1xuICB9XG5cbiAgZ2V0IGlzTW9iaWxlKCkge1xuICAgIHJldHVybiB0aGlzLnV0aWxpdHlTdmMuaXNNb2JpbGUgfHwgZmFsc2U7XG4gIH1cblxuICBnZXRkYXRhKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIGlmIChkYXRhLnN0cmlwSW5mbykge1xuICAgICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvLndpZGdldDtcbiAgICB9XG4gICAgcmV0dXJuIHt9O1xuXG4gIH1cbiAgY2hlY2tDb25kaXRpb24od0RhdGE6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcE11bHRpcGxlLCBkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAod0RhdGEuc3RyaXBzWzBdLnN0cmlwQ29uZmlnICYmIHdEYXRhLnN0cmlwc1swXS5zdHJpcENvbmZpZy5oaWRlU2hvd0FsbCkge1xuICAgICAgcmV0dXJuICF3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcuaGlkZVNob3dBbGw7XG4gICAgfVxuICAgIHJldHVybiB3RGF0YS5zdHJpcHNbMF0udmlld01vcmVVcmwgJiYgZGF0YS53aWRnZXRzICYmIGRhdGEud2lkZ2V0cy5sZW5ndGggPj0gNDtcbiAgfVxuICBjaGVja1Zpc2libGUoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEuc3RyaXBJbmZvICYmIGRhdGEuc3RyaXBJbmZvLnZpc2liaWxpdHlNb2RlID09PSAndmlzaWJsZSc7XG4gIH1cblxuICBnZXRDb250aW5ldUxlYXJuaW5nTGVudGgoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICB9XG4gIGdldExlbmd0aChkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoIWRhdGEudGFicyB8fCAhZGF0YS50YWJzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuIGRhdGEud2lkZ2V0cyA/IGRhdGEud2lkZ2V0cy5sZW5ndGggOiAwO1xuICAgIH0ge1xuICAgICAgLy8gaWYgdGFicyBhcmUgdGhlcmUgY2hlY2sgaWYgZWFjaCB0YWIgaGFzIHdpZGdldHMgYW5kIGdldCB0aGUgdGFiIHdpdGggbWF4IHdpZGdldHNcbiAgICAgIGNvbnN0IHRhYldpdGhNYXhXaWRnZXRzID0gZGF0YS50YWJzLnJlZHVjZShcbiAgICAgICAgKHByZXYsIGN1cnJlbnQpID0+IHtcbiAgICAgICAgICBpZiAoIXByZXYud2lkZ2V0cyAmJiAhY3VycmVudC53aWRnZXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKHByZXYud2lkZ2V0cyAmJiBjdXJyZW50LndpZGdldHMpIHtcbiAgICAgICAgICAgIHJldHVybiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpID8gcHJldiA6IGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChjdXJyZW50LndpZGdldHMgJiYgIXByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmICghY3VycmVudC53aWRnZXRzICYmIHByZXYud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIHByZXY7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIC8vIHJldHVybiAocHJldi53aWRnZXRzICYmIGN1cnJlbnQud2lkZ2V0cyAmJiAocHJldi53aWRnZXRzLmxlbmd0aCA+IGN1cnJlbnQud2lkZ2V0cy5sZW5ndGgpICkgPyBwcmV2IDogY3VycmVudFxuICAgICAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogYWxpZ25cbiAgICAgICAgfSwgZGF0YS50YWJzWzBdKTtcbiAgICAgIC8vIGlmIHRhYnMgaGFzIGF0bGVhc3QgMSB3aWRnZXRzIHRoZW4gc3RyaXAgd2lsbCBzaG93IG9yIGVsc2Ugbm90XG4gICAgICByZXR1cm4gdGFiV2l0aE1heFdpZGdldHMud2lkZ2V0cyA/IHRhYldpdGhNYXhXaWRnZXRzLndpZGdldHMubGVuZ3RoIDogMDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGdldEZpbHRlcnNGcm9tQXJyYXkodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzVjIodjZmaWx0ZXJzOiBhbnkpIHtcbiAgICBjb25zdCBmaWx0ZXJzOiBhbnkgPSB7fTtcbiAgICBpZiAodjZmaWx0ZXJzLmNvbnN0cnVjdG9yID09PSBBcnJheSkge1xuICAgICAgdjZmaWx0ZXJzLmZvckVhY2goKChmOiBhbnkpID0+IHtcbiAgICAgICAgT2JqZWN0LmtleXMoZikuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGZpbHRlcnNba2V5XSA9IGZba2V5XTtcbiAgICAgICAgfSk7XG4gICAgICB9KSk7XG4gICAgICByZXR1cm4gZmlsdGVycztcbiAgICB9XG4gICAgcmV0dXJuIHY2ZmlsdGVycztcbiAgfVxuXG4gIGNoZWNrRm9yRGF0ZUZpbHRlcnMoZmlsdGVyczogYW55KSB7XG4gICAgbGV0IHVzZXJEYXRhOiBhbnk7XG4gICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICB1c2VyRGF0YSA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlO1xuICAgIH1cblxuICAgIGlmIChmaWx0ZXJzICYmIGZpbHRlcnMuaGFzT3duUHJvcGVydHkoJ2JhdGNoZXMuZW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5kRGF0ZSddWyc+PSddID0gZXZhbChmaWx0ZXJzWydiYXRjaGVzLmVuZERhdGUnXVsnPj0nXSlcbiAgICB9IGVsc2UgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZScpKSB7XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbiAgICAgIGZpbHRlcnNbJ2JhdGNoZXMuZW5yb2xsbWVudEVuZERhdGUnXVsnPj0nXSA9IGV2YWwoZmlsdGVyc1snYmF0Y2hlcy5lbnJvbGxtZW50RW5kRGF0ZSddWyc+PSddKVxuICAgIH0gZWxzZSBpZiAoZmlsdGVycy5vcmdhbmlzYXRpb24gJiZcbiAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uLmluZGV4T2YoJzxvcmdJRD4nKSA+PSAwXG4gICAgKSB7XG4gICAgICBpZih0aGlzLnByb3ZpZGVySWQpIHtcbiAgICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24gPSB0aGlzLnByb3ZpZGVySWQ7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHVzZXJEYXRhICYmIHVzZXJEYXRhLnJvb3RPcmdJZDtcblxuICAgICAgICBpZiAoZmlsdGVycyAmJiBmaWx0ZXJzLmhhc093blByb3BlcnR5KCdkZXNpZ25hdGlvbicpKSB7XG4gICAgICAgICAgZmlsdGVycy5kZXNpZ25hdGlvbiA9IHVzZXJEYXRhLnByb2Zlc3Npb25hbERldGFpbHMubGVuZ3RoID4gMCA/XG4gICAgICAgICAgICB1c2VyRGF0YS5wcm9mZXNzaW9uYWxEZXRhaWxzWzBdLmRlc2lnbmF0aW9uIDogJyc7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIFxuICAgIH1cbiAgICByZXR1cm4gZmlsdGVycztcbiAgfVxuXG4gIHByaXZhdGUgZmV0Y2hTdHJpcEZyb21SZXF1ZXN0RGF0YShcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlLFxuICApIHtcbiAgICAvLyBzZXR0aW5nIGluaXRpYWwgdmFsdWVzXG4gICAgc3RyaXAubG9hZGVyV2lkZ2V0cyA9IHRoaXMudHJhbnNmb3JtU2tlbGV0b25Ub1dpZGdldHMoc3RyaXApO1xuICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2ZldGNoaW5nJywgZmFsc2UsIG51bGwpO1xuICAgIHRoaXMuZmV0Y2hGcm9tRW5yb2xsbWVudExpc3Qoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEZyb21TZWFyY2hWNihzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoRnJvbVRyZW5kaW5nQ29udGVudChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsQ2JwUGxhbnMoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEFsbFRvcENvbnRlbnQoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEFsbEZlYXR1cmVkQ29udGVudChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsQm9va01hcmtEYXRhKHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hBbGxQbGF5bGlzdFNlYXJjaChzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoUGxheWxpc3RSZWFkRGF0YShzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICBcbiAgICAvLyB0aGlzLmVucm9sbEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xuICAgIC8vICAgdGhpcy5mZXRjaEFsbENicFBsYW5zKHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpXG4gICAgLy8gfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDApXG4gIH1cblxuICBmZXRjaEZyb21FbnJvbGxtZW50TGlzdChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCkubGVuZ3RoKSB7XG4gICAgICBsZXQgdXNlcklkID0gJyc7XG4gICAgICBsZXQgY29udGVudDogTnNDb250ZW50LklDb250ZW50W107XG4gICAgICBsZXQgY29udGVudE5ldzogTnNDb250ZW50LklDb250ZW50W107XG4gICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgIGNvbnN0IHF1ZXJ5UGFyYW1zID0gXy5nZXQoc3RyaXAucmVxdWVzdC5lbnJvbGxtZW50TGlzdCwgJ3F1ZXJ5UGFyYW1zJyk7XG4gICAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgICAgdXNlcklkID0gdGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUudXNlcklkO1xuICAgICAgfVxuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lOiBkZXByZWNhdGlvblxuICAgICAgdGhpcy51c2VyU3ZjLmZldGNoVXNlckJhdGNoTGlzdCh1c2VySWQsIHF1ZXJ5UGFyYW1zKS5zdWJzY3JpYmUoXG4gICAgICAgIChyZXN1bHQ6IGFueSkgPT4ge1xuICAgICAgICAgIGNvbnN0IGNvdXJzZXMgPSByZXN1bHQgJiYgcmVzdWx0LmNvdXJzZXM7XG4gICAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgICAgIGNvdXJzZXMubGVuZ3RoID4gNSAmJiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5wb3N0Q2FyZEZvclNlYXJjaCxcbiAgICAgICAgICApO1xuICAgICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgICAgICA/IHtcbiAgICAgICAgICAgICAgcGF0aDogKHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGgpIHx8ICcnLFxuICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGY6XG4gICAgICAgICAgICAgICAgICBzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgLy8gdGhpcy5zZWFyY2hTZXJ2U3ZjLnRyYW5zZm9ybVNlYXJjaFY2RmlsdGVycyhcbiAgICAgICAgICAgICAgICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmZpbHRlcnNcbiAgICAgICAgICAgICAgICAgICAgICAvLyApLFxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgaWYgKGNvdXJzZXMgJiYgY291cnNlcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGNvbnRlbnQgPSBjb3Vyc2VzLm1hcCgoYzogYW55KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRUZW1wOiBOc0NvbnRlbnQuSUNvbnRlbnQgPSBjLmNvbnRlbnQ7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmNvbXBsZXRpb25QZXJjZW50YWdlID0gYy5jb21wbGV0aW9uUGVyY2VudGFnZSB8fCBjLnByb2dyZXNzIHx8IDA7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmNvbXBsZXRpb25TdGF0dXMgPSBjLmNvbXBsZXRpb25TdGF0dXMgfHwgYy5zdGF0dXMgfHwgMDtcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuZW5yb2xsZWREYXRlID0gYy5lbnJvbGxlZERhdGUgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxhc3RDb250ZW50QWNjZXNzVGltZSA9IGMubGFzdENvbnRlbnRBY2Nlc3NUaW1lIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5sYXN0UmVhZENvbnRlbnRTdGF0dXMgPSBjLmxhc3RSZWFkQ29udGVudFN0YXR1cyB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAubGFzdFJlYWRDb250ZW50SWQgPSBjLmxhc3RSZWFkQ29udGVudElkIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5scmNQcm9ncmVzc0RldGFpbHMgPSBjLmxyY1Byb2dyZXNzRGV0YWlscyB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAuaXNzdWVkQ2VydGlmaWNhdGVzID0gYy5pc3N1ZWRDZXJ0aWZpY2F0ZXMgfHwgW107XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmJhdGNoSWQgPSBjLmJhdGNoSWQgfHwgJyc7XG4gICAgICAgICAgICAgIHJldHVybiBjb250ZW50VGVtcDtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgICAvLyBUbyBmaWx0ZXIgY29udGVudCB3aXRoIGNvbXBsZXRpb25QZXJjZW50YWdlID4gMCxcbiAgICAgICAgICAvLyBzbyB0aGF0IG9ubHkgdGhvc2UgY29udGVudCB3aWxsIHNob3cgaW4gaG9tZSBwYWdlXG4gICAgICAgICAgLy8gY29udGludWUgbGVhcmluZyBzdHJpcFxuICAgICAgICAgIC8vIGlmIChjb250ZW50ICYmIGNvbnRlbnQubGVuZ3RoKSB7XG4gICAgICAgICAgLy8gICBjb250ZW50TmV3ID0gY29udGVudC5maWx0ZXIoKGM6IGFueSkgPT4ge1xuICAgICAgICAgIC8vICAgICAvKiogY29tbWVudGVkIGFzIGJvdGggYXJlIDAgYWZ0ZXIgZW5yb2xsbCAqL1xuICAgICAgICAgIC8vICAgICBpZiAoYy5jb21wbGV0aW9uUGVyY2VudGFnZSAmJiBjLmNvbXBsZXRpb25QZXJjZW50YWdlID4gMCkge1xuICAgICAgICAgIC8vICAgICAgIHJldHVybiBjXG4gICAgICAgICAgLy8gICAgIH1cbiAgICAgICAgICAvLyAgIH0pXG4gICAgICAgICAgLy8gfVxuXG4gICAgICAgICAgLy8gVG8gc29ydCBpbiBkZXNjZW5kaW5nIG9yZGVyIG9mIHRoZSBlbnJvbGxlZCBkYXRlXG4gICAgICAgICAgY29udGVudE5ldyA9IChjb250ZW50IHx8IFtdKS5zb3J0KChhOiBhbnksIGI6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc3QgZGF0ZUE6IGFueSA9IG5ldyBEYXRlKGEubGFzdENvbnRlbnRBY2Nlc3NUaW1lIHx8IDApO1xuICAgICAgICAgICAgY29uc3QgZGF0ZUI6IGFueSA9IG5ldyBEYXRlKGIubGFzdENvbnRlbnRBY2Nlc3NUaW1lIHx8IDApO1xuICAgICAgICAgICAgcmV0dXJuIGRhdGVCIC0gZGF0ZUE7XG4gICAgICAgICAgfSk7XG5cbiAgICAgICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgdGFiUmVzdWx0cyA9IHRoaXMuc3BsaXRFbnJvbGxtZW50VGFic0RhdGEoY29udGVudE5ldywgc3RyaXApO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbnRlbnROZXcsIHN0cmlwKSxcbiAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgIHZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgICB0YWJSZXN1bHRzXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoY29udGVudE5ldywgc3RyaXApLFxuICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgdmlld01vcmVVcmwsXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgKCkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICBzcGxpdEVucm9sbG1lbnRUYWJzRGF0YShjb250ZW50TmV3OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSwgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBjb25zdCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IHNwbGl0RGF0YSA9IHRoaXMuZ2V0SW5wcm9ncmVzc0FuZENvbXBsZXRlZChcbiAgICAgIGNvbnRlbnROZXcsXG4gICAgICAoZTogYW55KSA9PiBlLmNvbXBsZXRpb25TdGF0dXMgPT09IDEgfHwgZS5jb21wbGV0aW9uUGVyY2VudGFnZSA8IDEwMCxcbiAgICAgIHN0cmlwLFxuICAgICk7XG5cbiAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdHJpcC50YWJzLmxlbmd0aDsgaSArPSAxKSB7XG4gICAgICAgIGlmIChzdHJpcC50YWJzW2ldKSB7XG4gICAgICAgICAgdGFiUmVzdWx0cy5wdXNoKFxuICAgICAgICAgICAge1xuICAgICAgICAgICAgICAuLi5zdHJpcC50YWJzW2ldLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgICAuLi4oc3BsaXREYXRhLmZpbmQoaXRtSW5uZXIgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnNbaV0gJiYgaXRtSW5uZXIudmFsdWUgPT09IHN0cmlwLnRhYnNbaV0udmFsdWUpIHtcbiAgICAgICAgICAgICAgICAgIHJldHVybiBpdG1Jbm5lcjtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgICAgICAgICAgfSkpLFxuICAgICAgICAgICAgfVxuICAgICAgICAgICk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHRhYlJlc3VsdHM7XG4gIH1cblxuICBnZXRJbnByb2dyZXNzQW5kQ29tcGxldGVkKGFycmF5OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXN0b21GaWx0ZXI6IGFueSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCkge1xuICAgIGNvbnN0IGlucHJvZ3Jlc3M6IGFueVtdID0gW107XG4gICAgY29uc3QgY29tcGxldGVkOiBhbnlbXSA9IFtdO1xuICAgIGFycmF5LmZvckVhY2goKGU6IGFueSwgaWR4OiBudW1iZXIsIGFycjogYW55W10pID0+IChjdXN0b21GaWx0ZXIoZSwgaWR4LCBhcnIpID8gaW5wcm9ncmVzcyA6IGNvbXBsZXRlZCkucHVzaChlKSk7XG4gICAgcmV0dXJuIFtcbiAgICAgIHsgdmFsdWU6ICdpbnByb2dyZXNzJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhpbnByb2dyZXNzLCBzdHJpcCkgfSxcbiAgICAgIHsgdmFsdWU6ICdjb21wbGV0ZWQnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbXBsZXRlZCwgc3RyaXApIH1dO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hGcm9tU2VhcmNoVjYoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYpLmxlbmd0aCkge1xuICAgICAgLy8gaWYgKCEoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUubGVuZ3RoID4gMCkpIHtcbiAgICAgIC8vICAgaWYgKHRoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZSkge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gW3RoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZS5sb2NhbHNbMF1dXG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbJ2VuJ11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZyhvcmlnaW5hbEZpbHRlcnMpO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnM7XG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5jaGVja0ZvckRhdGVGaWx0ZXJzKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGcm9tQXJyYXkoXG4gICAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0LmZpbHRlcnMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAvLyBUT0RPOiBIYXZlIHRvIGV4dHJhY3QgcmVxdWVzdFJlcXVpcmVkIHRvIG91dGVyIGxldmVsIG9mIHRhYnMgY29uZmlnXG4gICAgICAgIGNvbnN0IGZpcnN0VGFiID0gc3RyaXAudGFic1swXTtcbiAgICAgICAgaWYgKGZpcnN0VGFiLnJlcXVlc3RSZXF1aXJlZCkge1xuICAgICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYWJGcm9tTWFwID0gKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1swXSkgYXMgTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiO1xuXG4gICAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVNlYXJjaFY2KHN0cmlwLCAwLCBjdXJyZW50VGFiRnJvbU1hcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuc2VhcmNoVjZSZXF1ZXN0KHN0cmlwLCBzdHJpcC5yZXF1ZXN0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlciAtIHJlc3BvbnNlLCAnLCByZXNwb25zZSlcbiAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgICAgIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LkV2ZW50KSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtRXZlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LkV2ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBzZWFyY2hWNlJlcXVlc3Qoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3Quc2VhcmNoVjYpIHtcbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnNlYXJjaFY2KHJlcXVlc3Quc2VhcmNoVjYpLnN1YnNjcmliZShyZXN1bHRzID0+IHtcbiAgICAgICAgICBjb25zdCBzaG93Vmlld01vcmUgPSBCb29sZWFuKFxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHQuY29udGVudCAmJiByZXN1bHRzLnJlc3VsdC5jb250ZW50Lmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGY6XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VhcmNoVjYgJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICAvLyBpZiAodmlld01vcmVVcmwgJiYgdmlld01vcmVVcmwucXVlcnlQYXJhbXMpIHtcbiAgICAgICAgICAvLyAgIHZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zID0gdmlld01vcmVVcmwucXVlcnlQYXJhbXNcbiAgICAgICAgICAvLyB9XG4gICAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIHJlamVjdChlcnJvcik7XG4gICAgICAgIH0sXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cblxuICBhc3luYyBmZXRjaEZyb21UcmVuZGluZ0NvbnRlbnQoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gpLmxlbmd0aCkge1xuICAgICAgLy8gaWYgKCEoc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUubGVuZ3RoID4gMCkpIHtcbiAgICAgIC8vICAgaWYgKHRoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZSkge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gW3RoaXMuY29uZmlnU3ZjLmFjdGl2ZUxvY2FsZS5sb2NhbHNbMF1dXG4gICAgICAvLyAgIH0gZWxzZSB7XG4gICAgICAvLyAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5sb2NhbGUgPSBbJ2VuJ11cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfVxuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgICBjb25zb2xlLmxvZyhvcmlnaW5hbEZpbHRlcnMpO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnM7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5jaGVja0ZvckRhdGVGaWx0ZXJzKHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGcm9tQXJyYXkoXG4gICAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0LmZpbHRlcnMsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAvLyBUT0RPOiBIYXZlIHRvIGV4dHJhY3QgcmVxdWVzdFJlcXVpcmVkIHRvIG91dGVyIGxldmVsIG9mIHRhYnMgY29uZmlnXG4gICAgICAgIGNvbnN0IGZpcnN0VGFiID0gc3RyaXAudGFic1swXTtcbiAgICAgICAgaWYgKGZpcnN0VGFiLnJlcXVlc3RSZXF1aXJlZCkge1xuICAgICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYWJGcm9tTWFwID0gKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1swXSkgYXMgTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiO1xuXG4gICAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVRyZW5kaW5nKHN0cmlwLCAwLCBjdXJyZW50VGFiRnJvbU1hcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMudHJlbmRpbmdTZWFyY2hSZXF1ZXN0KHN0cmlwLCBzdHJpcC5yZXF1ZXN0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzICYmIHJlc3BvbnNlLnJlc3VsdHMucmVzcG9uc2UpIHtcbiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQgPSByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlW3N0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVzcG9uc2VLZXldIHx8IFtdO1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbnRlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsIHx8ICcnLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyB0cmVuZGluZ1NlYXJjaFJlcXVlc3Qoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gpIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIHRoZSByZXF1ZXN0IGlmIGl0IGhhcyBkeW5hbWljIHZhbHVlc11cbiAgICAgICAgaWYgKHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbiAmJlxuICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbi5pbmRleE9mKCc8b3JnSUQ+JykgPj0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgdXNlclJvb3RPcmdJZDtcbiAgICAgICAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIHVzZXJSb290T3JnSWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5yb290T3JnSWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHVzZXJSb290T3JnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnRyZW5kaW5nQ29udGVudFNlYXJjaChyZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0ICYmXG4gICAgICAgICAgICBzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdFtzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlc3BvbnNlS2V5XSAmJlxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHRbc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXNwb25zZUtleV0ubGVuZ3RoID4gNSAmJlxuICAgICAgICAgICAgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGY6XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yLmVycm9yICYmIGVycm9yLmVycm9yLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbClcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlSW5mbyhkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBjb25zdCBzdHJpcEluZm8gPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbZGF0YS5rZXldLnN0cmlwSW5mbztcbiAgICBpZiAoc3RyaXBJbmZvKSB7XG4gICAgICBpZiAoc3RyaXBJbmZvLm1vZGUgIT09ICdiZWxvdycpIHtcbiAgICAgICAgdGhpcy5sb2dnZXJTdmMud2Fybihgc3RyaXAgaW5mbyBtb2RlOiAke3N0cmlwSW5mby5tb2RlfSBub3QgaW1wbGVtZW50ZWQgeWV0YCk7XG4gICAgICAgIHN0cmlwSW5mby5tb2RlID0gJ2JlbG93JztcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcEluZm8ubW9kZSA9PT0gJ2JlbG93Jykge1xuICAgICAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbZGF0YS5rZXldLnN0cmlwSW5mbyA9IHtcbiAgICAgICAgICAuLi5zdHJpcEluZm8sXG4gICAgICAgICAgdmlzaWJpbGl0eU1vZGU6IHN0cmlwSW5mby52aXNpYmlsaXR5TW9kZSA9PT0gJ2hpZGRlbicgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBOc0NvbnRlbnQuSUNvbnRlbnRbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgKSB7XG4gICAgcmV0dXJuIChjb250ZW50cyB8fCBbXSkubWFwKChjb250ZW50LCBpZHgpID0+IChcbiAgICAgIGNvbnRlbnQgPyB7XG4gICAgICAgIHdpZGdldFR5cGU6ICdjYXJkTGliJyxcbiAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50TGliJyxcbiAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICAgIHdpZGdldERhdGE6IHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIC4uLihjb250ZW50LmJhdGNoICYmIHsgYmF0Y2g6IGNvbnRlbnQuYmF0Y2ggfSksXG4gICAgICAgICAgY2FyZFN1YlR5cGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNhcmRTdWJUeXBlLFxuICAgICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICAgIGNvbnRleHQ6IHsgcGFnZVNlY3Rpb246IHN0cmlwLmtleSwgcG9zaXRpb246IGlkeCB9LFxuICAgICAgICAgIGludHJhbmV0TW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuaW50cmFuZXRNb2RlLFxuICAgICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgICBjb250ZW50VGFnczogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY29udGVudFRhZ3MsXG4gICAgICAgIH0sXG4gICAgICB9IDoge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudCcsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7fSxcbiAgICAgIH1cbiAgICApKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRXZlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBJVG9kYXlFdmVudHNbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgKSB7XG4gICAgdGhpcy5ldmVudFN2Yy5zZXRFdmVudExpc3REYXRhKGNvbnRlbnRzKTtcbiAgICByZXR1cm4gKHRoaXMuZXZlbnRTdmMudG9kYXlzRXZlbnRzIHx8IFtdKS5tYXAoKGNvbnRlbnQ6IGFueSwgaWR4OiBhbnkpID0+IChjb250ZW50ID8ge1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2V2ZW50SHViQ2FyZCcsXG4gICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgIHdpZGdldERhdGE6IHtcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgY2FyZFN1YlR5cGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNhcmRTdWJUeXBlLFxuICAgICAgICBjYXJkQ3VzdG9tZUNsYXNzOiBzdHJpcC5jdXN0b21lQ2xhc3MgPyBzdHJpcC5jdXN0b21lQ2xhc3MgOiAnJyxcbiAgICAgICAgY29udGV4dDogeyBwYWdlU2VjdGlvbjogc3RyaXAua2V5LCBwb3NpdGlvbjogaWR4IH0sXG4gICAgICAgIGludHJhbmV0TW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuaW50cmFuZXRNb2RlLFxuICAgICAgICBkZWxldGVkTW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuZGVsZXRlZE1vZGUsXG4gICAgICAgIGNvbnRlbnRUYWdzOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jb250ZW50VGFncyxcbiAgICAgIH0sXG4gICAgfSA6IHtcbiAgICAgIHdpZGdldFR5cGU6ICdjYXJkJyxcbiAgICAgIHdpZGdldFN1YlR5cGU6ICdldmVudEh1YkNhcmQnLFxuICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICB3aWRnZXREYXRhOiB7fSxcbiAgICB9XG4gICAgKSk7XG4gIH1cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1Ta2VsZXRvblRvV2lkZ2V0cyhcbiAgICBzdHJpcDogYW55XG4gICkge1xuICAgIHJldHVybiBbMSwgMiwgMywgNCwgNSwgNiwgNywgNywgOCwgOSwgMTBdLm1hcChfY29udGVudCA9PiAoe1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmRMaWInLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50TGliJyxcbiAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAubG9hZGVyQ29uZmlnICYmIHN0cmlwLmxvYWRlckNvbmZpZy5jYXJkU3ViVHlwZSB8fCAnY2FyZC1zdGFuZGFyZC1za2VsZXRvbicsXG4gICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdHJpcChcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICByZXN1bHRzOiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YVtdID0gW10sXG4gICAgZmV0Y2hTdGF0dXM6IFRGZXRjaFN0YXR1cyxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlLFxuICAgIF92aWV3TW9yZVVybDogYW55LFxuICAgIHRhYnNSZXN1bHRzPzogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiW10gfCB1bmRlZmluZWQsXG4gICAgLy8gY2FsY3VsYXRlUGFyZW50U3RhdHVzIGlzIHVzZWQgc28gdGhhdCBwYXJlbnRzJyBzdGF0dXMgaXMgbm90IHJlLWNhbGN1bGF0ZWQgaWYgdGhlIEFQSSBpcyBjYWxsZWQgYWdhaW4gY296IG9mIGZpbHRlcnMsIGV0Yy5cbiAgKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0ge1xuICAgICAgdmlld01vcmVVcmw6IHN0cmlwLnZpZXdNb3JlVXJsLFxuICAgICAga2V5OiBzdHJpcC5rZXksXG4gICAgICBjYW5IaWRlU3RyaXA6IEJvb2xlYW4oc3RyaXAuY2FuSGlkZVN0cmlwKSxcbiAgICAgIHNob3dTdHJpcDogdGhpcy5nZXRJZlN0cmlwSGlkZGVuKHN0cmlwLmtleSksXG4gICAgICBub0RhdGFXaWRnZXQ6IHN0cmlwLm5vRGF0YVdpZGdldCxcbiAgICAgIGVycm9yV2lkZ2V0OiBzdHJpcC5lcnJvcldpZGdldCxcbiAgICAgIHN0cmlwSW5mbzogc3RyaXAuaW5mbyxcbiAgICAgIHN0cmlwVGl0bGU6IHN0cmlwLnRpdGxlLFxuICAgICAgc3RyaXBUaXRsZUxpbms6IHN0cmlwLnN0cmlwVGl0bGVMaW5rLFxuICAgICAgZGlzYWJsZVRyYW5zbGF0ZTogc3RyaXAuZGlzYWJsZVRyYW5zbGF0ZSxcbiAgICAgIHNsaWRlckNvbmZpZzogc3RyaXAuc2xpZGVyQ29uZmlnLFxuICAgICAgdGFiczogdGFic1Jlc3VsdHMgPyB0YWJzUmVzdWx0cyA6IHN0cmlwLnRhYnMsXG4gICAgICBzdHJpcE5hbWU6IHN0cmlwLm5hbWUsXG4gICAgICBtb2RlOiBzdHJpcC5tb2RlLFxuICAgICAgc3RyaXBDb25maWc6IHN0cmlwLnN0cmlwQ29uZmlnLFxuICAgICAgc3RyaXBCYWNrZ3JvdW5kOiBzdHJpcC5zdHJpcEJhY2tncm91bmQsXG4gICAgICBzZWNvbmRhcnlIZWFkaW5nOiBzdHJpcC5zZWNvbmRhcnlIZWFkaW5nLFxuICAgICAgbG9hZGVyV2lkZ2V0czogc3RyaXAubG9hZGVyV2lkZ2V0cyB8fCBbXSxcbiAgICAgIHdpZGdldHM6XG4gICAgICAgIGZldGNoU3RhdHVzID09PSAnZG9uZSdcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgIC4uLihzdHJpcC5wcmVXaWRnZXRzIHx8IFtdKS5tYXAodyA9PiAoe1xuICAgICAgICAgICAgICAuLi53LFxuICAgICAgICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6IGBtYi0yICR7dy53aWRnZXRIb3N0Q2xhc3N9YCxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIC4uLnJlc3VsdHMsXG4gICAgICAgICAgICAuLi4oc3RyaXAucG9zdFdpZGdldHMgfHwgW10pLm1hcCh3ID0+ICh7XG4gICAgICAgICAgICAgIC4uLncsXG4gICAgICAgICAgICAgIHdpZGdldEhvc3RDbGFzczogYG1iLTIgJHt3LndpZGdldEhvc3RDbGFzc31gLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdLFxuICAgICAgc2hvd09uTm9EYXRhOiBCb29sZWFuKFxuICAgICAgICBzdHJpcC5ub0RhdGFXaWRnZXQgJiZcbiAgICAgICAgISgoc3RyaXAucHJlV2lkZ2V0cyB8fCBbXSkubGVuZ3RoICsgcmVzdWx0cy5sZW5ndGggKyAoc3RyaXAucG9zdFdpZGdldHMgfHwgW10pLmxlbmd0aCkgJiZcbiAgICAgICAgZmV0Y2hTdGF0dXMgPT09ICdkb25lJyxcbiAgICAgICksXG4gICAgICBzaG93T25Mb2FkZXI6IEJvb2xlYW4oc3RyaXAubG9hZGVyICYmIGZldGNoU3RhdHVzID09PSAnZmV0Y2hpbmcnKSxcbiAgICAgIHNob3dPbkVycm9yOiBCb29sZWFuKHN0cmlwLmVycm9yV2lkZ2V0ICYmIGZldGNoU3RhdHVzID09PSAnZXJyb3InKSxcbiAgICB9O1xuICAgIC8vIGNvbnN0IHN0cmlwRGF0YSA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldXG4gICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwID0ge1xuICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwLFxuICAgICAgW3N0cmlwLmtleV06IHN0cmlwRGF0YSxcbiAgICB9O1xuICAgIGlmICghdGFic1Jlc3VsdHMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzICYmXG4gICAgICAgIChmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnIHx8IGZldGNoU3RhdHVzID09PSAnZXJyb3InKSAmJlxuICAgICAgICBzdHJpcERhdGEud2lkZ2V0c1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2hlY2tQYXJlbnRTdGF0dXMoZmV0Y2hTdGF0dXMsIHN0cmlwRGF0YS53aWRnZXRzLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBpZiAoY2FsY3VsYXRlUGFyZW50U3RhdHVzICYmICEocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrUGFyZW50U3RhdHVzKGZldGNoU3RhdHVzOiBURmV0Y2hTdGF0dXMsIHN0cmlwV2lkZ2V0c0NvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyAmJiAhc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMubm9EYXRhQ291bnQgKz0gMTtcbiAgICB9IGVsc2UgaWYgKGZldGNoU3RhdHVzID09PSAnZG9uZScgJiYgc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArPSAxO1xuICAgIH0gZWxzZSBpZiAoZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgIHRoaXMuZXJyb3JEYXRhQ291bnQgKz0gMTtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGxlZENvdW50ID0gdGhpcy5ub0RhdGFDb3VudCArIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArIHRoaXMuZXJyb3JEYXRhQ291bnQ7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMubGVuZ3RoO1xuICAgIGlmICh0aGlzLnN1Y2Nlc3NEYXRhQ291bnQgPiAwICYmIHNldHRsZWRDb3VudCA8IHRvdGFsQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gc2V0dGxlZENvdW50ICE9PSB0b3RhbENvdW50O1xuICAgIHRoaXMuc2hvd1BhcmVudE5vRGF0YSA9XG4gICAgICB0aGlzLm5vRGF0YUNvdW50ID4gMCAmJiB0aGlzLm5vRGF0YUNvdW50ICsgdGhpcy5lcnJvckRhdGFDb3VudCA9PT0gdG90YWxDb3VudDtcbiAgICB0aGlzLnNob3dQYXJlbnRFcnJvciA9IHRoaXMuZXJyb3JEYXRhQ291bnQgPT09IHRvdGFsQ291bnQ7XG4gIH1cbiAgY2hlY2tGb3JFbXB0eVdpZGdldChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICgoc3RyaXAucmVxdWVzdC5hcGkgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5hcGkpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3Quc2VhcmNoICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoKS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnNlYXJjaFJlZ2lvblJlY29tbWVuZGF0aW9uICYmXG4gICAgICAgICAgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2hSZWdpb25SZWNvbW1lbmRhdGlvbikubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2KS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmNicExpc3QpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkubGVuZ3RoKXx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50b3BDb250ZW50KS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQpLmxlbmd0aCl8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQpLmxlbmd0aCl8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoKS5sZW5ndGgpfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkKS5sZW5ndGgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHRhYkNsaWNrZWQodGFiRXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50LCBzdHJpcE1hcDogSVN0cmlwVW5pdENvbnRlbnREYXRhLCBzdHJpcEtleTogc3RyaW5nKSB7XG4gICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0pIHtcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLmZldGNoVGFiU3RhdHVzID0gJ2lucHJvZ3Jlc3MnO1xuICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IHRydWU7XG4gICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkYXRhOiBXc0V2ZW50cy5JVGVsZW1ldHJ5VGFiRGF0YSA9IHtcbiAgICAgIGxhYmVsOiBgJHt0YWJFdmVudC50YWIudGV4dExhYmVsfWAsXG4gICAgICBpbmRleDogdGFiRXZlbnQuaW5kZXgsXG4gICAgfTtcbiAgICB0aGlzLmV2ZW50U3ZjLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFdzRXZlbnRzLkVudW1JbnRlcmFjdFR5cGVzLkNMSUNLLFxuICAgICAgICBzdWJUeXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RTdWJUeXBlcy5IT01FX1BBR0VfU1RSSVBfVEFCUyxcbiAgICAgICAgaWQ6IGAke18uY2FtZWxDYXNlKGRhdGEubGFiZWwpfS10YWJgLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBtb2R1bGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnltb2R1bGVzLkhPTUUsXG4gICAgICB9XG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50VGFiRnJvbU1hcDogYW55ID0gc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XTtcbiAgICBjb25zdCBjdXJyZW50U3RyaXAgPSB0aGlzLndpZGdldERhdGEuc3RyaXBzLmZpbmQocyA9PiBzLmtleSA9PT0gc3RyaXBLZXkpO1xuICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXBLZXldICYmIGN1cnJlbnRUYWJGcm9tTWFwKSB7XG4gICAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXBLZXldLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAuLi50aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXBLZXldLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICB0YWJTZWxlY3RlZDogY3VycmVudFRhYkZyb21NYXAubGFiZWwsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoY3VycmVudFN0cmlwICYmIGN1cnJlbnRUYWJGcm9tTWFwICYmICFjdXJyZW50VGFiRnJvbU1hcC5jb21wdXRlRGF0YU9uQ2xpY2spIHtcbiAgICAgIGlmIChjdXJyZW50VGFiRnJvbU1hcC5yZXF1ZXN0UmVxdWlyZWQgJiYgY3VycmVudFRhYkZyb21NYXAucmVxdWVzdCkge1xuICAgICAgICAvLyBjYWxsIEFQSSB0byBnZXQgdGFiIGRhdGEgYW5kIHByb2Nlc3NcbiAgICAgICAgLy8gdGhpcy5wcm9jZXNzU3RyaXAoY3VycmVudFN0cmlwLCBbXSwgJ2ZldGNoaW5nJywgdHJ1ZSwgbnVsbClcbiAgICAgICAgaWYgKGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3Quc2VhcmNoVjYpIHtcbiAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVNlYXJjaFY2KGN1cnJlbnRTdHJpcCwgdGFiRXZlbnQuaW5kZXgsIGN1cnJlbnRUYWJGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VGFiRnJvbU1hcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKSB7XG4gICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFUcmVuZGluZyhjdXJyZW50U3RyaXAsIHRhYkV2ZW50LmluZGV4LCBjdXJyZW50VGFiRnJvbU1hcCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0pIHtcbiAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5ZmlsdGVyKGN1cnJlbnRTdHJpcCwgY3VycmVudFRhYkZyb21NYXAsIHRydWUpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XSkge1xuICAgICAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnO1xuICAgICAgICAgICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sICAgICAgICAgMjAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRUYWI6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYixcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWFyY2hWNlJlcXVlc3Qoc3RyaXAsIGN1cnJlbnRUYWIucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldHMgPSB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQsIHN0cmlwKTtcbiAgICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgaWYgKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgICAgIGFsbFRhYnNbdGFiSW5kZXhdID0ge1xuICAgICAgICAgICAgICAuLi5hbGxUYWJzW3RhYkluZGV4XSxcbiAgICAgICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gYWxsVGFicztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgIHRhYlJlc3VsdHMgLy8gdGFiUmVzdWx0cyBhcyB3aWRnZXRzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRUYWJEYXRhQnlOZXdSZXFUcmVuZGluZyhcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRUYWI6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYixcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmVuZGluZ1NlYXJjaFJlcXVlc3Qoc3RyaXAsIGN1cnJlbnRUYWIucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzICYmIHJlc3BvbnNlLnJlc3VsdHMucmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlc3BvbnNlLnJlc3VsdHMucmVzcG9uc2VbY3VycmVudFRhYi52YWx1ZV0gfHwgW107XG4gICAgICAgIGNvbnN0IHdpZGdldHMgPSB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbnRlbnQsIHN0cmlwKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2N1cnJlbnRUYWIgLS0tIHdpZGdldHMnLCB3aWRnZXRzKVxuICAgICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICAgICAgICBpZiAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzW3RhYkluZGV4XSkge1xuICAgICAgICAgICAgYWxsVGFic1t0YWJJbmRleF0gPSB7XG4gICAgICAgICAgICAgIC4uLmFsbFRhYnNbdGFiSW5kZXhdLFxuICAgICAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRhYlJlc3VsdHMgPSBhbGxUYWJzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZygndGFiUmVzdWx0cyAtKysrKyoqKi0tJywgdGFiUmVzdWx0cylcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgIHRhYlJlc3VsdHMgLy8gdGFiUmVzdWx0cyBhcyB3aWRnZXRzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGdldFRhYkRhdGFCeWZpbHRlcihcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICBjdXJyZW50VGFiOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnc3RyaXAgLS0gJywgc3RyaXApO1xuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnY3VycmVudFRhYiAtLSAnLCBjdXJyZW50VGFiKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ2NhbGN1bGF0ZVBhcmVudFN0YXR1cy0tICcsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgLy8gVE9ETzogV3JpdGUgbG9naWMgZm9yIGluZGl2aWR1YWwgZmlsdGVyIGlmIHBhc3NlZCBpbiBjb25maWdcbiAgICAvLyBhZGQgc3dpdGNoIGNhc2UgYmFzZWQgb24gY29uZmlnIGtleSBwYXNzZWRcbiAgfVxuXG4gIGFzeW5jIGZldGNoQWxsQ2JwUGxhbnMoc3RyaXA6IGFueSwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuXG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5jYnBMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCkubGVuZ3RoKSB7XG5cbiAgICAgIGxldCBjb3Vyc2VzOiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVzZXJTdmMuZmV0Y2hDYnBQbGFuTGlzdCgpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb3Vyc2VzID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0YWJSZXN1bHRzID0gdGhpcy5zcGxpdENicFRhYnNEYXRhKGNvdXJzZXMsIHN0cmlwKTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICB0YWJSZXN1bHRzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgICd2aWV3TW9yZVVybCcsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyB0aGlzLnVzZXJTdmMuZmV0Y2hDYnBQbGFuTGlzdCgpLnN1YnNjcmliZSggYXN5bmMgIChyZXM6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAocmVzKSB7XG4gICAgICAvLyAgICAgY29uc29sZS5sb2cocmVzLCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PicpXG4gICAgICAvLyAgICAgY291cnNlcyA9IHJlc1xuICAgICAgLy8gICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAvLyAgICAgICB0YWJSZXN1bHRzID0gdGhpcy5zcGxpdENicFRhYnNEYXRhKGNvdXJzZXMsIHN0cmlwKVxuICAgICAgLy8gICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAvLyAgICAgICAgIHN0cmlwLFxuICAgICAgLy8gICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgIC8vICAgICAgICAgJ2RvbmUnLFxuICAgICAgLy8gICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAvLyAgICAgICAgICcnLFxuICAgICAgLy8gICAgICAgICB0YWJSZXN1bHRzXG4gICAgICAvLyAgICAgICApXG4gICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgLy8gICAgICAgICBzdHJpcCxcbiAgICAgIC8vICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAvLyAgICAgICAgICdkb25lJyxcbiAgICAgIC8vICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgLy8gICAgICAgICAndmlld01vcmVVcmwnLFxuICAgICAgLy8gICAgICAgKVxuICAgICAgLy8gICAgIH1cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9lcnI6IGFueSkgPT4ge1xuXG4gICAgICAvLyB9KVxuXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZW5yb2xsSW50ZXJ2YWwpO1xuICAgIH1cbiAgfVxuICBzcGxpdENicFRhYnNEYXRhKGNvbnRlbnROZXc6IE5zQ29udGVudC5JQ29udGVudFtdLCBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCkge1xuICAgIGNvbnN0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgY29uc3Qgc3BsaXREYXRhID0gdGhpcy5nZXRUYWJzTGlzdChcbiAgICAgIGNvbnRlbnROZXcsXG4gICAgICBzdHJpcCxcbiAgICApO1xuICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmlwLnRhYnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHN0cmlwLnRhYnNbaV0pIHtcbiAgICAgICAgICB0YWJSZXN1bHRzLnB1c2goXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnN0cmlwLnRhYnNbaV0sXG4gICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICAgIC4uLihzcGxpdERhdGEuZmluZChpdG1Jbm5lciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFic1tpXSAmJiBpdG1Jbm5lci52YWx1ZSA9PT0gc3RyaXAudGFic1tpXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0bUlubmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiUmVzdWx0cztcbiAgfVxuXG4gIGdldFRhYnNMaXN0KGFycmF5OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSxcbiAgICAgICAgICAgICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBsZXQgYWxsOiBhbnlbXSA9IFtdO1xuICAgIGxldCB1cGNvbWluZzogYW55W10gPSBbXTtcbiAgICBsZXQgb3ZlcmR1ZTogYW55W10gPSBbXTtcbiAgICBhcnJheS5mb3JFYWNoKChlOiBhbnkpID0+IHtcbiAgICAgIGFsbC5wdXNoKGUpO1xuICAgICAgaWYgKGUucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKSB7XG4gICAgICAgIG92ZXJkdWUucHVzaChlKTtcbiAgICAgIH0gZWxzZSBpZiAoZS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0LlVQQ09NSU5HKSB7XG4gICAgICAgIHVwY29taW5nLnB1c2goZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYWxsQ29tcGxldGVkID0gYWxsLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiBhbGxEYXRhLmNvbnRlbnRTdGF0dXMgPT09IDIpO1xuICAgIGxldCBhbGxJbkNvbXBsZXRlZCA9IGFsbC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gYWxsRGF0YS5jb250ZW50U3RhdHVzIDwgMik7XG5cbiAgICBsZXQgYWxsQ29tcGxldGVkT3ZlckR1ZSA9IGFsbENvbXBsZXRlZC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gYWxsRGF0YS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpO1xuICAgIGNvbnN0IGFsbENvbXBsZXRlZEFsbCA9IGFsbENvbXBsZXRlZC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gIGFsbERhdGEucGxhbkR1cmF0aW9uICE9PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKTtcblxuICAgIGFsbENvbXBsZXRlZE92ZXJEdWUgPSBhbGxDb21wbGV0ZWRPdmVyRHVlLnNvcnQoKGE6IGFueSwgYjogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChhLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSAmJiBiLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSkge1xuICAgICAgICBjb25zdCBmaXJzdERhdGU6IGFueSA9IG5ldyBEYXRlKGEuZW5kRGF0ZSk7XG4gICAgICAgIGNvbnN0IHNlY29uZERhdGU6IGFueSA9IG5ldyBEYXRlKGIuZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiAgZmlyc3REYXRlID4gc2Vjb25kRGF0ZSAgPyAtMSA6IDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhbGxJbkNvbXBsZXRlZCA9IGFsbEluQ29tcGxldGVkLnNvcnQoKGE6IGFueSwgYjogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChhLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSAmJiBiLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSkge1xuICAgICAgICBjb25zdCBmaXJzdERhdGU6IGFueSA9IG5ldyBEYXRlKGEuZW5kRGF0ZSk7XG4gICAgICAgIGNvbnN0IHNlY29uZERhdGU6IGFueSA9IG5ldyBEYXRlKGIuZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiAgZmlyc3REYXRlID4gc2Vjb25kRGF0ZSAgPyAtMSA6IDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhbGwgPSBbLi4uYWxsSW5Db21wbGV0ZWQsIC4uLmFsbENvbXBsZXRlZEFsbCwgLi4uYWxsQ29tcGxldGVkT3ZlckR1ZV07XG5cbiAgICBvdmVyZHVlID0gb3ZlcmR1ZS5maWx0ZXIoKGRhdGE6IGFueSk6IGFueSA9PiB7XG4gICAgICByZXR1cm4gZGF0YS5jb250ZW50U3RhdHVzIDwgMjtcbiAgICB9KTtcblxuICAgIG92ZXJkdWUgPSBvdmVyZHVlLnNvcnQoKGE6IGFueSwgYjogYW55KTogYW55ID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgID8gLTEgOiAxO1xuICAgIH0pO1xuXG4gICAgdXBjb21pbmcgPSB1cGNvbWluZy5maWx0ZXIoKGRhdGE6IGFueSk6IGFueSA9PiB7XG4gICAgICByZXR1cm4gZGF0YS5jb250ZW50U3RhdHVzIDwgMjtcbiAgICB9KTtcbiAgICAvLyB0aGlzLmdldFNlbGVjdGVkSW5kZXgoMSlcbiAgICByZXR1cm4gW1xuICAgIHsgdmFsdWU6ICdhbGwnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGFsbCwgc3RyaXApIH0sXG4gICAgeyB2YWx1ZTogJ3VwY29taW5nJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyh1cGNvbWluZywgc3RyaXApIH0sXG4gICAgeyB2YWx1ZTogJ292ZXJkdWUnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKG92ZXJkdWUsIHN0cmlwKSB9XTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkSW5kZXgoc3RyaXBzUmVzdWx0RGF0YU1hcDogYW55LCBrZXk6IGFueSk6IG51bWJlciB7XG4gICAgbGV0IHJldHVyblZhbHVlID0gMDtcbiAgICBpZiAoa2V5ID09PSAnY2JwUGxhbicpIHtcbiAgICAgIGlmIChzdHJpcHNSZXN1bHREYXRhTWFwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBzdHJpcHNSZXN1bHREYXRhTWFwLnRhYnMuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLnZhbHVlID09PSAndXBjb21pbmcnKTtcbiAgICAgICAgcmV0dXJuVmFsdWUgPSBkYXRhWzBdLndpZGdldHMgJiYgZGF0YVswXS53aWRnZXRzLmxlbmd0aCA+IDAgPyAxIDogMDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgdHJhbnNsYXRlTGFiZWxzKGxhYmVsOiBzdHJpbmcsIHR5cGU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmxhbmd0cmFuc2xhdGlvbnMudHJhbnNsYXRlTGFiZWwobGFiZWwsIHR5cGUsICcnKTtcbiAgfVxuXG4gIGlkZW50aWZ5KGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIGlmIChpbmRleCA+PSAwKSB7IH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuICB0cmFja2VyKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIGlmIChpbmRleCA+PSAwKSB7IH1cbiAgICByZXR1cm4gXy5nZXQoaXRlbSwgJ3dpZGdldERhdGEuY29udGVudC5pZGVudGlmaWVyJylcbiAgfVxuXG4gIGFzeW5jIGZldGNoQWxsVG9wQ29udGVudChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQpLmxlbmd0aCkge1xuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5wb3N0TWV0aG9kRmlsdGVycyhzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wb3N0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC50b3BDb250ZW50LCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQgJiYgcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZldGNoQWxsRmVhdHVyZWRDb250ZW50KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50KS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0LmZpbHRlcnM7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5wb3N0TWV0aG9kRmlsdGVycyhzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucG9zdFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7ICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJhaXNlVGVsZW1ldHJ5KHN0cmlwRGF0YTogYW55KXtcbiAgICB0aGlzLnRlbGVtdHJ5UmVzcG9uc2UuZW1pdChzdHJpcERhdGEpXG4gIH1cblxuICBhc3luYyBwb3N0UmVxdWVzdE1ldGhvZChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICByZXF1ZXN0OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgYXBpVXJsOiBzdHJpbmcsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5wb3N0QXBpTWV0aG9kKGFwaVVybCxyZXF1ZXN0KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQgJiYgcmVzdWx0cy5yZXN1bHQuY29udGVudC5sZW5ndGggPiA1ICYmIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICA/IHtcbiAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICBxOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgZjpcbiAgICAgICAgcmVxdWVzdCAmJlxuICAgICAgICByZXF1ZXN0LnNlYXJjaFY2ICYmXG4gICAgICAgIHJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdCAmJlxuICAgICAgICByZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVyc1xuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMudHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzVjIoXG4gICAgICAgICAgICBvcmlnaW5hbEZpbHRlcnMsXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIDoge30sXG4gICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmVxdWVzdE1ldGhvZChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICByZXF1ZXN0OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgYXBpVXJsOiBzdHJpbmcsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5nZXRBcGlNZXRob2QoYXBpVXJsKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cywncmVzdWx0cz09PT09PT09PScpXG4gICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgIHJlc3VsdHMucmVzdWx0LmRhdGEgJiYgcmVzdWx0cy5yZXN1bHQuZGF0YS5vcmdMaXN0Lmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgID8ge1xuICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcbiAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHBvc3RNZXRob2RGaWx0ZXJzKGZpbHRlcnM6IGFueSl7XG4gICAgaWYgKGZpbHRlcnMub3JnYW5pc2F0aW9uICYmXG4gICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbi5pbmRleE9mKCc8b3JnSUQ+JykgPj0gMFxuICAgICkge1xuICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24gPSB0aGlzLnByb3ZpZGVySWRcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnNcbiAgfVxuICBnZXRGdWxsVXJsKGFwaVVybDogYW55LCBpZDpzdHJpbmcpe1xuICAgIGxldCBmb3JtZWRVcmw6IHN0cmluZyA9ICcnXG4gICAgaWYgKGFwaVVybC5pbmRleE9mKCc8Ym9va21hcmtJZD4nKSA+PSAwKSB7XG4gICAgICBmb3JtZWRVcmwgPSBhcGlVcmwucmVwbGFjZSgnPGJvb2ttYXJrSWQ+JywgdGhpcy5lbnZpcm9ubWVudC5tZG9DaGFubmVsc0Jvb2ttYXJrSWQpIFxuICAgIH0gZWxzZSBpZiAoYXBpVXJsLmluZGV4T2YoJzxwbGF5bGlzdEtleT4nKSA+PSAwICYmIGFwaVVybC5pbmRleE9mKCc8b3JnSUQ+JykgPj0gMCkge1xuICAgICAgZm9ybWVkVXJsID0gYXBpVXJsLnJlcGxhY2UoJzxwbGF5bGlzdEtleT4nLCB0aGlzLnByb3ZpZGVySWQgKyBpZCkgXG4gICAgICBmb3JtZWRVcmwgPSBmb3JtZWRVcmwucmVwbGFjZSgnPG9yZ0lEPicsIHRoaXMucHJvdmlkZXJJZCkgXG4gICAgfVxuICAgIHJldHVybiBmb3JtZWRVcmxcbiAgfVxuXG4gIHJlZGlyZWN0Vmlld0FsbChzdHJpcERhdGE6IGFueSwgcGF0aDogc3RyaW5nLCBxdWVyeVBhcmFtc0RhdGE6IGFueSkge1xuICAgIGlmKHRoaXMuZW1pdFZpZXdBbGwpIHtcbiAgICAgIHRoaXMudmlld0FsbFJlc3BvbnNlLmVtaXQoc3RyaXBEYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGF0aF0sIHsgIHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtc0RhdGEgfSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsbEJvb2tNYXJrRGF0YShzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuYm9va21hcmtSZWFkICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuYm9va21hcmtSZWFkKS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQuYm9va21hcmtJZCkge1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LmFwaVVybCA9IHRoaXMuZ2V0RnVsbFVybChzdHJpcC5yZXF1ZXN0LmFwaVVybCwgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQuYm9va21hcmtJZCk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgIGxldCBjb250ZW50ICA9IHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmRhdGEub3JnTGlzdFxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1BbGxDb250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICApO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpOyAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUFsbENvbnRlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBhbnksXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICkge1xuICAgIHJldHVybiAoY29udGVudHMgfHwgW10pLm1hcCgoY29udGVudCwgaWR4KSA9PiAoXG4gICAgICBjb250ZW50ID8ge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZExpYicsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudExpYicsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAuLi4oY29udGVudC5iYXRjaCAmJiB7IGJhdGNoOiBjb250ZW50LmJhdGNoIH0pLFxuICAgICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jYXJkU3ViVHlwZSxcbiAgICAgICAgICBjYXJkQ3VzdG9tZUNsYXNzOiBzdHJpcC5jdXN0b21lQ2xhc3MgPyBzdHJpcC5jdXN0b21lQ2xhc3MgOiAnJyxcbiAgICAgICAgICBjb250ZXh0OiB7IHBhZ2VTZWN0aW9uOiBzdHJpcC5rZXksIHBvc2l0aW9uOiBpZHggfSxcbiAgICAgICAgICBpbnRyYW5ldE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmludHJhbmV0TW9kZSxcbiAgICAgICAgICBkZWxldGVkTW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuZGVsZXRlZE1vZGUsXG4gICAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgICB9LFxuICAgICAgfSA6IHtcbiAgICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnQnLFxuICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgICAgd2lkZ2V0RGF0YToge30sXG4gICAgICB9XG4gICAgKSk7XG4gIH1cbiAgXG4gIGFzeW5jIGZldGNoQWxsUGxheWxpc3RTZWFyY2goc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gpLmxlbmd0aCkge1xuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLnBvc3RNZXRob2RGaWx0ZXJzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wb3N0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0LCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmRhdGEgJiYgcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5kYXRhLCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpOyAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaFBsYXlsaXN0UmVhZERhdGEoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLnR5cGUpIHtcbiAgICAgICAgc3RyaXAucmVxdWVzdC5hcGlVcmwgPSB0aGlzLmdldEZ1bGxVcmwoc3RyaXAucmVxdWVzdC5hcGlVcmwsIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLnR5cGUpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7ICBcbiAgICAgICAgICBsZXQgY29udGVudCAgPSByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQWxsQ29udGVudHNUb1dpZGdldHMoY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTsgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=
2025
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiJuZzovL0BzdW5iaXJkLWNiL2NvbnN1bXB0aW9uLyIsInNvdXJjZXMiOlsibGliL19jb21tb24vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliL2NvbnRlbnQtc3RyaXAtd2l0aC10YWJzLWxpYi5jb21wb25lbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFVLEtBQUssRUFBYSxXQUFXLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0csT0FBTyxFQUFvQixtQkFBbUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDOztBQUdoRixPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUU5RSxPQUFPLEVBQUUsK0JBQStCLEVBQUUsTUFBTSxtREFBbUQsQ0FBQztBQUNwRyxPQUFPLEVBRUwsYUFBYSxFQUNiLFlBQVksRUFDWixxQkFBcUIsRUFDckIsY0FBYyxFQUNkLFFBQVEsR0FDVCxNQUFNLHNCQUFzQixDQUFDO0FBRTlCLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQzs7O0FBR3hFLE9BQU8sS0FBSyxDQUFDLE1BQU0sUUFBUSxDQUFBO0FBRTNCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxxQ0FBcUMsQ0FBQztBQUVwRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN2RCxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0saUJBQWlCLENBQUM7Ozs7QUFFekMsb0NBcUNDOzs7SUFwQ0Msb0NBQVk7O0lBQ1osNkNBQXNCOztJQUN0QixxQ0FBYzs7SUFDZCwwQ0FBbUI7O0lBQ25CLGlEQUEwQjs7SUFDMUIsd0NBQXNEOztJ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eEIsbURBQXdDOztJQUN4Qyw0REFBeUI7O0lBQ3pCLHVEQUFrQjs7SUFDbEIsbUVBQW9EOztJQUNwRCw2REFBdUI7O0lBQ3ZCLDBEQUFvQjs7SUFDcEIsd0RBQXVCOzs7OztJQUtyQixzREFBd0M7Ozs7O0lBQ3hDLHFEQUFnQzs7Ozs7SUFDaEMsb0RBQThCOzs7OztJQUM5QixxREFBd0M7O0lBQ3hDLHNEQUFpQzs7SUFHakMsa0RBQXFCOzs7OztJQUNyQixtREFBa0M7Ozs7O0lBQ2xDLHFEQUFtQzs7Ozs7SUFDbkMsNERBQXlEIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBPbkluaXQsIElucHV0LCBPbkRlc3Ryb3ksIEhvc3RCaW5kaW5nLCBJbmplY3QsIEV2ZW50RW1pdHRlciwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOc1dpZGdldFJlc29sdmVyLCBXaWRnZXRCYXNlQ29tcG9uZW50IH0gZnJvbSAnQHN1bmJpcmQtY2IvcmVzb2x2ZXItdjInO1xuaW1wb3J0IHsgTnNDb250ZW50U3RyaXBXaXRoVGFicyB9IGZyb20gJy4vY29udGVudC1zdHJpcC13aXRoLXRhYnMtbGliLm1vZGVsJztcbi8vIGltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCdcbmltcG9ydCB7IFdpZGdldENvbnRlbnRTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL3dpZGdldC1jb250ZW50LnNlcnZpY2UnO1xuaW1wb3J0IHsgTnNDb250ZW50IH0gZnJvbSAnLi4vLi4vX21vZGVscy93aWRnZXQtY29udGVudC5tb2RlbCc7XG5pbXBvcnQgeyBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vX3NlcnZpY2VzL211bHRpbGluZ3VhbC10cmFuc2xhdGlvbnMuc2VydmljZSc7XG5pbXBvcnQge1xuICBURmV0Y2hTdGF0dXMsXG4gIExvZ2dlclNlcnZpY2UsXG4gIEV2ZW50U2VydmljZSxcbiAgQ29uZmlndXJhdGlvbnNTZXJ2aWNlLFxuICBVdGlsaXR5U2VydmljZSxcbiAgV3NFdmVudHMsXG59IGZyb20gJ0BzdW5iaXJkLWNiL3V0aWxzLXYyJztcbmltcG9ydCB7IFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuaW1wb3J0IHsgV2lkZ2V0VXNlclNlcnZpY2UgfSBmcm9tICcuLi8uLi9fc2VydmljZXMvd2lkZ2V0LXVzZXIuc2VydmljZSc7XG4vLyBpbXBvcnQgeyBlbnZpcm9ubWVudCB9IGZyb20gJ3NyYy9lbnZpcm9ubWVudHMvZW52aXJvbm1lbnQnXG4vLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmVcbmltcG9ydCAqIGFzIF8gZnJvbSAnbG9kYXNoJ1xuaW1wb3J0IHsgTWF0VGFiQ2hhbmdlRXZlbnQgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbCc7XG5pbXBvcnQgeyBOc0NhcmRDb250ZW50IH0gZnJvbSAnLi4vLi4vX21vZGVscy9jYXJkLWNvbnRlbnQtdjIubW9kZWwnO1xuaW1wb3J0IHsgSVRvZGF5RXZlbnRzIH0gZnJvbSAnLi4vLi4vX21vZGVscy9ldmVudCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuXG5pbnRlcmZhY2UgSVN0cmlwVW5pdENvbnRlbnREYXRhIHtcbiAga2V5OiBzdHJpbmc7XG4gIGNhbkhpZGVTdHJpcDogYm9vbGVhbjtcbiAgbW9kZT86IHN0cmluZztcbiAgc2hvd1N0cmlwOiBib29sZWFuO1xuICBkaXNhYmxlVHJhbnNsYXRlOiBib29sZWFuO1xuICB3aWRnZXRzPzogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGFbXTtcbiAgc3RyaXBUaXRsZTogc3RyaW5nO1xuICBzdHJpcFRpdGxlTGluaz86IHtcbiAgICBsaW5rOiAge1xuICAgICAgcXVlcnlQYXJhbXM6IHN0cmluZ1xuICAgIH0sXG4gICAgaWNvbjogc3RyaW5nLFxuICAgIHF1ZXJ5UGFyYW1zOiBzdHJpbmdcbiAgfTtcbiAgc2xpZGVyQ29uZmlnPzoge1xuICAgIHNob3dOYXZzOiBib29sZWFuLFxuICAgIHNob3dEb3RzOiBib29sZWFuLFxuICAgIG1heFdpZGdldHM/OiBudW1iZXJcbiAgICBjZXJpZmljYXRlQ2FyZE1hcmdpbj86IGJvb2xlYW5cbiAgfTtcbiAgc3RyaXBDb25maWc6IGFueTtcbiAgdGFicz86IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYltdIHwgdW5kZWZpbmVkO1xuICBzdHJpcE5hbWU/OiBzdHJpbmc7XG4gIHN0cmlwTG9nbz86IHN0cmluZztcbiAgZGVzY3JpcHRpb24/OiBzdHJpbmc7XG4gIHN0cmlwSW5mbz86IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSVN0cmlwSW5mbztcbiAgbm9EYXRhV2lkZ2V0PzogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGE7XG4gIGVycm9yV2lkZ2V0PzogTnNXaWRnZXRSZXNvbHZlci5JUmVuZGVyQ29uZmlnV2l0aEFueURhdGE7XG4gIHNob3dPbk5vRGF0YTogYm9vbGVhbjtcbiAgc2hvd09uTG9hZGVyOiBib29sZWFuO1xuICBzaG93T25FcnJvcjogYm9vbGVhbjtcbiAgbG9hZGVyV2lkZ2V0cz86IGFueTtcbiAgc3RyaXBCYWNrZ3JvdW5kPzogc3RyaW5nO1xuICBzZWNvbmRhcnlIZWFkaW5nPzogYW55O1xuICB2aWV3TW9yZVVybDogYW55O1xuICByZXF1ZXN0PzogYW55XG59XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3NiLXVpYy1jb250ZW50LXN0cmlwLXdpdGgtdGFicycsXG4gIHRlbXBsYXRlVXJsOiAnLi9jb250ZW50LXN0cmlwLXdpdGgtdGFicy1saWIuY29tcG9uZW50Lmh0bWwnLFxuICBzdHlsZVVybHM6IFsnLi9jb250ZW50LXN0cmlwLXdpdGgtdGFicy1saWIuY29tcG9uZW50LnNjc3MnXSxcbn0pXG5leHBvcnQgY2xhc3MgQ29udGVudFN0cmlwV2l0aFRhYnNMaWJDb21wb25lbnQgZXh0ZW5kcyBXaWRnZXRCYXNlQ29tcG9uZW50XG4gIGltcGxlbWVudHNcbiAgT25Jbml0LFxuICBPbkRlc3Ryb3ksXG4gIE5zV2lkZ2V0UmVzb2x2ZXIuSVdpZGdldERhdGE8TnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwTXVsdGlwbGU+IHtcbiAgQElucHV0KCkgd2lkZ2V0RGF0YSE6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcE11bHRpcGxlO1xuICBAT3V0cHV0KCkgZW1wdHlSZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBPdXRwdXQoKSB2aWV3QWxsUmVzcG9uc2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKVxuICBAT3V0cHV0KCkgdGVsZW10cnlSZXNwb25zZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpXG4gIEBJbnB1dCgpIHByb3ZpZGVySWQgOiBhbnkgPSAnJ1xuICBASW5wdXQoKSBlbWl0Vmlld0FsbCA6IGJvb2xlYW4gPSBmYWxzZVxuICBASG9zdEJpbmRpbmcoJ2lkJylcbiAgcHVibGljIGlkID0gYHdzLXN0cmlwLW1pbHRpcGxlXyR7TWF0aC5yYW5kb20oKX1gO1xuICBzdHJpcHNSZXN1bHREYXRhTWFwOiB7IFtrZXk6IHN0cmluZ106IElTdHJpcFVuaXRDb250ZW50RGF0YSB9ID0ge307XG4gIHN0cmlwc0tleU9yZGVyOiBzdHJpbmdbXSA9IFtdO1xuICBzaG93QWNjb3JkaW9uRGF0YSA9IHRydWU7XG4gIHNob3dQYXJlbnRMb2FkZXIgPSBmYWxzZTtcbiAgc2hvd1BhcmVudEVycm9yID0gZmFsc2U7XG4gIHNob3dQYXJlbnROb0RhdGEgPSBmYWxzZTtcbiAgZXJyb3JEYXRhQ291bnQgPSAwO1xuICBub0RhdGFDb3VudCA9IDA7XG4gIHN1Y2Nlc3NEYXRhQ291bnQgPSAwO1xuICBjb250ZW50QXZhaWxhYmxlID0gdHJ1ZTtcbiAgYmFzZVVybCA9IHRoaXMuY29uZmlnU3ZjLnNpdGVQYXRoIHx8ICcnO1xuICB2ZWlmaWVkS2FybWF5b2dpID0gZmFsc2U7XG4gIGVudmlyb25tZW50ITogYW55O1xuICBjaGFuZ2VFdmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIGRlZmF1bHRNYXhXaWRnZXRzID0gMTI7XG4gIGVucm9sbEludGVydmFsOiBhbnk7XG4gIHRvZGF5c0V2ZW50czogYW55ID0gW107XG5cbiAgY29uc3RydWN0b3IoXG4gICAgLy8gcHJpdmF0ZSBjb250ZW50U3RyaXBTdmM6IENvbnRlbnRTdHJpcE5ld011bHRpcGxlU2VydmljZSxcbiAgICBASW5qZWN0KCdlbnZpcm9ubWVudCcpIGVudmlyb25tZW50OiBhbnksXG4gICAgcHJpdmF0ZSBjb250ZW50U3ZjOiBXaWRnZXRDb250ZW50U2VydmljZSxcbiAgICBwcml2YXRlIGxvZ2dlclN2YzogTG9nZ2VyU2VydmljZSxcbiAgICBwcml2YXRlIGV2ZW50U3ZjOiBFdmVudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBjb25maWdTdmM6IENvbmZpZ3VyYXRpb25zU2VydmljZSxcbiAgICBwdWJsaWMgdXRpbGl0eVN2YzogVXRpbGl0eVNlcnZpY2UsXG4gICAgLy8gcHJpdmF0ZSBodHRwOiBIdHRwQ2xpZW50LFxuICAgIC8vIHByaXZhdGUgc2VhcmNoU2VydlN2YzogU2VhcmNoU2VydlNlcnZpY2UsXG4gICAgcHVibGljIHJvdXRlcjogUm91dGVyLFxuICAgIHByaXZhdGUgdXNlclN2YzogV2lkZ2V0VXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGU6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSBsYW5ndHJhbnNsYXRpb25zOiBNdWx0aWxpbmd1YWxUcmFuc2xhdGlvbnNTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKCk7XG4gICAgaWYgKGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSkge1xuICAgICAgdGhpcy50cmFuc2xhdGUuc2V0RGVmYXVsdExhbmcoJ2VuJyk7XG4gICAgICBsZXQgbGFuZyA9IEpTT04uc3RyaW5naWZ5KGxvY2FsU3RvcmFnZS5nZXRJdGVtKCd3ZWJzaXRlTGFuZ3VhZ2UnKSk7XG4gICAgICBsYW5nID0gbGFuZy5yZXBsYWNlKC9cXFwiL2csICcnKTtcbiAgICAgIHRoaXMudHJhbnNsYXRlLnVzZShsYW5nKTtcbiAgICB9XG4gICAgdGhpcy5lbnZpcm9ubWVudCA9IGVudmlyb25tZW50XG4gIH1cblxuICBuZ09uSW5pdCgpIHtcbiAgICAvLyBjb25zdCB1cmwgPSB3aW5kb3cubG9jYXRpb24uaHJlZlxuICAgIHRoaXMuaW5pdERhdGEoKTtcblxuICAgIHRoaXMuY29udGVudFN2Yy50ZWxlbWV0cnlEYXRhJC5zdWJzY3JpYmUoKGRhdGE6IGFueSkgPT4ge1xuICAgICAgdGhpcy50ZWxlbXRyeVJlc3BvbnNlLmVtaXQoZGF0YSlcbiAgICB9KVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuY2hhbmdlRXZlbnRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuY2hhbmdlRXZlbnRTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG4gIH1cblxuICBzaG93QWNjb3JkaW9uKGtleTogc3RyaW5nKSB7XG4gICAgaWYgKHRoaXMudXRpbGl0eVN2Yy5pc01vYmlsZSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XS5tb2RlID09PSAnYWNjb3JkaW9uJykge1xuICAgICAgcmV0dXJuIHRoaXMuc2hvd0FjY29yZGlvbkRhdGE7XG4gICAgfVxuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgc2V0SGlkZGVuRm9yU3RyaXAoa2V5OiBzdHJpbmcpIHtcbiAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBba2V5XS5zaG93U3RyaXAgPSBmYWxzZTtcbiAgICBzZXNzaW9uU3RvcmFnZS5zZXRJdGVtKGBjc3RyaXBfJHtrZXl9YCwgJzEnKTtcbiAgfVxuICBwcml2YXRlIGdldElmU3RyaXBIaWRkZW4oa2V5OiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCBzdG9yYWdlSXRlbSA9IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oYGNzdHJpcF8ke2tleX1gKTtcbiAgICByZXR1cm4gQm9vbGVhbihzdG9yYWdlSXRlbSAhPT0gJzEnKTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdERhdGEoKSB7XG4gICAgdGhpcy5zdHJpcHNLZXlPcmRlciA9IHRoaXMud2lkZ2V0RGF0YSAmJiB0aGlzLndpZGdldERhdGEuc3RyaXBzICYmIHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMubWFwKHN0cmlwID0+IHN0cmlwLmtleSkgfHwgW107XG4gICAgaWYgKHRoaXMud2lkZ2V0RGF0YS5sb2FkZXIgJiYgdGhpcy53aWRnZXREYXRhLnN0cmlwcy5sZW5ndGgpIHtcbiAgICAgIHRoaXMuc2hvd1BhcmVudExvYWRlciA9IHRydWU7XG4gICAgfVxuICAgIC8vIEZldGNoIHRoZSBkYXRhXG4gICAgZm9yIChjb25zdCBzdHJpcCBvZiB0aGlzLndpZGdldERhdGEuc3RyaXBzKSB7XG4gICAgICBpZiAodGhpcy5jaGVja0ZvckVtcHR5V2lkZ2V0KHN0cmlwKSkge1xuICAgICAgICB0aGlzLmZldGNoU3RyaXBGcm9tUmVxdWVzdERhdGEoc3RyaXAsIGZhbHNlKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCB0cnVlLCBudWxsKTtcbiAgICAgIH1cbiAgICB9XG4gICAgLy8gU3Vic2NyaXB0aW9uIGZvciBjaGFuZ2VzXG4gICAgY29uc3Qga2V5QW5kRXZlbnQ6IHsga2V5OiBzdHJpbmc7IHR5cGU6IHN0cmluZzsgZnJvbTogc3RyaW5nIH1bXSA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHNcbiAgICAgIC5tYXAoc3RyaXAgPT4gKHtcbiAgICAgICAga2V5OiBzdHJpcC5rZXksXG4gICAgICAgIHR5cGU6IChzdHJpcC5yZWZyZXNoRXZlbnQgJiYgc3RyaXAucmVmcmVzaEV2ZW50LmV2ZW50VHlwZSkgfHwgJycsXG4gICAgICAgIGZyb206IChzdHJpcC5yZWZyZXNoRXZlbnQgJiYgc3RyaXAucmVmcmVzaEV2ZW50LmZyb20udG9TdHJpbmcoKSkgfHwgJycsXG4gICAgICB9KSlcbiAgICAgIC5maWx0ZXIoKHsga2V5LCB0eXBlLCBmcm9tIH0pID0+IGtleSAmJiB0eXBlICYmIGZyb20pO1xuICAgIGNvbnN0IGV2ZW50VHlwZVNldCA9IG5ldyBTZXQoa2V5QW5kRXZlbnQubWFwKGUgPT4gZS50eXBlKSk7XG4gICAgdGhpcy5jaGFuZ2VFdmVudFN1YnNjcmlwdGlvbiA9IHRoaXMuZXZlbnRTdmMuZXZlbnRzJFxuICAgICAgLnBpcGUoZmlsdGVyKGV2ZW50ID0+IGV2ZW50VHlwZVNldC5oYXMoZXZlbnQuZXZlbnRUeXBlKSkpXG4gICAgICAuc3Vic2NyaWJlKGV2ZW50ID0+IHtcbiAgICAgICAga2V5QW5kRXZlbnRcbiAgICAgICAgICAuZmlsdGVyKGUgPT4gZS50eXBlID09PSBldmVudC5ldmVudFR5cGUgJiYgZS5mcm9tID09PSBldmVudC5mcm9tKVxuICAgICAgICAgIC5tYXAoZSA9PiBlLmtleSlcbiAgICAgICAgICAuZm9yRWFjaChrID0+IHRoaXMuZmV0Y2hTdHJpcEZyb21LZXkoaywgZmFsc2UpKTtcbiAgICAgIH0pO1xuICB9XG5cbiAgcHJpdmF0ZSBmZXRjaFN0cmlwRnJvbUtleShrZXk6IHN0cmluZywgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGNvbnN0IHN0cmlwRGF0YSA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMuZmluZChzdHJpcCA9PiBzdHJpcC5rZXkgPT09IGtleSk7XG4gICAgaWYgKHN0cmlwRGF0YSkge1xuICAgICAgdGhpcy5mZXRjaFN0cmlwRnJvbVJlcXVlc3REYXRhKHN0cmlwRGF0YSwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB9XG4gIH1cblxuICBpc1N0cmlwU2hvd2luZyhkYXRhOiBhbnkpIHtcbiAgICBsZXQgY291bnQgPSAwO1xuICAgIGlmIChkYXRhICYmIGRhdGEua2V5ID09PSB0aGlzLmVudmlyb25tZW50LnByb2dyYW1TdHJpcEtleSAmJiAoIWRhdGEudGFicyB8fCAhZGF0YS50YWJzLmxlbmd0aCkgJiZcbiAgICAgIGRhdGEuc3RyaXBUaXRsZSA9PT0gdGhpcy5lbnZpcm9ubWVudC5wcm9ncmFtU3RyaXBOYW1lICYmIGRhdGEud2lkZ2V0cy5sZW5ndGggPiAwKSB7XG4gICAgICBkYXRhLndpZGdldHMuZm9yRWFjaCgoa2V5OiBhbnkpID0+IHtcbiAgICAgICAgaWYgKGtleSAmJiBrZXkud2lkZ2V0RGF0YS5jb250ZW50LnByaW1hcnlDYXRlZ29yeSA9PT0gdGhpcy5lbnZpcm9ubWVudC5wcm9ncmFtU3RyaXBQcmltYXJ5Q2F0ZWdvcnkpIHtcbiAgICAgICAgICBjb3VudCA9IGNvdW50ICsgMTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgICBpZiAoY291bnQgPiAwKSB7XG4gICAgICAgIGRhdGEuc2hvd1N0cmlwID0gdHJ1ZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGRhdGEuc2hvd1N0cmlwID0gZmFsc2U7XG4gICAgICB9XG4gICAgfVxuICAgIC8vIGNvbnNvbGUubG9nKCdkYXRhLmtleScsIGRhdGEsIGRhdGEua2V5LCBkYXRhLndpZGdldHMpO1xuICAgIHJldHVybiBkYXRhLnNob3dTdHJpcDtcbiAgfVxuXG4gIGdldCBpc01vYmlsZSgpIHtcbiAgICByZXR1cm4gdGhpcy51dGlsaXR5U3ZjLmlzTW9iaWxlIHx8IGZhbHNlO1xuICB9XG5cbiAgZ2V0ZGF0YShkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBpZiAoZGF0YS5zdHJpcEluZm8pIHtcbiAgICAgIHJldHVybiBkYXRhLnN0cmlwSW5mby53aWRnZXQ7XG4gICAgfVxuICAgIHJldHVybiB7fTtcblxuICB9XG4gIGNoZWNrQ29uZGl0aW9uKHdEYXRhOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBNdWx0aXBsZSwgZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgaWYgKHdEYXRhLnN0cmlwc1swXS5zdHJpcENvbmZpZyAmJiB3RGF0YS5zdHJpcHNbMF0uc3RyaXBDb25maWcuaGlkZVNob3dBbGwpIHtcbiAgICAgIHJldHVybiAhd0RhdGEuc3RyaXBzWzBdLnN0cmlwQ29uZmlnLmhpZGVTaG93QWxsO1xuICAgIH1cbiAgICByZXR1cm4gd0RhdGEuc3RyaXBzWzBdLnZpZXdNb3JlVXJsICYmIGRhdGEud2lkZ2V0cyAmJiBkYXRhLndpZGdldHMubGVuZ3RoID49IDQ7XG4gIH1cbiAgY2hlY2tWaXNpYmxlKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIHJldHVybiBkYXRhLnN0cmlwSW5mbyAmJiBkYXRhLnN0cmlwSW5mby52aXNpYmlsaXR5TW9kZSA9PT0gJ3Zpc2libGUnO1xuICB9XG5cbiAgZ2V0Q29udGluZXVMZWFybmluZ0xlbnRoKGRhdGE6IElTdHJpcFVuaXRDb250ZW50RGF0YSkge1xuICAgIHJldHVybiBkYXRhLndpZGdldHMgPyBkYXRhLndpZGdldHMubGVuZ3RoIDogMDtcbiAgfVxuICBnZXRMZW5ndGgoZGF0YTogSVN0cmlwVW5pdENvbnRlbnREYXRhKSB7XG4gICAgaWYgKCFkYXRhLnRhYnMgfHwgIWRhdGEudGFicy5sZW5ndGgpIHtcbiAgICAgIHJldHVybiBkYXRhLndpZGdldHMgPyBkYXRhLndpZGdldHMubGVuZ3RoIDogMDtcbiAgICB9IHtcbiAgICAgIC8vIGlmIHRhYnMgYXJlIHRoZXJlIGNoZWNrIGlmIGVhY2ggdGFiIGhhcyB3aWRnZXRzIGFuZCBnZXQgdGhlIHRhYiB3aXRoIG1heCB3aWRnZXRzXG4gICAgICBjb25zdCB0YWJXaXRoTWF4V2lkZ2V0cyA9IGRhdGEudGFicy5yZWR1Y2UoXG4gICAgICAgIChwcmV2LCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgaWYgKCFwcmV2LndpZGdldHMgJiYgIWN1cnJlbnQud2lkZ2V0cykge1xuICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIGlmIChwcmV2LndpZGdldHMgJiYgY3VycmVudC53aWRnZXRzKSB7XG4gICAgICAgICAgICByZXR1cm4gKHByZXYud2lkZ2V0cy5sZW5ndGggPiBjdXJyZW50LndpZGdldHMubGVuZ3RoKSA/IHByZXYgOiBjdXJyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoY3VycmVudC53aWRnZXRzICYmICFwcmV2LndpZGdldHMpIHtcbiAgICAgICAgICAgIHJldHVybiBjdXJyZW50O1xuICAgICAgICAgIH1cbiAgICAgICAgICBpZiAoIWN1cnJlbnQud2lkZ2V0cyAmJiBwcmV2LndpZGdldHMpIHtcbiAgICAgICAgICAgIHJldHVybiBwcmV2O1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gY3VycmVudDtcbiAgICAgICAgICAvLyByZXR1cm4gKHByZXYud2lkZ2V0cyAmJiBjdXJyZW50LndpZGdldHMgJiYgKHByZXYud2lkZ2V0cy5sZW5ndGggPiBjdXJyZW50LndpZGdldHMubGVuZ3RoKSApID8gcHJldiA6IGN1cnJlbnRcbiAgICAgICAgICAvLyB0c2xpbnQ6ZGlzYWJsZS1uZXh0LWxpbmU6IGFsaWduXG4gICAgICAgIH0sIGRhdGEudGFic1swXSk7XG4gICAgICAvLyBpZiB0YWJzIGhhcyBhdGxlYXN0IDEgd2lkZ2V0cyB0aGVuIHN0cmlwIHdpbGwgc2hvdyBvciBlbHNlIG5vdFxuICAgICAgcmV0dXJuIHRhYldpdGhNYXhXaWRnZXRzLndpZGdldHMgPyB0YWJXaXRoTWF4V2lkZ2V0cy53aWRnZXRzLmxlbmd0aCA6IDA7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBnZXRGaWx0ZXJzRnJvbUFycmF5KHY2ZmlsdGVyczogYW55KSB7XG4gICAgY29uc3QgZmlsdGVyczogYW55ID0ge307XG4gICAgaWYgKHY2ZmlsdGVycy5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcbiAgICAgIHY2ZmlsdGVycy5mb3JFYWNoKCgoZjogYW55KSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKGYpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBmaWx0ZXJzW2tleV0gPSBmW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgfVxuICAgIHJldHVybiB2NmZpbHRlcnM7XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybVNlYXJjaFY2RmlsdGVyc1YyKHY2ZmlsdGVyczogYW55KSB7XG4gICAgY29uc3QgZmlsdGVyczogYW55ID0ge307XG4gICAgaWYgKHY2ZmlsdGVycy5jb25zdHJ1Y3RvciA9PT0gQXJyYXkpIHtcbiAgICAgIHY2ZmlsdGVycy5mb3JFYWNoKCgoZjogYW55KSA9PiB7XG4gICAgICAgIE9iamVjdC5rZXlzKGYpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgICAgICBmaWx0ZXJzW2tleV0gPSBmW2tleV07XG4gICAgICAgIH0pO1xuICAgICAgfSkpO1xuICAgICAgcmV0dXJuIGZpbHRlcnM7XG4gICAgfVxuICAgIHJldHVybiB2NmZpbHRlcnM7XG4gIH1cblxuICBjaGVja0ZvckRhdGVGaWx0ZXJzKGZpbHRlcnM6IGFueSkge1xuICAgIGxldCB1c2VyRGF0YTogYW55O1xuICAgIGlmICh0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZSkge1xuICAgICAgdXNlckRhdGEgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZTtcbiAgICB9XG5cbiAgICBpZiAoZmlsdGVycyAmJiBmaWx0ZXJzLmhhc093blByb3BlcnR5KCdiYXRjaGVzLmVuZERhdGUnKSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gICAgICBmaWx0ZXJzWydiYXRjaGVzLmVuZERhdGUnXVsnPj0nXSA9IGV2YWwoZmlsdGVyc1snYmF0Y2hlcy5lbmREYXRlJ11bJz49J10pXG4gICAgfSBlbHNlIGlmIChmaWx0ZXJzICYmIGZpbHRlcnMuaGFzT3duUHJvcGVydHkoJ2JhdGNoZXMuZW5yb2xsbWVudEVuZERhdGUnKSkge1xuICAgICAgLy8gdHNsaW50OmRpc2FibGUtbmV4dC1saW5lXG4gICAgICBmaWx0ZXJzWydiYXRjaGVzLmVucm9sbG1lbnRFbmREYXRlJ11bJz49J10gPSBldmFsKGZpbHRlcnNbJ2JhdGNoZXMuZW5yb2xsbWVudEVuZERhdGUnXVsnPj0nXSlcbiAgICB9IGVsc2UgaWYgKGZpbHRlcnMub3JnYW5pc2F0aW9uICYmXG4gICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbi5pbmRleE9mKCc8b3JnSUQ+JykgPj0gMFxuICAgICkge1xuICAgICAgaWYodGhpcy5wcm92aWRlcklkKSB7XG4gICAgICAgIGZpbHRlcnMub3JnYW5pc2F0aW9uID0gdGhpcy5wcm92aWRlcklkO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24gPSB1c2VyRGF0YSAmJiB1c2VyRGF0YS5yb290T3JnSWQ7XG5cbiAgICAgICAgaWYgKGZpbHRlcnMgJiYgZmlsdGVycy5oYXNPd25Qcm9wZXJ0eSgnZGVzaWduYXRpb24nKSkge1xuICAgICAgICAgIGZpbHRlcnMuZGVzaWduYXRpb24gPSB1c2VyRGF0YS5wcm9mZXNzaW9uYWxEZXRhaWxzLmxlbmd0aCA+IDAgP1xuICAgICAgICAgICAgdXNlckRhdGEucHJvZmVzc2lvbmFsRGV0YWlsc1swXS5kZXNpZ25hdGlvbiA6ICcnO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnM7XG4gIH1cblxuICBwcml2YXRlIGZldGNoU3RyaXBGcm9tUmVxdWVzdERhdGEoXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSxcbiAgKSB7XG4gICAgLy8gc2V0dGluZyBpbml0aWFsIHZhbHVlc1xuICAgIHN0cmlwLmxvYWRlcldpZGdldHMgPSB0aGlzLnRyYW5zZm9ybVNrZWxldG9uVG9XaWRnZXRzKHN0cmlwKTtcbiAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdmZXRjaGluZycsIGZhbHNlLCBudWxsKTtcbiAgICB0aGlzLmZldGNoRnJvbUVucm9sbG1lbnRMaXN0KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hGcm9tU2VhcmNoVjYoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEZyb21UcmVuZGluZ0NvbnRlbnQoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEFsbENicFBsYW5zKHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hBbGxUb3BDb250ZW50KHN0cmlwLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgIHRoaXMuZmV0Y2hBbGxGZWF0dXJlZENvbnRlbnQoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaEFsbEJvb2tNYXJrRGF0YShzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICB0aGlzLmZldGNoQWxsUGxheWxpc3RTZWFyY2goc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgdGhpcy5mZXRjaFBsYXlsaXN0UmVhZERhdGEoc3RyaXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgXG4gICAgLy8gdGhpcy5lbnJvbGxJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAvLyAgIHRoaXMuZmV0Y2hBbGxDYnBQbGFucyhzdHJpcCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKVxuICAgIC8vIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwKVxuICB9XG5cbiAgZmV0Y2hGcm9tRW5yb2xsbWVudExpc3Qoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QpLmxlbmd0aCkge1xuICAgICAgbGV0IHVzZXJJZCA9ICcnO1xuICAgICAgbGV0IGNvbnRlbnQ6IE5zQ29udGVudC5JQ29udGVudFtdO1xuICAgICAgbGV0IGNvbnRlbnROZXc6IE5zQ29udGVudC5JQ29udGVudFtdO1xuICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICBjb25zdCBxdWVyeVBhcmFtcyA9IF8uZ2V0KHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QsICdxdWVyeVBhcmFtcycpO1xuICAgICAgaWYgKHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlKSB7XG4gICAgICAgIHVzZXJJZCA9IHRoaXMuY29uZmlnU3ZjLnVzZXJQcm9maWxlLnVzZXJJZDtcbiAgICAgIH1cbiAgICAgIC8vIHRzbGludDpkaXNhYmxlLW5leHQtbGluZTogZGVwcmVjYXRpb25cbiAgICAgIHRoaXMudXNlclN2Yy5mZXRjaFVzZXJCYXRjaExpc3QodXNlcklkLCBxdWVyeVBhcmFtcykuc3Vic2NyaWJlKFxuICAgICAgICAocmVzdWx0OiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zdCBjb3Vyc2VzID0gcmVzdWx0ICYmIHJlc3VsdC5jb3Vyc2VzO1xuICAgICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgICAgICBjb3Vyc2VzLmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGg6IChzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoKSB8fCAnJyxcbiAgICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgICAgICAgICBxOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICBmOlxuICAgICAgICAgICAgICAgICAgc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2ICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYuZmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMuc2VhcmNoU2VydlN2Yy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnMoXG4gICAgICAgICAgICAgICAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgICAgLy8gKSxcbiAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICA6IHt9LFxuICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgOiBudWxsO1xuICAgICAgICAgIGlmIChjb3Vyc2VzICYmIGNvdXJzZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBjb250ZW50ID0gY291cnNlcy5tYXAoKGM6IGFueSkgPT4ge1xuICAgICAgICAgICAgICBjb25zdCBjb250ZW50VGVtcDogTnNDb250ZW50LklDb250ZW50ID0gYy5jb250ZW50O1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5jb21wbGV0aW9uUGVyY2VudGFnZSA9IGMuY29tcGxldGlvblBlcmNlbnRhZ2UgfHwgYy5wcm9ncmVzcyB8fCAwO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5jb21wbGV0aW9uU3RhdHVzID0gYy5jb21wbGV0aW9uU3RhdHVzIHx8IGMuc3RhdHVzIHx8IDA7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmVucm9sbGVkRGF0ZSA9IGMuZW5yb2xsZWREYXRlIHx8ICcnO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5sYXN0Q29udGVudEFjY2Vzc1RpbWUgPSBjLmxhc3RDb250ZW50QWNjZXNzVGltZSB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAubGFzdFJlYWRDb250ZW50U3RhdHVzID0gYy5sYXN0UmVhZENvbnRlbnRTdGF0dXMgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmxhc3RSZWFkQ29udGVudElkID0gYy5sYXN0UmVhZENvbnRlbnRJZCB8fCAnJztcbiAgICAgICAgICAgICAgY29udGVudFRlbXAubHJjUHJvZ3Jlc3NEZXRhaWxzID0gYy5scmNQcm9ncmVzc0RldGFpbHMgfHwgJyc7XG4gICAgICAgICAgICAgIGNvbnRlbnRUZW1wLmlzc3VlZENlcnRpZmljYXRlcyA9IGMuaXNzdWVkQ2VydGlmaWNhdGVzIHx8IFtdO1xuICAgICAgICAgICAgICBjb250ZW50VGVtcC5iYXRjaElkID0gYy5iYXRjaElkIHx8ICcnO1xuICAgICAgICAgICAgICByZXR1cm4gY29udGVudFRlbXA7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gVG8gZmlsdGVyIGNvbnRlbnQgd2l0aCBjb21wbGV0aW9uUGVyY2VudGFnZSA+IDAsXG4gICAgICAgICAgLy8gc28gdGhhdCBvbmx5IHRob3NlIGNvbnRlbnQgd2lsbCBzaG93IGluIGhvbWUgcGFnZVxuICAgICAgICAgIC8vIGNvbnRpbnVlIGxlYXJpbmcgc3RyaXBcbiAgICAgICAgICAvLyBpZiAoY29udGVudCAmJiBjb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgIC8vICAgY29udGVudE5ldyA9IGNvbnRlbnQuZmlsdGVyKChjOiBhbnkpID0+IHtcbiAgICAgICAgICAvLyAgICAgLyoqIGNvbW1lbnRlZCBhcyBib3RoIGFyZSAwIGFmdGVyIGVucm9sbGwgKi9cbiAgICAgICAgICAvLyAgICAgaWYgKGMuY29tcGxldGlvblBlcmNlbnRhZ2UgJiYgYy5jb21wbGV0aW9uUGVyY2VudGFnZSA+IDApIHtcbiAgICAgICAgICAvLyAgICAgICByZXR1cm4gY1xuICAgICAgICAgIC8vICAgICB9XG4gICAgICAgICAgLy8gICB9KVxuICAgICAgICAgIC8vIH1cblxuICAgICAgICAgIC8vIFRvIHNvcnQgaW4gZGVzY2VuZGluZyBvcmRlciBvZiB0aGUgZW5yb2xsZWQgZGF0ZVxuICAgICAgICAgIGNvbnRlbnROZXcgPSAoY29udGVudCB8fCBbXSkuc29ydCgoYTogYW55LCBiOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVBOiBhbnkgPSBuZXcgRGF0ZShhLmxhc3RDb250ZW50QWNjZXNzVGltZSB8fCAwKTtcbiAgICAgICAgICAgIGNvbnN0IGRhdGVCOiBhbnkgPSBuZXcgRGF0ZShiLmxhc3RDb250ZW50QWNjZXNzVGltZSB8fCAwKTtcbiAgICAgICAgICAgIHJldHVybiBkYXRlQiAtIGRhdGVBO1xuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRhYlJlc3VsdHMgPSB0aGlzLnNwbGl0RW5yb2xsbWVudFRhYnNEYXRhKGNvbnRlbnROZXcsIHN0cmlwKTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50TmV3LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICB2aWV3TW9yZVVybCxcbiAgICAgICAgICAgICAgdGFiUmVzdWx0c1xuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbnRlbnROZXcsIHN0cmlwKSxcbiAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgIHZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgICgpID0+IHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc3BsaXRFbnJvbGxtZW50VGFic0RhdGEoY29udGVudE5ldzogTnNDb250ZW50LklDb250ZW50W10sIHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0KSB7XG4gICAgY29uc3QgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICBjb25zdCBzcGxpdERhdGEgPSB0aGlzLmdldElucHJvZ3Jlc3NBbmRDb21wbGV0ZWQoXG4gICAgICBjb250ZW50TmV3LFxuICAgICAgKGU6IGFueSkgPT4gZS5jb21wbGV0aW9uU3RhdHVzID09PSAxIHx8IGUuY29tcGxldGlvblBlcmNlbnRhZ2UgPCAxMDAsXG4gICAgICBzdHJpcCxcbiAgICApO1xuXG4gICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaXAudGFicy5sZW5ndGg7IGkgKz0gMSkge1xuICAgICAgICBpZiAoc3RyaXAudGFic1tpXSkge1xuICAgICAgICAgIHRhYlJlc3VsdHMucHVzaChcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgLi4uc3RyaXAudGFic1tpXSxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgICAgLi4uKHNwbGl0RGF0YS5maW5kKGl0bUlubmVyID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzW2ldICYmIGl0bUlubmVyLnZhbHVlID09PSBzdHJpcC50YWJzW2ldLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gaXRtSW5uZXI7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICApO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiB0YWJSZXN1bHRzO1xuICB9XG5cbiAgZ2V0SW5wcm9ncmVzc0FuZENvbXBsZXRlZChhcnJheTogTnNDb250ZW50LklDb250ZW50W10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VzdG9tRmlsdGVyOiBhbnksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBjb25zdCBpbnByb2dyZXNzOiBhbnlbXSA9IFtdO1xuICAgIGNvbnN0IGNvbXBsZXRlZDogYW55W10gPSBbXTtcbiAgICBhcnJheS5mb3JFYWNoKChlOiBhbnksIGlkeDogbnVtYmVyLCBhcnI6IGFueVtdKSA9PiAoY3VzdG9tRmlsdGVyKGUsIGlkeCwgYXJyKSA/IGlucHJvZ3Jlc3MgOiBjb21wbGV0ZWQpLnB1c2goZSkpO1xuICAgIHJldHVybiBbXG4gICAgICB7IHZhbHVlOiAnaW5wcm9ncmVzcycsIHdpZGdldHM6IHRoaXMudHJhbnNmb3JtQ29udGVudHNUb1dpZGdldHMoaW5wcm9ncmVzcywgc3RyaXApIH0sXG4gICAgICB7IHZhbHVlOiAnY29tcGxldGVkJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb21wbGV0ZWQsIHN0cmlwKSB9XTtcbiAgfVxuXG4gIGFzeW5jIGZldGNoRnJvbVNlYXJjaFY2KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2KS5sZW5ndGgpIHtcbiAgICAgIC8vIGlmICghKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlLmxlbmd0aCA+IDApKSB7XG4gICAgICAvLyAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVMb2NhbGUpIHtcbiAgICAgIC8vICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSA9IFt0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVMb2NhbGUubG9jYWxzWzBdXVxuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gWydlbiddXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2cob3JpZ2luYWxGaWx0ZXJzKTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5zZWFyY2hWNi5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuY2hlY2tGb3JEYXRlRmlsdGVycyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRnJvbUFycmF5KFxuICAgICAgICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdC5maWx0ZXJzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgLy8gVE9ETzogSGF2ZSB0byBleHRyYWN0IHJlcXVlc3RSZXF1aXJlZCB0byBvdXRlciBsZXZlbCBvZiB0YWJzIGNvbmZpZ1xuICAgICAgICBjb25zdCBmaXJzdFRhYiA9IHN0cmlwLnRhYnNbMF07XG4gICAgICAgIGlmIChmaXJzdFRhYi5yZXF1ZXN0UmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGFiRnJvbU1hcCA9IChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbMF0pIGFzIE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYjtcblxuICAgICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihzdHJpcCwgMCwgY3VycmVudFRhYkZyb21NYXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnNlYXJjaFY2UmVxdWVzdChzdHJpcCwgc3RyaXAucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLnJlc3VsdHMpIHtcbiAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCkge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5FdmVudCkge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUV2ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5FdmVudCwgc3RyaXApLFxuICAgICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgICAgcmVzcG9uc2Uudmlld01vcmVVcmwsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgc2VhcmNoVjZSZXF1ZXN0KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdFsncmVxdWVzdCddLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0LnNlYXJjaFY2KSB7XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5zZWFyY2hWNihyZXF1ZXN0LnNlYXJjaFY2KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQgJiYgcmVzdWx0cy5yZXN1bHQuY29udGVudC5sZW5ndGggPiA1ICYmIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICAgICk7XG4gICAgICAgICAgY29uc3Qgdmlld01vcmVVcmwgPSBzaG93Vmlld01vcmVcbiAgICAgICAgICAgID8ge1xuICAgICAgICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICAgICAgICBxdWVyeVBhcmFtczoge1xuICAgICAgICAgICAgICAgIHRhYjogJ0xlYXJuJyxcbiAgICAgICAgICAgICAgICBxOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgICAgICAgICBmOlxuICAgICAgICAgICAgICAgICAgcmVxdWVzdCAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNlYXJjaFY2ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdCAmJlxuICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVyc1xuICAgICAgICAgICAgICAgICAgICA/IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgICAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzVjIoXG4gICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbEZpbHRlcnMsXG4gICAgICAgICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIDoge30sXG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICA6IG51bGw7XG4gICAgICAgICAgLy8gaWYgKHZpZXdNb3JlVXJsICYmIHZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zKSB7XG4gICAgICAgICAgLy8gICB2aWV3TW9yZVVybC5xdWVyeVBhcmFtcyA9IHZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zXG4gICAgICAgICAgLy8gfVxuICAgICAgICAgIHJlc29sdmUoeyByZXN1bHRzLCB2aWV3TW9yZVVybCB9KTtcbiAgICAgICAgfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZmV0Y2hGcm9tVHJlbmRpbmdDb250ZW50KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKS5sZW5ndGgpIHtcbiAgICAgIC8vIGlmICghKHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlICYmIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlLmxlbmd0aCA+IDApKSB7XG4gICAgICAvLyAgIGlmICh0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVMb2NhbGUpIHtcbiAgICAgIC8vICAgICBzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2LmxvY2FsZSA9IFt0aGlzLmNvbmZpZ1N2Yy5hY3RpdmVMb2NhbGUubG9jYWxzWzBdXVxuICAgICAgLy8gICB9IGVsc2Uge1xuICAgICAgLy8gICAgIHN0cmlwLnJlcXVlc3Quc2VhcmNoVjYubG9jYWxlID0gWydlbiddXG4gICAgICAvLyAgIH1cbiAgICAgIC8vIH1cbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgLy8gdHNsaW50OmRpc2FibGU6bm8tY29uc29sZVxuICAgICAgY29uc29sZS5sb2cob3JpZ2luYWxGaWx0ZXJzKTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzKSB7XG4gICAgICAgIG9yaWdpbmFsRmlsdGVycyA9IHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyA9IHRoaXMuY2hlY2tGb3JEYXRlRmlsdGVycyhzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRnJvbUFycmF5KFxuICAgICAgICAgIHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLFxuICAgICAgICApO1xuICAgICAgfVxuICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFicy5sZW5ndGgpIHtcbiAgICAgICAgLy8gVE9ETzogSGF2ZSB0byBleHRyYWN0IHJlcXVlc3RSZXF1aXJlZCB0byBvdXRlciBsZXZlbCBvZiB0YWJzIGNvbmZpZ1xuICAgICAgICBjb25zdCBmaXJzdFRhYiA9IHN0cmlwLnRhYnNbMF07XG4gICAgICAgIGlmIChmaXJzdFRhYi5yZXF1ZXN0UmVxdWlyZWQpIHtcbiAgICAgICAgICBpZiAodGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0gJiYgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicykge1xuICAgICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgICBjb25zdCBjdXJyZW50VGFiRnJvbU1hcCA9IChhbGxUYWJzICYmIGFsbFRhYnMubGVuZ3RoICYmIGFsbFRhYnNbMF0pIGFzIE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYjtcblxuICAgICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFUcmVuZGluZyhzdHJpcCwgMCwgY3VycmVudFRhYkZyb21NYXAsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnRyZW5kaW5nU2VhcmNoUmVxdWVzdChzdHJpcCwgc3RyaXAucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cyAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb25zdCBjb250ZW50ID0gcmVzcG9uc2UucmVzdWx0cy5yZXNwb25zZVtzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlc3BvbnNlS2V5XSB8fCBbXTtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCB8fCAnJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICBpZighY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2RvbmUnLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyB0cmVuZGluZ1NlYXJjaFJlcXVlc3Qoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKTogUHJvbWlzZTxhbnk+IHtcbiAgICBjb25zdCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgIHJldHVybiBuZXcgUHJvbWlzZTxhbnk+KChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIGlmIChyZXF1ZXN0ICYmIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gpIHtcbiAgICAgICAgLy8gY2hlY2sgZm9yIHRoZSByZXF1ZXN0IGlmIGl0IGhhcyBkeW5hbWljIHZhbHVlc11cbiAgICAgICAgaWYgKHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbiAmJlxuICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbi5pbmRleE9mKCc8b3JnSUQ+JykgPj0gMFxuICAgICAgICApIHtcbiAgICAgICAgICBsZXQgdXNlclJvb3RPcmdJZDtcbiAgICAgICAgICBpZiAodGhpcy5jb25maWdTdmMudXNlclByb2ZpbGUpIHtcbiAgICAgICAgICAgIHVzZXJSb290T3JnSWQgPSB0aGlzLmNvbmZpZ1N2Yy51c2VyUHJvZmlsZS5yb290T3JnSWQ7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzLm9yZ2FuaXNhdGlvbiA9IHVzZXJSb290T3JnSWQ7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb250ZW50U3ZjLnRyZW5kaW5nQ29udGVudFNlYXJjaChyZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc3Qgc2hvd1ZpZXdNb3JlID0gQm9vbGVhbihcbiAgICAgICAgICAgIHJlc3VsdHMucmVzdWx0ICYmXG4gICAgICAgICAgICBzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgICAgICByZXN1bHRzLnJlc3VsdFtzdHJpcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoLnJlc3BvbnNlS2V5XSAmJlxuICAgICAgICAgICAgcmVzdWx0cy5yZXN1bHRbc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXNwb25zZUtleV0ubGVuZ3RoID4gNSAmJlxuICAgICAgICAgICAgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICAgKTtcbiAgICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICAgICAgPyB7XG4gICAgICAgICAgICAgIHBhdGg6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnBhdGggfHwgJycsXG4gICAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7XG4gICAgICAgICAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICAgICAgICAgIHE6IHN0cmlwLnZpZXdNb3JlVXJsICYmIHN0cmlwLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICAgICAgICAgIGY6XG4gICAgICAgICAgICAgICAgICByZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiZcbiAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC50cmVuZGluZ1NlYXJjaC5yZXF1ZXN0ICYmXG4gICAgICAgICAgICAgICAgICAgIHJlcXVlc3QudHJlbmRpbmdTZWFyY2gucmVxdWVzdC5maWx0ZXJzXG4gICAgICAgICAgICAgICAgICAgID8gSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1TZWFyY2hWNkZpbHRlcnNWMihcbiAgICAgICAgICAgICAgICAgICAgICAgIG9yaWdpbmFsRmlsdGVycyxcbiAgICAgICAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICAgICAgOiB7fSxcbiAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIDogbnVsbDtcbiAgICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKGVycm9yLmVycm9yICYmIGVycm9yLmVycm9yLnN0YXR1cyA9PT0gNDAwKSB7XG4gICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZG9uZScsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbClcbiAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgdG9nZ2xlSW5mbyhkYXRhOiBJU3RyaXBVbml0Q29udGVudERhdGEpIHtcbiAgICBjb25zdCBzdHJpcEluZm8gPSB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbZGF0YS5rZXldLnN0cmlwSW5mbztcbiAgICBpZiAoc3RyaXBJbmZvKSB7XG4gICAgICBpZiAoc3RyaXBJbmZvLm1vZGUgIT09ICdiZWxvdycpIHtcbiAgICAgICAgdGhpcy5sb2dnZXJTdmMud2Fybihgc3RyaXAgaW5mbyBtb2RlOiAke3N0cmlwSW5mby5tb2RlfSBub3QgaW1wbGVtZW50ZWQgeWV0YCk7XG4gICAgICAgIHN0cmlwSW5mby5tb2RlID0gJ2JlbG93JztcbiAgICAgIH1cbiAgICAgIGlmIChzdHJpcEluZm8ubW9kZSA9PT0gJ2JlbG93Jykge1xuICAgICAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbZGF0YS5rZXldLnN0cmlwSW5mbyA9IHtcbiAgICAgICAgICAuLi5zdHJpcEluZm8sXG4gICAgICAgICAgdmlzaWJpbGl0eU1vZGU6IHN0cmlwSW5mby52aXNpYmlsaXR5TW9kZSA9PT0gJ2hpZGRlbicgPyAndmlzaWJsZScgOiAnaGlkZGVuJyxcbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBOc0NvbnRlbnQuSUNvbnRlbnRbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgKSB7XG4gICAgcmV0dXJuIChjb250ZW50cyB8fCBbXSkubWFwKChjb250ZW50LCBpZHgpID0+IChcbiAgICAgIGNvbnRlbnQgPyB7XG4gICAgICAgIHdpZGdldFR5cGU6ICdjYXJkTGliJyxcbiAgICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50TGliJyxcbiAgICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICAgIHdpZGdldERhdGE6IHtcbiAgICAgICAgICBjb250ZW50LFxuICAgICAgICAgIC4uLihjb250ZW50LmJhdGNoICYmIHsgYmF0Y2g6IGNvbnRlbnQuYmF0Y2ggfSksXG4gICAgICAgICAgY2FyZFN1YlR5cGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNhcmRTdWJUeXBlLFxuICAgICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgICAgIGNvbnRleHQ6IHsgcGFnZVNlY3Rpb246IHN0cmlwLmtleSwgcG9zaXRpb246IGlkeCB9LFxuICAgICAgICAgIGludHJhbmV0TW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuaW50cmFuZXRNb2RlLFxuICAgICAgICAgIGRlbGV0ZWRNb2RlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5kZWxldGVkTW9kZSxcbiAgICAgICAgICBjb250ZW50VGFnczogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuY29udGVudFRhZ3MsXG4gICAgICAgIH0sXG4gICAgICB9IDoge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZCcsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudCcsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7fSxcbiAgICAgIH1cbiAgICApKTtcbiAgfVxuXG4gIHByaXZhdGUgdHJhbnNmb3JtRXZlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBJVG9kYXlFdmVudHNbXSxcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgKSB7XG4gICAgdGhpcy5ldmVudFN2Yy5zZXRFdmVudExpc3REYXRhKGNvbnRlbnRzKTtcbiAgICByZXR1cm4gKHRoaXMuZXZlbnRTdmMudG9kYXlzRXZlbnRzIHx8IFtdKS5tYXAoKGNvbnRlbnQ6IGFueSwgaWR4OiBhbnkpID0+IChjb250ZW50ID8ge1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2V2ZW50SHViQ2FyZCcsXG4gICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgIHdpZGdldERhdGE6IHtcbiAgICAgICAgY29udGVudCxcbiAgICAgICAgY2FyZFN1YlR5cGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNhcmRTdWJUeXBlLFxuICAgICAgICBjYXJkQ3VzdG9tZUNsYXNzOiBzdHJpcC5jdXN0b21lQ2xhc3MgPyBzdHJpcC5jdXN0b21lQ2xhc3MgOiAnJyxcbiAgICAgICAgY29udGV4dDogeyBwYWdlU2VjdGlvbjogc3RyaXAua2V5LCBwb3NpdGlvbjogaWR4IH0sXG4gICAgICAgIGludHJhbmV0TW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuaW50cmFuZXRNb2RlLFxuICAgICAgICBkZWxldGVkTW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuZGVsZXRlZE1vZGUsXG4gICAgICAgIGNvbnRlbnRUYWdzOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jb250ZW50VGFncyxcbiAgICAgIH0sXG4gICAgfSA6IHtcbiAgICAgIHdpZGdldFR5cGU6ICdjYXJkJyxcbiAgICAgIHdpZGdldFN1YlR5cGU6ICdldmVudEh1YkNhcmQnLFxuICAgICAgd2lkZ2V0SG9zdENsYXNzOiAnbWItMicsXG4gICAgICB3aWRnZXREYXRhOiB7fSxcbiAgICB9XG4gICAgKSk7XG4gIH1cbiAgcHJpdmF0ZSB0cmFuc2Zvcm1Ta2VsZXRvblRvV2lkZ2V0cyhcbiAgICBzdHJpcDogYW55XG4gICkge1xuICAgIHJldHVybiBbMSwgMiwgMywgNCwgNSwgNiwgNywgNywgOCwgOSwgMTBdLm1hcChfY29udGVudCA9PiAoe1xuICAgICAgd2lkZ2V0VHlwZTogJ2NhcmRMaWInLFxuICAgICAgd2lkZ2V0U3ViVHlwZTogJ2NhcmRDb250ZW50TGliJyxcbiAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgd2lkZ2V0RGF0YToge1xuICAgICAgICBjYXJkU3ViVHlwZTogc3RyaXAubG9hZGVyQ29uZmlnICYmIHN0cmlwLmxvYWRlckNvbmZpZy5jYXJkU3ViVHlwZSB8fCAnY2FyZC1zdGFuZGFyZC1za2VsZXRvbicsXG4gICAgICAgIGNhcmRDdXN0b21lQ2xhc3M6IHN0cmlwLmN1c3RvbWVDbGFzcyA/IHN0cmlwLmN1c3RvbWVDbGFzcyA6ICcnLFxuICAgICAgfSxcbiAgICB9KSk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHByb2Nlc3NTdHJpcChcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICByZXN1bHRzOiBOc1dpZGdldFJlc29sdmVyLklSZW5kZXJDb25maWdXaXRoQW55RGF0YVtdID0gW10sXG4gICAgZmV0Y2hTdGF0dXM6IFRGZXRjaFN0YXR1cyxcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlLFxuICAgIF92aWV3TW9yZVVybDogYW55LFxuICAgIHRhYnNSZXN1bHRzPzogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVGFiW10gfCB1bmRlZmluZWQsXG4gICAgLy8gY2FsY3VsYXRlUGFyZW50U3RhdHVzIGlzIHVzZWQgc28gdGhhdCBwYXJlbnRzJyBzdGF0dXMgaXMgbm90IHJlLWNhbGN1bGF0ZWQgaWYgdGhlIEFQSSBpcyBjYWxsZWQgYWdhaW4gY296IG9mIGZpbHRlcnMsIGV0Yy5cbiAgKSB7XG4gICAgY29uc3Qgc3RyaXBEYXRhID0ge1xuICAgICAgdmlld01vcmVVcmw6IHN0cmlwLnZpZXdNb3JlVXJsLFxuICAgICAga2V5OiBzdHJpcC5rZXksXG4gICAgICBjYW5IaWRlU3RyaXA6IEJvb2xlYW4oc3RyaXAuY2FuSGlkZVN0cmlwKSxcbiAgICAgIHNob3dTdHJpcDogdGhpcy5nZXRJZlN0cmlwSGlkZGVuKHN0cmlwLmtleSksXG4gICAgICBub0RhdGFXaWRnZXQ6IHN0cmlwLm5vRGF0YVdpZGdldCxcbiAgICAgIGVycm9yV2lkZ2V0OiBzdHJpcC5lcnJvcldpZGdldCxcbiAgICAgIHN0cmlwSW5mbzogc3RyaXAuaW5mbyxcbiAgICAgIHN0cmlwVGl0bGU6IHN0cmlwLnRpdGxlLFxuICAgICAgc3RyaXBUaXRsZUxpbms6IHN0cmlwLnN0cmlwVGl0bGVMaW5rLFxuICAgICAgZGlzYWJsZVRyYW5zbGF0ZTogc3RyaXAuZGlzYWJsZVRyYW5zbGF0ZSxcbiAgICAgIHNsaWRlckNvbmZpZzogc3RyaXAuc2xpZGVyQ29uZmlnLFxuICAgICAgdGFiczogdGFic1Jlc3VsdHMgPyB0YWJzUmVzdWx0cyA6IHN0cmlwLnRhYnMsXG4gICAgICBzdHJpcE5hbWU6IHN0cmlwLm5hbWUsXG4gICAgICBtb2RlOiBzdHJpcC5tb2RlLFxuICAgICAgc3RyaXBDb25maWc6IHN0cmlwLnN0cmlwQ29uZmlnLFxuICAgICAgc3RyaXBCYWNrZ3JvdW5kOiBzdHJpcC5zdHJpcEJhY2tncm91bmQsXG4gICAgICBzZWNvbmRhcnlIZWFkaW5nOiBzdHJpcC5zZWNvbmRhcnlIZWFkaW5nLFxuICAgICAgbG9hZGVyV2lkZ2V0czogc3RyaXAubG9hZGVyV2lkZ2V0cyB8fCBbXSxcbiAgICAgIHdpZGdldHM6XG4gICAgICAgIGZldGNoU3RhdHVzID09PSAnZG9uZSdcbiAgICAgICAgICA/IFtcbiAgICAgICAgICAgIC4uLihzdHJpcC5wcmVXaWRnZXRzIHx8IFtdKS5tYXAodyA9PiAoe1xuICAgICAgICAgICAgICAuLi53LFxuICAgICAgICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6IGBtYi0yICR7dy53aWRnZXRIb3N0Q2xhc3N9YCxcbiAgICAgICAgICAgIH0pKSxcbiAgICAgICAgICAgIC4uLnJlc3VsdHMsXG4gICAgICAgICAgICAuLi4oc3RyaXAucG9zdFdpZGdldHMgfHwgW10pLm1hcCh3ID0+ICh7XG4gICAgICAgICAgICAgIC4uLncsXG4gICAgICAgICAgICAgIHdpZGdldEhvc3RDbGFzczogYG1iLTIgJHt3LndpZGdldEhvc3RDbGFzc31gLFxuICAgICAgICAgICAgfSkpLFxuICAgICAgICAgIF1cbiAgICAgICAgICA6IFtdLFxuICAgICAgc2hvd09uTm9EYXRhOiBCb29sZWFuKFxuICAgICAgICBzdHJpcC5ub0RhdGFXaWRnZXQgJiZcbiAgICAgICAgISgoc3RyaXAucHJlV2lkZ2V0cyB8fCBbXSkubGVuZ3RoICsgcmVzdWx0cy5sZW5ndGggKyAoc3RyaXAucG9zdFdpZGdldHMgfHwgW10pLmxlbmd0aCkgJiZcbiAgICAgICAgZmV0Y2hTdGF0dXMgPT09ICdkb25lJyxcbiAgICAgICksXG4gICAgICBzaG93T25Mb2FkZXI6IEJvb2xlYW4oc3RyaXAubG9hZGVyICYmIGZldGNoU3RhdHVzID09PSAnZmV0Y2hpbmcnKSxcbiAgICAgIHNob3dPbkVycm9yOiBCb29sZWFuKHN0cmlwLmVycm9yV2lkZ2V0ICYmIGZldGNoU3RhdHVzID09PSAnZXJyb3InKSxcbiAgICB9O1xuICAgIC8vIGNvbnN0IHN0cmlwRGF0YSA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldXG4gICAgdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwID0ge1xuICAgICAgLi4udGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwLFxuICAgICAgW3N0cmlwLmtleV06IHN0cmlwRGF0YSxcbiAgICB9O1xuICAgIGlmICghdGFic1Jlc3VsdHMpIHtcbiAgICAgIGlmIChcbiAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzICYmXG4gICAgICAgIChmZXRjaFN0YXR1cyA9PT0gJ2RvbmUnIHx8IGZldGNoU3RhdHVzID09PSAnZXJyb3InKSAmJlxuICAgICAgICBzdHJpcERhdGEud2lkZ2V0c1xuICAgICAgKSB7XG4gICAgICAgIHRoaXMuY2hlY2tQYXJlbnRTdGF0dXMoZmV0Y2hTdGF0dXMsIHN0cmlwRGF0YS53aWRnZXRzLmxlbmd0aCk7XG4gICAgICB9XG4gICAgICBpZiAoY2FsY3VsYXRlUGFyZW50U3RhdHVzICYmICEocmVzdWx0cyAmJiByZXN1bHRzLmxlbmd0aCA+IDApKSB7XG4gICAgICAgIHRoaXMuY29udGVudEF2YWlsYWJsZSA9IGZhbHNlO1xuICAgICAgfSBlbHNlIGlmIChyZXN1bHRzICYmIHJlc3VsdHMubGVuZ3RoID4gMCkge1xuICAgICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmNvbnRlbnRBdmFpbGFibGUgPSB0cnVlO1xuICAgIH1cbiAgfVxuICBwcml2YXRlIGNoZWNrUGFyZW50U3RhdHVzKGZldGNoU3RhdHVzOiBURmV0Y2hTdGF0dXMsIHN0cmlwV2lkZ2V0c0NvdW50OiBudW1iZXIpOiB2b2lkIHtcbiAgICBpZiAoZmV0Y2hTdGF0dXMgPT09ICdkb25lJyAmJiAhc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMubm9EYXRhQ291bnQgKz0gMTtcbiAgICB9IGVsc2UgaWYgKGZldGNoU3RhdHVzID09PSAnZG9uZScgJiYgc3RyaXBXaWRnZXRzQ291bnQpIHtcbiAgICAgIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArPSAxO1xuICAgIH0gZWxzZSBpZiAoZmV0Y2hTdGF0dXMgPT09ICdlcnJvcicpIHtcbiAgICAgIHRoaXMuZXJyb3JEYXRhQ291bnQgKz0gMTtcbiAgICB9XG4gICAgY29uc3Qgc2V0dGxlZENvdW50ID0gdGhpcy5ub0RhdGFDb3VudCArIHRoaXMuc3VjY2Vzc0RhdGFDb3VudCArIHRoaXMuZXJyb3JEYXRhQ291bnQ7XG4gICAgY29uc3QgdG90YWxDb3VudCA9IHRoaXMud2lkZ2V0RGF0YS5zdHJpcHMubGVuZ3RoO1xuICAgIGlmICh0aGlzLnN1Y2Nlc3NEYXRhQ291bnQgPiAwICYmIHNldHRsZWRDb3VudCA8IHRvdGFsQ291bnQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5zaG93UGFyZW50TG9hZGVyID0gc2V0dGxlZENvdW50ICE9PSB0b3RhbENvdW50O1xuICAgIHRoaXMuc2hvd1BhcmVudE5vRGF0YSA9XG4gICAgICB0aGlzLm5vRGF0YUNvdW50ID4gMCAmJiB0aGlzLm5vRGF0YUNvdW50ICsgdGhpcy5lcnJvckRhdGFDb3VudCA9PT0gdG90YWxDb3VudDtcbiAgICB0aGlzLnNob3dQYXJlbnRFcnJvciA9IHRoaXMuZXJyb3JEYXRhQ291bnQgPT09IHRvdGFsQ291bnQ7XG4gIH1cbiAgY2hlY2tGb3JFbXB0eVdpZGdldChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCk6IGJvb2xlYW4ge1xuICAgIGlmIChcbiAgICAgIHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICgoc3RyaXAucmVxdWVzdC5hcGkgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5hcGkpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3Quc2VhcmNoICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3Quc2VhcmNoKS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnNlYXJjaFJlZ2lvblJlY29tbWVuZGF0aW9uICYmXG4gICAgICAgICAgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5zZWFyY2hSZWdpb25SZWNvbW1lbmRhdGlvbikubGVuZ3RoKSB8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5zZWFyY2hWNiAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnNlYXJjaFY2KS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmVucm9sbG1lbnRMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuZW5yb2xsbWVudExpc3QpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmNicExpc3QpLmxlbmd0aCkgfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QudHJlbmRpbmdTZWFyY2ggJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50cmVuZGluZ1NlYXJjaCkubGVuZ3RoKXx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC50b3BDb250ZW50KS5sZW5ndGgpIHx8XG4gICAgICAgIChzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQpLmxlbmd0aCl8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQgJiYgT2JqZWN0LmtleXMoc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQpLmxlbmd0aCl8fFxuICAgICAgICAoc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoKS5sZW5ndGgpfHxcbiAgICAgICAgKHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkKS5sZW5ndGgpXG4gICAgICApXG4gICAgKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgcHVibGljIHRhYkNsaWNrZWQodGFiRXZlbnQ6IE1hdFRhYkNoYW5nZUV2ZW50LCBzdHJpcE1hcDogSVN0cmlwVW5pdENvbnRlbnREYXRhLCBzdHJpcEtleTogc3RyaW5nKSB7XG4gICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0pIHtcbiAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLmZldGNoVGFiU3RhdHVzID0gJ2lucHJvZ3Jlc3MnO1xuICAgICAgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0udGFiTG9hZGluZyA9IHRydWU7XG4gICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSB0cnVlO1xuICAgIH1cbiAgICBjb25zdCBkYXRhOiBXc0V2ZW50cy5JVGVsZW1ldHJ5VGFiRGF0YSA9IHtcbiAgICAgIGxhYmVsOiBgJHt0YWJFdmVudC50YWIudGV4dExhYmVsfWAsXG4gICAgICBpbmRleDogdGFiRXZlbnQuaW5kZXgsXG4gICAgfTtcbiAgICB0aGlzLmV2ZW50U3ZjLnJhaXNlSW50ZXJhY3RUZWxlbWV0cnkoXG4gICAgICB7XG4gICAgICAgIHR5cGU6IFdzRXZlbnRzLkVudW1JbnRlcmFjdFR5cGVzLkNMSUNLLFxuICAgICAgICBzdWJUeXBlOiBXc0V2ZW50cy5FbnVtSW50ZXJhY3RTdWJUeXBlcy5IT01FX1BBR0VfU1RSSVBfVEFCUyxcbiAgICAgICAgaWQ6IGAke18uY2FtZWxDYXNlKGRhdGEubGFiZWwpfS10YWJgLFxuICAgICAgfSxcbiAgICAgIHt9LFxuICAgICAge1xuICAgICAgICBtb2R1bGU6IFdzRXZlbnRzLkVudW1UZWxlbWV0cnltb2R1bGVzLkhPTUUsXG4gICAgICB9XG4gICAgKTtcbiAgICBjb25zdCBjdXJyZW50VGFiRnJvbU1hcDogYW55ID0gc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XTtcbiAgICBjb25zdCBjdXJyZW50U3RyaXAgPSB0aGlzLndpZGdldERhdGEuc3RyaXBzLmZpbmQocyA9PiBzLmtleSA9PT0gc3RyaXBLZXkpO1xuICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXBLZXldICYmIGN1cnJlbnRUYWJGcm9tTWFwKSB7XG4gICAgICB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXBLZXldLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zID0ge1xuICAgICAgICAuLi50aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXBLZXldLnZpZXdNb3JlVXJsLnF1ZXJ5UGFyYW1zLFxuICAgICAgICB0YWJTZWxlY3RlZDogY3VycmVudFRhYkZyb21NYXAubGFiZWwsXG4gICAgICB9O1xuICAgIH1cbiAgICBpZiAoY3VycmVudFN0cmlwICYmIGN1cnJlbnRUYWJGcm9tTWFwICYmICFjdXJyZW50VGFiRnJvbU1hcC5jb21wdXRlRGF0YU9uQ2xpY2spIHtcbiAgICAgIGlmIChjdXJyZW50VGFiRnJvbU1hcC5yZXF1ZXN0UmVxdWlyZWQgJiYgY3VycmVudFRhYkZyb21NYXAucmVxdWVzdCkge1xuICAgICAgICAvLyBjYWxsIEFQSSB0byBnZXQgdGFiIGRhdGEgYW5kIHByb2Nlc3NcbiAgICAgICAgLy8gdGhpcy5wcm9jZXNzU3RyaXAoY3VycmVudFN0cmlwLCBbXSwgJ2ZldGNoaW5nJywgdHJ1ZSwgbnVsbClcbiAgICAgICAgaWYgKGN1cnJlbnRUYWJGcm9tTWFwLnJlcXVlc3Quc2VhcmNoVjYpIHtcbiAgICAgICAgICB0aGlzLmdldFRhYkRhdGFCeU5ld1JlcVNlYXJjaFY2KGN1cnJlbnRTdHJpcCwgdGFiRXZlbnQuaW5kZXgsIGN1cnJlbnRUYWJGcm9tTWFwLCB0cnVlKTtcbiAgICAgICAgfSBlbHNlIGlmIChjdXJyZW50VGFiRnJvbU1hcC5yZXF1ZXN0LnRyZW5kaW5nU2VhcmNoKSB7XG4gICAgICAgICAgdGhpcy5nZXRUYWJEYXRhQnlOZXdSZXFUcmVuZGluZyhjdXJyZW50U3RyaXAsIHRhYkV2ZW50LmluZGV4LCBjdXJyZW50VGFiRnJvbU1hcCwgdHJ1ZSk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHN0cmlwTWFwICYmIHN0cmlwTWFwLnRhYnMgJiYgc3RyaXBNYXAudGFic1t0YWJFdmVudC5pbmRleF0pIHtcbiAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMuZ2V0VGFiRGF0YUJ5ZmlsdGVyKGN1cnJlbnRTdHJpcCwgY3VycmVudFRhYkZyb21NYXAsIHRydWUpO1xuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICBpZiAoc3RyaXBNYXAgJiYgc3RyaXBNYXAudGFicyAmJiBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XSkge1xuICAgICAgICAgICAgICBzdHJpcE1hcC50YWJzW3RhYkV2ZW50LmluZGV4XS50YWJMb2FkaW5nID0gZmFsc2U7XG4gICAgICAgICAgICAgIHN0cmlwTWFwLnRhYnNbdGFiRXZlbnQuaW5kZXhdLmZldGNoVGFiU3RhdHVzID0gJ2RvbmUnO1xuICAgICAgICAgICAgICBzdHJpcE1hcC5zaG93T25Mb2FkZXIgPSBmYWxzZTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sICAgICAgICAgMjAwKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRUYWJEYXRhQnlOZXdSZXFTZWFyY2hWNihcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRUYWI6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYixcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5zZWFyY2hWNlJlcXVlc3Qoc3RyaXAsIGN1cnJlbnRUYWIucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgIGNvbnN0IHdpZGdldHMgPSB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQsIHN0cmlwKTtcbiAgICAgICAgbGV0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgICAgIGlmICh0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XSAmJiB0aGlzLnN0cmlwc1Jlc3VsdERhdGFNYXBbc3RyaXAua2V5XS50YWJzKSB7XG4gICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnM7XG4gICAgICAgICAgaWYgKGFsbFRhYnMgJiYgYWxsVGFicy5sZW5ndGggJiYgYWxsVGFic1t0YWJJbmRleF0pIHtcbiAgICAgICAgICAgIGFsbFRhYnNbdGFiSW5kZXhdID0ge1xuICAgICAgICAgICAgICAuLi5hbGxUYWJzW3RhYkluZGV4XSxcbiAgICAgICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAgICAgZmV0Y2hUYWJTdGF0dXM6ICdkb25lJyxcbiAgICAgICAgICAgIH07XG4gICAgICAgICAgICB0YWJSZXN1bHRzID0gYWxsVGFicztcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgIHRhYlJlc3VsdHMgLy8gdGFiUmVzdWx0cyBhcyB3aWRnZXRzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBnZXRUYWJEYXRhQnlOZXdSZXFUcmVuZGluZyhcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICB0YWJJbmRleDogbnVtYmVyLFxuICAgIGN1cnJlbnRUYWI6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFRhYixcbiAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXM6IGJvb2xlYW5cbiAgKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy50cmVuZGluZ1NlYXJjaFJlcXVlc3Qoc3RyaXAsIGN1cnJlbnRUYWIucmVxdWVzdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzICYmIHJlc3BvbnNlLnJlc3VsdHMucmVzcG9uc2UpIHtcbiAgICAgICAgY29uc3QgY29udGVudCA9IHJlc3BvbnNlLnJlc3VsdHMucmVzcG9uc2VbY3VycmVudFRhYi52YWx1ZV0gfHwgW107XG4gICAgICAgIGNvbnN0IHdpZGdldHMgPSB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvbnRlbnQsIHN0cmlwKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2N1cnJlbnRUYWIgLS0tIHdpZGdldHMnLCB3aWRnZXRzKVxuICAgICAgICBsZXQgdGFiUmVzdWx0czogYW55W10gPSBbXTtcbiAgICAgICAgaWYgKHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldICYmIHRoaXMuc3RyaXBzUmVzdWx0RGF0YU1hcFtzdHJpcC5rZXldLnRhYnMpIHtcbiAgICAgICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5zdHJpcHNSZXN1bHREYXRhTWFwW3N0cmlwLmtleV0udGFicztcbiAgICAgICAgICBpZiAoYWxsVGFicyAmJiBhbGxUYWJzLmxlbmd0aCAmJiBhbGxUYWJzW3RhYkluZGV4XSkge1xuICAgICAgICAgICAgYWxsVGFic1t0YWJJbmRleF0gPSB7XG4gICAgICAgICAgICAgIC4uLmFsbFRhYnNbdGFiSW5kZXhdLFxuICAgICAgICAgICAgICB3aWRnZXRzLFxuICAgICAgICAgICAgICBmZXRjaFRhYlN0YXR1czogJ2RvbmUnLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHRhYlJlc3VsdHMgPSBhbGxUYWJzO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICAvLyBjb25zb2xlLmxvZygndGFiUmVzdWx0cyAtKysrKyoqKi0tJywgdGFiUmVzdWx0cylcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgd2lkZ2V0cyxcbiAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgIHRhYlJlc3VsdHMgLy8gdGFiUmVzdWx0cyBhcyB3aWRnZXRzXG4gICAgICAgICk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdkb25lJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgIH1cbiAgfVxuXG4gIGdldFRhYkRhdGFCeWZpbHRlcihcbiAgICBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICBjdXJyZW50VGFiOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBUYWIsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICkge1xuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnc3RyaXAgLS0gJywgc3RyaXApO1xuICAgIC8vIHRzbGludDpkaXNhYmxlOm5vLWNvbnNvbGVcbiAgICBjb25zb2xlLmxvZygnY3VycmVudFRhYiAtLSAnLCBjdXJyZW50VGFiKTtcbiAgICAvLyB0c2xpbnQ6ZGlzYWJsZTpuby1jb25zb2xlXG4gICAgY29uc29sZS5sb2coJ2NhbGN1bGF0ZVBhcmVudFN0YXR1cy0tICcsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyk7XG4gICAgLy8gVE9ETzogV3JpdGUgbG9naWMgZm9yIGluZGl2aWR1YWwgZmlsdGVyIGlmIHBhc3NlZCBpbiBjb25maWdcbiAgICAvLyBhZGQgc3dpdGNoIGNhc2UgYmFzZWQgb24gY29uZmlnIGtleSBwYXNzZWRcbiAgfVxuXG4gIGFzeW5jIGZldGNoQWxsQ2JwUGxhbnMoc3RyaXA6IGFueSwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuXG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5jYnBMaXN0ICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuY2JwTGlzdCkubGVuZ3RoKSB7XG5cbiAgICAgIGxldCBjb3Vyc2VzOiBOc0NvbnRlbnQuSUNvbnRlbnRbXTtcbiAgICAgIGxldCB0YWJSZXN1bHRzOiBhbnlbXSA9IFtdO1xuICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnVzZXJTdmMuZmV0Y2hDYnBQbGFuTGlzdCgpLnRvUHJvbWlzZSgpO1xuICAgICAgaWYgKHJlc3BvbnNlKSB7XG4gICAgICAgICAgICBjb3Vyc2VzID0gcmVzcG9uc2U7XG4gICAgICAgICAgICBpZiAoc3RyaXAudGFicyAmJiBzdHJpcC50YWJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICB0YWJSZXN1bHRzID0gdGhpcy5zcGxpdENicFRhYnNEYXRhKGNvdXJzZXMsIHN0cmlwKTtcbiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgICAgc3RyaXAsXG4gICAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICAgIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyxcbiAgICAgICAgICAgICAgICAnJyxcbiAgICAgICAgICAgICAgICB0YWJSZXN1bHRzXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICAgICd2aWV3TW9yZVVybCcsXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyB0aGlzLnVzZXJTdmMuZmV0Y2hDYnBQbGFuTGlzdCgpLnN1YnNjcmliZSggYXN5bmMgIChyZXM6IGFueSkgPT4ge1xuICAgICAgLy8gICBpZiAocmVzKSB7XG4gICAgICAvLyAgICAgY29uc29sZS5sb2cocmVzLCc9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PicpXG4gICAgICAvLyAgICAgY291cnNlcyA9IHJlc1xuICAgICAgLy8gICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAvLyAgICAgICB0YWJSZXN1bHRzID0gdGhpcy5zcGxpdENicFRhYnNEYXRhKGNvdXJzZXMsIHN0cmlwKVxuICAgICAgLy8gICAgICAgYXdhaXQgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAvLyAgICAgICAgIHN0cmlwLFxuICAgICAgLy8gICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGNvdXJzZXMsIHN0cmlwKSxcbiAgICAgIC8vICAgICAgICAgJ2RvbmUnLFxuICAgICAgLy8gICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAvLyAgICAgICAgICcnLFxuICAgICAgLy8gICAgICAgICB0YWJSZXN1bHRzXG4gICAgICAvLyAgICAgICApXG4gICAgICAvLyAgICAgfSBlbHNlIHtcbiAgICAgIC8vICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgLy8gICAgICAgICBzdHJpcCxcbiAgICAgIC8vICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhjb3Vyc2VzLCBzdHJpcCksXG4gICAgICAvLyAgICAgICAgICdkb25lJyxcbiAgICAgIC8vICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgLy8gICAgICAgICAndmlld01vcmVVcmwnLFxuICAgICAgLy8gICAgICAgKVxuICAgICAgLy8gICAgIH1cbiAgICAgIC8vICAgfVxuICAgICAgLy8gfSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKF9lcnI6IGFueSkgPT4ge1xuXG4gICAgICAvLyB9KVxuXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuZW5yb2xsSW50ZXJ2YWwpO1xuICAgIH1cbiAgfVxuICBzcGxpdENicFRhYnNEYXRhKGNvbnRlbnROZXc6IE5zQ29udGVudC5JQ29udGVudFtdLCBzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCkge1xuICAgIGNvbnN0IHRhYlJlc3VsdHM6IGFueVtdID0gW107XG4gICAgY29uc3Qgc3BsaXREYXRhID0gdGhpcy5nZXRUYWJzTGlzdChcbiAgICAgIGNvbnRlbnROZXcsXG4gICAgICBzdHJpcCxcbiAgICApO1xuICAgIGlmIChzdHJpcC50YWJzICYmIHN0cmlwLnRhYnMubGVuZ3RoKSB7XG4gICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHN0cmlwLnRhYnMubGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgaWYgKHN0cmlwLnRhYnNbaV0pIHtcbiAgICAgICAgICB0YWJSZXN1bHRzLnB1c2goXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgIC4uLnN0cmlwLnRhYnNbaV0sXG4gICAgICAgICAgICAgIGZldGNoVGFiU3RhdHVzOiAnZG9uZScsXG4gICAgICAgICAgICAgIC4uLihzcGxpdERhdGEuZmluZChpdG1Jbm5lciA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHN0cmlwLnRhYnMgJiYgc3RyaXAudGFic1tpXSAmJiBpdG1Jbm5lci52YWx1ZSA9PT0gc3RyaXAudGFic1tpXS52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIGl0bUlubmVyO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgICAgICAgICB9KSksXG4gICAgICAgICAgICB9XG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gdGFiUmVzdWx0cztcbiAgfVxuXG4gIGdldFRhYnNMaXN0KGFycmF5OiBOc0NvbnRlbnQuSUNvbnRlbnRbXSxcbiAgICAgICAgICAgICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQpIHtcbiAgICBsZXQgYWxsOiBhbnlbXSA9IFtdO1xuICAgIGxldCB1cGNvbWluZzogYW55W10gPSBbXTtcbiAgICBsZXQgb3ZlcmR1ZTogYW55W10gPSBbXTtcbiAgICBhcnJheS5mb3JFYWNoKChlOiBhbnkpID0+IHtcbiAgICAgIGFsbC5wdXNoKGUpO1xuICAgICAgaWYgKGUucGxhbkR1cmF0aW9uID09PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKSB7XG4gICAgICAgIG92ZXJkdWUucHVzaChlKTtcbiAgICAgIH0gZWxzZSBpZiAoZS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0LlVQQ09NSU5HKSB7XG4gICAgICAgIHVwY29taW5nLnB1c2goZSk7XG4gICAgICB9XG4gICAgfSk7XG4gICAgY29uc3QgYWxsQ29tcGxldGVkID0gYWxsLmZpbHRlcigoYWxsRGF0YTogYW55KSA9PiBhbGxEYXRhLmNvbnRlbnRTdGF0dXMgPT09IDIpO1xuICAgIGxldCBhbGxJbkNvbXBsZXRlZCA9IGFsbC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gYWxsRGF0YS5jb250ZW50U3RhdHVzIDwgMik7XG5cbiAgICBsZXQgYWxsQ29tcGxldGVkT3ZlckR1ZSA9IGFsbENvbXBsZXRlZC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gYWxsRGF0YS5wbGFuRHVyYXRpb24gPT09IE5zQ2FyZENvbnRlbnQuQUNCUENvbnN0Lk9WRVJEVUUpO1xuICAgIGNvbnN0IGFsbENvbXBsZXRlZEFsbCA9IGFsbENvbXBsZXRlZC5maWx0ZXIoKGFsbERhdGE6IGFueSkgPT4gIGFsbERhdGEucGxhbkR1cmF0aW9uICE9PSBOc0NhcmRDb250ZW50LkFDQlBDb25zdC5PVkVSRFVFKTtcblxuICAgIGFsbENvbXBsZXRlZE92ZXJEdWUgPSBhbGxDb21wbGV0ZWRPdmVyRHVlLnNvcnQoKGE6IGFueSwgYjogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChhLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSAmJiBiLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSkge1xuICAgICAgICBjb25zdCBmaXJzdERhdGU6IGFueSA9IG5ldyBEYXRlKGEuZW5kRGF0ZSk7XG4gICAgICAgIGNvbnN0IHNlY29uZERhdGU6IGFueSA9IG5ldyBEYXRlKGIuZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiAgZmlyc3REYXRlID4gc2Vjb25kRGF0ZSAgPyAtMSA6IDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhbGxJbkNvbXBsZXRlZCA9IGFsbEluQ29tcGxldGVkLnNvcnQoKGE6IGFueSwgYjogYW55KTogYW55ID0+IHtcbiAgICAgIGlmIChhLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSAmJiBiLnBsYW5EdXJhdGlvbiA9PT0gTnNDYXJkQ29udGVudC5BQ0JQQ29uc3QuT1ZFUkRVRSkge1xuICAgICAgICBjb25zdCBmaXJzdERhdGU6IGFueSA9IG5ldyBEYXRlKGEuZW5kRGF0ZSk7XG4gICAgICAgIGNvbnN0IHNlY29uZERhdGU6IGFueSA9IG5ldyBEYXRlKGIuZW5kRGF0ZSk7XG4gICAgICAgIHJldHVybiAgZmlyc3REYXRlID4gc2Vjb25kRGF0ZSAgPyAtMSA6IDE7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBhbGwgPSBbLi4uYWxsSW5Db21wbGV0ZWQsIC4uLmFsbENvbXBsZXRlZEFsbCwgLi4uYWxsQ29tcGxldGVkT3ZlckR1ZV07XG5cbiAgICBvdmVyZHVlID0gb3ZlcmR1ZS5maWx0ZXIoKGRhdGE6IGFueSk6IGFueSA9PiB7XG4gICAgICByZXR1cm4gZGF0YS5jb250ZW50U3RhdHVzIDwgMjtcbiAgICB9KTtcblxuICAgIG92ZXJkdWUgPSBvdmVyZHVlLnNvcnQoKGE6IGFueSwgYjogYW55KTogYW55ID0+IHtcbiAgICAgICAgY29uc3QgZmlyc3REYXRlOiBhbnkgPSBuZXcgRGF0ZShhLmVuZERhdGUpO1xuICAgICAgICBjb25zdCBzZWNvbmREYXRlOiBhbnkgPSBuZXcgRGF0ZShiLmVuZERhdGUpO1xuICAgICAgICByZXR1cm4gIGZpcnN0RGF0ZSA+IHNlY29uZERhdGUgID8gLTEgOiAxO1xuICAgIH0pO1xuXG4gICAgdXBjb21pbmcgPSB1cGNvbWluZy5maWx0ZXIoKGRhdGE6IGFueSk6IGFueSA9PiB7XG4gICAgICByZXR1cm4gZGF0YS5jb250ZW50U3RhdHVzIDwgMjtcbiAgICB9KTtcbiAgICAvLyB0aGlzLmdldFNlbGVjdGVkSW5kZXgoMSlcbiAgICByZXR1cm4gW1xuICAgIHsgdmFsdWU6ICdhbGwnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKGFsbCwgc3RyaXApIH0sXG4gICAgeyB2YWx1ZTogJ3VwY29taW5nJywgd2lkZ2V0czogdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyh1cGNvbWluZywgc3RyaXApIH0sXG4gICAgeyB2YWx1ZTogJ292ZXJkdWUnLCB3aWRnZXRzOiB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKG92ZXJkdWUsIHN0cmlwKSB9XTtcbiAgfVxuXG4gIGdldFNlbGVjdGVkSW5kZXgoc3RyaXBzUmVzdWx0RGF0YU1hcDogYW55LCBrZXk6IGFueSk6IG51bWJlciB7XG4gICAgbGV0IHJldHVyblZhbHVlID0gMDtcbiAgICBpZiAoa2V5ID09PSAnY2JwUGxhbicpIHtcbiAgICAgIGlmIChzdHJpcHNSZXN1bHREYXRhTWFwLnRhYnMubGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGRhdGEgPSBzdHJpcHNSZXN1bHREYXRhTWFwLnRhYnMuZmlsdGVyKChlbGU6IGFueSkgPT4gZWxlLnZhbHVlID09PSAndXBjb21pbmcnKTtcbiAgICAgICAgcmV0dXJuVmFsdWUgPSBkYXRhWzBdLndpZGdldHMgJiYgZGF0YVswXS53aWRnZXRzLmxlbmd0aCA+IDAgPyAxIDogMDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG5cbiAgdHJhbnNsYXRlTGFiZWxzKGxhYmVsOiBzdHJpbmcsIHR5cGU6IGFueSkge1xuICAgIHJldHVybiB0aGlzLmxhbmd0cmFuc2xhdGlvbnMudHJhbnNsYXRlTGFiZWwobGFiZWwsIHR5cGUsICcnKTtcbiAgfVxuXG4gIGlkZW50aWZ5KGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIGlmIChpbmRleCA+PSAwKSB7IH1cbiAgICByZXR1cm4gaXRlbTtcbiAgfVxuICB0cmFja2VyKGluZGV4OiBudW1iZXIsIGl0ZW06IGFueSkge1xuICAgIGlmIChpbmRleCA+PSAwKSB7IH1cbiAgICByZXR1cm4gXy5nZXQoaXRlbSwgJ3dpZGdldERhdGEuY29udGVudC5pZGVudGlmaWVyJylcbiAgfVxuXG4gIGFzeW5jIGZldGNoQWxsVG9wQ29udGVudChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QudG9wQ29udGVudCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQpLmxlbmd0aCkge1xuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC50b3BDb250ZW50LnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQucmVxdWVzdC5maWx0ZXJzO1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5wb3N0TWV0aG9kRmlsdGVycyhzdHJpcC5yZXF1ZXN0LnRvcENvbnRlbnQucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wb3N0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC50b3BDb250ZW50LCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQgJiYgcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudC5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGZldGNoQWxsRmVhdHVyZWRDb250ZW50KHN0cmlwOiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0LCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMgPSB0cnVlKSB7XG4gICAgaWYgKHN0cmlwLnJlcXVlc3QgJiYgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50KS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0LmZpbHRlcnMpIHtcbiAgICAgICAgb3JpZ2luYWxGaWx0ZXJzID0gc3RyaXAucmVxdWVzdC5mZWF0dXJlQ29udGVudC5yZXF1ZXN0LmZpbHRlcnM7XG4gICAgICAgIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQucmVxdWVzdC5maWx0ZXJzID0gdGhpcy5wb3N0TWV0aG9kRmlsdGVycyhzdHJpcC5yZXF1ZXN0LmZlYXR1cmVDb250ZW50LnJlcXVlc3QuZmlsdGVycyk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucG9zdFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QuZmVhdHVyZUNvbnRlbnQsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICAvLyBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzKSB7XG4gICAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyLS0gJylcbiAgICAgICAgICBpZiAocmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuY29udGVudCAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50Lmxlbmd0aCkge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgICB0aGlzLnRyYW5zZm9ybUNvbnRlbnRzVG9XaWRnZXRzKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmNvbnRlbnQsIHN0cmlwKSxcbiAgICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICAgIHJlc3BvbnNlLnZpZXdNb3JlVXJsLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChzdHJpcCwgW10sICdlcnJvcicsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cywgbnVsbCk7ICAgICAgICAgIFxuICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIH1cbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgIC8vIEhhbmRsZSBlcnJvcnNcbiAgICAgICAgLy8gY29uc29sZS5lcnJvcignRXJyb3I6JywgZXJyb3IpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJhaXNlVGVsZW1ldHJ5KHN0cmlwRGF0YTogYW55KXtcbiAgICB0aGlzLnRlbGVtdHJ5UmVzcG9uc2UuZW1pdChzdHJpcERhdGEpXG4gIH1cblxuICBhc3luYyBwb3N0UmVxdWVzdE1ldGhvZChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICByZXF1ZXN0OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgYXBpVXJsOiBzdHJpbmcsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5wb3N0QXBpTWV0aG9kKGFwaVVybCxyZXF1ZXN0KS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgIHJlc3VsdHMucmVzdWx0LmNvbnRlbnQgJiYgcmVzdWx0cy5yZXN1bHQuY29udGVudC5sZW5ndGggPiA1ICYmIHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLnBvc3RDYXJkRm9yU2VhcmNoLFxuICAgICAgICApO1xuICAgICAgICBjb25zdCB2aWV3TW9yZVVybCA9IHNob3dWaWV3TW9yZVxuICAgICAgICA/IHtcbiAgICAgICAgcGF0aDogc3RyaXAudmlld01vcmVVcmwgJiYgc3RyaXAudmlld01vcmVVcmwucGF0aCB8fCAnJyxcbiAgICAgICAgcXVlcnlQYXJhbXM6IHtcbiAgICAgICAgdGFiOiAnTGVhcm4nLFxuICAgICAgICBxOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5xdWVyeVBhcmFtcyxcbiAgICAgICAgZjpcbiAgICAgICAgcmVxdWVzdCAmJlxuICAgICAgICByZXF1ZXN0LnNlYXJjaFY2ICYmXG4gICAgICAgIHJlcXVlc3Quc2VhcmNoVjYucmVxdWVzdCAmJlxuICAgICAgICByZXF1ZXN0LnNlYXJjaFY2LnJlcXVlc3QuZmlsdGVyc1xuICAgICAgICA/IEpTT04uc3RyaW5naWZ5KFxuICAgICAgICAgIHRoaXMudHJhbnNmb3JtU2VhcmNoVjZGaWx0ZXJzVjIoXG4gICAgICAgICAgICBvcmlnaW5hbEZpbHRlcnMsXG4gICAgICAgICAgKVxuICAgICAgICApXG4gICAgICAgIDoge30sXG4gICAgICAgIH0sXG4gICAgICAgIH1cbiAgICAgICAgOiBudWxsO1xuICAgICAgICByZXNvbHZlKHsgcmVzdWx0cywgdmlld01vcmVVcmwgfSk7XG4gICAgICAgIH0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpO1xuICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICB9LFxuICAgICAgICApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgYXN5bmMgZ2V0UmVxdWVzdE1ldGhvZChzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCxcbiAgICByZXF1ZXN0OiBOc0NvbnRlbnRTdHJpcFdpdGhUYWJzLklDb250ZW50U3RyaXBVbml0WydyZXF1ZXN0J10sXG4gICAgYXBpVXJsOiBzdHJpbmcsXG4gICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzOiBib29sZWFuXG4gICk6IFByb21pc2U8YW55PiB7XG4gICAgY29uc3Qgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICByZXR1cm4gbmV3IFByb21pc2U8YW55PigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICBpZiAocmVxdWVzdCAmJiByZXF1ZXN0KSB7XG4gICAgICAgIHRoaXMuY29udGVudFN2Yy5nZXRBcGlNZXRob2QoYXBpVXJsKS5zdWJzY3JpYmUocmVzdWx0cyA9PiB7XG4gICAgICAgICAgY29uc29sZS5sb2cocmVzdWx0cywncmVzdWx0cz09PT09PT09PScpXG4gICAgICAgIGNvbnN0IHNob3dWaWV3TW9yZSA9IEJvb2xlYW4oXG4gICAgICAgIHJlc3VsdHMucmVzdWx0LmRhdGEgJiYgcmVzdWx0cy5yZXN1bHQuZGF0YS5vcmdMaXN0Lmxlbmd0aCA+IDUgJiYgc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcucG9zdENhcmRGb3JTZWFyY2gsXG4gICAgICAgICk7XG4gICAgICAgIGNvbnN0IHZpZXdNb3JlVXJsID0gc2hvd1ZpZXdNb3JlXG4gICAgICAgID8ge1xuICAgICAgICBwYXRoOiBzdHJpcC52aWV3TW9yZVVybCAmJiBzdHJpcC52aWV3TW9yZVVybC5wYXRoIHx8ICcnLFxuICAgICAgICB9XG4gICAgICAgIDogbnVsbDtcbiAgICAgICAgcmVzb2x2ZSh7IHJlc3VsdHMsIHZpZXdNb3JlVXJsIH0pO1xuICAgICAgICB9LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcnJvcjogYW55KSA9PiB7XG4gICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgcmVqZWN0KGVycm9yKTtcbiAgICAgICAgfSxcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfVxuXG4gIHBvc3RNZXRob2RGaWx0ZXJzKGZpbHRlcnM6IGFueSl7XG4gICAgaWYgKGZpbHRlcnMub3JnYW5pc2F0aW9uICYmXG4gICAgICBmaWx0ZXJzLm9yZ2FuaXNhdGlvbi5pbmRleE9mKCc8b3JnSUQ+JykgPj0gMFxuICAgICkge1xuICAgICAgZmlsdGVycy5vcmdhbmlzYXRpb24gPSB0aGlzLnByb3ZpZGVySWRcbiAgICB9XG4gICAgcmV0dXJuIGZpbHRlcnNcbiAgfVxuICBnZXRGdWxsVXJsKGFwaVVybDogYW55LCBpZDpzdHJpbmcpe1xuICAgIGxldCBmb3JtZWRVcmw6IHN0cmluZyA9ICcnXG4gICAgaWYgKGFwaVVybC5pbmRleE9mKCc8Ym9va21hcmtJZD4nKSA+PSAwKSB7XG4gICAgICBmb3JtZWRVcmwgPSBhcGlVcmwucmVwbGFjZSgnPGJvb2ttYXJrSWQ+JywgdGhpcy5lbnZpcm9ubWVudC5tZG9DaGFubmVsc0Jvb2ttYXJrSWQpIFxuICAgIH0gZWxzZSBpZiAoYXBpVXJsLmluZGV4T2YoJzxwbGF5bGlzdEtleT4nKSA+PSAwICYmIGFwaVVybC5pbmRleE9mKCc8b3JnSUQ+JykgPj0gMCkge1xuICAgICAgZm9ybWVkVXJsID0gYXBpVXJsLnJlcGxhY2UoJzxwbGF5bGlzdEtleT4nLCB0aGlzLnByb3ZpZGVySWQgKyBpZCkgXG4gICAgICBmb3JtZWRVcmwgPSBmb3JtZWRVcmwucmVwbGFjZSgnPG9yZ0lEPicsIHRoaXMucHJvdmlkZXJJZCkgXG4gICAgfVxuICAgIHJldHVybiBmb3JtZWRVcmxcbiAgfVxuXG4gIHJlZGlyZWN0Vmlld0FsbChzdHJpcERhdGE6IGFueSwgcGF0aDogc3RyaW5nLCBxdWVyeVBhcmFtc0RhdGE6IGFueSkge1xuICAgIGlmKHRoaXMuZW1pdFZpZXdBbGwpIHtcbiAgICAgIHRoaXMudmlld0FsbFJlc3BvbnNlLmVtaXQoc3RyaXBEYXRhKVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbcGF0aF0sIHsgIHF1ZXJ5UGFyYW1zOiBxdWVyeVBhcmFtc0RhdGEgfSlcbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaEFsbEJvb2tNYXJrRGF0YShzdHJpcDogTnNDb250ZW50U3RyaXBXaXRoVGFicy5JQ29udGVudFN0cmlwVW5pdCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzID0gdHJ1ZSkge1xuICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmIHN0cmlwLnJlcXVlc3QuYm9va21hcmtSZWFkICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QuYm9va21hcmtSZWFkKS5sZW5ndGgpIHtcbiAgICAgIGxldCBvcmlnaW5hbEZpbHRlcnM6IGFueSA9IFtdO1xuICAgICAgaWYgKHN0cmlwLnJlcXVlc3QgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQgJiZcbiAgICAgICAgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQuYm9va21hcmtJZCkge1xuICAgICAgICBzdHJpcC5yZXF1ZXN0LmFwaVVybCA9IHRoaXMuZ2V0RnVsbFVybChzdHJpcC5yZXF1ZXN0LmFwaVVybCwgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQuYm9va21hcmtJZCk7XG4gICAgICB9XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMuZ2V0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5ib29rbWFya1JlYWQsIHN0cmlwLnJlcXVlc3QuYXBpVXJsLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMpO1xuICAgICAgICBjb25zb2xlLmxvZygnY2FsbGluZyAgYWZ0ZXIgLSByZXNwb25zZSwgJywgcmVzcG9uc2UpXG4gICAgICAgIGxldCBjb250ZW50ICA9IHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmRhdGEub3JnTGlzdFxuICAgICAgICBpZiAocmVzcG9uc2UpIHtcbiAgICAgICAgICB0aGlzLnByb2Nlc3NTdHJpcChcbiAgICAgICAgICAgIHN0cmlwLFxuICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1BbGxDb250ZW50c1RvV2lkZ2V0cyhjb250ZW50LCBzdHJpcCksXG4gICAgICAgICAgICAnZG9uZScsXG4gICAgICAgICAgICBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsXG4gICAgICAgICAgICByZXNwb25zZSxcbiAgICAgICAgICApO1xuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpOyAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHRyYW5zZm9ybUFsbENvbnRlbnRzVG9XaWRnZXRzKFxuICAgIGNvbnRlbnRzOiBhbnksXG4gICAgc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsXG4gICkge1xuICAgIHJldHVybiAoY29udGVudHMgfHwgW10pLm1hcCgoY29udGVudCwgaWR4KSA9PiAoXG4gICAgICBjb250ZW50ID8ge1xuICAgICAgICB3aWRnZXRUeXBlOiAnY2FyZExpYicsXG4gICAgICAgIHdpZGdldFN1YlR5cGU6ICdjYXJkQ29udGVudExpYicsXG4gICAgICAgIHdpZGdldEhvc3RDbGFzczogJ21iLTInLFxuICAgICAgICB3aWRnZXREYXRhOiB7XG4gICAgICAgICAgY29udGVudCxcbiAgICAgICAgICAuLi4oY29udGVudC5iYXRjaCAmJiB7IGJhdGNoOiBjb250ZW50LmJhdGNoIH0pLFxuICAgICAgICAgIGNhcmRTdWJUeXBlOiBzdHJpcC5zdHJpcENvbmZpZyAmJiBzdHJpcC5zdHJpcENvbmZpZy5jYXJkU3ViVHlwZSxcbiAgICAgICAgICBjYXJkQ3VzdG9tZUNsYXNzOiBzdHJpcC5jdXN0b21lQ2xhc3MgPyBzdHJpcC5jdXN0b21lQ2xhc3MgOiAnJyxcbiAgICAgICAgICBjb250ZXh0OiB7IHBhZ2VTZWN0aW9uOiBzdHJpcC5rZXksIHBvc2l0aW9uOiBpZHggfSxcbiAgICAgICAgICBpbnRyYW5ldE1vZGU6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmludHJhbmV0TW9kZSxcbiAgICAgICAgICBkZWxldGVkTW9kZTogc3RyaXAuc3RyaXBDb25maWcgJiYgc3RyaXAuc3RyaXBDb25maWcuZGVsZXRlZE1vZGUsXG4gICAgICAgICAgY29udGVudFRhZ3M6IHN0cmlwLnN0cmlwQ29uZmlnICYmIHN0cmlwLnN0cmlwQ29uZmlnLmNvbnRlbnRUYWdzLFxuICAgICAgICB9LFxuICAgICAgfSA6IHtcbiAgICAgICAgd2lkZ2V0VHlwZTogJ2NhcmQnLFxuICAgICAgICB3aWRnZXRTdWJUeXBlOiAnY2FyZENvbnRlbnQnLFxuICAgICAgICB3aWRnZXRIb3N0Q2xhc3M6ICdtYi0yJyxcbiAgICAgICAgd2lkZ2V0RGF0YToge30sXG4gICAgICB9XG4gICAgKSk7XG4gIH1cbiAgXG4gIGFzeW5jIGZldGNoQWxsUGxheWxpc3RTZWFyY2goc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoICYmIE9iamVjdC5rZXlzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gpLmxlbmd0aCkge1xuICAgICAgbGV0IG9yaWdpbmFsRmlsdGVyczogYW55ID0gW107XG4gICAgICBpZiAoc3RyaXAucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdCAmJlxuICAgICAgICBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QuZmlsdGVycykge1xuICAgICAgICBvcmlnaW5hbEZpbHRlcnMgPSBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0U2VhcmNoLnJlcXVlc3QuZmlsdGVycztcbiAgICAgICAgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0LmZpbHRlcnMgPSB0aGlzLnBvc3RNZXRob2RGaWx0ZXJzKHN0cmlwLnJlcXVlc3QucGxheWxpc3RTZWFyY2gucmVxdWVzdC5maWx0ZXJzKTtcbiAgICAgIH1cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5wb3N0UmVxdWVzdE1ldGhvZChzdHJpcCwgc3RyaXAucmVxdWVzdC5wbGF5bGlzdFNlYXJjaC5yZXF1ZXN0LCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgLy8gY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgICBpZiAocmVzcG9uc2UgJiYgcmVzcG9uc2UucmVzdWx0cykge1xuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdjYWxsaW5nICBhZnRlci0tICcpXG4gICAgICAgICAgaWYgKHJlc3BvbnNlLnJlc3VsdHMucmVzdWx0LmRhdGEgJiYgcmVzcG9uc2UucmVzdWx0cy5yZXN1bHQuZGF0YS5sZW5ndGgpIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKFxuICAgICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgICAgdGhpcy50cmFuc2Zvcm1Db250ZW50c1RvV2lkZ2V0cyhyZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5kYXRhLCBzdHJpcCksXG4gICAgICAgICAgICAgICdkb25lJyxcbiAgICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgICByZXNwb25zZS52aWV3TW9yZVVybCxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTtcbiAgICAgICAgICAgIHRoaXMuZW1wdHlSZXNwb25zZS5lbWl0KHRydWUpXG4gICAgICAgICAgfVxuXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoc3RyaXAsIFtdLCAnZXJyb3InLCBjYWxjdWxhdGVQYXJlbnRTdGF0dXMsIG51bGwpOyAgICAgICAgICBcbiAgICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICB9XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICB0aGlzLmVtcHR5UmVzcG9uc2UuZW1pdCh0cnVlKVxuICAgICAgICAvLyBIYW5kbGUgZXJyb3JzXG4gICAgICAgIC8vIGNvbnNvbGUuZXJyb3IoJ0Vycm9yOicsIGVycm9yKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBmZXRjaFBsYXlsaXN0UmVhZERhdGEoc3RyaXA6IE5zQ29udGVudFN0cmlwV2l0aFRhYnMuSUNvbnRlbnRTdHJpcFVuaXQsIGNhbGN1bGF0ZVBhcmVudFN0YXR1cyA9IHRydWUpIHtcbiAgICBpZiAoc3RyaXAucmVxdWVzdCAmJiBzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCAmJiBPYmplY3Qua2V5cyhzdHJpcC5yZXF1ZXN0LnBsYXlsaXN0UmVhZCkubGVuZ3RoKSB7XG4gICAgICBsZXQgb3JpZ2luYWxGaWx0ZXJzOiBhbnkgPSBbXTtcbiAgICAgIGlmIChzdHJpcC5yZXF1ZXN0ICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkICYmXG4gICAgICAgIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLnR5cGUpIHtcbiAgICAgICAgc3RyaXAucmVxdWVzdC5hcGlVcmwgPSB0aGlzLmdldEZ1bGxVcmwoc3RyaXAucmVxdWVzdC5hcGlVcmwsIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLnR5cGUpO1xuICAgICAgfVxuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLmdldFJlcXVlc3RNZXRob2Qoc3RyaXAsIHN0cmlwLnJlcXVlc3QucGxheWxpc3RSZWFkLCBzdHJpcC5yZXF1ZXN0LmFwaVVybCwgY2FsY3VsYXRlUGFyZW50U3RhdHVzKTtcbiAgICAgICAgY29uc29sZS5sb2coJ2NhbGxpbmcgIGFmdGVyIC0gcmVzcG9uc2UsICcsIHJlc3BvbnNlKVxuICAgICAgXG4gICAgICAgIGlmIChyZXNwb25zZSAmJiByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50KSB7ICBcbiAgICAgICAgICBsZXQgY29udGVudCAgPSByZXNwb25zZS5yZXN1bHRzLnJlc3VsdC5jb250ZW50XG4gICAgICAgICAgdGhpcy5wcm9jZXNzU3RyaXAoXG4gICAgICAgICAgICBzdHJpcCxcbiAgICAgICAgICAgIHRoaXMudHJhbnNmb3JtQWxsQ29udGVudHNUb1dpZGdldHMoY29udGVudCwgc3RyaXApLFxuICAgICAgICAgICAgJ2RvbmUnLFxuICAgICAgICAgICAgY2FsY3VsYXRlUGFyZW50U3RhdHVzLFxuICAgICAgICAgICAgcmVzcG9uc2UsXG4gICAgICAgICAgKTtcblxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMucHJvY2Vzc1N0cmlwKHN0cmlwLCBbXSwgJ2Vycm9yJywgY2FsY3VsYXRlUGFyZW50U3RhdHVzLCBudWxsKTsgICAgICAgICAgXG4gICAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgdGhpcy5lbXB0eVJlc3BvbnNlLmVtaXQodHJ1ZSlcbiAgICAgICAgLy8gSGFuZGxlIGVycm9yc1xuICAgICAgICAvLyBjb25zb2xlLmVycm9yKCdFcnJvcjonLCBlcnJvcik7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG4iXX0=