@po-ui/ng-components 16.6.0 → 16.6.1

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.
@@ -245,6 +245,10 @@ export class PoComboComponent extends PoComboBaseComponent {
245
245
  onKeyDown(event) {
246
246
  const key = event.keyCode;
247
247
  const inputValue = event.target.value;
248
+ if (event.shiftKey && key === PoKeyCodeEnum.tab) {
249
+ this.controlComboVisibility(false);
250
+ return;
251
+ }
248
252
  // busca um registro quando acionar o tab
249
253
  if (this.service && key === PoKeyCodeEnum.tab && inputValue && !this.disabledTabFilter) {
250
254
  this.controlComboVisibility(false);
@@ -698,4 +702,4 @@ export class PoComboComponent extends PoComboBaseComponent {
698
702
  type: ViewChild,
699
703
  args: ['poListbox']
700
704
  }] }); })();
701
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWNvbWJvL3BvLWNvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1jb21iby9wby1jb21iby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFVBQVUsRUFNVixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHakUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDL0csT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztJQ3BCdkMsK0JBQXVEO0lBQ3JELDhCQUFpSDtJQUNuSCxpQkFBTTs7O0lBRHlDLGVBQXlDO0lBQXpD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QUEsaUJBQUE7WUFZTCxlQUFlO1lBQWYsaUNBQWUsNEJBQUE7Ozt1RkQrQi9CLGdCQUFnQjtjQW5CNUIsU0FBUzsyQkFDRSxVQUFVLG1CQUVILHVCQUF1QixDQUFDLE1BQU0sYUFDcEM7b0JBQ1Qsb0JBQW9CO29CQUNwQix3QkFBd0I7b0JBQ3hCO3dCQUNFLE9BQU8sRUFBRSxpQkFBaUI7d0JBQzFCLFdBQVcsRUFBRSxVQUFVLENBQUMsR0FBRyxFQUFFLGlCQUFpQixDQUFDO3dCQUMvQyxLQUFLLEVBQUUsSUFBSTtxQkFDWjtvQkFDRDt3QkFDRSxPQUFPLEVBQUUsYUFBYTt3QkFDdEIsV0FBVyxFQUFFLFVBQVUsQ0FBQyxHQUFHLEVBQUUsaUJBQWlCLENBQUM7d0JBQy9DLEtBQUssRUFBRSxJQUFJO3FCQUNaO2lCQUNGOzZQQUcrRCxtQkFBbUI7a0JBQWxGLFlBQVk7bUJBQUMsOEJBQThCLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBRVQsZ0JBQWdCO2tCQUFwRSxTQUFTO21CQUFDLGtCQUFrQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNBLGNBQWM7a0JBQWhFLFNBQVM7bUJBQUMsZ0JBQWdCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ1csV0FBVztrQkFBdEUsU0FBUzttQkFBQyxXQUFXLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUU7WUFDSixPQUFPO2tCQUE1RCxTQUFTO21CQUFDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQUM1QixTQUFTO2tCQUFoQyxTQUFTO21CQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBFbGVtZW50UmVmLFxuICBmb3J3YXJkUmVmLFxuICBJdGVyYWJsZURpZmZlcnMsXG4gIE9uQ2hhbmdlcyxcbiAgT25EZXN0cm95LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFZpZXdDaGlsZFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE5HX1ZBTElEQVRPUlMsIE5HX1ZBTFVFX0FDQ0VTU09SIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5pbXBvcnQgeyBmcm9tRXZlbnQsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgZGVib3VuY2VUaW1lLCBkaXN0aW5jdFVudGlsQ2hhbmdlZCwgZmlsdGVyLCBtYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tY29udHJvbC1wb3NpdGlvbi9wby1jb250cm9sLXBvc2l0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9LZXlDb2RlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vZW51bXMvcG8ta2V5LWNvZGUuZW51bSc7XG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuXG5pbXBvcnQgeyBQb0NvbWJvQmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tY29tYm8tYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9Db21ib0ZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3BvLWNvbWJvLWZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvQ29tYm9Hcm91cCB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1ncm91cC5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib09wdGlvbiB9IGZyb20gJy4vaW50ZXJmYWNlcy9wby1jb21iby1vcHRpb24uaW50ZXJmYWNlJztcbmltcG9ydCB7IFBvQ29tYm9PcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tY29tYm8tb3B0aW9uLXRlbXBsYXRlL3BvLWNvbWJvLW9wdGlvbi10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgdXVpZCB9IGZyb20gJy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuaW1wb3J0IHsgUG9MaXN0Qm94Q29tcG9uZW50IH0gZnJvbSAnLi8uLi8uLi9wby1saXN0Ym94L3BvLWxpc3Rib3guY29tcG9uZW50JztcblxuY29uc3QgcG9Db21ib0NvbnRhaW5lck9mZnNldCA9IDg7XG5jb25zdCBwb0NvbWJvQ29udGFpbmVyUG9zaXRpb25EZWZhdWx0ID0gJ2JvdHRvbSc7XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvQ29tYm9CYXNlQ29tcG9uZW50XG4gKlxuICogQGRlc2NyaXB0aW9uXG4gKiBVdGlsaXphbmRvIHBvLWNvbWJvIGNvbSBzZXJ2acOnbywgw6kgcG9zc2l2ZWwgZGlnaXRhciB1bSB2YWxvciBubyBjYW1wbyBkZSBlbnRyYWRhIGUgcHJlc3Npb25hciBhIHRlY2xhICd0YWInIHBhcmEgcXVlIG8gY29tcG9uZW50ZVxuICogZmHDp2EgdW1hIHJlcXVpc2nDp8OjbyDDoCBVUkwgaW5mb3JtYWRhIHBhc3NhbmRvIG8gdmFsb3IgZGlnaXRhZG8gbm8gY2FtcG8uIFNlIGVuY29udHJhZG8gbyB2YWxvciwgZW50w6NvIG8gbWVzbW8gc2Vyw6Egc2VsZWNpb25hZG8sIGNhc29cbiAqIG7Do28gc2VqYSBlbmNvbnRyYWRvLCBlbnTDo28gYSBsaXN0YSBkZSBpdGVucyB2b2x0YXLDoSBwYXJhIG8gZXN0YWRvIGluaWNpYWwuXG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8tYmFzaWNcIiB0aXRsZT1cIlBPIENvbWJvIEJhc2ljXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tYmFzaWMvc2FtcGxlLXBvLWNvbWJvLWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1iYXNpYy9zYW1wbGUtcG8tY29tYm8tYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8tbGFic1wiIHRpdGxlPVwiUE8gQ29tYm8gTGFic1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWxhYnMvc2FtcGxlLXBvLWNvbWJvLWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWxhYnMvc2FtcGxlLXBvLWNvbWJvLWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8tc2NoZWR1bGluZ1wiIHRpdGxlPVwiUE8gQ29tYm8gLSBTY2hlZHVsaW5nXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tc2NoZWR1bGluZy9zYW1wbGUtcG8tY29tYm8tc2NoZWR1bGluZy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tc2NoZWR1bGluZy9zYW1wbGUtcG8tY29tYm8tc2NoZWR1bGluZy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcvc2FtcGxlLXBvLWNvbWJvLXNjaGVkdWxpbmcuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLXRyYW5zZmVyXCIgdGl0bGU9XCJQTyBDb21ibyAtIEJhbmtpbmcgVHJhbnNmZXJcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby10cmFuc2Zlci9zYW1wbGUtcG8tY29tYm8tdHJhbnNmZXIuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLXRyYW5zZmVyL3NhbXBsZS1wby1jb21iby10cmFuc2Zlci5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1oZXJvZXNcIiB0aXRsZT1cIlBPIENvbWJvIC0gSGVyb2VzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taGVyb2VzL3NhbXBsZS1wby1jb21iby1oZXJvZXMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhlcm9lcy9zYW1wbGUtcG8tY29tYm8taGVyb2VzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWhlcm9lcy1yZWFjdGl2ZS1mb3JtXCIgdGl0bGU9XCJQTyBDb21ibyAtIEhlcm9lcyBSZWFjdGl2ZSBGb3JtXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taGVyb2VzLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLWNvbWJvLWhlcm9lcy1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1oZXJvZXMtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tY29tYm8taGVyb2VzLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8taW5maW5pdHktc2Nyb2xsXCIgdGl0bGU9XCJQTyBDb21ibyAtIEluaWZpdHkgU2Nyb2xsXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taW5maW5pdHktc2Nyb2xsL3NhbXBsZS1wby1jb21iby1pbmZpbml0eS1zY3JvbGwuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWluZmluaXR5LXNjcm9sbC9zYW1wbGUtcG8tY29tYm8taW5maW5pdHktc2Nyb2xsLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWhvdGVsc1wiIHRpdGxlPVwiUE8gQ29tYm8gLSBCb29raW5nIEhvdGVsXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taG90ZWxzL3NhbXBsZS1wby1jb21iby1ob3RlbHMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhvdGVscy9zYW1wbGUtcG8tY29tYm8taG90ZWxzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLWNvbWJvJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLWNvbWJvLmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyczogW1xuICAgIFBvQ29tYm9GaWx0ZXJTZXJ2aWNlLFxuICAgIFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSxcbiAgICB7XG4gICAgICBwcm92aWRlOiBOR19WQUxVRV9BQ0NFU1NPUixcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvQ29tYm9Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9LFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgICB1c2VFeGlzdGluZzogZm9yd2FyZFJlZigoKSA9PiBQb0NvbWJvQ29tcG9uZW50KSxcbiAgICAgIG11bHRpOiB0cnVlXG4gICAgfVxuICBdXG59KVxuZXhwb3J0IGNsYXNzIFBvQ29tYm9Db21wb25lbnQgZXh0ZW5kcyBQb0NvbWJvQmFzZUNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQsIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcbiAgQENvbnRlbnRDaGlsZChQb0NvbWJvT3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUsIHsgc3RhdGljOiB0cnVlIH0pIGNvbWJvT3B0aW9uVGVtcGxhdGU6IFBvQ29tYm9PcHRpb25UZW1wbGF0ZURpcmVjdGl2ZTtcblxuICBAVmlld0NoaWxkKCdjb250YWluZXJFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNvbnRhaW5lckVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2NvbnRlbnRFbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNvbnRlbnRFbGVtZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpY29uQXJyb3cnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpY29uRWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnaW5wJywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgaW5wdXRFbDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgncG9MaXN0Ym94JykgcG9MaXN0Ym94OiBQb0xpc3RCb3hDb21wb25lbnQ7XG5cbiAgY29tYm9JY29uOiBzdHJpbmcgPSAncG8taWNvbi1hcnJvdy1kb3duJztcbiAgY29tYm9PcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGRpZmZlcjogYW55O1xuICBpZCA9IGBwby1jb21ib1ske3V1aWQoKX1dYDtcbiAgaXNQcm9jZXNzaW5nVmFsdWVCeVRhYjogYm9vbGVhbiA9IGZhbHNlO1xuICBzY3JvbGxUb3AgPSAwO1xuICBzaG91bGRNYXJrTGV0dGVyczogYm9vbGVhbiA9IHRydWU7XG4gIGluZmluaXRlTG9hZGluZzogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgX2lzU2VydmVyU2VhcmNoaW5nOiBib29sZWFuID0gZmFsc2U7XG4gIHByaXZhdGUgbGFzdEtleTtcblxuICBwcml2YXRlIGNsaWNrb3V0TGlzdGVuZXI6ICgpID0+IHZvaWQ7XG4gIHByaXZhdGUgZXZlbnRSZXNpemVMaXN0ZW5lcjogKCkgPT4gdm9pZDtcblxuICBwcml2YXRlIGZpbHRlclN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICBwcml2YXRlIGdldFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuXG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uU2Nyb2xsRXZlbnQ6IFN1YnNjcmlwdGlvbjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWxlbWVudDogRWxlbWVudFJlZixcbiAgICBwdWJsaWMgZGlmZmVyczogSXRlcmFibGVEaWZmZXJzLFxuICAgIHB1YmxpYyBkZWZhdWx0U2VydmljZTogUG9Db21ib0ZpbHRlclNlcnZpY2UsXG4gICAgcHVibGljIHJlbmRlcmVyOiBSZW5kZXJlcjIsXG4gICAgcHJpdmF0ZSBjaGFuZ2VEZXRlY3RvcjogQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gICAgcHJpdmF0ZSBjb250cm9sUG9zaXRpb246IFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGxhbmd1YWdlU2VydmljZSk7XG5cbiAgICB0aGlzLmRpZmZlciA9IGRpZmZlcnMuZmluZChbXSkuY3JlYXRlKG51bGwpO1xuICB9XG5cbiAgc2V0IGlzU2VydmVyU2VhcmNoaW5nKHZhbHVlOiBib29sZWFuKSB7XG4gICAgaWYgKHZhbHVlKSB7XG4gICAgICB0aGlzLl9pc1NlcnZlclNlYXJjaGluZyA9IHZhbHVlO1xuXG4gICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgdGhpcy5zZXRDb250YWluZXJQb3NpdGlvbigpO1xuICAgICAgdGhpcy5pbml0aWFsaXplTGlzdGVuZXJzKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX2lzU2VydmVyU2VhcmNoaW5nID0gdmFsdWU7XG4gICAgfVxuICB9XG5cbiAgZ2V0IGlzU2VydmVyU2VhcmNoaW5nKCkge1xuICAgIHJldHVybiB0aGlzLl9pc1NlcnZlclNlYXJjaGluZztcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKGNoYW5nZXMuZGVib3VuY2VUaW1lKSB7XG4gICAgICB0aGlzLnVuc3Vic2NyaWJlS2V5dXBPYnNlcnZhYmxlKCk7XG4gICAgICB0aGlzLmluaXRJbnB1dE9ic2VydmFibGUoKTtcbiAgICB9XG5cbiAgICBpZiAoY2hhbmdlcy5maWx0ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmNvbmZpZ0FmdGVyU2V0RmlsdGVyU2VydmljZSh0aGlzLmZpbHRlclNlcnZpY2UpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuZ2V0U3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLmdldFN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmluZmluaXRlU2Nyb2xsKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvblNjcm9sbEV2ZW50Py51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBxdWUgYXRyaWJ1aSBmb2NvIGFvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gdGVyIGEgaW5zdMOibmNpYSBkbyBjb21wb25lbnRlIG5vIERPTSwgcG9kZW5kbyBzZXIgdXRpbGl6YWRvIG8gVmlld0NoaWxkIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHsgUG9Db21ib0NvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9Db21ib0NvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgY29tYm86IFBvQ29tYm9Db21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzQ29tYm8oKSB7XG4gICAqICAgdGhpcy5jb21iby5mb2N1cygpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG9uQmx1cigpIHtcbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkPy4oKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudD86IGFueSkge1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGU7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIC8vIGJ1c2NhIHVtIHJlZ2lzdHJvIHF1YW5kbyBhY2lvbmFyIG8gdGFiXG4gICAgaWYgKHRoaXMuc2VydmljZSAmJiBrZXkgPT09IFBvS2V5Q29kZUVudW0udGFiICYmIGlucHV0VmFsdWUgJiYgIXRoaXMuZGlzYWJsZWRUYWJGaWx0ZXIpIHtcbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICByZXR1cm4gdGhpcy5nZXRPYmplY3RCeVZhbHVlKGlucHV0VmFsdWUpO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IFBvS2V5Q29kZUVudW0uYXJyb3dEb3duKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgaWYgKHRoaXMudmlzaWJsZU9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgIHRoaXMuZm9jdXNJdGVtKCk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSh0cnVlKTtcbiAgICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSB0aGlzLmNoYW5nZU9uRW50ZXIgPyB0aGlzLmlzRmlsdGVyaW5nIDogZmFsc2U7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gVGVjbGEgXCJlbnRlclwiXG4gICAgaWYgKGtleSA9PT0gUG9LZXlDb2RlRW51bS5lbnRlciAmJiB0aGlzLnNlbGVjdGVkVmlldyAmJiB0aGlzLmNvbWJvT3Blbikge1xuICAgICAgY29uc3QgaXNVcGRhdGVNb2RlbCA9IHRoaXMuc2VsZWN0ZWRWaWV3LnZhbHVlICE9PSB0aGlzLnNlbGVjdGVkVmFsdWUgfHwgaW5wdXRWYWx1ZSAhPT0gdGhpcy5zZWxlY3RlZFZpZXcubGFiZWw7XG5cbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSk7XG5cbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZSh0aGlzLnNlbGVjdGVkVmlldywgaXNVcGRhdGVNb2RlbCk7XG4gICAgICB0aGlzLmlzRmlsdGVyaW5nID0gZmFsc2U7XG5cbiAgICAgIGlmICghdGhpcy5zZXJ2aWNlKSB7XG4gICAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KFsuLi50aGlzLmNhY2hlU3RhdGljT3B0aW9uc10pO1xuICAgICAgfVxuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IFBvS2V5Q29kZUVudW0uZW50ZXIpIHtcbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSh0cnVlKTtcbiAgICB9XG5cbiAgICBpZiAoa2V5ID09PSBQb0tleUNvZGVFbnVtLmVzYykge1xuICAgICAgaWYgKGtleSA9PT0gdGhpcy5sYXN0S2V5KSB7XG4gICAgICAgIHRoaXMubGFzdEtleSA9ICcnO1xuICAgICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgICAgdGhpcy5jbGVhckFuZEZvY3VzKCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5vbkNsb3NlQ29tYm8oKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmxhc3RLZXkgPSBldmVudC5rZXlDb2RlO1xuICB9XG5cbiAgb25LZXlVcChldmVudD86IGFueSkge1xuICAgIGNvbnN0IGtleSA9IGV2ZW50LmtleUNvZGUgfHwgZXZlbnQud2hpY2g7XG4gICAgY29uc3QgaW5wdXRWYWx1ZSA9IGV2ZW50LnRhcmdldC52YWx1ZTtcblxuICAgIGNvbnN0IGlzVmFsaWRLZXkgPVxuICAgICAga2V5ICE9PSBQb0tleUNvZGVFbnVtLmFycm93VXAgJiZcbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS5hcnJvd0Rvd24gJiZcbiAgICAgIGtleSAhPT0gUG9LZXlDb2RlRW51bS5lbnRlciAmJlxuICAgICAga2V5ICE9PSBQb0tleUNvZGVFbnVtLmVzYyAmJlxuICAgICAga2V5ICE9PSBQb0tleUNvZGVFbnVtLnRhYjtcblxuICAgIGlmIChpc1ZhbGlkS2V5KSB7XG4gICAgICBpZiAoaW5wdXRWYWx1ZSkge1xuICAgICAgICBpZiAoIXRoaXMuc2VydmljZSAmJiB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgIT09IGlucHV0VmFsdWUpIHtcbiAgICAgICAgICB0aGlzLnNob3VsZE1hcmtMZXR0ZXJzID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLmlzRmlsdGVyaW5nID0gdHJ1ZTtcbiAgICAgICAgICB0aGlzLnNlYXJjaEZvckxhYmVsKGlucHV0VmFsdWUsIHRoaXMuY29tYm9PcHRpb25zTGlzdCwgdGhpcy5maWx0ZXJNb2RlKTtcbiAgICAgICAgICB0aGlzLmlucHV0Q2hhbmdlLmVtaXQoaW5wdXRWYWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIHF1YW5kbyBhcGFnYXIgcmFwaWRvIG8gY2FtcG8gZSBjb250ZXIgc2VydmnDp28sIHZhbG9yLCBuw6NvIGRpc3BhcmF2YSBvIGtleXVwIG9ic2VydmFibGVcbiAgICAgICAgLy8gbmVjZXNzYXJpbyBlc3RlIHRyYXRhbWVudG8gcGFyYSByZXRvcm5hciBhIGxpc3RhICdkZWZhdWx0Jy5cbiAgICAgICAgY29uc3QgdXNlRGVmYXVsdE9wdGlvbnNTZXJ2aWNlID1cbiAgICAgICAgICB0aGlzLnNlcnZpY2UgJiYgdGhpcy5zZWxlY3RlZFZhbHVlICYmIHRoaXMuc2VsZWN0ZWRPcHRpb24ubGFiZWwgPT09IHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZTtcblxuICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkVmFsdWUobnVsbCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdCgpO1xuICAgICAgICB9IGVsc2UgaWYgKHVzZURlZmF1bHRPcHRpb25zU2VydmljZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KFsuLi50aGlzLmNhY2hlT3B0aW9uc10pO1xuICAgICAgICB9XG5cbiAgICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IGZhbHNlO1xuICAgICAgfVxuXG4gICAgICAvLyBjYXNvIG8gdmFsb3IgcGVzcXVpc2FkbyBmb3IgZGlmZXJlbnRlIGRvIGFudGVyaW9yIGRldmUgYWJyaXIgbyBjb21ib1xuICAgICAgaWYgKHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSAhPT0gaW5wdXRWYWx1ZSkge1xuICAgICAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlID0gaW5wdXRWYWx1ZTtcbiAgfVxuXG4gIGluaXRJbnB1dE9ic2VydmFibGUoKSB7XG4gICAgaWYgKHRoaXMuc2VydmljZSkge1xuICAgICAgY29uc3Qga2V5dXBPYnNlcnZhYmxlID0gZnJvbUV2ZW50KHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LCAna2V5dXAnKS5waXBlKFxuICAgICAgICBmaWx0ZXIoKGU6IGFueSkgPT4gdGhpcy5pc1ZhbGlkQ2hhcmFjdGVyVG9TZWFyY2goZS5rZXlDb2RlKSksXG4gICAgICAgIG1hcCgoZTogYW55KSA9PiBlLmN1cnJlbnRUYXJnZXQudmFsdWUpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB0YXAoKCkgPT4ge1xuICAgICAgICAgIHRoaXMuc2hvdWxkTWFya0xldHRlcnMgPSBmYWxzZTtcbiAgICAgICAgfSksXG4gICAgICAgIGRlYm91bmNlVGltZSh0aGlzLmRlYm91bmNlVGltZSlcbiAgICAgICk7XG5cbiAgICAgIHRoaXMua2V5dXBTdWJzY3JpYmUgPSBrZXl1cE9ic2VydmFibGUuc3Vic2NyaWJlKHZhbHVlID0+IHtcbiAgICAgICAgaWYgKHZhbHVlLmxlbmd0aCA+PSB0aGlzLmZpbHRlck1pbmxlbmd0aCB8fCAhdmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmNvbnRyb2xBcHBseUZpbHRlcih2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRyb2xBcHBseUZpbHRlcih2YWx1ZSwgaXNBcnJvd0Rvd24/OiBib29sZWFuKSB7XG4gICAgaWYgKFxuICAgICAgKCF0aGlzLmlzUHJvY2Vzc2luZ1ZhbHVlQnlUYWIgJiYgKCF0aGlzLnNlbGVjdGVkT3B0aW9uIHx8IHZhbHVlICE9PSB0aGlzLnNlbGVjdGVkT3B0aW9uW3RoaXMuZHluYW1pY0xhYmVsXSkpIHx8XG4gICAgICAhdGhpcy5jYWNoZVxuICAgICkge1xuICAgICAgdGhpcy5kZWZhdWx0U2VydmljZS5oYXNOZXh0ID0gdHJ1ZTtcbiAgICAgIHRoaXMucGFnZSA9IHRoaXMuc2V0UGFnZSgpO1xuICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKHZhbHVlLCB0cnVlLCBpc0Fycm93RG93bik7XG4gICAgfVxuICAgIHRoaXMuaXNQcm9jZXNzaW5nVmFsdWVCeVRhYiA9IGZhbHNlO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXIodmFsdWU6IHN0cmluZywgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSwgaXNBcnJvd0Rvd24/OiBib29sZWFuKSB7XG4gICAgaWYgKHRoaXMuZGVmYXVsdFNlcnZpY2UuaGFzTmV4dCkge1xuICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KGZhbHNlLCByZXNldCk7XG4gICAgICB0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gdHJ1ZTtcblxuICAgICAgY29uc3QgcGFyYW0gPSB0aGlzLmluZmluaXRlU2Nyb2xsXG4gICAgICAgID8geyBwcm9wZXJ0eTogdGhpcy5maWVsZExhYmVsLCB2YWx1ZSwgcGFnZTogdGhpcy5wYWdlLCBwYWdlU2l6ZTogdGhpcy5wYWdlU2l6ZSB9XG4gICAgICAgIDogeyBwcm9wZXJ0eTogdGhpcy5maWVsZExhYmVsLCB2YWx1ZSB9O1xuXG4gICAgICB0aGlzLmZpbHRlclN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZS5nZXRGaWx0ZXJlZERhdGEocGFyYW0sIHRoaXMuZmlsdGVyUGFyYW1zKS5zdWJzY3JpYmUoXG4gICAgICAgIGl0ZW1zID0+IHtcbiAgICAgICAgICB0aGlzLnNldE9wdGlvbnNCeUFwcGx5RmlsdGVyKHZhbHVlLCBpdGVtcywgcmVzZXQpO1xuICAgICAgICAgIGlmIChpc0Fycm93RG93bikge1xuICAgICAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICAgIGVycm9yID0+IHRoaXMub25FcnJvckZpbHRlcmVkRGF0YSgpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHNldE9wdGlvbnNCeUFwcGx5RmlsdGVyKHZhbHVlLCBpdGVtcywgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgIHRoaXMuc2hvdWxkTWFya0xldHRlcnMgPSB0cnVlO1xuICAgIHRoaXMuaXNTZXJ2ZXJTZWFyY2hpbmcgPSBmYWxzZTtcbiAgICB0aGlzLmluZmluaXRlTG9hZGluZyA9IGZhbHNlO1xuICAgIHRoaXMub3B0aW9ucyA9IHRoaXMucHJlcGFyZU9wdGlvbnMoaXRlbXMpO1xuXG4gICAgdGhpcy5zZWFyY2hGb3JMYWJlbCh2YWx1ZSwgaXRlbXMsIHRoaXMuZmlsdGVyTW9kZSk7XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSh0cnVlLCByZXNldCk7XG5cbiAgICBpZiAodGhpcy5pc0ZpcnN0RmlsdGVyKSB7XG4gICAgICB0aGlzLmlzRmlyc3RGaWx0ZXIgPSAhdGhpcy5pc0ZpcnN0RmlsdGVyO1xuXG4gICAgICB0aGlzLmNhY2hlT3B0aW9ucyA9IHRoaXMuY29tYm9PcHRpb25zTGlzdDtcbiAgICB9XG4gIH1cblxuICBnZXRPYmplY3RCeVZhbHVlKHZhbHVlKSB7XG4gICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSAhPT0gdmFsdWUgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbj8uW3RoaXMuZHluYW1pY0xhYmVsXSAhPT0gdmFsdWUpIHtcbiAgICAgIHRoaXMuaXNQcm9jZXNzaW5nVmFsdWVCeVRhYiA9IHRydWU7XG5cbiAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlLmdldE9iamVjdEJ5VmFsdWUodmFsdWUsIHRoaXMuZmlsdGVyUGFyYW1zKS5zdWJzY3JpYmUoXG4gICAgICAgIGl0ZW0gPT4gdGhpcy51cGRhdGVPcHRpb25CeUZpbHRlcmVkVmFsdWUoaXRlbSksXG4gICAgICAgIGVycm9yID0+IHRoaXMub25FcnJvckdldE9iamVjdEJ5VmFsdWUoKVxuICAgICAgKTtcbiAgICB9XG4gIH1cblxuICB1cGRhdGVPcHRpb25CeUZpbHRlcmVkVmFsdWUoaXRlbSkge1xuICAgIGlmIChpdGVtKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBbaXRlbV07XG4gICAgICB0aGlzLm9uT3B0aW9uQ2xpY2soaXRlbSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShudWxsKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaXNQcm9jZXNzaW5nVmFsdWVCeVRhYiA9IGZhbHNlO1xuICAgIH0sIHRoaXMuZGVib3VuY2VUaW1lKTtcbiAgfVxuXG4gIHRvZ2dsZUNvbWJvVmlzaWJpbGl0eShpc0J1dHRvbj86IGJvb2xlYW4pOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kaXNhYmxlZCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnNlcnZpY2UgJiYgIXRoaXMuZGlzYWJsZWRJbml0RmlsdGVyKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVySW5GaXJzdENsaWNrKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KCF0aGlzLmNvbWJvT3BlbiwgZmFsc2UsIGlzQnV0dG9uKTtcbiAgfVxuXG4gIGFwcGx5RmlsdGVySW5GaXJzdENsaWNrKCkge1xuICAgIGlmICh0aGlzLmlzRmlyc3RGaWx0ZXIgJiYgIXRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgdGhpcy5vcHRpb25zID0gW107XG4gICAgICBjb25zdCBzY3JvbGxpbmdDb250cm9sID0gdGhpcy5zZXRTY3JvbGxpbmdDb250cm9sKCk7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVyKCcnLCBzY3JvbGxpbmdDb250cm9sKTtcbiAgICB9XG4gIH1cblxuICBjb250cm9sQ29tYm9WaXNpYmlsaXR5KHRvT3BlbjogYm9vbGVhbiwgcmVzZXQ6IGJvb2xlYW4gPSBmYWxzZSwgaXNCdXR0b24/OiBib29sZWFuKSB7XG4gICAgdG9PcGVuID8gdGhpcy5vcGVuKHJlc2V0LCBpc0J1dHRvbikgOiB0aGlzLmNsb3NlKHJlc2V0KTtcbiAgfVxuXG4gIG9uQ2xvc2VDb21ibygpIHtcbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBvbk9wdGlvbkNsaWNrKG9wdGlvbjogUG9Db21ib09wdGlvbiB8IFBvQ29tYm9Hcm91cCwgZXZlbnQ/OiBhbnkpIHtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gdGhpcy5nZXRJbnB1dFZhbHVlKCk7XG4gICAgY29uc3QgaXNVcGRhdGVNb2RlbCA9XG4gICAgICBvcHRpb25bdGhpcy5keW5hbWljVmFsdWVdICE9PSB0aGlzLnNlbGVjdGVkVmFsdWUgfHxcbiAgICAgICEhKHRoaXMuc2VsZWN0ZWRWaWV3ICYmIGlucHV0VmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRWaWV3W3RoaXMuZHluYW1pY0xhYmVsXSk7XG5cbiAgICBpZiAoZXZlbnQpIHtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShvcHRpb24sIGlzVXBkYXRlTW9kZWwpO1xuICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KFsuLi50aGlzLmNhY2hlU3RhdGljT3B0aW9uc10pO1xuICAgIH1cblxuICAgIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRWaWV3W3RoaXMuZHluYW1pY0xhYmVsXTtcbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICB9XG5cbiAgY2FsY3VsYXRlU2Nyb2xsVG9wKHNlbGVjdGVkSXRlbSwgaW5kZXgpIHtcbiAgICBpZiAoIXNlbGVjdGVkSXRlbS5sZW5ndGggfHwgaW5kZXggPD0gMSkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBzZWxlY3RlZEl0ZW1bMF0ub2Zmc2V0VG9wO1xuICAgIH1cbiAgfVxuXG4gIGdldElucHV0VmFsdWUoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LnZhbHVlO1xuICB9XG5cbiAgc2V0SW5wdXRWYWx1ZSh2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWUgPSB2YWx1ZTtcbiAgfVxuXG4gIHdhc0NsaWNrZWRPblRvZ2dsZShldmVudDogTW91c2VFdmVudCk6IHZvaWQge1xuICAgIGlmIChcbiAgICAgIHRoaXMuY29tYm9PcGVuICYmXG4gICAgICAhdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuaWNvbkVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAoIXRoaXMuY29udGVudEVsZW1lbnQgfHwgIXRoaXMuY29udGVudEVsZW1lbnQubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpKVxuICAgICkge1xuICAgICAgLy8gRXNjb25kZSBDb250ZW50IGRvIENvbWJvIHF1YW5kbyBmb3IgY2xpY2FkbyBmb3JhXG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UpO1xuXG4gICAgICB0aGlzLnZlcmlmeVZhbGlkT3B0aW9uKCk7XG5cbiAgICAgIC8vIGNhc28gZm9yIGNoYW5nZU9uRW50ZXIgZGV2ZSBsaW1wYXIgbyBzZWxlY3RlZFZpZXcgcGFyYSByZWluaWNpYS1sb1xuICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSB0aGlzLmNoYW5nZU9uRW50ZXIgJiYgIXRoaXMuc2VsZWN0ZWRWYWx1ZSA/IHVuZGVmaW5lZCA6IHRoaXMuc2VsZWN0ZWRWaWV3O1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodGhpcy5zZXJ2aWNlICYmICF0aGlzLmdldElucHV0VmFsdWUoKSAmJiAhdGhpcy5pc0ZpcnN0RmlsdGVyKSB7XG4gICAgICAgIGNvbnN0IHNjcm9sbGluZ0NvbnRyb2wgPSB0aGlzLnNldFNjcm9sbGluZ0NvbnRyb2woKTtcbiAgICAgICAgdGhpcy5hcHBseUZpbHRlcignJywgc2Nyb2xsaW5nQ29udHJvbCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaXNWYWxpZENoYXJhY3RlclRvU2VhcmNoKGtleUNvZGUpIHtcbiAgICByZXR1cm4gKFxuICAgICAga2V5Q29kZSAhPT0gOSAmJiAvLyB0YWJcbiAgICAgIGtleUNvZGUgIT09IDEzICYmIC8vIGVudGV0XG4gICAgICBrZXlDb2RlICE9PSAxNiAmJiAvLyBzaGlmdFxuICAgICAga2V5Q29kZSAhPT0gMTcgJiYgLy8gY3RybFxuICAgICAga2V5Q29kZSAhPT0gMTggJiYgLy8gYWx0XG4gICAgICBrZXlDb2RlICE9PSAyMCAmJiAvLyBjYXBzbG9ja1xuICAgICAga2V5Q29kZSAhPT0gMjcgJiYgLy8gZXNjXG4gICAgICBrZXlDb2RlICE9PSAzNyAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSAzOCAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSAzOSAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSA0MCAmJiAvLyBzZXRhXG4gICAgICBrZXlDb2RlICE9PSA5M1xuICAgICk7IC8vIHdpbmRvd3MgbWVudVxuICB9XG5cbiAgc2VhcmNoT25FbnRlck9yQXJyb3coZXZlbnQsIHZhbHVlOiBzdHJpbmcpIHtcbiAgICBpZiAoXG4gICAgICAoZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyB8fCBldmVudC5rZXkgPT09ICdFbnRlcicpICYmXG4gICAgICB0aGlzLnNlcnZpY2UgJiZcbiAgICAgICF0aGlzLnNlbGVjdGVkVmlldyAmJlxuICAgICAgdmFsdWUubGVuZ3RoID49IHRoaXMuZmlsdGVyTWlubGVuZ3RoXG4gICAgKSB7XG4gICAgICB0aGlzLmNvbnRyb2xBcHBseUZpbHRlcih2YWx1ZSwgZXZlbnQua2V5ID09PSAnQXJyb3dEb3duJyk7XG4gICAgfVxuICB9XG5cbiAgc2hvd01vcmVJbmZpbml0ZVNjcm9sbCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0U2VydmljZS5oYXNOZXh0KSB7XG4gICAgICB0aGlzLmluZmluaXRlTG9hZGluZyA9IHRydWU7XG4gICAgfVxuICAgIHRoaXMucGFnZSsrO1xuICAgIHRoaXMuYXBwbHlGaWx0ZXIoJycsIHRydWUpO1xuICB9XG5cbiAgY2xlYXJBbmRGb2N1cygpIHtcbiAgICB0aGlzLmNsZWFyKG51bGwpO1xuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBwcml2YXRlIGFkanVzdENvbnRhaW5lclBvc2l0aW9uKCkge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvQ29tYm9Db250YWluZXJQb3NpdGlvbkRlZmF1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZShyZXNldDogYm9vbGVhbikge1xuICAgIHRoaXMuY29tYm9PcGVuID0gZmFsc2U7XG5cbiAgICBpZiAoIXJlc2V0KSB7XG4gICAgICBpZiAoIXRoaXMuZ2V0SW5wdXRWYWx1ZSgpKSB7XG4gICAgICAgIHRoaXMucGFnZSA9IHRoaXMuc2V0UGFnZSgpO1xuICAgICAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlLmhhc05leHQgPSB0cnVlO1xuICAgICAgfVxuICAgICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5zZXRPcHRpb25zKCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmNvbWJvSWNvbiA9ICdwby1pY29uLWFycm93LWRvd24nO1xuXG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMucmVuZGVyZXIucmVtb3ZlQ2xhc3ModGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQsICdwby1jb21iby1pbnB1dC1mb2N1cycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpbml0aWFsaXplTGlzdGVuZXJzKCkge1xuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG5cbiAgICB0aGlzLmNsaWNrb3V0TGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMud2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCd3aW5kb3cnLCAncmVzaXplJywgKCkgPT4ge1xuICAgICAgLy8gdGltZW91dCBuZWNlc3NhcmlvIHBvaXMgYSBhbmltYcOnw6NvIGRvIHBvLW1lbnUgaW1wYWN0YSBubyBhanVzdGUgZGEgcG9zacOnw6NvIGRvIGNvbnRhaW5lci5cbiAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpLCAyNTApO1xuICAgIH0pO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvbkVycm9yR2V0T2JqZWN0QnlWYWx1ZSgpIHtcbiAgICB0aGlzLnVwZGF0ZU9wdGlvbkJ5RmlsdGVyZWRWYWx1ZShudWxsKTtcbiAgfVxuXG4gIHByaXZhdGUgb25TY3JvbGwgPSAoKTogdm9pZCA9PiB7XG4gICAgdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpO1xuICB9O1xuXG4gIHByaXZhdGUgb25FcnJvckZpbHRlcmVkRGF0YSgpIHtcbiAgICB0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gZmFsc2U7XG5cbiAgICB0aGlzLnVwZGF0ZUNvbWJvTGlzdChbXSk7XG5cbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkodHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9wZW4ocmVzZXQ6IGJvb2xlYW4sIGlzQnV0dG9uPzogYm9vbGVhbikge1xuICAgIHRoaXMuY29tYm9PcGVuID0gdHJ1ZTtcbiAgICBpZiAoIXJlc2V0ICYmIHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgIGlmICghdGhpcy5nZXRJbnB1dFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy5wYWdlID0gMTtcbiAgICAgIH1cbiAgICAgIHRoaXMub3B0aW9ucyA9IHRoaXMuc2V0T3B0aW9ucygpO1xuICAgIH1cblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy5jb21ib0ljb24gPSAncG8taWNvbi1hcnJvdy11cCc7XG5cbiAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcblxuICAgIGlzQnV0dG9uXG4gICAgICA/IHRoaXMucmVuZGVyZXIuYWRkQ2xhc3ModGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQsICdwby1jb21iby1pbnB1dC1mb2N1cycpXG4gICAgICA6IHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG5cbiAgICB0aGlzLnNldENvbnRhaW5lclBvc2l0aW9uKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxpc3RlbmVycygpIHtcbiAgICBpZiAodGhpcy5jbGlja291dExpc3RlbmVyKSB7XG4gICAgICB0aGlzLmNsaWNrb3V0TGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyKSB7XG4gICAgICB0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIHNldENvbnRhaW5lclBvc2l0aW9uKCkge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLnNldEVsZW1lbnRzKFxuICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICBwb0NvbWJvQ29udGFpbmVyT2Zmc2V0LFxuICAgICAgdGhpcy5pbnB1dEVsLFxuICAgICAgWyd0b3AnLCAnYm90dG9tJ10sXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0T3B0aW9ucygpIHtcbiAgICByZXR1cm4gdGhpcy5nZXRJbnB1dFZhbHVlKCkgPyB0aGlzLm9wdGlvbnMgOiBbXTtcbiAgfVxuXG4gIHByaXZhdGUgcHJlcGFyZU9wdGlvbnMoaXRlbXMpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0ZVNjcm9sbCA/IFsuLi50aGlzLm9wdGlvbnMsIC4uLml0ZW1zXSA6IGl0ZW1zO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQYWdlKCkge1xuICAgIHJldHVybiB0aGlzLmluZmluaXRlU2Nyb2xsID8gMSA6IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgc2V0U2Nyb2xsaW5nQ29udHJvbCgpIHtcbiAgICByZXR1cm4gdGhpcy5pbmZpbml0ZVNjcm9sbCA/IHRydWUgOiBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgZm9jdXNJdGVtKCkge1xuICAgIHRoaXMucG9MaXN0Ym94Py5saXN0Ym94SXRlbUxpc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIGxldCBpdGVtO1xuICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRWYWx1ZSkge1xuICAgICAgICBpdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLnBvLWxpc3Rib3gtaXRlbVthcmlhLXNlbGVjdGVkPVwidHJ1ZVwiXScpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXRlbSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wby1saXN0Ym94LWl0ZW0nKVswXSBhcyBIVE1MRWxlbWVudDtcbiAgICAgIH1cbiAgICAgIHRoaXMucG9MaXN0Ym94Py5saXN0Ym94SXRlbUxpc3Q/Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgICAgaXRlbT8uZm9jdXMoKTtcbiAgICB9KTtcbiAgfVxufVxuIiwiPHBvLWZpZWxkLWNvbnRhaW5lclxuICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtwLWlkXT1cImlkXCJcbiAgW3AtbGFiZWxdPVwibGFiZWxcIlxuICBbcC1vcHRpb25hbF09XCJvcHRpb25hbFwiXG4gIFtwLXJlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgW3Atc2hvdy1yZXF1aXJlZF09XCJzaG93UmVxdWlyZWRcIlxuPlxuICA8ZGl2IGNka092ZXJsYXlPcmlnaW4gI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCIgY2xhc3M9XCJwby1maWVsZC1jb250YWluZXItY29udGVudCBwby1jb21iby1jb250YWluZXItY29udGVudFwiPlxuICAgIDxkaXYgKm5nSWY9XCJpY29uXCIgY2xhc3M9XCJwby1maWVsZC1pY29uLWNvbnRhaW5lci1sZWZ0XCI+XG4gICAgICA8cG8taWNvbiBjbGFzcz1cInBvLWZpZWxkLWljb24gcG8taWNvbi1pbnB1dFwiIFtjbGFzcy5wby1maWVsZC1pY29uLWRpc2FibGVkXT1cImRpc2FibGVkXCIgW3AtaWNvbl09XCJpY29uXCI+PC9wby1pY29uPlxuICAgIDwvZGl2PlxuXG4gICAgPGlucHV0XG4gICAgICAjaW5wXG4gICAgICBjbGFzcz1cInBvLWNvbWJvLWlucHV0XCJcbiAgICAgIFtuZ0NsYXNzXT1cImNsZWFuICYmIGlucC52YWx1ZSA/ICdwby1pbnB1dC1kb3VibGUtaWNvbi1yaWdodCcgOiAncG8taW5wdXQtaWNvbi1yaWdodCdcIlxuICAgICAgW2NsYXNzLnBvLWlucHV0LWljb24tbGVmdF09XCJpY29uXCJcbiAgICAgIGF1dG9jb21wbGV0ZT1cIm9mZlwiXG4gICAgICB0eXBlPVwidGV4dFwiXG4gICAgICBbYXR0ci5uYW1lXT1cIm5hbWVcIlxuICAgICAgW2Rpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFtpZF09XCJpZFwiXG4gICAgICBbcGxhY2Vob2xkZXJdPVwiZGlzYWJsZWQgPyAnJyA6IHBsYWNlaG9sZGVyXCJcbiAgICAgIFtyZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gICAgICAoY2xpY2spPVwidG9nZ2xlQ29tYm9WaXNpYmlsaXR5KClcIlxuICAgICAgKGtleXVwKT1cIm9uS2V5VXAoJGV2ZW50KVwiXG4gICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgICAoa2V5dXApPVwic2VhcmNoT25FbnRlck9yQXJyb3coJGV2ZW50LCAkZXZlbnQudGFyZ2V0LnZhbHVlKVwiXG4gICAgICAoa2V5ZG93bik9XCJvbktleURvd24oJGV2ZW50KVwiXG4gICAgLz5cblxuICAgIDxkaXYgY2xhc3M9XCJwby1maWVsZC1pY29uLWNvbnRhaW5lci1yaWdodFwiPlxuICAgICAgPGRpdlxuICAgICAgICB0YWJpbmRleD1cIjBcIlxuICAgICAgICByb2xlPVwiYnV0dG9uXCJcbiAgICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsaXRlcmFscy5jbGVhblwiXG4gICAgICAgICpuZ0lmPVwiY2xlYW4gJiYgIWRpc2FibGVkICYmIGlucC52YWx1ZVwiXG4gICAgICAgIGNsYXNzPVwicG8tY29tYm8tY2xlYW5cIlxuICAgICAgICAoY2xpY2spPVwiY2xlYXIobnVsbCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgICAgKGtleWRvd24uZW50ZXIpPVwiY2xlYXJBbmRGb2N1cygpOyAkZXZlbnQucHJldmVudERlZmF1bHQoKVwiXG4gICAgICA+XG4gICAgICAgIDxzcGFuXG4gICAgICAgICAgW2NsYXNzLnBvLWJvcmRlci1mb2N1c2VkXT1cIiFkaXNhYmxlZCAmJiBjb21ib09wZW5cIlxuICAgICAgICAgIGNsYXNzPVwicG8taWNvbiBwby1maWVsZC1pY29uIHBvLWljb24tY2xlYXItY29udGVudFwiXG4gICAgICAgID48L3NwYW4+XG4gICAgICA8L2Rpdj5cbiAgICAgIDxzcGFuXG4gICAgICAgICNpY29uQXJyb3dcbiAgICAgICAgY2xhc3M9XCJwby1pY29uIHBvLWZpZWxkLWljb24gcG8taWNvbi1pbnB1dFwiXG4gICAgICAgIFtjbGFzcy5wby1maWVsZC1pY29uLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzLnBvLWljb24tYXJyb3ctdXBdPVwiY29tYm9PcGVuXCJcbiAgICAgICAgW2NsYXNzLnBvLWljb24tYXJyb3ctZG93bl09XCIhY29tYm9PcGVuXCJcbiAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb25dPVwiIWRpc2FibGVkXCJcbiAgICAgICAgW2NsYXNzLnBvLWNvbWJvLWRlZmF1bHQtYm9yZGVyXT1cIiFkaXNhYmxlZCAmJiBpbnAudmFsdWVcIlxuICAgICAgICBbY2xhc3MucG8tY29tYm8tYmFja2dyb3VuZC1hcnJvdy11cF09XCIhZGlzYWJsZWQgJiYgY29tYm9PcGVuXCJcbiAgICAgICAgKGNsaWNrKT1cInRvZ2dsZUNvbWJvVmlzaWJpbGl0eSh0cnVlKVwiXG4gICAgICA+XG4gICAgICA8L3NwYW4+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhcHBlbmRCb3g7IHRoZW4gZHJvcGRvd25DREs7IGVsc2UgZHJvcGRvd25EZWZhdWx0XCI+IDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25EZWZhdWx0PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkxpc3Rib3hcIj4gPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNkcm9wZG93bkNESz5cbiAgICA8bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheSBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCIgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInRydWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkxpc3Rib3hcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxwby1maWVsZC1jb250YWluZXItYm90dG9tIFtwLWhlbHBdPVwiaGVscFwiIFtwLWRpc2FibGVkXT1cImRpc2FibGVkXCI+PC9wby1maWVsZC1jb250YWluZXItYm90dG9tPlxuPC9wby1maWVsZC1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZHJvcGRvd25MaXN0Ym94PlxuICA8ZGl2ICNjb250YWluZXJFbGVtZW50IGNsYXNzPVwicG8tY29tYm8tY29udGFpbmVyXCIgW2hpZGRlbl09XCIhY29tYm9PcGVuICYmICFpc1NlcnZlclNlYXJjaGluZ1wiPlxuICAgIDxwby1saXN0Ym94XG4gICAgICAjcG9MaXN0Ym94XG4gICAgICAjY29udGVudEVsZW1lbnRcbiAgICAgIHAtdHlwZT1cIm9wdGlvblwiXG4gICAgICBbcC1pdGVtc109XCJ2aXNpYmxlT3B0aW9uc1wiXG4gICAgICBbcC1maWVsZC12YWx1ZV09XCJkeW5hbWljVmFsdWVcIlxuICAgICAgW3AtZmllbGQtbGFiZWxdPVwiZHluYW1pY0xhYmVsXCJcbiAgICAgIFtwLXRlbXBsYXRlXT1cImNvbWJvT3B0aW9uVGVtcGxhdGVcIlxuICAgICAgW3Atc2VhcmNoLXZhbHVlXT1cImdldElucHV0VmFsdWUoKVwiXG4gICAgICBbcC1pbmZpbml0ZS1sb2FkaW5nXT1cImluZmluaXRlTG9hZGluZ1wiXG4gICAgICBbcC1pbmZpbml0ZS1zY3JvbGxdPVwiaW5maW5pdGVTY3JvbGxcIlxuICAgICAgW3AtZmlsdGVyaW5nXT1cImlzRmlsdGVyaW5nXCJcbiAgICAgIFtwLWNhY2hlXT1cImNhY2hlXCJcbiAgICAgIChwLXNlbGVjdGNvbWJvLWl0ZW0pPVwib25PcHRpb25DbGljaygkZXZlbnQsICRldmVudC5ldmVudClcIlxuICAgICAgW3AtZmlsdGVyLW1vZGVdPVwiZmlsdGVyTW9kZVwiXG4gICAgICBbcC12aXNpYmxlXT1cImNvbWJvT3BlblwiXG4gICAgICBbcC1pcy1zZWFyY2hpbmddPVwiaXNTZXJ2ZXJTZWFyY2hpbmdcIlxuICAgICAgW3Atc2hvdWxkLW1hcmstbGV0dGVyXT1cInNob3VsZE1hcmtMZXR0ZXJzXCJcbiAgICAgIFtwLWNvbXBhcmUtY2FjaGVdPVwiY29tcGFyZU9iamVjdHMoY2FjaGVPcHRpb25zLCB2aXNpYmxlT3B0aW9ucylcIlxuICAgICAgW3AtY29tYm8tc2VydmljZV09XCJzZXJ2aWNlXCJcbiAgICAgIFtwLWluZmluaXRlLXNjcm9sbC1kaXN0YW5jZV09XCJpbmZpbml0ZVNjcm9sbERpc3RhbmNlXCJcbiAgICAgIChwLXVwZGF0ZS1pbmZpbml0ZS1zY3JvbGwpPVwic2hvd01vcmVJbmZpbml0ZVNjcm9sbCgpXCJcbiAgICAgIChwLWNsb3NlKT1cIm9uQ2xvc2VDb21ibygpXCJcbiAgICA+PC9wby1saXN0Ym94PlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=
705
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tY29tYm8uY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLWNvbWJvL3BvLWNvbWJvLmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1jb21iby9wby1jb21iby5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBQ1osVUFBVSxFQUNWLFVBQVUsRUFNVixTQUFTLEVBQ1YsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBRSxTQUFTLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxZQUFZLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV0RixPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxtRUFBbUUsQ0FBQztBQUM3RyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFHbEUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDakUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFHakUsT0FBTyxFQUFFLDhCQUE4QixFQUFFLE1BQU0sK0RBQStELENBQUM7QUFDL0csT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7Ozs7Ozs7Ozs7Ozs7OztJQ3BCdkMsK0JBQXVEO0lBQ3JELDhCQUFpSDtJQUNuSCxpQkFBTTs7O0lBRHlDLGVBQXlDO0lBQXpD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IEFmdGVyVmlld0luaXQsXG4gIENoYW5nZURldGVjdGlvblN0cmF0ZWd5LFxuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgQ29tcG9uZW50LFxuICBDb250ZW50Q2hpbGQsXG4gIEVsZW1lbnRSZWYsXG4gIGZvcndhcmRSZWYsXG4gIEl0ZXJhYmxlRGlmZmVycyxcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IGZyb21FdmVudCwgU3Vic2NyaXB0aW9uIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBkZWJvdW5jZVRpbWUsIGRpc3RpbmN0VW50aWxDaGFuZ2VkLCBmaWx0ZXIsIG1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1jb250cm9sLXBvc2l0aW9uL3BvLWNvbnRyb2wtcG9zaXRpb24uc2VydmljZSc7XG5pbXBvcnQgeyBQb0tleUNvZGVFbnVtIH0gZnJvbSAnLi8uLi8uLi8uLi9lbnVtcy9wby1rZXktY29kZS5lbnVtJztcbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5cbmltcG9ydCB7IFBvQ29tYm9CYXNlQ29tcG9uZW50IH0gZnJvbSAnLi9wby1jb21iby1iYXNlLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBQb0NvbWJvRmlsdGVyU2VydmljZSB9IGZyb20gJy4vcG8tY29tYm8tZmlsdGVyLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9Db21ib0dyb3VwIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLWdyb3VwLmludGVyZmFjZSc7XG5pbXBvcnQgeyBQb0NvbWJvT3B0aW9uIH0gZnJvbSAnLi9pbnRlcmZhY2VzL3BvLWNvbWJvLW9wdGlvbi5pbnRlcmZhY2UnO1xuaW1wb3J0IHsgUG9Db21ib09wdGlvblRlbXBsYXRlRGlyZWN0aXZlIH0gZnJvbSAnLi9wby1jb21iby1vcHRpb24tdGVtcGxhdGUvcG8tY29tYm8tb3B0aW9uLXRlbXBsYXRlLmRpcmVjdGl2ZSc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnLi4vLi4vLi4vdXRpbHMvdXRpbCc7XG5pbXBvcnQgeyBQb0xpc3RCb3hDb21wb25lbnQgfSBmcm9tICcuLy4uLy4uL3BvLWxpc3Rib3gvcG8tbGlzdGJveC5jb21wb25lbnQnO1xuXG5jb25zdCBwb0NvbWJvQ29udGFpbmVyT2Zmc2V0ID0gODtcbmNvbnN0IHBvQ29tYm9Db250YWluZXJQb3NpdGlvbkRlZmF1bHQgPSAnYm90dG9tJztcblxuLyoqXG4gKiBAZG9jc0V4dGVuZHMgUG9Db21ib0Jhc2VDb21wb25lbnRcbiAqXG4gKiBAZGVzY3JpcHRpb25cbiAqIFV0aWxpemFuZG8gcG8tY29tYm8gY29tIHNlcnZpw6dvLCDDqSBwb3NzaXZlbCBkaWdpdGFyIHVtIHZhbG9yIG5vIGNhbXBvIGRlIGVudHJhZGEgZSBwcmVzc2lvbmFyIGEgdGVjbGEgJ3RhYicgcGFyYSBxdWUgbyBjb21wb25lbnRlXG4gKiBmYcOnYSB1bWEgcmVxdWlzacOnw6NvIMOgIFVSTCBpbmZvcm1hZGEgcGFzc2FuZG8gbyB2YWxvciBkaWdpdGFkbyBubyBjYW1wby4gU2UgZW5jb250cmFkbyBvIHZhbG9yLCBlbnTDo28gbyBtZXNtbyBzZXLDoSBzZWxlY2lvbmFkbywgY2Fzb1xuICogbsOjbyBzZWphIGVuY29udHJhZG8sIGVudMOjbyBhIGxpc3RhIGRlIGl0ZW5zIHZvbHRhcsOhIHBhcmEgbyBlc3RhZG8gaW5pY2lhbC5cbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1iYXNpY1wiIHRpdGxlPVwiUE8gQ29tYm8gQmFzaWNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1iYXNpYy9zYW1wbGUtcG8tY29tYm8tYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWJhc2ljL3NhbXBsZS1wby1jb21iby1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1sYWJzXCIgdGl0bGU9XCJQTyBDb21ibyBMYWJzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tbGFicy9zYW1wbGUtcG8tY29tYm8tbGFicy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tbGFicy9zYW1wbGUtcG8tY29tYm8tbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1zY2hlZHVsaW5nXCIgdGl0bGU9XCJQTyBDb21ibyAtIFNjaGVkdWxpbmdcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1zY2hlZHVsaW5nL3NhbXBsZS1wby1jb21iby1zY2hlZHVsaW5nLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1zY2hlZHVsaW5nL3NhbXBsZS1wby1jb21iby1zY2hlZHVsaW5nLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tc2NoZWR1bGluZy9zYW1wbGUtcG8tY29tYm8tc2NoZWR1bGluZy5zZXJ2aWNlLnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8tdHJhbnNmZXJcIiB0aXRsZT1cIlBPIENvbWJvIC0gQmFua2luZyBUcmFuc2ZlclwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLXRyYW5zZmVyL3NhbXBsZS1wby1jb21iby10cmFuc2Zlci5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8tdHJhbnNmZXIvc2FtcGxlLXBvLWNvbWJvLXRyYW5zZmVyLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLWNvbWJvLWhlcm9lc1wiIHRpdGxlPVwiUE8gQ29tYm8gLSBIZXJvZXNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1oZXJvZXMvc2FtcGxlLXBvLWNvbWJvLWhlcm9lcy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taGVyb2VzL3NhbXBsZS1wby1jb21iby1oZXJvZXMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8taGVyb2VzLXJlYWN0aXZlLWZvcm1cIiB0aXRsZT1cIlBPIENvbWJvIC0gSGVyb2VzIFJlYWN0aXZlIEZvcm1cIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1oZXJvZXMtcmVhY3RpdmUtZm9ybS9zYW1wbGUtcG8tY29tYm8taGVyb2VzLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLWNvbWJvLWhlcm9lcy1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1jb21iby1oZXJvZXMtcmVhY3RpdmUtZm9ybS5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1jb21iby1pbmZpbml0eS1zY3JvbGxcIiB0aXRsZT1cIlBPIENvbWJvIC0gSW5pZml0eSBTY3JvbGxcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1pbmZpbml0eS1zY3JvbGwvc2FtcGxlLXBvLWNvbWJvLWluZmluaXR5LXNjcm9sbC5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taW5maW5pdHktc2Nyb2xsL3NhbXBsZS1wby1jb21iby1pbmZpbml0eS1zY3JvbGwuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tY29tYm8taG90ZWxzXCIgdGl0bGU9XCJQTyBDb21ibyAtIEJvb2tpbmcgSG90ZWxcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1jb21iby1ob3RlbHMvc2FtcGxlLXBvLWNvbWJvLWhvdGVscy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tY29tYm8taG90ZWxzL3NhbXBsZS1wby1jb21iby1ob3RlbHMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqL1xuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAncG8tY29tYm8nLFxuICB0ZW1wbGF0ZVVybDogJy4vcG8tY29tYm8uY29tcG9uZW50Lmh0bWwnLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgcHJvdmlkZXJzOiBbXG4gICAgUG9Db21ib0ZpbHRlclNlcnZpY2UsXG4gICAgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlLFxuICAgIHtcbiAgICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9Db21ib0NvbXBvbmVudCksXG4gICAgICBtdWx0aTogdHJ1ZVxuICAgIH0sXG4gICAge1xuICAgICAgcHJvdmlkZTogTkdfVkFMSURBVE9SUyxcbiAgICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvQ29tYm9Db21wb25lbnQpLFxuICAgICAgbXVsdGk6IHRydWVcbiAgICB9XG4gIF1cbn0pXG5leHBvcnQgY2xhc3MgUG9Db21ib0NvbXBvbmVudCBleHRlbmRzIFBvQ29tYm9CYXNlQ29tcG9uZW50IGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgT25DaGFuZ2VzLCBPbkRlc3Ryb3kge1xuICBAQ29udGVudENoaWxkKFBvQ29tYm9PcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSkgY29tYm9PcHRpb25UZW1wbGF0ZTogUG9Db21ib09wdGlvblRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gIEBWaWV3Q2hpbGQoJ2NvbnRhaW5lckVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgY29udGFpbmVyRWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnY29udGVudEVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYgfSkgY29udGVudEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2ljb25BcnJvdycsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGljb25FbGVtZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpbnAnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpbnB1dEVsOiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdwb0xpc3Rib3gnKSBwb0xpc3Rib3g6IFBvTGlzdEJveENvbXBvbmVudDtcblxuICBjb21ib0ljb246IHN0cmluZyA9ICdwby1pY29uLWFycm93LWRvd24nO1xuICBjb21ib09wZW46IGJvb2xlYW4gPSBmYWxzZTtcbiAgZGlmZmVyOiBhbnk7XG4gIGlkID0gYHBvLWNvbWJvWyR7dXVpZCgpfV1gO1xuICBpc1Byb2Nlc3NpbmdWYWx1ZUJ5VGFiOiBib29sZWFuID0gZmFsc2U7XG4gIHNjcm9sbFRvcCA9IDA7XG4gIHNob3VsZE1hcmtMZXR0ZXJzOiBib29sZWFuID0gdHJ1ZTtcbiAgaW5maW5pdGVMb2FkaW5nOiBib29sZWFuID0gZmFsc2U7XG5cbiAgcHJpdmF0ZSBfaXNTZXJ2ZXJTZWFyY2hpbmc6IGJvb2xlYW4gPSBmYWxzZTtcbiAgcHJpdmF0ZSBsYXN0S2V5O1xuXG4gIHByaXZhdGUgY2xpY2tvdXRMaXN0ZW5lcjogKCkgPT4gdm9pZDtcbiAgcHJpdmF0ZSBldmVudFJlc2l6ZUxpc3RlbmVyOiAoKSA9PiB2b2lkO1xuXG4gIHByaXZhdGUgZmlsdGVyU3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG4gIHByaXZhdGUgZ2V0U3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb247XG5cbiAgcHJpdmF0ZSBzdWJzY3JpcHRpb25TY3JvbGxFdmVudDogU3Vic2NyaXB0aW9uO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHB1YmxpYyBlbGVtZW50OiBFbGVtZW50UmVmLFxuICAgIHB1YmxpYyBkaWZmZXJzOiBJdGVyYWJsZURpZmZlcnMsXG4gICAgcHVibGljIGRlZmF1bHRTZXJ2aWNlOiBQb0NvbWJvRmlsdGVyU2VydmljZSxcbiAgICBwdWJsaWMgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGNvbnRyb2xQb3NpdGlvbjogUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlLFxuICAgIGxhbmd1YWdlU2VydmljZTogUG9MYW5ndWFnZVNlcnZpY2VcbiAgKSB7XG4gICAgc3VwZXIobGFuZ3VhZ2VTZXJ2aWNlKTtcblxuICAgIHRoaXMuZGlmZmVyID0gZGlmZmVycy5maW5kKFtdKS5jcmVhdGUobnVsbCk7XG4gIH1cblxuICBzZXQgaXNTZXJ2ZXJTZWFyY2hpbmcodmFsdWU6IGJvb2xlYW4pIHtcbiAgICBpZiAodmFsdWUpIHtcbiAgICAgIHRoaXMuX2lzU2VydmVyU2VhcmNoaW5nID0gdmFsdWU7XG5cbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICB0aGlzLnNldENvbnRhaW5lclBvc2l0aW9uKCk7XG4gICAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5faXNTZXJ2ZXJTZWFyY2hpbmcgPSB2YWx1ZTtcbiAgICB9XG4gIH1cblxuICBnZXQgaXNTZXJ2ZXJTZWFyY2hpbmcoKSB7XG4gICAgcmV0dXJuIHRoaXMuX2lzU2VydmVyU2VhcmNoaW5nO1xuICB9XG5cbiAgbmdBZnRlclZpZXdJbml0KCkge1xuICAgIGlmICh0aGlzLmF1dG9Gb2N1cykge1xuICAgICAgdGhpcy5mb2N1cygpO1xuICAgIH1cbiAgfVxuXG4gIG5nT25DaGFuZ2VzKGNoYW5nZXM6IFNpbXBsZUNoYW5nZXMpIHtcbiAgICBpZiAoY2hhbmdlcy5kZWJvdW5jZVRpbWUpIHtcbiAgICAgIHRoaXMudW5zdWJzY3JpYmVLZXl1cE9ic2VydmFibGUoKTtcbiAgICAgIHRoaXMuaW5pdElucHV0T2JzZXJ2YWJsZSgpO1xuICAgIH1cblxuICAgIGlmIChjaGFuZ2VzLmZpbHRlclNlcnZpY2UpIHtcbiAgICAgIHRoaXMuY29uZmlnQWZ0ZXJTZXRGaWx0ZXJTZXJ2aWNlKHRoaXMuZmlsdGVyU2VydmljZSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcblxuICAgIGlmICh0aGlzLmZpbHRlclN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5maWx0ZXJTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5nZXRTdWJzY3JpcHRpb24pIHtcbiAgICAgIHRoaXMuZ2V0U3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuaW5maW5pdGVTY3JvbGwpIHtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uU2Nyb2xsRXZlbnQ/LnVuc3Vic2NyaWJlKCk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZ1bsOnw6NvIHF1ZSBhdHJpYnVpIGZvY28gYW8gY29tcG9uZW50ZS5cbiAgICpcbiAgICogUGFyYSB1dGlsaXrDoS1sYSDDqSBuZWNlc3PDoXJpbyB0ZXIgYSBpbnN0w6JuY2lhIGRvIGNvbXBvbmVudGUgbm8gRE9NLCBwb2RlbmRvIHNlciB1dGlsaXphZG8gbyBWaWV3Q2hpbGQgZGEgc2VndWludGUgZm9ybWE6XG4gICAqXG4gICAqIGBgYFxuICAgKiBpbXBvcnQgeyBQb0NvbWJvQ29tcG9uZW50IH0gZnJvbSAnQHBvLXVpL25nLWNvbXBvbmVudHMnO1xuICAgKlxuICAgKiAuLi5cbiAgICpcbiAgICogQFZpZXdDaGlsZChQb0NvbWJvQ29tcG9uZW50LCB7IHN0YXRpYzogdHJ1ZSB9KSBjb21ibzogUG9Db21ib0NvbXBvbmVudDtcbiAgICpcbiAgICogZm9jdXNDb21ibygpIHtcbiAgICogICB0aGlzLmNvbWJvLmZvY3VzKCk7XG4gICAqIH1cbiAgICogYGBgXG4gICAqL1xuICBmb2N1cygpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgb25CbHVyKCkge1xuICAgIHRoaXMub25Nb2RlbFRvdWNoZWQ/LigpO1xuICB9XG5cbiAgb25LZXlEb3duKGV2ZW50PzogYW55KSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5Q29kZTtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgaWYgKGV2ZW50LnNoaWZ0S2V5ICYmIGtleSA9PT0gUG9LZXlDb2RlRW51bS50YWIpIHtcbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gYnVzY2EgdW0gcmVnaXN0cm8gcXVhbmRvIGFjaW9uYXIgbyB0YWJcbiAgICBpZiAodGhpcy5zZXJ2aWNlICYmIGtleSA9PT0gUG9LZXlDb2RlRW51bS50YWIgJiYgaW5wdXRWYWx1ZSAmJiAhdGhpcy5kaXNhYmxlZFRhYkZpbHRlcikge1xuICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgIHJldHVybiB0aGlzLmdldE9iamVjdEJ5VmFsdWUoaW5wdXRWYWx1ZSk7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gUG9LZXlDb2RlRW51bS5hcnJvd0Rvd24pIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBpZiAodGhpcy52aXNpYmxlT3B0aW9ucy5sZW5ndGgpIHtcbiAgICAgICAgdGhpcy5mb2N1c0l0ZW0oKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KHRydWUpO1xuICAgICAgdGhpcy5pc0ZpbHRlcmluZyA9IHRoaXMuY2hhbmdlT25FbnRlciA/IHRoaXMuaXNGaWx0ZXJpbmcgOiBmYWxzZTtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICAvLyBUZWNsYSBcImVudGVyXCJcbiAgICBpZiAoa2V5ID09PSBQb0tleUNvZGVFbnVtLmVudGVyICYmIHRoaXMuc2VsZWN0ZWRWaWV3ICYmIHRoaXMuY29tYm9PcGVuKSB7XG4gICAgICBjb25zdCBpc1VwZGF0ZU1vZGVsID0gdGhpcy5zZWxlY3RlZFZpZXcudmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fCBpbnB1dFZhbHVlICE9PSB0aGlzLnNlbGVjdGVkVmlldy5sYWJlbDtcblxuICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KGZhbHNlKTtcblxuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKHRoaXMuc2VsZWN0ZWRWaWV3LCBpc1VwZGF0ZU1vZGVsKTtcbiAgICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSBmYWxzZTtcblxuICAgICAgaWYgKCF0aGlzLnNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoWy4uLnRoaXMuY2FjaGVTdGF0aWNPcHRpb25zXSk7XG4gICAgICB9XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gUG9LZXlDb2RlRW51bS5lbnRlcikge1xuICAgICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KHRydWUpO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09IFBvS2V5Q29kZUVudW0uZXNjKSB7XG4gICAgICBpZiAoa2V5ID09PSB0aGlzLmxhc3RLZXkpIHtcbiAgICAgICAgdGhpcy5sYXN0S2V5ID0gJyc7XG4gICAgICAgIGlmICh0aGlzLnNlbGVjdGVkVmFsdWUpIHtcbiAgICAgICAgICB0aGlzLmNsZWFyQW5kRm9jdXMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm47XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLm9uQ2xvc2VDb21ibygpO1xuICAgICAgfVxuICAgIH1cblxuICAgIHRoaXMubGFzdEtleSA9IGV2ZW50LmtleUNvZGU7XG4gIH1cblxuICBvbktleVVwKGV2ZW50PzogYW55KSB7XG4gICAgY29uc3Qga2V5ID0gZXZlbnQua2V5Q29kZSB8fCBldmVudC53aGljaDtcbiAgICBjb25zdCBpbnB1dFZhbHVlID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xuXG4gICAgY29uc3QgaXNWYWxpZEtleSA9XG4gICAgICBrZXkgIT09IFBvS2V5Q29kZUVudW0uYXJyb3dVcCAmJlxuICAgICAga2V5ICE9PSBQb0tleUNvZGVFbnVtLmFycm93RG93biAmJlxuICAgICAga2V5ICE9PSBQb0tleUNvZGVFbnVtLmVudGVyICYmXG4gICAgICBrZXkgIT09IFBvS2V5Q29kZUVudW0uZXNjICYmXG4gICAgICBrZXkgIT09IFBvS2V5Q29kZUVudW0udGFiO1xuXG4gICAgaWYgKGlzVmFsaWRLZXkpIHtcbiAgICAgIGlmIChpbnB1dFZhbHVlKSB7XG4gICAgICAgIGlmICghdGhpcy5zZXJ2aWNlICYmIHRoaXMucHJldmlvdXNTZWFyY2hWYWx1ZSAhPT0gaW5wdXRWYWx1ZSkge1xuICAgICAgICAgIHRoaXMuc2hvdWxkTWFya0xldHRlcnMgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuaXNGaWx0ZXJpbmcgPSB0cnVlO1xuICAgICAgICAgIHRoaXMuc2VhcmNoRm9yTGFiZWwoaW5wdXRWYWx1ZSwgdGhpcy5jb21ib09wdGlvbnNMaXN0LCB0aGlzLmZpbHRlck1vZGUpO1xuICAgICAgICAgIHRoaXMuaW5wdXRDaGFuZ2UuZW1pdChpbnB1dFZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gcXVhbmRvIGFwYWdhciByYXBpZG8gbyBjYW1wbyBlIGNvbnRlciBzZXJ2acOnbywgdmFsb3IsIG7Do28gZGlzcGFyYXZhIG8ga2V5dXAgb2JzZXJ2YWJsZVxuICAgICAgICAvLyBuZWNlc3NhcmlvIGVzdGUgdHJhdGFtZW50byBwYXJhIHJldG9ybmFyIGEgbGlzdGEgJ2RlZmF1bHQnLlxuICAgICAgICBjb25zdCB1c2VEZWZhdWx0T3B0aW9uc1NlcnZpY2UgPVxuICAgICAgICAgIHRoaXMuc2VydmljZSAmJiB0aGlzLnNlbGVjdGVkVmFsdWUgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbi5sYWJlbCA9PT0gdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlO1xuXG4gICAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWRWYWx1ZShudWxsKTtcblxuICAgICAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KCk7XG4gICAgICAgIH0gZWxzZSBpZiAodXNlRGVmYXVsdE9wdGlvbnNTZXJ2aWNlKSB7XG4gICAgICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoWy4uLnRoaXMuY2FjaGVPcHRpb25zXSk7XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmlzRmlsdGVyaW5nID0gZmFsc2U7XG4gICAgICB9XG5cbiAgICAgIC8vIGNhc28gbyB2YWxvciBwZXNxdWlzYWRvIGZvciBkaWZlcmVudGUgZG8gYW50ZXJpb3IgZGV2ZSBhYnJpciBvIGNvbWJvXG4gICAgICBpZiAodGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlICE9PSBpbnB1dFZhbHVlKSB7XG4gICAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSh0cnVlKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLnByZXZpb3VzU2VhcmNoVmFsdWUgPSBpbnB1dFZhbHVlO1xuICB9XG5cbiAgaW5pdElucHV0T2JzZXJ2YWJsZSgpIHtcbiAgICBpZiAodGhpcy5zZXJ2aWNlKSB7XG4gICAgICBjb25zdCBrZXl1cE9ic2VydmFibGUgPSBmcm9tRXZlbnQodGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQsICdrZXl1cCcpLnBpcGUoXG4gICAgICAgIGZpbHRlcigoZTogYW55KSA9PiB0aGlzLmlzVmFsaWRDaGFyYWN0ZXJUb1NlYXJjaChlLmtleUNvZGUpKSxcbiAgICAgICAgbWFwKChlOiBhbnkpID0+IGUuY3VycmVudFRhcmdldC52YWx1ZSksXG4gICAgICAgIGRpc3RpbmN0VW50aWxDaGFuZ2VkKCksXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5zaG91bGRNYXJrTGV0dGVycyA9IGZhbHNlO1xuICAgICAgICB9KSxcbiAgICAgICAgZGVib3VuY2VUaW1lKHRoaXMuZGVib3VuY2VUaW1lKVxuICAgICAgKTtcblxuICAgICAgdGhpcy5rZXl1cFN1YnNjcmliZSA9IGtleXVwT2JzZXJ2YWJsZS5zdWJzY3JpYmUodmFsdWUgPT4ge1xuICAgICAgICBpZiAodmFsdWUubGVuZ3RoID49IHRoaXMuZmlsdGVyTWlubGVuZ3RoIHx8ICF2YWx1ZSkge1xuICAgICAgICAgIHRoaXMuY29udHJvbEFwcGx5RmlsdGVyKHZhbHVlKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgY29udHJvbEFwcGx5RmlsdGVyKHZhbHVlLCBpc0Fycm93RG93bj86IGJvb2xlYW4pIHtcbiAgICBpZiAoXG4gICAgICAoIXRoaXMuaXNQcm9jZXNzaW5nVmFsdWVCeVRhYiAmJiAoIXRoaXMuc2VsZWN0ZWRPcHRpb24gfHwgdmFsdWUgIT09IHRoaXMuc2VsZWN0ZWRPcHRpb25bdGhpcy5keW5hbWljTGFiZWxdKSkgfHxcbiAgICAgICF0aGlzLmNhY2hlXG4gICAgKSB7XG4gICAgICB0aGlzLmRlZmF1bHRTZXJ2aWNlLmhhc05leHQgPSB0cnVlO1xuICAgICAgdGhpcy5wYWdlID0gdGhpcy5zZXRQYWdlKCk7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIodmFsdWUsIHRydWUsIGlzQXJyb3dEb3duKTtcbiAgICB9XG4gICAgdGhpcy5pc1Byb2Nlc3NpbmdWYWx1ZUJ5VGFiID0gZmFsc2U7XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogc3RyaW5nLCByZXNldDogYm9vbGVhbiA9IGZhbHNlLCBpc0Fycm93RG93bj86IGJvb2xlYW4pIHtcbiAgICBpZiAodGhpcy5kZWZhdWx0U2VydmljZS5oYXNOZXh0KSB7XG4gICAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoZmFsc2UsIHJlc2V0KTtcbiAgICAgIHRoaXMuaXNTZXJ2ZXJTZWFyY2hpbmcgPSB0cnVlO1xuXG4gICAgICBjb25zdCBwYXJhbSA9IHRoaXMuaW5maW5pdGVTY3JvbGxcbiAgICAgICAgPyB7IHByb3BlcnR5OiB0aGlzLmZpZWxkTGFiZWwsIHZhbHVlLCBwYWdlOiB0aGlzLnBhZ2UsIHBhZ2VTaXplOiB0aGlzLnBhZ2VTaXplIH1cbiAgICAgICAgOiB7IHByb3BlcnR5OiB0aGlzLmZpZWxkTGFiZWwsIHZhbHVlIH07XG5cbiAgICAgIHRoaXMuZmlsdGVyU3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlLmdldEZpbHRlcmVkRGF0YShwYXJhbSwgdGhpcy5maWx0ZXJQYXJhbXMpLnN1YnNjcmliZShcbiAgICAgICAgaXRlbXMgPT4ge1xuICAgICAgICAgIHRoaXMuc2V0T3B0aW9uc0J5QXBwbHlGaWx0ZXIodmFsdWUsIGl0ZW1zLCByZXNldCk7XG4gICAgICAgICAgaWYgKGlzQXJyb3dEb3duKSB7XG4gICAgICAgICAgICB0aGlzLmZvY3VzSXRlbSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgICAgZXJyb3IgPT4gdGhpcy5vbkVycm9yRmlsdGVyZWREYXRhKClcbiAgICAgICk7XG4gICAgfVxuICB9XG5cbiAgc2V0T3B0aW9uc0J5QXBwbHlGaWx0ZXIodmFsdWUsIGl0ZW1zLCByZXNldDogYm9vbGVhbiA9IGZhbHNlKSB7XG4gICAgdGhpcy5zaG91bGRNYXJrTGV0dGVycyA9IHRydWU7XG4gICAgdGhpcy5pc1NlcnZlclNlYXJjaGluZyA9IGZhbHNlO1xuICAgIHRoaXMuaW5maW5pdGVMb2FkaW5nID0gZmFsc2U7XG4gICAgdGhpcy5vcHRpb25zID0gdGhpcy5wcmVwYXJlT3B0aW9ucyhpdGVtcyk7XG5cbiAgICB0aGlzLnNlYXJjaEZvckxhYmVsKHZhbHVlLCBpdGVtcywgdGhpcy5maWx0ZXJNb2RlKTtcblxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuXG4gICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KHRydWUsIHJlc2V0KTtcblxuICAgIGlmICh0aGlzLmlzRmlyc3RGaWx0ZXIpIHtcbiAgICAgIHRoaXMuaXNGaXJzdEZpbHRlciA9ICF0aGlzLmlzRmlyc3RGaWx0ZXI7XG5cbiAgICAgIHRoaXMuY2FjaGVPcHRpb25zID0gdGhpcy5jb21ib09wdGlvbnNMaXN0O1xuICAgIH1cbiAgfVxuXG4gIGdldE9iamVjdEJ5VmFsdWUodmFsdWUpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlICE9PSB2YWx1ZSAmJiB0aGlzLnNlbGVjdGVkT3B0aW9uPy5bdGhpcy5keW5hbWljTGFiZWxdICE9PSB2YWx1ZSkge1xuICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdWYWx1ZUJ5VGFiID0gdHJ1ZTtcblxuICAgICAgdGhpcy5nZXRTdWJzY3JpcHRpb24gPSB0aGlzLnNlcnZpY2UuZ2V0T2JqZWN0QnlWYWx1ZSh2YWx1ZSwgdGhpcy5maWx0ZXJQYXJhbXMpLnN1YnNjcmliZShcbiAgICAgICAgaXRlbSA9PiB0aGlzLnVwZGF0ZU9wdGlvbkJ5RmlsdGVyZWRWYWx1ZShpdGVtKSxcbiAgICAgICAgZXJyb3IgPT4gdGhpcy5vbkVycm9yR2V0T2JqZWN0QnlWYWx1ZSgpXG4gICAgICApO1xuICAgIH1cbiAgfVxuXG4gIHVwZGF0ZU9wdGlvbkJ5RmlsdGVyZWRWYWx1ZShpdGVtKSB7XG4gICAgaWYgKGl0ZW0pIHtcbiAgICAgIHRoaXMub3B0aW9ucyA9IFtpdGVtXTtcbiAgICAgIHRoaXMub25PcHRpb25DbGljayhpdGVtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG51bGwpO1xuICAgIH1cblxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdGhpcy5pc1Byb2Nlc3NpbmdWYWx1ZUJ5VGFiID0gZmFsc2U7XG4gICAgfSwgdGhpcy5kZWJvdW5jZVRpbWUpO1xuICB9XG5cbiAgdG9nZ2xlQ29tYm9WaXNpYmlsaXR5KGlzQnV0dG9uPzogYm9vbGVhbik6IHZvaWQge1xuICAgIGlmICh0aGlzLmRpc2FibGVkKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKHRoaXMuc2VydmljZSAmJiAhdGhpcy5kaXNhYmxlZEluaXRGaWx0ZXIpIHtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXJJbkZpcnN0Q2xpY2soKTtcbiAgICB9XG5cbiAgICB0aGlzLmNvbnRyb2xDb21ib1Zpc2liaWxpdHkoIXRoaXMuY29tYm9PcGVuLCBmYWxzZSwgaXNCdXR0b24pO1xuICB9XG5cbiAgYXBwbHlGaWx0ZXJJbkZpcnN0Q2xpY2soKSB7XG4gICAgaWYgKHRoaXMuaXNGaXJzdEZpbHRlciAmJiAhdGhpcy5zZWxlY3RlZFZhbHVlKSB7XG4gICAgICB0aGlzLm9wdGlvbnMgPSBbXTtcbiAgICAgIGNvbnN0IHNjcm9sbGluZ0NvbnRyb2wgPSB0aGlzLnNldFNjcm9sbGluZ0NvbnRyb2woKTtcbiAgICAgIHRoaXMuYXBwbHlGaWx0ZXIoJycsIHNjcm9sbGluZ0NvbnRyb2wpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRyb2xDb21ib1Zpc2liaWxpdHkodG9PcGVuOiBib29sZWFuLCByZXNldDogYm9vbGVhbiA9IGZhbHNlLCBpc0J1dHRvbj86IGJvb2xlYW4pIHtcbiAgICB0b09wZW4gPyB0aGlzLm9wZW4ocmVzZXQsIGlzQnV0dG9uKSA6IHRoaXMuY2xvc2UocmVzZXQpO1xuICB9XG5cbiAgb25DbG9zZUNvbWJvKCkge1xuICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIG9uT3B0aW9uQ2xpY2sob3B0aW9uOiBQb0NvbWJvT3B0aW9uIHwgUG9Db21ib0dyb3VwLCBldmVudD86IGFueSkge1xuICAgIGNvbnN0IGlucHV0VmFsdWUgPSB0aGlzLmdldElucHV0VmFsdWUoKTtcbiAgICBjb25zdCBpc1VwZGF0ZU1vZGVsID1cbiAgICAgIG9wdGlvblt0aGlzLmR5bmFtaWNWYWx1ZV0gIT09IHRoaXMuc2VsZWN0ZWRWYWx1ZSB8fFxuICAgICAgISEodGhpcy5zZWxlY3RlZFZpZXcgJiYgaW5wdXRWYWx1ZSAhPT0gdGhpcy5zZWxlY3RlZFZpZXdbdGhpcy5keW5hbWljTGFiZWxdKTtcblxuICAgIGlmIChldmVudCkge1xuICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7XG4gICAgfVxuXG4gICAgdGhpcy51cGRhdGVTZWxlY3RlZFZhbHVlKG9wdGlvbiwgaXNVcGRhdGVNb2RlbCk7XG4gICAgdGhpcy5jb250cm9sQ29tYm9WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICBpZiAoIXRoaXMuc2VydmljZSkge1xuICAgICAgdGhpcy51cGRhdGVDb21ib0xpc3QoWy4uLnRoaXMuY2FjaGVTdGF0aWNPcHRpb25zXSk7XG4gICAgfVxuXG4gICAgdGhpcy5wcmV2aW91c1NlYXJjaFZhbHVlID0gdGhpcy5zZWxlY3RlZFZpZXdbdGhpcy5keW5hbWljTGFiZWxdO1xuICAgIHRoaXMuaW5wdXRFbC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gIH1cblxuICBjYWxjdWxhdGVTY3JvbGxUb3Aoc2VsZWN0ZWRJdGVtLCBpbmRleCkge1xuICAgIGlmICghc2VsZWN0ZWRJdGVtLmxlbmd0aCB8fCBpbmRleCA8PSAxKSB7XG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHNlbGVjdGVkSXRlbVswXS5vZmZzZXRUb3A7XG4gICAgfVxuICB9XG5cbiAgZ2V0SW5wdXRWYWx1ZSgpIHtcbiAgICByZXR1cm4gdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQudmFsdWU7XG4gIH1cblxuICBzZXRJbnB1dFZhbHVlKHZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC52YWx1ZSA9IHZhbHVlO1xuICB9XG5cbiAgd2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5jb21ib09wZW4gJiZcbiAgICAgICF0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudC5jb250YWlucyhldmVudC50YXJnZXQpICYmXG4gICAgICAhdGhpcy5pY29uRWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICghdGhpcy5jb250ZW50RWxlbWVudCB8fCAhdGhpcy5jb250ZW50RWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpXG4gICAgKSB7XG4gICAgICAvLyBFc2NvbmRlIENvbnRlbnQgZG8gQ29tYm8gcXVhbmRvIGZvciBjbGljYWRvIGZvcmFcbiAgICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eShmYWxzZSk7XG5cbiAgICAgIHRoaXMudmVyaWZ5VmFsaWRPcHRpb24oKTtcblxuICAgICAgLy8gY2FzbyBmb3IgY2hhbmdlT25FbnRlciBkZXZlIGxpbXBhciBvIHNlbGVjdGVkVmlldyBwYXJhIHJlaW5pY2lhLWxvXG4gICAgICB0aGlzLnNlbGVjdGVkVmlldyA9IHRoaXMuY2hhbmdlT25FbnRlciAmJiAhdGhpcy5zZWxlY3RlZFZhbHVlID8gdW5kZWZpbmVkIDogdGhpcy5zZWxlY3RlZFZpZXc7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmICh0aGlzLnNlcnZpY2UgJiYgIXRoaXMuZ2V0SW5wdXRWYWx1ZSgpICYmICF0aGlzLmlzRmlyc3RGaWx0ZXIpIHtcbiAgICAgICAgY29uc3Qgc2Nyb2xsaW5nQ29udHJvbCA9IHRoaXMuc2V0U2Nyb2xsaW5nQ29udHJvbCgpO1xuICAgICAgICB0aGlzLmFwcGx5RmlsdGVyKCcnLCBzY3JvbGxpbmdDb250cm9sKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBpc1ZhbGlkQ2hhcmFjdGVyVG9TZWFyY2goa2V5Q29kZSkge1xuICAgIHJldHVybiAoXG4gICAgICBrZXlDb2RlICE9PSA5ICYmIC8vIHRhYlxuICAgICAga2V5Q29kZSAhPT0gMTMgJiYgLy8gZW50ZXRcbiAgICAgIGtleUNvZGUgIT09IDE2ICYmIC8vIHNoaWZ0XG4gICAgICBrZXlDb2RlICE9PSAxNyAmJiAvLyBjdHJsXG4gICAgICBrZXlDb2RlICE9PSAxOCAmJiAvLyBhbHRcbiAgICAgIGtleUNvZGUgIT09IDIwICYmIC8vIGNhcHNsb2NrXG4gICAgICBrZXlDb2RlICE9PSAyNyAmJiAvLyBlc2NcbiAgICAgIGtleUNvZGUgIT09IDM3ICYmIC8vIHNldGFcbiAgICAgIGtleUNvZGUgIT09IDM4ICYmIC8vIHNldGFcbiAgICAgIGtleUNvZGUgIT09IDM5ICYmIC8vIHNldGFcbiAgICAgIGtleUNvZGUgIT09IDQwICYmIC8vIHNldGFcbiAgICAgIGtleUNvZGUgIT09IDkzXG4gICAgKTsgLy8gd2luZG93cyBtZW51XG4gIH1cblxuICBzZWFyY2hPbkVudGVyT3JBcnJvdyhldmVudCwgdmFsdWU6IHN0cmluZykge1xuICAgIGlmIChcbiAgICAgIChldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nIHx8IGV2ZW50LmtleSA9PT0gJ0VudGVyJykgJiZcbiAgICAgIHRoaXMuc2VydmljZSAmJlxuICAgICAgIXRoaXMuc2VsZWN0ZWRWaWV3ICYmXG4gICAgICB2YWx1ZS5sZW5ndGggPj0gdGhpcy5maWx0ZXJNaW5sZW5ndGhcbiAgICApIHtcbiAgICAgIHRoaXMuY29udHJvbEFwcGx5RmlsdGVyKHZhbHVlLCBldmVudC5rZXkgPT09ICdBcnJvd0Rvd24nKTtcbiAgICB9XG4gIH1cblxuICBzaG93TW9yZUluZmluaXRlU2Nyb2xsKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmRlZmF1bHRTZXJ2aWNlLmhhc05leHQpIHtcbiAgICAgIHRoaXMuaW5maW5pdGVMb2FkaW5nID0gdHJ1ZTtcbiAgICB9XG4gICAgdGhpcy5wYWdlKys7XG4gICAgdGhpcy5hcHBseUZpbHRlcignJywgdHJ1ZSk7XG4gIH1cblxuICBjbGVhckFuZEZvY3VzKCkge1xuICAgIHRoaXMuY2xlYXIobnVsbCk7XG4gICAgdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oKSB7XG4gICAgdGhpcy5jb250cm9sUG9zaXRpb24uYWRqdXN0UG9zaXRpb24ocG9Db21ib0NvbnRhaW5lclBvc2l0aW9uRGVmYXVsdCk7XG4gIH1cblxuICBwcml2YXRlIGNsb3NlKHJlc2V0OiBib29sZWFuKSB7XG4gICAgdGhpcy5jb21ib09wZW4gPSBmYWxzZTtcblxuICAgIGlmICghcmVzZXQpIHtcbiAgICAgIGlmICghdGhpcy5nZXRJbnB1dFZhbHVlKCkpIHtcbiAgICAgICAgdGhpcy5wYWdlID0gdGhpcy5zZXRQYWdlKCk7XG4gICAgICAgIHRoaXMuZGVmYXVsdFNlcnZpY2UuaGFzTmV4dCA9IHRydWU7XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgICB0aGlzLm9wdGlvbnMgPSB0aGlzLnNldE9wdGlvbnMoKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcblxuICAgIHRoaXMuY29tYm9JY29uID0gJ3BvLWljb24tYXJyb3ctZG93bic7XG5cbiAgICB0aGlzLnJlbW92ZUxpc3RlbmVycygpO1xuXG4gICAgdGhpcy5pc0ZpbHRlcmluZyA9IGZhbHNlO1xuXG4gICAgdGhpcy5yZW5kZXJlci5yZW1vdmVDbGFzcyh0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudCwgJ3BvLWNvbWJvLWlucHV0LWZvY3VzJyk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMaXN0ZW5lcnMoKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcblxuICAgIHRoaXMuY2xpY2tvdXRMaXN0ZW5lciA9IHRoaXMucmVuZGVyZXIubGlzdGVuKCdkb2N1bWVudCcsICdjbGljaycsIChldmVudDogTW91c2VFdmVudCkgPT4ge1xuICAgICAgdGhpcy53YXNDbGlja2VkT25Ub2dnbGUoZXZlbnQpO1xuICAgIH0pO1xuXG4gICAgdGhpcy5ldmVudFJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICAvLyB0aW1lb3V0IG5lY2Vzc2FyaW8gcG9pcyBhIGFuaW1hw6fDo28gZG8gcG8tbWVudSBpbXBhY3RhIG5vIGFqdXN0ZSBkYSBwb3Npw6fDo28gZG8gY29udGFpbmVyLlxuICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCksIDI1MCk7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9uRXJyb3JHZXRPYmplY3RCeVZhbHVlKCkge1xuICAgIHRoaXMudXBkYXRlT3B0aW9uQnlGaWx0ZXJlZFZhbHVlKG51bGwpO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNjcm9sbCA9ICgpOiB2b2lkID0+IHtcbiAgICB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBvbkVycm9yRmlsdGVyZWREYXRhKCkge1xuICAgIHRoaXMuaXNTZXJ2ZXJTZWFyY2hpbmcgPSBmYWxzZTtcblxuICAgIHRoaXMudXBkYXRlQ29tYm9MaXN0KFtdKTtcblxuICAgIHRoaXMuY29udHJvbENvbWJvVmlzaWJpbGl0eSh0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgb3BlbihyZXNldDogYm9vbGVhbiwgaXNCdXR0b24/OiBib29sZWFuKSB7XG4gICAgdGhpcy5jb21ib09wZW4gPSB0cnVlO1xuICAgIGlmICghcmVzZXQgJiYgdGhpcy5pbmZpbml0ZVNjcm9sbCkge1xuICAgICAgaWYgKCF0aGlzLmdldElucHV0VmFsdWUoKSkge1xuICAgICAgICB0aGlzLnBhZ2UgPSAxO1xuICAgICAgfVxuICAgICAgdGhpcy5vcHRpb25zID0gdGhpcy5zZXRPcHRpb25zKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG5cbiAgICB0aGlzLmNvbWJvSWNvbiA9ICdwby1pY29uLWFycm93LXVwJztcblxuICAgIHRoaXMuaW5pdGlhbGl6ZUxpc3RlbmVycygpO1xuXG4gICAgaXNCdXR0b25cbiAgICAgID8gdGhpcy5yZW5kZXJlci5hZGRDbGFzcyh0aGlzLmlucHV0RWwubmF0aXZlRWxlbWVudCwgJ3BvLWNvbWJvLWlucHV0LWZvY3VzJylcbiAgICAgIDogdGhpcy5pbnB1dEVsLm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcblxuICAgIHRoaXMuc2V0Q29udGFpbmVyUG9zaXRpb24oKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGlzdGVuZXJzKCkge1xuICAgIGlmICh0aGlzLmNsaWNrb3V0TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tvdXRMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLmV2ZW50UmVzaXplTGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuZXZlbnRSZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB0cnVlKTtcbiAgfVxuXG4gIHByaXZhdGUgc2V0Q29udGFpbmVyUG9zaXRpb24oKSB7XG4gICAgdGhpcy5jb250cm9sUG9zaXRpb24uc2V0RWxlbWVudHMoXG4gICAgICB0aGlzLmNvbnRhaW5lckVsZW1lbnQubmF0aXZlRWxlbWVudCxcbiAgICAgIHBvQ29tYm9Db250YWluZXJPZmZzZXQsXG4gICAgICB0aGlzLmlucHV0RWwsXG4gICAgICBbJ3RvcCcsICdib3R0b20nXSxcbiAgICAgIHRydWVcbiAgICApO1xuXG4gICAgdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRPcHRpb25zKCkge1xuICAgIHJldHVybiB0aGlzLmdldElucHV0VmFsdWUoKSA/IHRoaXMub3B0aW9ucyA6IFtdO1xuICB9XG5cbiAgcHJpdmF0ZSBwcmVwYXJlT3B0aW9ucyhpdGVtcykge1xuICAgIHJldHVybiB0aGlzLmluZmluaXRlU2Nyb2xsID8gWy4uLnRoaXMub3B0aW9ucywgLi4uaXRlbXNdIDogaXRlbXM7XG4gIH1cblxuICBwcml2YXRlIHNldFBhZ2UoKSB7XG4gICAgcmV0dXJuIHRoaXMuaW5maW5pdGVTY3JvbGwgPyAxIDogdW5kZWZpbmVkO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRTY3JvbGxpbmdDb250cm9sKCkge1xuICAgIHJldHVybiB0aGlzLmluZmluaXRlU2Nyb2xsID8gdHJ1ZSA6IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c0l0ZW0oKSB7XG4gICAgdGhpcy5wb0xpc3Rib3g/Lmxpc3Rib3hJdGVtTGlzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgbGV0IGl0ZW07XG4gICAgICBpZiAodGhpcy5zZWxlY3RlZFZhbHVlKSB7XG4gICAgICAgIGl0ZW0gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcucG8tbGlzdGJveC1pdGVtW2FyaWEtc2VsZWN0ZWQ9XCJ0cnVlXCJdJyk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBpdGVtID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBvLWxpc3Rib3gtaXRlbScpWzBdIGFzIEhUTUxFbGVtZW50O1xuICAgICAgfVxuICAgICAgdGhpcy5wb0xpc3Rib3g/Lmxpc3Rib3hJdGVtTGlzdD8ubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuXG4gICAgICBpdGVtPy5mb2N1cygpO1xuICAgIH0pO1xuICB9XG59XG4iLCI8cG8tZmllbGQtY29udGFpbmVyXG4gIFtwLWRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgW3AtaWRdPVwiaWRcIlxuICBbcC1sYWJlbF09XCJsYWJlbFwiXG4gIFtwLW9wdGlvbmFsXT1cIm9wdGlvbmFsXCJcbiAgW3AtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICBbcC1zaG93LXJlcXVpcmVkXT1cInNob3dSZXF1aXJlZFwiXG4+XG4gIDxkaXYgY2RrT3ZlcmxheU9yaWdpbiAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIiBjbGFzcz1cInBvLWZpZWxkLWNvbnRhaW5lci1jb250ZW50IHBvLWNvbWJvLWNvbnRhaW5lci1jb250ZW50XCI+XG4gICAgPGRpdiAqbmdJZj1cImljb25cIiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLWxlZnRcIj5cbiAgICAgIDxwby1pY29uIGNsYXNzPVwicG8tZmllbGQtaWNvbiBwby1pY29uLWlucHV0XCIgW2NsYXNzLnBvLWZpZWxkLWljb24tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIiBbcC1pY29uXT1cImljb25cIj48L3BvLWljb24+XG4gICAgPC9kaXY+XG5cbiAgICA8aW5wdXRcbiAgICAgICNpbnBcbiAgICAgIGNsYXNzPVwicG8tY29tYm8taW5wdXRcIlxuICAgICAgW25nQ2xhc3NdPVwiY2xlYW4gJiYgaW5wLnZhbHVlID8gJ3BvLWlucHV0LWRvdWJsZS1pY29uLXJpZ2h0JyA6ICdwby1pbnB1dC1pY29uLXJpZ2h0J1wiXG4gICAgICBbY2xhc3MucG8taW5wdXQtaWNvbi1sZWZ0XT1cImljb25cIlxuICAgICAgYXV0b2NvbXBsZXRlPVwib2ZmXCJcbiAgICAgIHR5cGU9XCJ0ZXh0XCJcbiAgICAgIFthdHRyLm5hbWVdPVwibmFtZVwiXG4gICAgICBbZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2lkXT1cImlkXCJcbiAgICAgIFtwbGFjZWhvbGRlcl09XCJkaXNhYmxlZCA/ICcnIDogcGxhY2Vob2xkZXJcIlxuICAgICAgW3JlcXVpcmVkXT1cInJlcXVpcmVkXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVDb21ib1Zpc2liaWxpdHkoKVwiXG4gICAgICAoa2V5dXApPVwib25LZXlVcCgkZXZlbnQpXCJcbiAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICAgIChrZXl1cCk9XCJzZWFyY2hPbkVudGVyT3JBcnJvdygkZXZlbnQsICRldmVudC50YXJnZXQudmFsdWUpXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAvPlxuXG4gICAgPGRpdiBjbGFzcz1cInBvLWZpZWxkLWljb24tY29udGFpbmVyLXJpZ2h0XCI+XG4gICAgICA8ZGl2XG4gICAgICAgIHRhYmluZGV4PVwiMFwiXG4gICAgICAgIHJvbGU9XCJidXR0b25cIlxuICAgICAgICBbYXR0ci5hcmlhLWxhYmVsXT1cImxpdGVyYWxzLmNsZWFuXCJcbiAgICAgICAgKm5nSWY9XCJjbGVhbiAmJiAhZGlzYWJsZWQgJiYgaW5wLnZhbHVlXCJcbiAgICAgICAgY2xhc3M9XCJwby1jb21iby1jbGVhblwiXG4gICAgICAgIChjbGljayk9XCJjbGVhcihudWxsKTsgJGV2ZW50LnByZXZlbnREZWZhdWx0KClcIlxuICAgICAgICAoa2V5ZG93bi5lbnRlcik9XCJjbGVhckFuZEZvY3VzKCk7ICRldmVudC5wcmV2ZW50RGVmYXVsdCgpXCJcbiAgICAgID5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICBbY2xhc3MucG8tYm9yZGVyLWZvY3VzZWRdPVwiIWRpc2FibGVkICYmIGNvbWJvT3BlblwiXG4gICAgICAgICAgY2xhc3M9XCJwby1pY29uIHBvLWZpZWxkLWljb24gcG8taWNvbi1jbGVhci1jb250ZW50XCJcbiAgICAgICAgPjwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgICAgPHNwYW5cbiAgICAgICAgI2ljb25BcnJvd1xuICAgICAgICBjbGFzcz1cInBvLWljb24gcG8tZmllbGQtaWNvbiBwby1pY29uLWlucHV0XCJcbiAgICAgICAgW2NsYXNzLnBvLWZpZWxkLWljb24tZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICBbY2xhc3MucG8taWNvbi1hcnJvdy11cF09XCJjb21ib09wZW5cIlxuICAgICAgICBbY2xhc3MucG8taWNvbi1hcnJvdy1kb3duXT1cIiFjb21ib09wZW5cIlxuICAgICAgICBbY2xhc3MucG8tZmllbGQtaWNvbl09XCIhZGlzYWJsZWRcIlxuICAgICAgICBbY2xhc3MucG8tY29tYm8tZGVmYXVsdC1ib3JkZXJdPVwiIWRpc2FibGVkICYmIGlucC52YWx1ZVwiXG4gICAgICAgIFtjbGFzcy5wby1jb21iby1iYWNrZ3JvdW5kLWFycm93LXVwXT1cIiFkaXNhYmxlZCAmJiBjb21ib09wZW5cIlxuICAgICAgICAoY2xpY2spPVwidG9nZ2xlQ29tYm9WaXNpYmlsaXR5KHRydWUpXCJcbiAgICAgID5cbiAgICAgIDwvc3Bhbj5cbiAgICA8L2Rpdj5cbiAgPC9kaXY+XG5cbiAgPG5nLWNvbnRhaW5lciAqbmdJZj1cImFwcGVuZEJveDsgdGhlbiBkcm9wZG93bkNESzsgZWxzZSBkcm9wZG93bkRlZmF1bHRcIj4gPC9uZy1jb250YWluZXI+XG5cbiAgPG5nLXRlbXBsYXRlICNkcm9wZG93bkRlZmF1bHQ+XG4gICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duTGlzdGJveFwiPiA8L25nLWNvbnRhaW5lcj5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duQ0RLPlxuICAgIDxuZy10ZW1wbGF0ZSBjZGtDb25uZWN0ZWRPdmVybGF5IFtjZGtDb25uZWN0ZWRPdmVybGF5T3JpZ2luXT1cInRyaWdnZXJcIiBbY2RrQ29ubmVjdGVkT3ZlcmxheU9wZW5dPVwidHJ1ZVwiPlxuICAgICAgPG5nLWNvbnRhaW5lciAqbmdUZW1wbGF0ZU91dGxldD1cImRyb3Bkb3duTGlzdGJveFwiPjwvbmctY29udGFpbmVyPlxuICAgIDwvbmctdGVtcGxhdGU+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPHBvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20gW3AtaGVscF09XCJoZWxwXCIgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIj48L3BvLWZpZWxkLWNvbnRhaW5lci1ib3R0b20+XG48L3BvLWZpZWxkLWNvbnRhaW5lcj5cblxuPG5nLXRlbXBsYXRlICNkcm9wZG93bkxpc3Rib3g+XG4gIDxkaXYgI2NvbnRhaW5lckVsZW1lbnQgY2xhc3M9XCJwby1jb21iby1jb250YWluZXJcIiBbaGlkZGVuXT1cIiFjb21ib09wZW4gJiYgIWlzU2VydmVyU2VhcmNoaW5nXCI+XG4gICAgPHBvLWxpc3Rib3hcbiAgICAgICNwb0xpc3Rib3hcbiAgICAgICNjb250ZW50RWxlbWVudFxuICAgICAgcC10eXBlPVwib3B0aW9uXCJcbiAgICAgIFtwLWl0ZW1zXT1cInZpc2libGVPcHRpb25zXCJcbiAgICAgIFtwLWZpZWxkLXZhbHVlXT1cImR5bmFtaWNWYWx1ZVwiXG4gICAgICBbcC1maWVsZC1sYWJlbF09XCJkeW5hbWljTGFiZWxcIlxuICAgICAgW3AtdGVtcGxhdGVdPVwiY29tYm9PcHRpb25UZW1wbGF0ZVwiXG4gICAgICBbcC1zZWFyY2gtdmFsdWVdPVwiZ2V0SW5wdXRWYWx1ZSgpXCJcbiAgICAgIFtwLWluZmluaXRlLWxvYWRpbmddPVwiaW5maW5pdGVMb2FkaW5nXCJcbiAgICAgIFtwLWluZmluaXRlLXNjcm9sbF09XCJpbmZpbml0ZVNjcm9sbFwiXG4gICAgICBbcC1maWx0ZXJpbmddPVwiaXNGaWx0ZXJpbmdcIlxuICAgICAgW3AtY2FjaGVdPVwiY2FjaGVcIlxuICAgICAgKHAtc2VsZWN0Y29tYm8taXRlbSk9XCJvbk9wdGlvbkNsaWNrKCRldmVudCwgJGV2ZW50LmV2ZW50KVwiXG4gICAgICBbcC1maWx0ZXItbW9kZV09XCJmaWx0ZXJNb2RlXCJcbiAgICAgIFtwLXZpc2libGVdPVwiY29tYm9PcGVuXCJcbiAgICAgIFtwLWlzLXNlYXJjaGluZ109XCJpc1NlcnZlclNlYXJjaGluZ1wiXG4gICAgICBbcC1zaG91bGQtbWFyay1sZXR0ZXJdPVwic2hvdWxkTWFya0xldHRlcnNcIlxuICAgICAgW3AtY29tcGFyZS1jYWNoZV09XCJjb21wYXJlT2JqZWN0cyhjYWNoZU9wdGlvbnMsIHZpc2libGVPcHRpb25zKVwiXG4gICAgICBbcC1jb21iby1zZXJ2aWNlXT1cInNlcnZpY2VcIlxuICAgICAgW3AtaW5maW5pdGUtc2Nyb2xsLWRpc3RhbmNlXT1cImluZmluaXRlU2Nyb2xsRGlzdGFuY2VcIlxuICAgICAgKHAtdXBkYXRlLWluZmluaXRlLXNjcm9sbCk9XCJzaG93TW9yZUluZmluaXRlU2Nyb2xsKClcIlxuICAgICAgKHAtY2xvc2UpPVwib25DbG9zZUNvbWJvKClcIlxuICAgID48L3BvLWxpc3Rib3g+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cbiJdfQ==
@@ -176,6 +176,7 @@ export class PoMultiselectComponent extends PoMultiselectBaseComponent {
176
176
  initCalculateItems = true;
177
177
  isCalculateVisibleItems = true;
178
178
  cacheOptions;
179
+ focusOnTag = false;
179
180
  constructor(renderer, changeDetector, el, controlPosition, defaultService, languageService) {
180
181
  super(languageService);
181
182
  this.renderer = renderer;
@@ -327,8 +328,11 @@ export class PoMultiselectComponent extends PoMultiselectBaseComponent {
327
328
  this.onModelTouched?.();
328
329
  }
329
330
  onKeyDown(event) {
330
- if ((event.keyCode === PoKeyCodeEnum.tab && this.visibleTags.length > 1) ||
331
- (event.keyCode === PoKeyCodeEnum.tab && this.visibleTags.length < 1)) {
331
+ if (event.shiftKey && event.keyCode === PoKeyCodeEnum.tab && !this.focusOnTag) {
332
+ this.controlDropdownVisibility(false);
333
+ }
334
+ this.focusOnTag = false;
335
+ if (event.keyCode === PoKeyCodeEnum.tab) {
332
336
  return;
333
337
  }
334
338
  if (event.keyCode === PoKeyCodeEnum.esc) {
@@ -531,6 +535,7 @@ export class PoMultiselectComponent extends PoMultiselectBaseComponent {
531
535
  const KEY_SPACE = 'Space';
532
536
  const KEY_ARROW_LEFT = 'ArrowLeft';
533
537
  const KEY_ARROW_RIGHT = 'ArrowRight';
538
+ this.focusOnTag = true;
534
539
  if (event.code === KEY_SPACE) {
535
540
  event.preventDefault();
536
541
  event.stopPropagation();
@@ -668,4 +673,4 @@ export class PoMultiselectComponent extends PoMultiselectBaseComponent {
668
673
  type: ViewChild,
669
674
  args: ['inputElement', { read: ElementRef, static: true }]
670
675
  }] }); })();
671
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbXVsdGlzZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLW11bHRpc2VsZWN0L3BvLW11bHRpc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1tdWx0aXNlbGVjdC9wby1tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBRVosVUFBVSxFQUtWLFNBQVMsRUFDVCxVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBYyxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDJFQUEyRSxDQUFDOzs7Ozs7Ozs7SUNEM0gs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QTlDLDJEQUE4QyxnREFBQSwrQ0FBQSwwR0FBQTtZQUo5QyxnREFBOEI7WUFDOUIsd0NBQTBCLHlCQUFBO1lBV25CLGVBQXVDO1lBQXZDLGtHQUF1QztZQUs1QixlQUFnQjtZQUFoQix5Q0FBZ0I7WUFZOUIsZUFBNEc7WUFBNUcseUlBQTRHO1lBQzVHLHNFQUFvRDtZQU83QyxlQUFpQjtZQUFqQixvQ0FBaUIsaUJBQUEsaUJBQUE7WUFZTCxlQUFlO1lBQWYsaUNBQWUsNEJBQUE7Ozt1RkRxRC9CLHNCQUFzQjtjQU5sQyxTQUFTOzJCQUNFLGdCQUFnQixtQkFFVCx1QkFBdUIsQ0FBQyxNQUFNLGFBQy9DLFNBQVM7cU9BTVQseUJBQXlCO2tCQUR4QixZQUFZO21CQUFDLG9DQUFvQyxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQUdoQixlQUFlO2tCQUFsRSxTQUFTO21CQUFDLGlCQUFpQixFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRTtZQUNwQixRQUFRO2tCQUFyQyxTQUFTO21CQUFDLGlCQUFpQjtZQUNrQyxXQUFXO2tCQUF4RSxTQUFTO21CQUFDLGFBQWEsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtZQUNHLFlBQVk7a0JBQTFFLFNBQVM7bUJBQUMsY0FBYyxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQWZ0ZXJWaWV3SW5pdCxcbiAgQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3ksXG4gIENoYW5nZURldGVjdG9yUmVmLFxuICBDb21wb25lbnQsXG4gIENvbnRlbnRDaGlsZCxcbiAgRG9DaGVjayxcbiAgRWxlbWVudFJlZixcbiAgT25DaGFuZ2VzLFxuICBPbkRlc3Ryb3ksXG4gIFJlbmRlcmVyMixcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxuICBmb3J3YXJkUmVmXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTkdfVkFMSURBVE9SUywgTkdfVkFMVUVfQUNDRVNTT1IgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5cbmltcG9ydCB7IE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiwgZnJvbUV2ZW50LCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgY2F0Y2hFcnJvciwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBQb0xhbmd1YWdlU2VydmljZSB9IGZyb20gJy4uLy4uLy4uL3NlcnZpY2VzL3BvLWxhbmd1YWdlL3BvLWxhbmd1YWdlLnNlcnZpY2UnO1xuaW1wb3J0IHsgUG9LZXlDb2RlRW51bSB9IGZyb20gJy4vLi4vLi4vLi4vZW51bXMvcG8ta2V5LWNvZGUuZW51bSc7XG5pbXBvcnQgeyBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UgfSBmcm9tICcuLy4uLy4uLy4uL3NlcnZpY2VzL3BvLWNvbnRyb2wtcG9zaXRpb24vcG8tY29udHJvbC1wb3NpdGlvbi5zZXJ2aWNlJztcbmltcG9ydCB7IGlzTW9iaWxlIH0gZnJvbSAnLi8uLi8uLi8uLi91dGlscy91dGlsJztcblxuaW1wb3J0IHsgcG9Mb2NhbGVEZWZhdWx0IH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2UuY29uc3RhbnQnO1xuaW1wb3J0IHsgUG9NdWx0aXNlbGVjdEJhc2VDb21wb25lbnQgfSBmcm9tICcuL3BvLW11bHRpc2VsZWN0LWJhc2UuY29tcG9uZW50JztcbmltcG9ydCB7IFBvTXVsdGlzZWxlY3RGaWx0ZXJTZXJ2aWNlIH0gZnJvbSAnLi9wby1tdWx0aXNlbGVjdC1maWx0ZXIuc2VydmljZSc7XG5pbXBvcnQgeyBQb011bHRpc2VsZWN0T3B0aW9uVGVtcGxhdGVEaXJlY3RpdmUgfSBmcm9tICcuL3BvLW11bHRpc2VsZWN0LW9wdGlvbi10ZW1wbGF0ZS9wby1tdWx0aXNlbGVjdC1vcHRpb24tdGVtcGxhdGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IFBvTXVsdGlzZWxlY3RPcHRpb24gfSBmcm9tICcuL3BvLW11bHRpc2VsZWN0LW9wdGlvbi5pbnRlcmZhY2UnO1xuXG5jb25zdCBwb011bHRpc2VsZWN0Q29udGFpbmVyT2Zmc2V0ID0gODtcbmNvbnN0IHBvTXVsdGlzZWxlY3RDb250YWluZXJQb3NpdGlvbkRlZmF1bHQgPSAnYm90dG9tJztcbmNvbnN0IHBvTXVsdGlzZWxlY3RJbnB1dFBhZGRpbmdSaWdodCA9IDUyO1xuY29uc3QgcG9NdWx0aXNlbGVjdFNwYWNlQmV0d2VlblRhZ3MgPSA4O1xuXG5jb25zdCBsaXRlcmFsc1RhZ1JlbW92ZU90aGVycyA9IHtcbiAgcHQ6IHtcbiAgICByZW1vdmU6ICdSZW1vdmVyIHRvZG9zIG9zIGl0ZW5zIHNlbGVjaW9uYWRvcydcbiAgfSxcbiAgcnU6IHtcbiAgICByZW1vdmU6ICfQo9C00LDQu9C40YLRjCDQstGB0LUg0LLRi9Cx0YDQsNC90L3Ri9C1INGN0LvQtdC80LXQvdGC0YsnXG4gIH0sXG4gIGVzOiB7XG4gICAgcmVtb3ZlOiAnRWxpbWluYXIgdG9kb3MgbG9zIGVsZW1lbnRvcyBzZWxlY2Npb25hZG9zJ1xuICB9LFxuICBlbjoge1xuICAgIHJlbW92ZTogJ0NsZWFyIGFsbCBzZWxlY3RlZCBpdGVtcydcbiAgfVxufTtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgKi9cbmNvbnN0IHByb3ZpZGVycyA9IFtcbiAgUG9NdWx0aXNlbGVjdEZpbHRlclNlcnZpY2UsXG4gIFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSxcbiAge1xuICAgIHByb3ZpZGU6IE5HX1ZBTFVFX0FDQ0VTU09SLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvTXVsdGlzZWxlY3RDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH0sXG4gIHtcbiAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZVxuICAgIHVzZUV4aXN0aW5nOiBmb3J3YXJkUmVmKCgpID0+IFBvTXVsdGlzZWxlY3RDb21wb25lbnQpLFxuICAgIG11bHRpOiB0cnVlXG4gIH1cbl07XG5cbi8qKlxuICogQGRvY3NFeHRlbmRzIFBvTXVsdGlzZWxlY3RCYXNlQ29tcG9uZW50XG4gKlxuICogQGV4YW1wbGVcbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbXVsdGlzZWxlY3QtYmFzaWNcIiB0aXRsZT1cIlBPIE11bHRpc2VsZWN0IEJhc2ljXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbXVsdGlzZWxlY3QtYmFzaWMvc2FtcGxlLXBvLW11bHRpc2VsZWN0LWJhc2ljLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tdWx0aXNlbGVjdC1iYXNpYy9zYW1wbGUtcG8tbXVsdGlzZWxlY3QtYmFzaWMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbXVsdGlzZWxlY3QtbGFic1wiIHRpdGxlPVwiUE8gTXVsdGlzZWxlY3QgTGFic1wiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LWxhYnMvc2FtcGxlLXBvLW11bHRpc2VsZWN0LWxhYnMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LWxhYnMvc2FtcGxlLXBvLW11bHRpc2VsZWN0LWxhYnMuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbXVsdGlzZWxlY3QtdmFjYXRpb25cIiB0aXRsZT1cIlBPIE11bHRpc2VsZWN0IC0gVmFjYXRpb25cIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tdWx0aXNlbGVjdC12YWNhdGlvbi9zYW1wbGUtcG8tbXVsdGlzZWxlY3QtdmFjYXRpb24uY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LXZhY2F0aW9uL3NhbXBsZS1wby1tdWx0aXNlbGVjdC12YWNhdGlvbi5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tdWx0aXNlbGVjdC12YWNhdGlvbi1yZWFjdGl2ZS1mb3JtXCIgdGl0bGU9XCJQTyBNdWx0aXNlbGVjdCAtIFZhY2F0aW9uIFJlYWN0aXZlIEZvcm1cIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tdWx0aXNlbGVjdC12YWNhdGlvbi1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1tdWx0aXNlbGVjdC12YWNhdGlvbi1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tdWx0aXNlbGVjdC12YWNhdGlvbi1yZWFjdGl2ZS1mb3JtL3NhbXBsZS1wby1tdWx0aXNlbGVjdC12YWNhdGlvbi1yZWFjdGl2ZS1mb3JtLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLW11bHRpc2VsZWN0LXRlbXBsYXRlXCIgdGl0bGU9XCJQTyBNdWx0aXNlbGVjdCAtIFRlbXBsYXRlXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbXVsdGlzZWxlY3QtdGVtcGxhdGUvc2FtcGxlLXBvLW11bHRpc2VsZWN0LXRlbXBsYXRlLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tdWx0aXNlbGVjdC10ZW1wbGF0ZS9zYW1wbGUtcG8tbXVsdGlzZWxlY3QtdGVtcGxhdGUuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbXVsdGlzZWxlY3QtaGVyb2VzXCIgdGl0bGU9XCJQTyBNdWx0aXNlbGVjdCAtIEhlcm9lcyAtIHVzaW5nIEFQSVwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LWhlcm9lcy9zYW1wbGUtcG8tbXVsdGlzZWxlY3QtaGVyb2VzLmNvbXBvbmVudC5odG1sXCI+IDwvZmlsZT5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tdWx0aXNlbGVjdC1oZXJvZXMvc2FtcGxlLXBvLW11bHRpc2VsZWN0LWhlcm9lcy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LWhlcm9lcy9zYW1wbGUtcG8tbXVsdGlzZWxlY3QtaGVyb2VzLnNlcnZpY2UudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tdWx0aXNlbGVjdC1hbnktYXJyYXlcIiB0aXRsZT1cIlBPIE11bHRpc2VsZWN0IC0gQXJyYXkgQW55XCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbXVsdGlzZWxlY3QtYW55LWFycmF5L3NhbXBsZS1wby1tdWx0aXNlbGVjdC1hbnktYXJyYXkuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LWFueS1hcnJheS9zYW1wbGUtcG8tbXVsdGlzZWxlY3QtYW55LWFycmF5LmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICovXG5AQ29tcG9uZW50KHtcbiAgc2VsZWN0b3I6ICdwby1tdWx0aXNlbGVjdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wby1tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCcsXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBwcm92aWRlcnNcbn0pXG5leHBvcnQgY2xhc3MgUG9NdWx0aXNlbGVjdENvbXBvbmVudFxuICBleHRlbmRzIFBvTXVsdGlzZWxlY3RCYXNlQ29tcG9uZW50XG4gIGltcGxlbWVudHMgQWZ0ZXJWaWV3SW5pdCwgRG9DaGVjaywgT25EZXN0cm95LCBPbkNoYW5nZXMge1xuICBAQ29udGVudENoaWxkKFBvTXVsdGlzZWxlY3RPcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSwgeyBzdGF0aWM6IHRydWUgfSlcbiAgbXVsdGlzZWxlY3RPcHRpb25UZW1wbGF0ZTogUG9NdWx0aXNlbGVjdE9wdGlvblRlbXBsYXRlRGlyZWN0aXZlO1xuXG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBkcm9wZG93bkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2Ryb3Bkb3duRWxlbWVudCcpIGRyb3Bkb3duO1xuICBAVmlld0NoaWxkKCdpY29uRWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGljb25FbGVtZW50OiBFbGVtZW50UmVmO1xuICBAVmlld0NoaWxkKCdpbnB1dEVsZW1lbnQnLCB7IHJlYWQ6IEVsZW1lbnRSZWYsIHN0YXRpYzogdHJ1ZSB9KSBpbnB1dEVsZW1lbnQ6IEVsZW1lbnRSZWY7XG5cbiAgbGl0ZXJhbHNUYWc7XG4gIGRyb3Bkb3duSWNvbjogc3RyaW5nID0gJ3BvLWljb24tYXJyb3ctZG93bic7XG4gIGRyb3Bkb3duT3BlbjogYm9vbGVhbiA9IGZhbHNlO1xuICBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBoYXNNb3JlVGFnOiBib29sZWFuO1xuICB0aW1lb3V0UmVzaXplO1xuICB2aXNpYmxlRWxlbWVudCA9IGZhbHNlO1xuICBwcml2YXRlIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICBwcml2YXRlIGVudGVyQ2xvc2VUYWcgPSBmYWxzZTtcbiAgcHJpdmF0ZSBpbml0Q2FsY3VsYXRlSXRlbXMgPSB0cnVlO1xuICBwcml2YXRlIGlzQ2FsY3VsYXRlVmlzaWJsZUl0ZW1zOiBib29sZWFuID0gdHJ1ZTtcbiAgcHJpdmF0ZSBjYWNoZU9wdGlvbnM6IEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24gfCBhbnk+O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY29udHJvbFBvc2l0aW9uOiBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UsXG4gICAgcHVibGljIGRlZmF1bHRTZXJ2aWNlOiBQb011bHRpc2VsZWN0RmlsdGVyU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGxhbmd1YWdlU2VydmljZSk7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICAgIHRoaXMubGl0ZXJhbHNUYWcgPSB7XG4gICAgICAuLi5saXRlcmFsc1RhZ1JlbW92ZU90aGVyc1twb0xvY2FsZURlZmF1bHRdLFxuICAgICAgLi4ubGl0ZXJhbHNUYWdSZW1vdmVPdGhlcnNbbGFuZ3VhZ2VdXG4gICAgfTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VydmljZSAmJiAoY2hhbmdlcy5maWx0ZXJTZXJ2aWNlIHx8IGNoYW5nZXMuZmllbGRWYWx1ZSB8fCBjaGFuZ2VzLmZpZWxkTGFiZWwpKSB7XG4gICAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5maWx0ZXJTZXJ2aWNlKTtcbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgY29uc3QgaW5wdXRXaWR0aCA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgLy8gUGVybWl0ZSBxdWUgYXMgdGFncyBzZWphbSBjYWxjdWxhZGFzIG5hIHByaW1laXJhIHZleiBxdWUgbyBjb21wb25lbnRlIHRvcm5hLXNlIHZpc8OtdmVsLFxuICAgIC8vIGV2aXRhbmRvIGNvbSBpc3NvLCBwcm9ibGVtYXMgY29tIFRhYnMgb3UgRGl2cyBxdWUgaW5pY2llbSBlc2NvbmRpZGFzLlxuICAgIGlmICgoaW5wdXRXaWR0aCAmJiAhdGhpcy52aXNpYmxlRWxlbWVudCAmJiB0aGlzLmluaXRpYWxpemVkKSB8fCAoaW5wdXRXaWR0aCAmJiB0aGlzLmlzQ2FsY3VsYXRlVmlzaWJsZUl0ZW1zKSkge1xuICAgICAgdGhpcy5kZWJvdW5jZVJlc2l6ZSgpO1xuICAgICAgdGhpcy52aXNpYmxlRWxlbWVudCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLmdldE9iamVjdHNCeVZhbHVlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZpbHRlclN1YmplY3Q/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBxdWUgYXRyaWJ1aSBmb2NvIGFvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gdGVyIGEgaW5zdMOibmNpYSBkbyBjb21wb25lbnRlIG5vIERPTSwgcG9kZW5kbyBzZXIgdXRpbGl6YWRvIG8gVmlld0NoaWxkIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHsgUG9NdWx0aXNlbGVjdENvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9NdWx0aXNlbGVjdENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgbXVsdGlzZWxlY3Q6IFBvTXVsdGlzZWxlY3RDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzTXVsdGlzZWxlY3QoKSB7XG4gICAqICAgdGhpcy5tdWx0aXNlbGVjdC5mb2N1cygpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0SW5wdXRXaWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wby1tdWx0aXNlbGVjdC1pbnB1dCcpLm9mZnNldFdpZHRoIC0gcG9NdWx0aXNlbGVjdElucHV0UGFkZGluZ1JpZ2h0O1xuICB9XG5cbiAgZ2V0VGFnc1dpZHRoKCkge1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgncG8tdGFnJyk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGFncykubWFwKHRhZyA9PiB0YWdbJ29mZnNldFdpZHRoJ10pO1xuICB9XG5cbiAgY2FsY3VsYXRlVmlzaWJsZUl0ZW1zKCkge1xuICAgIHRoaXMuaGFzTW9yZVRhZyA9IGZhbHNlO1xuICAgIGNvbnN0IHRhZ3NXaWR0aCA9IHRoaXMuZ2V0VGFnc1dpZHRoKCk7XG4gICAgY29uc3QgaW5wdXRXaWR0aCA9IHRoaXMuZ2V0SW5wdXRXaWR0aCgpO1xuICAgIGNvbnN0IGV4dHJhVGFnU2l6ZSA9IDYzO1xuICAgIGNvbnN0IHRhZ3NWaXNpYmxlID0gdGFnc1dpZHRoWzBdO1xuXG4gICAgdGhpcy52aXNpYmxlVGFncyA9IFtdO1xuXG4gICAgaWYgKGlucHV0V2lkdGggPiAwKSB7XG4gICAgICBsZXQgc3VtID0gMDtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdW0gKz0gdGFnc1dpZHRoW2ldICsgcG9NdWx0aXNlbGVjdFNwYWNlQmV0d2VlblRhZ3M7XG4gICAgICAgIHRoaXMudmlzaWJsZVRhZ3MucHVzaCh0aGlzLnNlbGVjdGVkT3B0aW9uc1tpXSk7XG5cbiAgICAgICAgaWYgKHN1bSA+IGlucHV0V2lkdGgpIHtcbiAgICAgICAgICBzdW0gLT0gdGFnc1dpZHRoW2ldO1xuICAgICAgICAgIHRoaXMuaXNDYWxjdWxhdGVWaXNpYmxlSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGFnc1Zpc2libGUgfHwgIXRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAoaSA9PT0gdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5pc0NhbGN1bGF0ZVZpc2libGVJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFzTW9yZVRhZyA9IHRydWU7XG4gICAgICAgIGlmIChzdW0gKyBleHRyYVRhZ1NpemUgPiBpbnB1dFdpZHRoKSB7XG4gICAgICAgICAgdGhpcy52aXNpYmxlVGFncy5zcGxpY2UoLTIsIDIpO1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gJysnICsgKHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCArIDEgLSBpKS50b1N0cmluZygpO1xuICAgICAgICAgIHRoaXMudmlzaWJsZVRhZ3MucHVzaCh7IFt0aGlzLmZpZWxkVmFsdWVdOiAnJywgW3RoaXMuZmllbGRMYWJlbF06IGxhYmVsIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmlzaWJsZVRhZ3Muc3BsaWNlKC0xLCAxKTtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9ICcrJyArICh0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggLSBpKS50b1N0cmluZygpO1xuICAgICAgICAgIHRoaXMudmlzaWJsZVRhZ3MucHVzaCh7IFt0aGlzLmZpZWxkVmFsdWVdOiAnJywgW3RoaXMuZmllbGRMYWJlbF06IGxhYmVsIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbml0Q2FsY3VsYXRlSXRlbXMpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVLZXlib2FyZE5hdmlnYXRpb25UYWcoKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5pdENhbGN1bGF0ZUl0ZW1zID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjaGFuZ2VJdGVtcyhjaGFuZ2VkSXRlbXMpIHtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkT3B0aW9ucyhjaGFuZ2VkSXRlbXMpO1xuICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRPcHRpb25zKTtcblxuICAgIGlmICh0aGlzLmF1dG9IZWlnaHQgJiYgdGhpcy5kcm9wZG93bk9wZW4pIHtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmROYXZpZ2F0aW9uVGFnKCk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIHVwZGF0ZVZpc2libGVJdGVtcygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgIHRoaXMudmlzaWJsZVRhZ3MgPSBbXS5jb25jYXQodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHRoaXMuZGVib3VuY2VSZXNpemUoKTtcblxuICAgIC8vIHF1YW5kbyBlc3RpdmVyIGRlbnRybyBkZSBtb2RhbFxuICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCkge1xuICAgICAgdGhpcy5pc0NhbGN1bGF0ZVZpc2libGVJdGVtcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZGVib3VuY2VSZXNpemUoKSB7XG4gICAgaWYgKCF0aGlzLmF1dG9IZWlnaHQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRSZXNpemUpO1xuICAgICAgdGhpcy50aW1lb3V0UmVzaXplID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlVmlzaWJsZUl0ZW1zKCk7XG4gICAgICB9LCAyMDApO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25CbHVyKCkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpID09PSAnc3RyaW5nJyAmJlxuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKS5pbmNsdWRlcygnVW5zZWxlY3RlZCcpXG4gICAgKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRoaXMubGFiZWwgPyB0aGlzLmxhYmVsIDogJycpO1xuICAgIH1cbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkPy4oKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudD86IGFueSkge1xuICAgIGlmIChcbiAgICAgIChldmVudC5rZXlDb2RlID09PSBQb0tleUNvZGVFbnVtLnRhYiAmJiB0aGlzLnZpc2libGVUYWdzLmxlbmd0aCA+IDEpIHx8XG4gICAgICAoZXZlbnQua2V5Q29kZSA9PT0gUG9LZXlDb2RlRW51bS50YWIgJiYgdGhpcy52aXNpYmxlVGFncy5sZW5ndGggPCAxKVxuICAgICkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBQb0tleUNvZGVFbnVtLmVzYykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuY29udHJvbERyb3Bkb3duVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFBvS2V5Q29kZUVudW0uYXJyb3dEb3duICYmIHRoaXMudmlzaWJsZVRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuY29udHJvbERyb3Bkb3duVmlzaWJpbGl0eSh0cnVlKTtcbiAgICAgIHRoaXMuZHJvcGRvd24/Lmxpc3Rib3g/LnNldEZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFBvS2V5Q29kZUVudW0uZW50ZXIgJiYgIXRoaXMuZW50ZXJDbG9zZVRhZykge1xuICAgICAgaWYgKHRoaXMudmlzaWJsZVRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd25WaXNpYmlsaXR5KCk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy50b2dnbGVEcm9wZG93blZpc2liaWxpdHkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBQb0tleUNvZGVFbnVtLnNwYWNlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVEcm9wZG93blZpc2liaWxpdHkoKTtcbiAgICB9XG4gICAgdGhpcy5lbnRlckNsb3NlVGFnID0gZmFsc2U7XG4gIH1cblxuICB0b2dnbGVEcm9wZG93blZpc2liaWxpdHkoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVySW5GaXJzdENsaWNrKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250cm9sRHJvcGRvd25WaXNpYmlsaXR5KCF0aGlzLmRyb3Bkb3duT3Blbik7XG4gIH1cblxuICBvbktleURvd25Ecm9wZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5jb250cm9sRHJvcGRvd25WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvcGVuRHJvcGRvd24odG9PcGVuKSB7XG4gICAgaWYgKHRvT3BlbiAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5jb250cm9sRHJvcGRvd25WaXNpYmlsaXR5KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRyb2xEcm9wZG93blZpc2liaWxpdHkodG9PcGVuOiBib29sZWFuKSB7XG4gICAgdG9PcGVuID8gdGhpcy5vcGVuKCkgOiB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzY3JvbGxUb1NlbGVjdGVkT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMub3B0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgIG9wdGlvbiA9PiBvcHRpb25bdGhpcy5maWVsZFZhbHVlXSA9PT0gdGhpcy5zZWxlY3RlZE9wdGlvbnNbMF1bdGhpcy5maWVsZFZhbHVlXVxuICAgICAgKTtcbiAgICAgIHRoaXMuZHJvcGRvd24uc2Nyb2xsVG8oaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFZpc2libGVPcHRpb25zRHJvcGRvd24ob3B0aW9ucykge1xuICAgIHRoaXMudmlzaWJsZU9wdGlvbnNEcm9wZG93biA9IG9wdGlvbnM7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNoYW5nZVNlYXJjaChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudFt0aGlzLmZpZWxkVmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmZpbHRlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0Lm5leHQoZXZlbnRbdGhpcy5maWVsZFZhbHVlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlYXJjaEJ5TGFiZWwoZXZlbnRbdGhpcy5maWVsZFZhbHVlXSwgdGhpcy5vcHRpb25zLCB0aGlzLmZpbHRlck1vZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFZpc2libGVPcHRpb25zRHJvcGRvd24odGhpcy5vcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyB0aW1lb3V0IG5lY2Vzc8OhcmlvIHBhcmEgcmVwb3NpY2lvbmFyIGNvcnJldGFtZW50ZSBxdWFuZG8gZHJvcGRvd24gZXN0aXZlciBwcmEgY2ltYSBkbyBpbnB1dCBlIHJlYWxpemFyIGJ1c2NhIG5vIGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCkpO1xuICB9XG5cbiAgY2xvc2VUYWcodmFsdWUsIGV2ZW50KSB7XG4gICAgbGV0IGluZGV4O1xuICAgIHRoaXMuZW50ZXJDbG9zZVRhZyA9IHRydWU7XG4gICAgaWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5pbmNsdWRlcygnKycpKSkge1xuICAgICAgaW5kZXggPSBudWxsO1xuICAgICAgY29uc3QgaXRlbXNOb3RJblZpc2libGVUYWdzID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiAhdGhpcy52aXNpYmxlVGFncy5pbmNsdWRlcyhvcHRpb24pKTtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRoaXMudmlzaWJsZVRhZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMuc3BsaWNlKHRoaXMudmlzaWJsZVRhZ3MubGVuZ3RoIC0gMSwgaXRlbXNOb3RJblZpc2libGVUYWdzLmxlbmd0aCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSXRlbXMoKTtcbiAgICAgICAgICB0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLnNlbGVjdGVkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgob3B0aW9uID0+IG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdID09PSB2YWx1ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSXRlbXMoKTtcbiAgICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNPbk5leHRUYWcoaW5kZXgsIGV2ZW50KTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgd2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5kcm9wZG93bk9wZW4gJiZcbiAgICAgICF0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLmljb25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuZHJvcGRvd25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy5jb250cm9sRHJvcGRvd25WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogc3RyaW5nID0gJycpOiBPYnNlcnZhYmxlPEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24gfCBhbnk+PiB7XG4gICAgY29uc3QgcGFyYW0gPSB7IHByb3BlcnR5OiB0aGlzLmZpZWxkTGFiZWwsIHZhbHVlOiB2YWx1ZSB9O1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0RmlsdGVyZWREYXRhKHBhcmFtKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICB0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgob3B0aW9uczogQXJyYXk8UG9NdWx0aXNlbGVjdE9wdGlvbiB8IGFueT4pID0+IHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zQnlBcHBseUZpbHRlcihvcHRpb25zKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJJbkZpcnN0Q2xpY2soKSB7XG4gICAgaWYgKHRoaXMuaXNGaXJzdEZpbHRlcikge1xuICAgICAgdGhpcy5pc1NlcnZlclNlYXJjaGluZyA9IHRydWU7XG5cbiAgICAgIC8vIG5lY2Vzc2FyaW8gZW52aWFyIHVtIG9iamV0byBzdHJpbmcgdmF6aWEgcGFyYSByZWZhemVyIGEgYnVzY2EsIHF1YW5kbyBhbHRlcmFyIGZpbHRlclNlcnZpY2UsIGZpZWxkVmFsdWUgZSBmaWVsZExhYmVsXG4gICAgICAvLyBwb2lzIHRlbW9zIG8gZGlzdGluY3RVbnRpbENoYW5nZSBubyBwaXBlIGRvIGZpbHRlclN1YmplY3RcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy13cmFwcGVycyAqL1xuICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0Lm5leHQobmV3IFN0cmluZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zID0gWy4uLnRoaXMuY2FjaGVPcHRpb25zXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE9wdGlvbnNCeUFwcGx5RmlsdGVyKGl0ZW1zOiBBcnJheTxQb011bHRpc2VsZWN0T3B0aW9uIHwgYW55Pikge1xuICAgIGlmICh0aGlzLmlzRmlyc3RGaWx0ZXIpIHtcbiAgICAgIHRoaXMuY2FjaGVPcHRpb25zID0gWy4uLml0ZW1zXTtcbiAgICAgIHRoaXMuaXNGaXJzdEZpbHRlciA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IFsuLi5pdGVtc107XG4gICAgdGhpcy5zZXRWaXNpYmxlT3B0aW9uc0Ryb3Bkb3duKHRoaXMub3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGFkanVzdENvbnRhaW5lclBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvTXVsdGlzZWxlY3RDb250YWluZXJQb3NpdGlvbkRlZmF1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRyb3Bkb3duSWNvbiA9ICdwby1pY29uLWFycm93LWRvd24nO1xuICAgIHRoaXMuZHJvcGRvd25PcGVuID0gZmFsc2U7XG5cbiAgICB0aGlzLmRyb3Bkb3duLmNvbnRyb2xWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICB0aGlzLnNldFZpc2libGVPcHRpb25zRHJvcGRvd24odGhpcy5vcHRpb25zKTtcblxuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzT25OZXh0VGFnKGluZGV4Q2xvc2VkOiBudW1iZXIsIGNsaWNrT3JFbnRlcjogc3RyaW5nKSB7XG4gICAgaWYgKGNsaWNrT3JFbnRlciA9PT0gJ2VudGVyJykge1xuICAgICAgY29uc3QgdGFnUmVtb3ZlRWxlbWVudHM6IEFycmF5PGFueT4gPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBvLXRhZy1yZW1vdmUnKTtcbiAgICAgIGluZGV4Q2xvc2VkID0gaW5kZXhDbG9zZWQgfHwgaW5kZXhDbG9zZWQgPT09IDAgPyBpbmRleENsb3NlZCA6IHRhZ1JlbW92ZUVsZW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmICh0YWdSZW1vdmVFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGBVbnNlbGVjdGVkIGl0ZW1zICR7dGhpcy5sYWJlbH1gKTtcbiAgICAgICAgdGhpcy5jb250cm9sRHJvcGRvd25WaXNpYmlsaXR5KHRydWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5mb2N1c09uUmVtb3ZlVGFnKHRhZ1JlbW92ZUVsZW1lbnRzLCBpbmRleENsb3NlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Q2xvc2VkID0gMDtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVLZXlib2FyZE5hdmlnYXRpb25UYWcoaW5kZXhDbG9zZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c09uUmVtb3ZlVGFnKHRhZzogYW55LCBpbmRleENsb3NlZDogbnVtYmVyKSB7XG4gICAgaWYgKHRhZy5sZW5ndGggPT09IGluZGV4Q2xvc2VkKSB7XG4gICAgICB0YWdbaW5kZXhDbG9zZWQgLSAxXT8uZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFnW2luZGV4Q2xvc2VkXT8uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5Ym9hcmROYXZpZ2F0aW9uVGFnKGluaXRpYWxJbmRleCA9IDApIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIGNvbnN0IHRhZ1JlbW92ZUVsZW1lbnRzID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wby10YWctcmVtb3ZlJyk7XG4gICAgdGhpcy5pbml0aWFsaXplVGFnUmVtb3ZlRWxlbWVudHModGFnUmVtb3ZlRWxlbWVudHMsIGluaXRpYWxJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIHNldFRhYkluZGV4KGVsZW1lbnQsIHRhYkluZGV4KSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgdGFiSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBcnJvd0xlZnQodGFnUmVtb3ZlRWxlbWVudHMsIGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgdGhpcy5zZXRUYWJJbmRleCh0YWdSZW1vdmVFbGVtZW50c1tpbmRleF0sIC0xKTtcbiAgICAgIHRhZ1JlbW92ZUVsZW1lbnRzW2luZGV4IC0gMV0uZm9jdXMoKTtcbiAgICAgIHRoaXMuc2V0VGFiSW5kZXgodGFnUmVtb3ZlRWxlbWVudHNbaW5kZXggLSAxXSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBcnJvd1JpZ2h0KHRhZ1JlbW92ZUVsZW1lbnRzLCBpbmRleCkge1xuICAgIGlmIChpbmRleCA8IHRhZ1JlbW92ZUVsZW1lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMuc2V0VGFiSW5kZXgodGFnUmVtb3ZlRWxlbWVudHNbaW5kZXhdLCAtMSk7XG4gICAgICB0YWdSZW1vdmVFbGVtZW50c1tpbmRleCArIDFdLmZvY3VzKCk7XG4gICAgICB0aGlzLnNldFRhYkluZGV4KHRhZ1JlbW92ZUVsZW1lbnRzW2luZGV4ICsgMV0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgdGFnUmVtb3ZlRWxlbWVudHMsIGluZGV4KSB7XG4gICAgY29uc3QgS0VZX1NQQUNFID0gJ1NwYWNlJztcbiAgICBjb25zdCBLRVlfQVJST1dfTEVGVCA9ICdBcnJvd0xlZnQnO1xuICAgIGNvbnN0IEtFWV9BUlJPV19SSUdIVCA9ICdBcnJvd1JpZ2h0JztcblxuICAgIGlmIChldmVudC5jb2RlID09PSBLRVlfU1BBQ0UpIHtcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XG4gICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnQua2V5ID09PSBLRVlfQVJST1dfTEVGVCkge1xuICAgICAgdGhpcy5oYW5kbGVBcnJvd0xlZnQodGFnUmVtb3ZlRWxlbWVudHMsIGluZGV4KTtcbiAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gS0VZX0FSUk9XX1JJR0hUKSB7XG4gICAgICB0aGlzLmhhbmRsZUFycm93UmlnaHQodGFnUmVtb3ZlRWxlbWVudHMsIGluZGV4KTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVUYWdSZW1vdmVFbGVtZW50cyh0YWdSZW1vdmVFbGVtZW50cywgaW5pdGlhbEluZGV4KSB7XG4gICAgdGFnUmVtb3ZlRWxlbWVudHMuZm9yRWFjaCgodGFnUmVtb3ZlRWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICAgIGlmIChpbmRleCA9PT0gaW5pdGlhbEluZGV4KSB7XG4gICAgICAgIHRoaXMuc2V0VGFiSW5kZXgodGFnUmVtb3ZlRWxlbWVudHNbaW5pdGlhbEluZGV4XSwgMCk7XG4gICAgICB9IGVsc2UgaWYgKHRhZ1JlbW92ZUVsZW1lbnRzLmxlbmd0aCA9PT0gaW5pdGlhbEluZGV4KSB7XG4gICAgICAgIHRoaXMuc2V0VGFiSW5kZXgodGFnUmVtb3ZlRWxlbWVudHNbaW5pdGlhbEluZGV4IC0gMV0sIDApO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5zZXRUYWJJbmRleCh0YWdSZW1vdmVFbGVtZW50LCAtMSk7XG4gICAgICB9XG5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgZnJvbUV2ZW50KHRhZ1JlbW92ZUVsZW1lbnQsICdrZXlkb3duJykuc3Vic2NyaWJlKChldmVudDogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICAgIHRoaXMuaGFuZGxlS2V5RG93bihldmVudCwgdGFnUmVtb3ZlRWxlbWVudHMsIGluZGV4KTtcbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGluaXRpYWxpemVMaXN0ZW5lcnMoKTogdm9pZCB7XG4gICAgdGhpcy5jbGlja091dExpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ2RvY3VtZW50JywgJ2NsaWNrJywgKGV2ZW50OiBNb3VzZUV2ZW50KSA9PiB7XG4gICAgICB0aGlzLndhc0NsaWNrZWRPblRvZ2dsZShldmVudCk7XG4gICAgfSk7XG5cbiAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyID0gdGhpcy5yZW5kZXJlci5saXN0ZW4oJ3dpbmRvdycsICdyZXNpemUnLCAoKSA9PiB7XG4gICAgICB0aGlzLnVwZGF0ZVZpc2libGVJdGVtcygpO1xuXG4gICAgICBpc01vYmlsZSgpID8gdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpIDogdGhpcy5jbG9zZSgpO1xuICAgIH0pO1xuXG4gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICB9XG5cbiAgcHJpdmF0ZSBvblNjcm9sbCA9ICgpOiB2b2lkID0+IHtcbiAgICB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCk7XG4gIH07XG5cbiAgcHJpdmF0ZSBvcGVuKCk6IHZvaWQge1xuICAgIHRoaXMuZHJvcGRvd25JY29uID0gJ3BvLWljb24tYXJyb3ctdXAnO1xuICAgIHRoaXMuZHJvcGRvd25PcGVuID0gdHJ1ZTtcblxuICAgIHRoaXMuZHJvcGRvd24uY29udHJvbFZpc2liaWxpdHkodHJ1ZSk7XG4gICAgdGhpcy5zZXRWaXNpYmxlT3B0aW9uc0Ryb3Bkb3duKHRoaXMub3B0aW9ucyk7XG4gICAgdGhpcy5pbml0aWFsaXplTGlzdGVuZXJzKCk7XG4gICAgdGhpcy5zY3JvbGxUb1NlbGVjdGVkT3B0aW9ucygpO1xuXG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgdGhpcy5zZXRQb3NpdGlvbkRyb3Bkb3duKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5jbGlja091dExpc3RlbmVyKSB7XG4gICAgICB0aGlzLmNsaWNrT3V0TGlzdGVuZXIoKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5yZXNpemVMaXN0ZW5lcikge1xuICAgICAgdGhpcy5yZXNpemVMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCdzY3JvbGwnLCB0aGlzLm9uU2Nyb2xsLCB0cnVlKTtcbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgcHJpdmF0ZSBzZXRQb3NpdGlvbkRyb3Bkb3duKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLnNldEVsZW1lbnRzKFxuICAgICAgdGhpcy5kcm9wZG93bi5jb250YWluZXIubmF0aXZlRWxlbWVudCxcbiAgICAgIHBvTXVsdGlzZWxlY3RDb250YWluZXJPZmZzZXQsXG4gICAgICB0aGlzLmlucHV0RWxlbWVudCxcbiAgICAgIFsndG9wJywgJ2JvdHRvbSddLFxuICAgICAgdHJ1ZVxuICAgICk7XG5cbiAgICB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCk7XG4gIH1cbn1cbiIsIjxwby1maWVsZC1jb250YWluZXJcbiAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICBbcC1sYWJlbF09XCJsYWJlbFwiXG4gIFtwLW9wdGlvbmFsXT1cIm9wdGlvbmFsXCJcbiAgW3AtcmVxdWlyZWRdPVwicmVxdWlyZWRcIlxuICBbcC1zaG93LXJlcXVpcmVkXT1cInNob3dSZXF1aXJlZFwiXG4+XG4gIDxkaXZcbiAgICBjZGtPdmVybGF5T3JpZ2luXG4gICAgI3RyaWdnZXI9XCJjZGtPdmVybGF5T3JpZ2luXCJcbiAgICBjbGFzcz1cInBvLWZpZWxkLWNvbnRhaW5lci1jb250ZW50XCJcbiAgICBbY2xhc3MucG8tbXVsdGlzZWxlY3Qtc2hvd109XCJkcm9wZG93bk9wZW5cIlxuICA+XG4gICAgPGRpdlxuICAgICAgI2lucHV0RWxlbWVudFxuICAgICAgW3RhYmluZGV4XT1cImRpc2FibGVkID8gLTEgOiAwXCJcbiAgICAgIFthdHRyLmRpc2FibGVkXT1cImRpc2FibGVkXCJcbiAgICAgIFthdHRyLmFyaWEtbGFiZWxdPVwibGFiZWxcIlxuICAgICAgY2xhc3M9XCJwby1pbnB1dC1pY29uLXJpZ2h0IHBvLW11bHRpc2VsZWN0LWlucHV0XCJcbiAgICAgIFtjbGFzcy5wby1tdWx0aXNlbGVjdC1pbnB1dC1hdXRvXT1cImF1dG9IZWlnaHRcIlxuICAgICAgW2NsYXNzLnBvLW11bHRpc2VsZWN0LWlucHV0LXN0YXRpY109XCIhYXV0b0hlaWdodFwiXG4gICAgICBbY2xhc3MucG8tbXVsdGlzZWxlY3QtaW5wdXQtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2NsYXNzLnBvLW11bHRpc2VsZWN0LWlucHV0LWZvbnRdPVwiIWRpc2FibGVkICYmICF2aXNpYmxlVGFncz8ubGVuZ3RoXCJcbiAgICAgIChrZXlkb3duKT1cIm9uS2V5RG93bigkZXZlbnQpXCJcbiAgICAgIChjbGljayk9XCJ0b2dnbGVEcm9wZG93blZpc2liaWxpdHkoKVwiXG4gICAgICAoYmx1cik9XCJvbkJsdXIoKVwiXG4gICAgPlxuICAgICAgPHNwYW4gKm5nSWY9XCIhZGlzYWJsZWQgJiYgIXZpc2libGVUYWdzPy5sZW5ndGhcIiBjbGFzcz1cInBvLW11bHRpc2VsZWN0LWlucHV0LXBsYWNlaG9sZGVyXCIgYXJpYS1oaWRkZW49XCJ0cnVlXCI+XG4gICAgICAgIHt7IHBsYWNlaG9sZGVyID8gcGxhY2Vob2xkZXIgOiBsaXRlcmFscy5zZWxlY3RJdGVtIH19XG4gICAgICA8L3NwYW4+XG5cbiAgICAgIDxwby10YWdcbiAgICAgICAgKm5nRm9yPVwibGV0IHRhZyBvZiB2aXNpYmxlVGFnczsgaW5kZXggYXMgaVwiXG4gICAgICAgIFtwLXZhbHVlXT1cInRhZ1tmaWVsZExhYmVsXVwiXG4gICAgICAgIFtwLWxpdGVyYWxzXT1cImkgKyAxID09PSB2aXNpYmxlVGFncy5sZW5ndGggJiYgaGFzTW9yZVRhZyA/IGxpdGVyYWxzVGFnIDogdW5kZWZpbmVkXCJcbiAgICAgICAgW3AtcmVtb3ZhYmxlXT1cInRydWVcIlxuICAgICAgICBbY2xhc3MucG8tY2xpY2thYmxlXT1cInRhZ1tmaWVsZFZhbHVlXSA9PT0gJycgJiYgIWRpc2FibGVkXCJcbiAgICAgICAgW3AtZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgICAocC1jbG9zZSk9XCJjbG9zZVRhZyh0YWdbZmllbGRWYWx1ZV0sICRldmVudClcIlxuICAgICAgPjwvcG8tdGFnPlxuXG4gICAgICA8ZGl2IGNsYXNzPVwicG8tZmllbGQtaWNvbi1jb250YWluZXItcmlnaHRcIj5cbiAgICAgICAgPHNwYW5cbiAgICAgICAgICAjaWNvbkVsZW1lbnRcbiAgICAgICAgICBjbGFzcz1cInBvLWljb24gcG8tZmllbGQtaWNvbiB7eyBkcm9wZG93bkljb24gfX0ge3sgZGlzYWJsZWQgPyAncG8taWNvbi1pbnB1dC1kaXNhYmxlZCcgOiAncG8taWNvbi1pbnB1dCcgfX1cIlxuICAgICAgICAgIFtuZ0NsYXNzXT1cImRpc2FibGVkID8gJ3BvLWZpZWxkLWljb24tZGlzYWJsZWQnIDogJydcIlxuICAgICAgICA+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cblxuICA8bmctY29udGFpbmVyICpuZ0lmPVwiYXBwZW5kQm94OyB0aGVuIGRyb3Bkb3duQ0RLOyBlbHNlIGRyb3Bkb3duRGVmYXVsdFwiPiA8L25nLWNvbnRhaW5lcj5cblxuICA8bmctdGVtcGxhdGUgI2Ryb3Bkb3duRGVmYXVsdD5cbiAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25MaXN0Ym94XCI+IDwvbmctY29udGFpbmVyPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25DREs+XG4gICAgPG5nLXRlbXBsYXRlIGNka0Nvbm5lY3RlZE92ZXJsYXkgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcmlnaW5dPVwidHJpZ2dlclwiIFtjZGtDb25uZWN0ZWRPdmVybGF5T3Blbl09XCJ0cnVlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ1RlbXBsYXRlT3V0bGV0PVwiZHJvcGRvd25MaXN0Ym94XCI+PC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9uZy10ZW1wbGF0ZT5cblxuICA8cG8tZmllbGQtY29udGFpbmVyLWJvdHRvbSBbcC1oZWxwXT1cImhlbHBcIiBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiPjwvcG8tZmllbGQtY29udGFpbmVyLWJvdHRvbT5cbjwvcG8tZmllbGQtY29udGFpbmVyPlxuXG48bmctdGVtcGxhdGUgI2Ryb3Bkb3duTGlzdGJveD5cbiAgPHBvLW11bHRpc2VsZWN0LWRyb3Bkb3duXG4gICAgI2Ryb3Bkb3duRWxlbWVudFxuICAgIFtwLXNlYXJjaGluZ109XCJpc1NlcnZlclNlYXJjaGluZ1wiXG4gICAgW3AtaGlkZS1zZWFyY2hdPVwiaGlkZVNlYXJjaFwiXG4gICAgW3AtaGlkZS1zZWxlY3QtYWxsXT1cImhpZGVTZWxlY3RBbGxcIlxuICAgIFtwLWxpdGVyYWxzXT1cImxpdGVyYWxzXCJcbiAgICBbcC1vcHRpb25zXT1cIm9wdGlvbnNcIlxuICAgIFtwLXZpc2libGUtb3B0aW9uc109XCJ2aXNpYmxlT3B0aW9uc0Ryb3Bkb3duXCJcbiAgICBbcC1zZWxlY3RlZC1vcHRpb25zXT1cInNlbGVjdGVkT3B0aW9uc1wiXG4gICAgW3AtcGxhY2Vob2xkZXItc2VhcmNoXT1cInBsYWNlaG9sZGVyU2VhcmNoXCJcbiAgICBbcC1maWVsZC12YWx1ZV09XCJmaWVsZFZhbHVlXCJcbiAgICBbcC1maWVsZC1sYWJlbF09XCJmaWVsZExhYmVsXCJcbiAgICBbcC1tdWx0aXNlbGVjdC10ZW1wbGF0ZV09XCJtdWx0aXNlbGVjdE9wdGlvblRlbXBsYXRlXCJcbiAgICAocC1jaGFuZ2UpPVwiY2hhbmdlSXRlbXMoJGV2ZW50KVwiXG4gICAgKHAtY2hhbmdlLXNlYXJjaCk9XCJjaGFuZ2VTZWFyY2goJGV2ZW50KVwiXG4gICAgKHAtY2xvc2UtZHJvcGRvd24pPVwiY29udHJvbERyb3Bkb3duVmlzaWJpbGl0eShmYWxzZSlcIlxuICAgIChrZXlkb3duKT1cIm9uS2V5RG93bkRyb3Bkb3duKCRldmVudCwgMClcIlxuICA+XG4gIDwvcG8tbXVsdGlzZWxlY3QtZHJvcGRvd24+XG48L25nLXRlbXBsYXRlPlxuIl19
676
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG8tbXVsdGlzZWxlY3QuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvdWkvc3JjL2xpYi9jb21wb25lbnRzL3BvLWZpZWxkL3BvLW11bHRpc2VsZWN0L3BvLW11bHRpc2VsZWN0LmNvbXBvbmVudC50cyIsIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL3VpL3NyYy9saWIvY29tcG9uZW50cy9wby1maWVsZC9wby1tdWx0aXNlbGVjdC9wby1tdWx0aXNlbGVjdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsdUJBQXVCLEVBRXZCLFNBQVMsRUFDVCxZQUFZLEVBRVosVUFBVSxFQUtWLFNBQVMsRUFDVCxVQUFVLEVBQ1gsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWxFLE9BQU8sRUFBYyxZQUFZLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMvRCxPQUFPLEVBQUUsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBR2pELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxtQ0FBbUMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxxRUFBcUUsQ0FBQztBQUMvRyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFakQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLG9EQUFvRCxDQUFDO0FBQ3JGLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxvQ0FBb0MsRUFBRSxNQUFNLDJFQUEyRSxDQUFDOzs7Ozs7Ozs7SUNEM0gs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RyxpQkFBcUI7WUFFckIsNEhBb0JjOzs7O1lBdEZaLHlDQUF1QixzQkFBQSw0QkFBQSw0QkFBQSxxQ0FBQTtZQVVyQixlQUEwQztZQUExQyx1REFBMEM7WUFReEMsZUFBOEM7WUFBOUMsMkRBQThDLGdEQUFBLCtDQUFBLDBHQUFBO1lBSjlDLGdEQUE4QjtZQUM5Qix3Q0FBMEIseUJBQUE7WUFXbkIsZUFBdUM7WUFBdkMsa0dBQXVDO1lBSzVCLGVBQWdCO1lBQWhCLHlDQUFnQjtZQVk5QixlQUE0RztZQUE1Ryx5SUFBNEc7WUFDNUcsc0VBQW9EO1lBTzdDLGVBQWlCO1lBQWpCLG9DQUFpQixpQkFBQSxpQkFBQTtZQVlMLGVBQWU7WUFBZixpQ0FBZSw0QkFBQTs7O3VGRHFEL0Isc0JBQXNCO2NBTmxDLFNBQVM7MkJBQ0UsZ0JBQWdCLG1CQUVULHVCQUF1QixDQUFDLE1BQU0sYUFDL0MsU0FBUztxT0FNVCx5QkFBeUI7a0JBRHhCLFlBQVk7bUJBQUMsb0NBQW9DLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBR2hCLGVBQWU7a0JBQWxFLFNBQVM7bUJBQUMsaUJBQWlCLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFO1lBQ3BCLFFBQVE7a0JBQXJDLFNBQVM7bUJBQUMsaUJBQWlCO1lBQ2tDLFdBQVc7a0JBQXhFLFNBQVM7bUJBQUMsYUFBYSxFQUFFLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFO1lBQ0csWUFBWTtrQkFBMUUsU0FBUzttQkFBQyxjQUFjLEVBQUUsRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgQ29udGVudENoaWxkLFxuICBEb0NoZWNrLFxuICBFbGVtZW50UmVmLFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgUmVuZGVyZXIyLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBWaWV3Q2hpbGQsXG4gIGZvcndhcmRSZWZcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOR19WQUxJREFUT1JTLCBOR19WQUxVRV9BQ0NFU1NPUiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcblxuaW1wb3J0IHsgT2JzZXJ2YWJsZSwgU3Vic2NyaXB0aW9uLCBmcm9tRXZlbnQsIG9mIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmltcG9ydCB7IFBvTGFuZ3VhZ2VTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vLi4vc2VydmljZXMvcG8tbGFuZ3VhZ2UvcG8tbGFuZ3VhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBQb0tleUNvZGVFbnVtIH0gZnJvbSAnLi8uLi8uLi8uLi9lbnVtcy9wby1rZXktY29kZS5lbnVtJztcbmltcG9ydCB7IFBvQ29udHJvbFBvc2l0aW9uU2VydmljZSB9IGZyb20gJy4vLi4vLi4vLi4vc2VydmljZXMvcG8tY29udHJvbC1wb3NpdGlvbi9wby1jb250cm9sLXBvc2l0aW9uLnNlcnZpY2UnO1xuaW1wb3J0IHsgaXNNb2JpbGUgfSBmcm9tICcuLy4uLy4uLy4uL3V0aWxzL3V0aWwnO1xuXG5pbXBvcnQgeyBwb0xvY2FsZURlZmF1bHQgfSBmcm9tICcuLi8uLi8uLi9zZXJ2aWNlcy9wby1sYW5ndWFnZS9wby1sYW5ndWFnZS5jb25zdGFudCc7XG5pbXBvcnQgeyBQb011bHRpc2VsZWN0QmFzZUNvbXBvbmVudCB9IGZyb20gJy4vcG8tbXVsdGlzZWxlY3QtYmFzZS5jb21wb25lbnQnO1xuaW1wb3J0IHsgUG9NdWx0aXNlbGVjdEZpbHRlclNlcnZpY2UgfSBmcm9tICcuL3BvLW11bHRpc2VsZWN0LWZpbHRlci5zZXJ2aWNlJztcbmltcG9ydCB7IFBvTXVsdGlzZWxlY3RPcHRpb25UZW1wbGF0ZURpcmVjdGl2ZSB9IGZyb20gJy4vcG8tbXVsdGlzZWxlY3Qtb3B0aW9uLXRlbXBsYXRlL3BvLW11bHRpc2VsZWN0LW9wdGlvbi10ZW1wbGF0ZS5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgUG9NdWx0aXNlbGVjdE9wdGlvbiB9IGZyb20gJy4vcG8tbXVsdGlzZWxlY3Qtb3B0aW9uLmludGVyZmFjZSc7XG5cbmNvbnN0IHBvTXVsdGlzZWxlY3RDb250YWluZXJPZmZzZXQgPSA4O1xuY29uc3QgcG9NdWx0aXNlbGVjdENvbnRhaW5lclBvc2l0aW9uRGVmYXVsdCA9ICdib3R0b20nO1xuY29uc3QgcG9NdWx0aXNlbGVjdElucHV0UGFkZGluZ1JpZ2h0ID0gNTI7XG5jb25zdCBwb011bHRpc2VsZWN0U3BhY2VCZXR3ZWVuVGFncyA9IDg7XG5cbmNvbnN0IGxpdGVyYWxzVGFnUmVtb3ZlT3RoZXJzID0ge1xuICBwdDoge1xuICAgIHJlbW92ZTogJ1JlbW92ZXIgdG9kb3Mgb3MgaXRlbnMgc2VsZWNpb25hZG9zJ1xuICB9LFxuICBydToge1xuICAgIHJlbW92ZTogJ9Cj0LTQsNC70LjRgtGMINCy0YHQtSDQstGL0LHRgNCw0L3QvdGL0LUg0Y3Qu9C10LzQtdC90YLRiydcbiAgfSxcbiAgZXM6IHtcbiAgICByZW1vdmU6ICdFbGltaW5hciB0b2RvcyBsb3MgZWxlbWVudG9zIHNlbGVjY2lvbmFkb3MnXG4gIH0sXG4gIGVuOiB7XG4gICAgcmVtb3ZlOiAnQ2xlYXIgYWxsIHNlbGVjdGVkIGl0ZW1zJ1xuICB9XG59O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAqL1xuY29uc3QgcHJvdmlkZXJzID0gW1xuICBQb011bHRpc2VsZWN0RmlsdGVyU2VydmljZSxcbiAgUG9Db250cm9sUG9zaXRpb25TZXJ2aWNlLFxuICB7XG4gICAgcHJvdmlkZTogTkdfVkFMVUVfQUNDRVNTT1IsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9NdWx0aXNlbGVjdENvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfSxcbiAge1xuICAgIHByb3ZpZGU6IE5HX1ZBTElEQVRPUlMsXG4gICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lXG4gICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gUG9NdWx0aXNlbGVjdENvbXBvbmVudCksXG4gICAgbXVsdGk6IHRydWVcbiAgfVxuXTtcblxuLyoqXG4gKiBAZG9jc0V4dGVuZHMgUG9NdWx0aXNlbGVjdEJhc2VDb21wb25lbnRcbiAqXG4gKiBAZXhhbXBsZVxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tdWx0aXNlbGVjdC1iYXNpY1wiIHRpdGxlPVwiUE8gTXVsdGlzZWxlY3QgQmFzaWNcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tdWx0aXNlbGVjdC1iYXNpYy9zYW1wbGUtcG8tbXVsdGlzZWxlY3QtYmFzaWMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LWJhc2ljL3NhbXBsZS1wby1tdWx0aXNlbGVjdC1iYXNpYy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tdWx0aXNlbGVjdC1sYWJzXCIgdGl0bGU9XCJQTyBNdWx0aXNlbGVjdCBMYWJzXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbXVsdGlzZWxlY3QtbGFicy9zYW1wbGUtcG8tbXVsdGlzZWxlY3QtbGFicy5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbXVsdGlzZWxlY3QtbGFicy9zYW1wbGUtcG8tbXVsdGlzZWxlY3QtbGFicy5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tdWx0aXNlbGVjdC12YWNhdGlvblwiIHRpdGxlPVwiUE8gTXVsdGlzZWxlY3QgLSBWYWNhdGlvblwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LXZhY2F0aW9uL3NhbXBsZS1wby1tdWx0aXNlbGVjdC12YWNhdGlvbi5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbXVsdGlzZWxlY3QtdmFjYXRpb24vc2FtcGxlLXBvLW11bHRpc2VsZWN0LXZhY2F0aW9uLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLW11bHRpc2VsZWN0LXZhY2F0aW9uLXJlYWN0aXZlLWZvcm1cIiB0aXRsZT1cIlBPIE11bHRpc2VsZWN0IC0gVmFjYXRpb24gUmVhY3RpdmUgRm9ybVwiPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LXZhY2F0aW9uLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLW11bHRpc2VsZWN0LXZhY2F0aW9uLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LXZhY2F0aW9uLXJlYWN0aXZlLWZvcm0vc2FtcGxlLXBvLW11bHRpc2VsZWN0LXZhY2F0aW9uLXJlYWN0aXZlLWZvcm0uY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKiA8ZXhhbXBsZSBuYW1lPVwicG8tbXVsdGlzZWxlY3QtdGVtcGxhdGVcIiB0aXRsZT1cIlBPIE11bHRpc2VsZWN0IC0gVGVtcGxhdGVcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tdWx0aXNlbGVjdC10ZW1wbGF0ZS9zYW1wbGUtcG8tbXVsdGlzZWxlY3QtdGVtcGxhdGUuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LXRlbXBsYXRlL3NhbXBsZS1wby1tdWx0aXNlbGVjdC10ZW1wbGF0ZS5jb21wb25lbnQudHNcIj4gPC9maWxlPlxuICogPC9leGFtcGxlPlxuICpcbiAqIDxleGFtcGxlIG5hbWU9XCJwby1tdWx0aXNlbGVjdC1oZXJvZXNcIiB0aXRsZT1cIlBPIE11bHRpc2VsZWN0IC0gSGVyb2VzIC0gdXNpbmcgQVBJXCI+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbXVsdGlzZWxlY3QtaGVyb2VzL3NhbXBsZS1wby1tdWx0aXNlbGVjdC1oZXJvZXMuY29tcG9uZW50Lmh0bWxcIj4gPC9maWxlPlxuICogICA8ZmlsZSBuYW1lPVwic2FtcGxlLXBvLW11bHRpc2VsZWN0LWhlcm9lcy9zYW1wbGUtcG8tbXVsdGlzZWxlY3QtaGVyb2VzLmNvbXBvbmVudC50c1wiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbXVsdGlzZWxlY3QtaGVyb2VzL3NhbXBsZS1wby1tdWx0aXNlbGVjdC1oZXJvZXMuc2VydmljZS50c1wiPiA8L2ZpbGU+XG4gKiA8L2V4YW1wbGU+XG4gKlxuICogPGV4YW1wbGUgbmFtZT1cInBvLW11bHRpc2VsZWN0LWFueS1hcnJheVwiIHRpdGxlPVwiUE8gTXVsdGlzZWxlY3QgLSBBcnJheSBBbnlcIj5cbiAqICAgPGZpbGUgbmFtZT1cInNhbXBsZS1wby1tdWx0aXNlbGVjdC1hbnktYXJyYXkvc2FtcGxlLXBvLW11bHRpc2VsZWN0LWFueS1hcnJheS5jb21wb25lbnQuaHRtbFwiPiA8L2ZpbGU+XG4gKiAgIDxmaWxlIG5hbWU9XCJzYW1wbGUtcG8tbXVsdGlzZWxlY3QtYW55LWFycmF5L3NhbXBsZS1wby1tdWx0aXNlbGVjdC1hbnktYXJyYXkuY29tcG9uZW50LnRzXCI+IDwvZmlsZT5cbiAqIDwvZXhhbXBsZT5cbiAqXG4gKi9cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ3BvLW11bHRpc2VsZWN0JyxcbiAgdGVtcGxhdGVVcmw6ICcuL3BvLW11bHRpc2VsZWN0LmNvbXBvbmVudC5odG1sJyxcbiAgY2hhbmdlRGV0ZWN0aW9uOiBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneS5PblB1c2gsXG4gIHByb3ZpZGVyc1xufSlcbmV4cG9ydCBjbGFzcyBQb011bHRpc2VsZWN0Q29tcG9uZW50XG4gIGV4dGVuZHMgUG9NdWx0aXNlbGVjdEJhc2VDb21wb25lbnRcbiAgaW1wbGVtZW50cyBBZnRlclZpZXdJbml0LCBEb0NoZWNrLCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIEBDb250ZW50Q2hpbGQoUG9NdWx0aXNlbGVjdE9wdGlvblRlbXBsYXRlRGlyZWN0aXZlLCB7IHN0YXRpYzogdHJ1ZSB9KVxuICBtdWx0aXNlbGVjdE9wdGlvblRlbXBsYXRlOiBQb011bHRpc2VsZWN0T3B0aW9uVGVtcGxhdGVEaXJlY3RpdmU7XG5cbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25FbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGRyb3Bkb3duRWxlbWVudDogRWxlbWVudFJlZjtcbiAgQFZpZXdDaGlsZCgnZHJvcGRvd25FbGVtZW50JykgZHJvcGRvd247XG4gIEBWaWV3Q2hpbGQoJ2ljb25FbGVtZW50JywgeyByZWFkOiBFbGVtZW50UmVmLCBzdGF0aWM6IHRydWUgfSkgaWNvbkVsZW1lbnQ6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ2lucHV0RWxlbWVudCcsIHsgcmVhZDogRWxlbWVudFJlZiwgc3RhdGljOiB0cnVlIH0pIGlucHV0RWxlbWVudDogRWxlbWVudFJlZjtcblxuICBsaXRlcmFsc1RhZztcbiAgZHJvcGRvd25JY29uOiBzdHJpbmcgPSAncG8taWNvbi1hcnJvdy1kb3duJztcbiAgZHJvcGRvd25PcGVuOiBib29sZWFuID0gZmFsc2U7XG4gIGluaXRpYWxpemVkID0gZmFsc2U7XG4gIGhhc01vcmVUYWc6IGJvb2xlYW47XG4gIHRpbWVvdXRSZXNpemU7XG4gIHZpc2libGVFbGVtZW50ID0gZmFsc2U7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gPSBuZXcgU3Vic2NyaXB0aW9uKCk7XG4gIHByaXZhdGUgZW50ZXJDbG9zZVRhZyA9IGZhbHNlO1xuICBwcml2YXRlIGluaXRDYWxjdWxhdGVJdGVtcyA9IHRydWU7XG4gIHByaXZhdGUgaXNDYWxjdWxhdGVWaXNpYmxlSXRlbXM6IGJvb2xlYW4gPSB0cnVlO1xuICBwcml2YXRlIGNhY2hlT3B0aW9uczogQXJyYXk8UG9NdWx0aXNlbGVjdE9wdGlvbiB8IGFueT47XG4gIHByaXZhdGUgZm9jdXNPblRhZyA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgcmVuZGVyZXI6IFJlbmRlcmVyMixcbiAgICBwcml2YXRlIGNoYW5nZURldGVjdG9yOiBDaGFuZ2VEZXRlY3RvclJlZixcbiAgICBwcml2YXRlIGVsOiBFbGVtZW50UmVmLFxuICAgIHByaXZhdGUgY29udHJvbFBvc2l0aW9uOiBQb0NvbnRyb2xQb3NpdGlvblNlcnZpY2UsXG4gICAgcHVibGljIGRlZmF1bHRTZXJ2aWNlOiBQb011bHRpc2VsZWN0RmlsdGVyU2VydmljZSxcbiAgICBsYW5ndWFnZVNlcnZpY2U6IFBvTGFuZ3VhZ2VTZXJ2aWNlXG4gICkge1xuICAgIHN1cGVyKGxhbmd1YWdlU2VydmljZSk7XG4gICAgY29uc3QgbGFuZ3VhZ2UgPSBsYW5ndWFnZVNlcnZpY2UuZ2V0U2hvcnRMYW5ndWFnZSgpO1xuICAgIHRoaXMubGl0ZXJhbHNUYWcgPSB7XG4gICAgICAuLi5saXRlcmFsc1RhZ1JlbW92ZU90aGVyc1twb0xvY2FsZURlZmF1bHRdLFxuICAgICAgLi4ubGl0ZXJhbHNUYWdSZW1vdmVPdGhlcnNbbGFuZ3VhZ2VdXG4gICAgfTtcbiAgfVxuXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcbiAgICBpZiAodGhpcy5hdXRvRm9jdXMpIHtcbiAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICB9XG4gICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgaWYgKHRoaXMuZmlsdGVyU2VydmljZSAmJiAoY2hhbmdlcy5maWx0ZXJTZXJ2aWNlIHx8IGNoYW5nZXMuZmllbGRWYWx1ZSB8fCBjaGFuZ2VzLmZpZWxkTGFiZWwpKSB7XG4gICAgICB0aGlzLnNldFNlcnZpY2UodGhpcy5maWx0ZXJTZXJ2aWNlKTtcbiAgICB9XG4gIH1cblxuICBuZ0RvQ2hlY2soKSB7XG4gICAgY29uc3QgaW5wdXRXaWR0aCA9IHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQub2Zmc2V0V2lkdGg7XG4gICAgLy8gUGVybWl0ZSBxdWUgYXMgdGFncyBzZWphbSBjYWxjdWxhZGFzIG5hIHByaW1laXJhIHZleiBxdWUgbyBjb21wb25lbnRlIHRvcm5hLXNlIHZpc8OtdmVsLFxuICAgIC8vIGV2aXRhbmRvIGNvbSBpc3NvLCBwcm9ibGVtYXMgY29tIFRhYnMgb3UgRGl2cyBxdWUgaW5pY2llbSBlc2NvbmRpZGFzLlxuICAgIGlmICgoaW5wdXRXaWR0aCAmJiAhdGhpcy52aXNpYmxlRWxlbWVudCAmJiB0aGlzLmluaXRpYWxpemVkKSB8fCAoaW5wdXRXaWR0aCAmJiB0aGlzLmlzQ2FsY3VsYXRlVmlzaWJsZUl0ZW1zKSkge1xuICAgICAgdGhpcy5kZWJvdW5jZVJlc2l6ZSgpO1xuICAgICAgdGhpcy52aXNpYmxlRWxlbWVudCA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5yZW1vdmVMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLmdldE9iamVjdHNCeVZhbHVlc1N1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICB0aGlzLmZpbHRlclN1YmplY3Q/LnVuc3Vic2NyaWJlKCk7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW7Dp8OjbyBxdWUgYXRyaWJ1aSBmb2NvIGFvIGNvbXBvbmVudGUuXG4gICAqXG4gICAqIFBhcmEgdXRpbGl6w6EtbGEgw6kgbmVjZXNzw6FyaW8gdGVyIGEgaW5zdMOibmNpYSBkbyBjb21wb25lbnRlIG5vIERPTSwgcG9kZW5kbyBzZXIgdXRpbGl6YWRvIG8gVmlld0NoaWxkIGRhIHNlZ3VpbnRlIGZvcm1hOlxuICAgKlxuICAgKiBgYGBcbiAgICogaW1wb3J0IHsgUG9NdWx0aXNlbGVjdENvbXBvbmVudCB9IGZyb20gJ0Bwby11aS9uZy1jb21wb25lbnRzJztcbiAgICpcbiAgICogLi4uXG4gICAqXG4gICAqIEBWaWV3Q2hpbGQoUG9NdWx0aXNlbGVjdENvbXBvbmVudCwgeyBzdGF0aWM6IHRydWUgfSkgbXVsdGlzZWxlY3Q6IFBvTXVsdGlzZWxlY3RDb21wb25lbnQ7XG4gICAqXG4gICAqIGZvY3VzTXVsdGlzZWxlY3QoKSB7XG4gICAqICAgdGhpcy5tdWx0aXNlbGVjdC5mb2N1cygpO1xuICAgKiB9XG4gICAqIGBgYFxuICAgKi9cbiAgZm9jdXMoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmRpc2FibGVkKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmZvY3VzKCk7XG4gICAgfVxuICB9XG5cbiAgZ2V0SW5wdXRXaWR0aCgpIHtcbiAgICByZXR1cm4gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoJy5wby1tdWx0aXNlbGVjdC1pbnB1dCcpLm9mZnNldFdpZHRoIC0gcG9NdWx0aXNlbGVjdElucHV0UGFkZGluZ1JpZ2h0O1xuICB9XG5cbiAgZ2V0VGFnc1dpZHRoKCkge1xuICAgIGNvbnN0IHRhZ3MgPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgncG8tdGFnJyk7XG4gICAgcmV0dXJuIEFycmF5LmZyb20odGFncykubWFwKHRhZyA9PiB0YWdbJ29mZnNldFdpZHRoJ10pO1xuICB9XG5cbiAgY2FsY3VsYXRlVmlzaWJsZUl0ZW1zKCkge1xuICAgIHRoaXMuaGFzTW9yZVRhZyA9IGZhbHNlO1xuICAgIGNvbnN0IHRhZ3NXaWR0aCA9IHRoaXMuZ2V0VGFnc1dpZHRoKCk7XG4gICAgY29uc3QgaW5wdXRXaWR0aCA9IHRoaXMuZ2V0SW5wdXRXaWR0aCgpO1xuICAgIGNvbnN0IGV4dHJhVGFnU2l6ZSA9IDYzO1xuICAgIGNvbnN0IHRhZ3NWaXNpYmxlID0gdGFnc1dpZHRoWzBdO1xuXG4gICAgdGhpcy52aXNpYmxlVGFncyA9IFtdO1xuXG4gICAgaWYgKGlucHV0V2lkdGggPiAwKSB7XG4gICAgICBsZXQgc3VtID0gMDtcbiAgICAgIGxldCBpID0gMDtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCB0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGg7IGkrKykge1xuICAgICAgICBzdW0gKz0gdGFnc1dpZHRoW2ldICsgcG9NdWx0aXNlbGVjdFNwYWNlQmV0d2VlblRhZ3M7XG4gICAgICAgIHRoaXMudmlzaWJsZVRhZ3MucHVzaCh0aGlzLnNlbGVjdGVkT3B0aW9uc1tpXSk7XG5cbiAgICAgICAgaWYgKHN1bSA+IGlucHV0V2lkdGgpIHtcbiAgICAgICAgICBzdW0gLT0gdGFnc1dpZHRoW2ldO1xuICAgICAgICAgIHRoaXMuaXNDYWxjdWxhdGVWaXNpYmxlSXRlbXMgPSBmYWxzZTtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgfVxuICAgICAgfVxuXG4gICAgICBpZiAodGFnc1Zpc2libGUgfHwgIXRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCkge1xuICAgICAgICBpZiAoaSA9PT0gdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICAgICAgdGhpcy5pc0NhbGN1bGF0ZVZpc2libGVJdGVtcyA9IGZhbHNlO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuaGFzTW9yZVRhZyA9IHRydWU7XG4gICAgICAgIGlmIChzdW0gKyBleHRyYVRhZ1NpemUgPiBpbnB1dFdpZHRoKSB7XG4gICAgICAgICAgdGhpcy52aXNpYmxlVGFncy5zcGxpY2UoLTIsIDIpO1xuICAgICAgICAgIGNvbnN0IGxhYmVsID0gJysnICsgKHRoaXMuc2VsZWN0ZWRPcHRpb25zLmxlbmd0aCArIDEgLSBpKS50b1N0cmluZygpO1xuICAgICAgICAgIHRoaXMudmlzaWJsZVRhZ3MucHVzaCh7IFt0aGlzLmZpZWxkVmFsdWVdOiAnJywgW3RoaXMuZmllbGRMYWJlbF06IGxhYmVsIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHRoaXMudmlzaWJsZVRhZ3Muc3BsaWNlKC0xLCAxKTtcbiAgICAgICAgICBjb25zdCBsYWJlbCA9ICcrJyArICh0aGlzLnNlbGVjdGVkT3B0aW9ucy5sZW5ndGggLSBpKS50b1N0cmluZygpO1xuICAgICAgICAgIHRoaXMudmlzaWJsZVRhZ3MucHVzaCh7IFt0aGlzLmZpZWxkVmFsdWVdOiAnJywgW3RoaXMuZmllbGRMYWJlbF06IGxhYmVsIH0pO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAodGhpcy5pbml0Q2FsY3VsYXRlSXRlbXMpIHtcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVLZXlib2FyZE5hdmlnYXRpb25UYWcoKTtcbiAgICAgICAgfSwgMzAwKTtcbiAgICAgIH1cbiAgICAgIHRoaXMuaW5pdENhbGN1bGF0ZUl0ZW1zID0gZmFsc2U7XG4gICAgfVxuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBjaGFuZ2VJdGVtcyhjaGFuZ2VkSXRlbXMpIHtcbiAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkT3B0aW9ucyhjaGFuZ2VkSXRlbXMpO1xuICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRPcHRpb25zKTtcblxuICAgIGlmICh0aGlzLmF1dG9IZWlnaHQgJiYgdGhpcy5kcm9wZG93bk9wZW4pIHtcbiAgICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IuZGV0ZWN0Q2hhbmdlcygpO1xuICAgICAgdGhpcy5hZGp1c3RDb250YWluZXJQb3NpdGlvbigpO1xuICAgIH1cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlS2V5Ym9hcmROYXZpZ2F0aW9uVGFnKCk7XG4gICAgfSwgMzAwKTtcbiAgfVxuXG4gIHVwZGF0ZVZpc2libGVJdGVtcygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMpIHtcbiAgICAgIHRoaXMudmlzaWJsZVRhZ3MgPSBbXS5jb25jYXQodGhpcy5zZWxlY3RlZE9wdGlvbnMpO1xuICAgIH1cblxuICAgIHRoaXMuZGVib3VuY2VSZXNpemUoKTtcblxuICAgIC8vIHF1YW5kbyBlc3RpdmVyIGRlbnRybyBkZSBtb2RhbFxuICAgIGlmICghdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5vZmZzZXRXaWR0aCkge1xuICAgICAgdGhpcy5pc0NhbGN1bGF0ZVZpc2libGVJdGVtcyA9IHRydWU7XG4gICAgfVxuICB9XG5cbiAgZGVib3VuY2VSZXNpemUoKSB7XG4gICAgaWYgKCF0aGlzLmF1dG9IZWlnaHQpIHtcbiAgICAgIGNsZWFyVGltZW91dCh0aGlzLnRpbWVvdXRSZXNpemUpO1xuICAgICAgdGhpcy50aW1lb3V0UmVzaXplID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHRoaXMuY2FsY3VsYXRlVmlzaWJsZUl0ZW1zKCk7XG4gICAgICB9LCAyMDApO1xuICAgIH1cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLm1hcmtGb3JDaGVjaygpO1xuICB9XG5cbiAgb25CbHVyKCkge1xuICAgIGlmIChcbiAgICAgIHR5cGVvZiB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmdldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcpID09PSAnc3RyaW5nJyAmJlxuICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2FyaWEtbGFiZWwnKS5pbmNsdWRlcygnVW5zZWxlY3RlZCcpXG4gICAgKSB7XG4gICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIHRoaXMubGFiZWwgPyB0aGlzLmxhYmVsIDogJycpO1xuICAgIH1cbiAgICB0aGlzLm9uTW9kZWxUb3VjaGVkPy4oKTtcbiAgfVxuXG4gIG9uS2V5RG93bihldmVudD86IGFueSkge1xuICAgIGlmIChldmVudC5zaGlmdEtleSAmJiBldmVudC5rZXlDb2RlID09PSBQb0tleUNvZGVFbnVtLnRhYiAmJiAhdGhpcy5mb2N1c09uVGFnKSB7XG4gICAgICB0aGlzLmNvbnRyb2xEcm9wZG93blZpc2liaWxpdHkoZmFsc2UpO1xuICAgIH1cbiAgICB0aGlzLmZvY3VzT25UYWcgPSBmYWxzZTtcblxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBQb0tleUNvZGVFbnVtLnRhYikge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBQb0tleUNvZGVFbnVtLmVzYykge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuY29udHJvbERyb3Bkb3duVmlzaWJpbGl0eShmYWxzZSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFBvS2V5Q29kZUVudW0uYXJyb3dEb3duICYmIHRoaXMudmlzaWJsZVRhZ3MubGVuZ3RoID4gMCkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIHRoaXMuY29udHJvbERyb3Bkb3duVmlzaWJpbGl0eSh0cnVlKTtcbiAgICAgIHRoaXMuZHJvcGRvd24/Lmxpc3Rib3g/LnNldEZvY3VzKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgaWYgKGV2ZW50LmtleUNvZGUgPT09IFBvS2V5Q29kZUVudW0uZW50ZXIgJiYgIXRoaXMuZW50ZXJDbG9zZVRhZykge1xuICAgICAgaWYgKHRoaXMudmlzaWJsZVRhZ3MubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIHRoaXMudG9nZ2xlRHJvcGRvd25WaXNpYmlsaXR5KCk7XG4gICAgICAgIHRoaXMuZm9jdXMoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgICAgdGhpcy50b2dnbGVEcm9wZG93blZpc2liaWxpdHkoKTtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChldmVudC5rZXlDb2RlID09PSBQb0tleUNvZGVFbnVtLnNwYWNlKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy50b2dnbGVEcm9wZG93blZpc2liaWxpdHkoKTtcbiAgICB9XG4gICAgdGhpcy5lbnRlckNsb3NlVGFnID0gZmFsc2U7XG4gIH1cblxuICB0b2dnbGVEcm9wZG93blZpc2liaWxpdHkoKSB7XG4gICAgaWYgKHRoaXMuZGlzYWJsZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5maWx0ZXJTZXJ2aWNlKSB7XG4gICAgICB0aGlzLmFwcGx5RmlsdGVySW5GaXJzdENsaWNrKCk7XG4gICAgfVxuXG4gICAgdGhpcy5jb250cm9sRHJvcGRvd25WaXNpYmlsaXR5KCF0aGlzLmRyb3Bkb3duT3Blbik7XG4gIH1cblxuICBvbktleURvd25Ecm9wZG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgaW5kZXg6IG51bWJlcikge1xuICAgIGlmIChldmVudC5rZXkgPT09ICdFc2NhcGUnKSB7XG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xuICAgICAgdGhpcy5jb250cm9sRHJvcGRvd25WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50Lm5hdGl2ZUVsZW1lbnQuZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBvcGVuRHJvcGRvd24odG9PcGVuKSB7XG4gICAgaWYgKHRvT3BlbiAmJiAhdGhpcy5kaXNhYmxlZCkge1xuICAgICAgdGhpcy5jb250cm9sRHJvcGRvd25WaXNpYmlsaXR5KHRydWUpO1xuICAgIH1cbiAgfVxuXG4gIGNvbnRyb2xEcm9wZG93blZpc2liaWxpdHkodG9PcGVuOiBib29sZWFuKSB7XG4gICAgdG9PcGVuID8gdGhpcy5vcGVuKCkgOiB0aGlzLmNsb3NlKCk7XG4gIH1cblxuICBzY3JvbGxUb1NlbGVjdGVkT3B0aW9ucygpIHtcbiAgICBpZiAodGhpcy5zZWxlY3RlZE9wdGlvbnMgJiYgdGhpcy5zZWxlY3RlZE9wdGlvbnMubGVuZ3RoKSB7XG4gICAgICBjb25zdCBpbmRleCA9IHRoaXMub3B0aW9ucy5maW5kSW5kZXgoXG4gICAgICAgIG9wdGlvbiA9PiBvcHRpb25bdGhpcy5maWVsZFZhbHVlXSA9PT0gdGhpcy5zZWxlY3RlZE9wdGlvbnNbMF1bdGhpcy5maWVsZFZhbHVlXVxuICAgICAgKTtcbiAgICAgIHRoaXMuZHJvcGRvd24uc2Nyb2xsVG8oaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHNldFZpc2libGVPcHRpb25zRHJvcGRvd24ob3B0aW9ucykge1xuICAgIHRoaXMudmlzaWJsZU9wdGlvbnNEcm9wZG93biA9IG9wdGlvbnM7XG4gICAgdGhpcy5jaGFuZ2VEZXRlY3Rvci5tYXJrRm9yQ2hlY2soKTtcbiAgfVxuXG4gIGNoYW5nZVNlYXJjaChldmVudCkge1xuICAgIGlmIChldmVudCAmJiBldmVudFt0aGlzLmZpZWxkVmFsdWVdICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGlmICh0aGlzLmZpbHRlclNlcnZpY2UpIHtcbiAgICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0Lm5leHQoZXZlbnRbdGhpcy5maWVsZFZhbHVlXSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNlYXJjaEJ5TGFiZWwoZXZlbnRbdGhpcy5maWVsZFZhbHVlXSwgdGhpcy5vcHRpb25zLCB0aGlzLmZpbHRlck1vZGUpO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLnNldFZpc2libGVPcHRpb25zRHJvcGRvd24odGhpcy5vcHRpb25zKTtcbiAgICB9XG5cbiAgICAvLyB0aW1lb3V0IG5lY2Vzc8OhcmlvIHBhcmEgcmVwb3NpY2lvbmFyIGNvcnJldGFtZW50ZSBxdWFuZG8gZHJvcGRvd24gZXN0aXZlciBwcmEgY2ltYSBkbyBpbnB1dCBlIHJlYWxpemFyIGJ1c2NhIG5vIGlucHV0XG4gICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCkpO1xuICB9XG5cbiAgY2xvc2VUYWcodmFsdWUsIGV2ZW50KSB7XG4gICAgbGV0IGluZGV4O1xuICAgIHRoaXMuZW50ZXJDbG9zZVRhZyA9IHRydWU7XG4gICAgaWYgKCF2YWx1ZSB8fCAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyAmJiB2YWx1ZS5pbmNsdWRlcygnKycpKSkge1xuICAgICAgaW5kZXggPSBudWxsO1xuICAgICAgY29uc3QgaXRlbXNOb3RJblZpc2libGVUYWdzID0gdGhpcy5zZWxlY3RlZE9wdGlvbnMuZmlsdGVyKG9wdGlvbiA9PiAhdGhpcy52aXNpYmxlVGFncy5pbmNsdWRlcyhvcHRpb24pKTtcbiAgICAgIGZvciAoY29uc3Qgb3B0aW9uIG9mIHRoaXMudmlzaWJsZVRhZ3MpIHtcbiAgICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3B0aW9ucy5pbmNsdWRlcyhvcHRpb24pKSB7XG4gICAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbnMuc3BsaWNlKHRoaXMudmlzaWJsZVRhZ3MubGVuZ3RoIC0gMSwgaXRlbXNOb3RJblZpc2libGVUYWdzLmxlbmd0aCk7XG4gICAgICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSXRlbXMoKTtcbiAgICAgICAgICB0aGlzLmNhbGxPbkNoYW5nZSh0aGlzLnNlbGVjdGVkT3B0aW9ucyk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgaW5kZXggPSB0aGlzLnNlbGVjdGVkT3B0aW9ucy5maW5kSW5kZXgob3B0aW9uID0+IG9wdGlvblt0aGlzLmZpZWxkVmFsdWVdID09PSB2YWx1ZSk7XG4gICAgICB0aGlzLnNlbGVjdGVkT3B0aW9ucy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy51cGRhdGVWaXNpYmxlSXRlbXMoKTtcbiAgICAgIHRoaXMuY2FsbE9uQ2hhbmdlKHRoaXMuc2VsZWN0ZWRPcHRpb25zKTtcbiAgICB9XG5cbiAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgIHRoaXMuZm9jdXNPbk5leHRUYWcoaW5kZXgsIGV2ZW50KTtcbiAgICB9LCAzMDApO1xuICB9XG5cbiAgd2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50OiBNb3VzZUV2ZW50KTogdm9pZCB7XG4gICAgaWYgKFxuICAgICAgdGhpcy5kcm9wZG93bk9wZW4gJiZcbiAgICAgICF0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkgJiZcbiAgICAgICF0aGlzLmljb25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KSAmJlxuICAgICAgIXRoaXMuZHJvcGRvd25FbGVtZW50Lm5hdGl2ZUVsZW1lbnQuY29udGFpbnMoZXZlbnQudGFyZ2V0KVxuICAgICkge1xuICAgICAgdGhpcy5jb250cm9sRHJvcGRvd25WaXNpYmlsaXR5KGZhbHNlKTtcbiAgICB9XG4gIH1cblxuICBhcHBseUZpbHRlcih2YWx1ZTogc3RyaW5nID0gJycpOiBPYnNlcnZhYmxlPEFycmF5PFBvTXVsdGlzZWxlY3RPcHRpb24gfCBhbnk+PiB7XG4gICAgY29uc3QgcGFyYW0gPSB7IHByb3BlcnR5OiB0aGlzLmZpZWxkTGFiZWwsIHZhbHVlOiB2YWx1ZSB9O1xuICAgIHJldHVybiB0aGlzLnNlcnZpY2UuZ2V0RmlsdGVyZWREYXRhKHBhcmFtKS5waXBlKFxuICAgICAgY2F0Y2hFcnJvcihlcnIgPT4ge1xuICAgICAgICB0aGlzLmlzU2VydmVyU2VhcmNoaW5nID0gZmFsc2U7XG4gICAgICAgIHJldHVybiBvZihbXSk7XG4gICAgICB9KSxcbiAgICAgIHRhcCgob3B0aW9uczogQXJyYXk8UG9NdWx0aXNlbGVjdE9wdGlvbiB8IGFueT4pID0+IHtcbiAgICAgICAgdGhpcy5zZXRPcHRpb25zQnlBcHBseUZpbHRlcihvcHRpb25zKTtcbiAgICAgIH0pXG4gICAgKTtcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlGaWx0ZXJJbkZpcnN0Q2xpY2soKSB7XG4gICAgaWYgKHRoaXMuaXNGaXJzdEZpbHRlcikge1xuICAgICAgdGhpcy5pc1NlcnZlclNlYXJjaGluZyA9IHRydWU7XG5cbiAgICAgIC8vIG5lY2Vzc2FyaW8gZW52aWFyIHVtIG9iamV0byBzdHJpbmcgdmF6aWEgcGFyYSByZWZhemVyIGEgYnVzY2EsIHF1YW5kbyBhbHRlcmFyIGZpbHRlclNlcnZpY2UsIGZpZWxkVmFsdWUgZSBmaWVsZExhYmVsXG4gICAgICAvLyBwb2lzIHRlbW9zIG8gZGlzdGluY3RVbnRpbENoYW5nZSBubyBwaXBlIGRvIGZpbHRlclN1YmplY3RcbiAgICAgIC8qIGVzbGludC1kaXNhYmxlIG5vLW5ldy13cmFwcGVycyAqL1xuICAgICAgdGhpcy5maWx0ZXJTdWJqZWN0Lm5leHQobmV3IFN0cmluZygpKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5vcHRpb25zID0gWy4uLnRoaXMuY2FjaGVPcHRpb25zXTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIHNldE9wdGlvbnNCeUFwcGx5RmlsdGVyKGl0ZW1zOiBBcnJheTxQb011bHRpc2VsZWN0T3B0aW9uIHwgYW55Pikge1xuICAgIGlmICh0aGlzLmlzRmlyc3RGaWx0ZXIpIHtcbiAgICAgIHRoaXMuY2FjaGVPcHRpb25zID0gWy4uLml0ZW1zXTtcbiAgICAgIHRoaXMuaXNGaXJzdEZpbHRlciA9IGZhbHNlO1xuICAgIH1cblxuICAgIHRoaXMub3B0aW9ucyA9IFsuLi5pdGVtc107XG4gICAgdGhpcy5zZXRWaXNpYmxlT3B0aW9uc0Ryb3Bkb3duKHRoaXMub3B0aW9ucyk7XG4gIH1cblxuICBwcml2YXRlIGFkanVzdENvbnRhaW5lclBvc2l0aW9uKCk6IHZvaWQge1xuICAgIHRoaXMuY29udHJvbFBvc2l0aW9uLmFkanVzdFBvc2l0aW9uKHBvTXVsdGlzZWxlY3RDb250YWluZXJQb3NpdGlvbkRlZmF1bHQpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbG9zZSgpOiB2b2lkIHtcbiAgICB0aGlzLmRyb3Bkb3duSWNvbiA9ICdwby1pY29uLWFycm93LWRvd24nO1xuICAgIHRoaXMuZHJvcGRvd25PcGVuID0gZmFsc2U7XG5cbiAgICB0aGlzLmRyb3Bkb3duLmNvbnRyb2xWaXNpYmlsaXR5KGZhbHNlKTtcbiAgICB0aGlzLnNldFZpc2libGVPcHRpb25zRHJvcGRvd24odGhpcy5vcHRpb25zKTtcblxuICAgIHRoaXMucmVtb3ZlTGlzdGVuZXJzKCk7XG4gIH1cblxuICBwcml2YXRlIGZvY3VzT25OZXh0VGFnKGluZGV4Q2xvc2VkOiBudW1iZXIsIGNsaWNrT3JFbnRlcjogc3RyaW5nKSB7XG4gICAgaWYgKGNsaWNrT3JFbnRlciA9PT0gJ2VudGVyJykge1xuICAgICAgY29uc3QgdGFnUmVtb3ZlRWxlbWVudHM6IEFycmF5PGFueT4gPSB0aGlzLmVsLm5hdGl2ZUVsZW1lbnQucXVlcnlTZWxlY3RvckFsbCgnLnBvLXRhZy1yZW1vdmUnKTtcbiAgICAgIGluZGV4Q2xvc2VkID0gaW5kZXhDbG9zZWQgfHwgaW5kZXhDbG9zZWQgPT09IDAgPyBpbmRleENsb3NlZCA6IHRhZ1JlbW92ZUVsZW1lbnRzLmxlbmd0aDtcbiAgICAgIGlmICh0YWdSZW1vdmVFbGVtZW50cy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgdGhpcy5pbnB1dEVsZW1lbnQubmF0aXZlRWxlbWVudC5mb2N1cygpO1xuICAgICAgICB0aGlzLmlucHV0RWxlbWVudC5uYXRpdmVFbGVtZW50LnNldEF0dHJpYnV0ZSgnYXJpYS1sYWJlbCcsIGBVbnNlbGVjdGVkIGl0ZW1zICR7dGhpcy5sYWJlbH1gKTtcbiAgICAgICAgdGhpcy5jb250cm9sRHJvcGRvd25WaXNpYmlsaXR5KHRydWUpO1xuICAgICAgfVxuICAgICAgdGhpcy5mb2N1c09uUmVtb3ZlVGFnKHRhZ1JlbW92ZUVsZW1lbnRzLCBpbmRleENsb3NlZCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGluZGV4Q2xvc2VkID0gMDtcbiAgICB9XG4gICAgdGhpcy5oYW5kbGVLZXlib2FyZE5hdmlnYXRpb25UYWcoaW5kZXhDbG9zZWQpO1xuICB9XG5cbiAgcHJpdmF0ZSBmb2N1c09uUmVtb3ZlVGFnKHRhZzogYW55LCBpbmRleENsb3NlZDogbnVtYmVyKSB7XG4gICAgaWYgKHRhZy5sZW5ndGggPT09IGluZGV4Q2xvc2VkKSB7XG4gICAgICB0YWdbaW5kZXhDbG9zZWQgLSAxXT8uZm9jdXMoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGFnW2luZGV4Q2xvc2VkXT8uZm9jdXMoKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaGFuZGxlS2V5Ym9hcmROYXZpZ2F0aW9uVGFnKGluaXRpYWxJbmRleCA9IDApIHtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpO1xuICAgIGNvbnN0IHRhZ1JlbW92ZUVsZW1lbnRzID0gdGhpcy5lbC5uYXRpdmVFbGVtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJy5wby10YWctcmVtb3ZlJyk7XG4gICAgdGhpcy5pbml0aWFsaXplVGFnUmVtb3ZlRWxlbWVudHModGFnUmVtb3ZlRWxlbWVudHMsIGluaXRpYWxJbmRleCk7XG4gIH1cblxuICBwcml2YXRlIHNldFRhYkluZGV4KGVsZW1lbnQsIHRhYkluZGV4KSB7XG4gICAgZWxlbWVudC5zZXRBdHRyaWJ1dGUoJ3RhYmluZGV4JywgdGFiSW5kZXgpO1xuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBcnJvd0xlZnQodGFnUmVtb3ZlRWxlbWVudHMsIGluZGV4KSB7XG4gICAgaWYgKGluZGV4ID4gMCkge1xuICAgICAgdGhpcy5zZXRUYWJJbmRleCh0YWdSZW1vdmVFbGVtZW50c1tpbmRleF0sIC0xKTtcbiAgICAgIHRhZ1JlbW92ZUVsZW1lbnRzW2luZGV4IC0gMV0uZm9jdXMoKTtcbiAgICAgIHRoaXMuc2V0VGFiSW5kZXgodGFnUmVtb3ZlRWxlbWVudHNbaW5kZXggLSAxXSwgMCk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBoYW5kbGVBcnJvd1JpZ2h0KHRhZ1JlbW92ZUVsZW1lbnRzLCBpbmRleCkge1xuICAgIGlmIChpbmRleCA8IHRhZ1JlbW92ZUVsZW1lbnRzLmxlbmd0aCAtIDEpIHtcbiAgICAgIHRoaXMuc2V0VGFiSW5kZXgodGFnUmVtb3ZlRWxlbWVudHNbaW5kZXhdLCAtMSk7XG4gICAgICB0YWdSZW1vdmVFbGVtZW50c1tpbmRleCArIDFdLmZvY3VzKCk7XG4gICAgICB0aGlzLnNldFRhYkluZGV4KHRhZ1JlbW92ZUVsZW1lbnRzW2luZGV4ICsgMV0sIDApO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaGFuZGxlS2V5RG93bihldmVudDogS2V5Ym9hcmRFdmVudCwgdGFnUmVtb3ZlRWxlbWVudHMsIGluZGV4KSB7XG4gICAgY29uc3QgS0VZX1NQQUNFID0gJ1NwYWNlJztcbiAgICBjb25zdCBLRVlfQVJST1dfTEVGVCA9ICdBcnJvd0xlZnQnO1xuICAgIGNvbnN0IEtFWV9BUlJPV19SSUdIVCA9ICdBcnJvd1JpZ2h0JztcbiAgICB0aGlzLmZvY3VzT25UYWcgPSB0cnVlO1xuXG4gICAgaWYgKGV2ZW50LmNvZGUgPT09IEtFWV9TUEFDRSkge1xuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcbiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO1xuICAgIH1cblxuICAgIGlmIChldmVudC5rZXkgPT09IEtFWV9BUlJPV19MRUZUKSB7XG4gICAgICB0aGlzLmhhbmRsZUFycm93TGVmdCh0YWdSZW1vdmVFbGVtZW50cywgaW5kZXgpO1xuICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSBLRVlfQVJST1dfUklHSFQpIHtcbiAgICAgIHRoaXMuaGFuZGxlQXJyb3dSaWdodCh0YWdSZW1vdmVFbGVtZW50cywgaW5kZXgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZVRhZ1JlbW92ZUVsZW1lbnRzKHRhZ1JlbW92ZUVsZW1lbnRzLCBpbml0aWFsSW5kZXgpIHtcbiAgICB0YWdSZW1vdmVFbGVtZW50cy5mb3JFYWNoKCh0YWdSZW1vdmVFbGVtZW50LCBpbmRleCkgPT4ge1xuICAgICAgaWYgKGluZGV4ID09PSBpbml0aWFsSW5kZXgpIHtcbiAgICAgICAgdGhpcy5zZXRUYWJJbmRleCh0YWdSZW1vdmVFbGVtZW50c1tpbml0aWFsSW5kZXhdLCAwKTtcbiAgICAgIH0gZWxzZSBpZiAodGFnUmVtb3ZlRWxlbWVudHMubGVuZ3RoID09PSBpbml0aWFsSW5kZXgpIHtcbiAgICAgICAgdGhpcy5zZXRUYWJJbmRleCh0YWdSZW1vdmVFbGVtZW50c1tpbml0aWFsSW5kZXggLSAxXSwgMCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnNldFRhYkluZGV4KHRhZ1JlbW92ZUVsZW1lbnQsIC0xKTtcbiAgICAgIH1cblxuICAgICAgdGhpcy5zdWJzY3JpcHRpb24uYWRkKFxuICAgICAgICBmcm9tRXZlbnQodGFnUmVtb3ZlRWxlbWVudCwgJ2tleWRvd24nKS5zdWJzY3JpYmUoKGV2ZW50OiBLZXlib2FyZEV2ZW50KSA9PiB7XG4gICAgICAgICAgdGhpcy5oYW5kbGVLZXlEb3duKGV2ZW50LCB0YWdSZW1vdmVFbGVtZW50cywgaW5kZXgpO1xuICAgICAgICB9KVxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgaW5pdGlhbGl6ZUxpc3RlbmVycygpOiB2b2lkIHtcbiAgICB0aGlzLmNsaWNrT3V0TGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3RlbignZG9jdW1lbnQnLCAnY2xpY2snLCAoZXZlbnQ6IE1vdXNlRXZlbnQpID0+IHtcbiAgICAgIHRoaXMud2FzQ2xpY2tlZE9uVG9nZ2xlKGV2ZW50KTtcbiAgICB9KTtcblxuICAgIHRoaXMucmVzaXplTGlzdGVuZXIgPSB0aGlzLnJlbmRlcmVyLmxpc3Rlbignd2luZG93JywgJ3Jlc2l6ZScsICgpID0+IHtcbiAgICAgIHRoaXMudXBkYXRlVmlzaWJsZUl0ZW1zKCk7XG5cbiAgICAgIGlzTW9iaWxlKCkgPyB0aGlzLmFkanVzdENvbnRhaW5lclBvc2l0aW9uKCkgOiB0aGlzLmNsb3NlKCk7XG4gICAgfSk7XG5cbiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignc2Nyb2xsJywgdGhpcy5vblNjcm9sbCwgdHJ1ZSk7XG4gIH1cblxuICBwcml2YXRlIG9uU2Nyb2xsID0gKCk6IHZvaWQgPT4ge1xuICAgIHRoaXMuYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oKTtcbiAgfTtcblxuICBwcml2YXRlIG9wZW4oKTogdm9pZCB7XG4gICAgdGhpcy5kcm9wZG93bkljb24gPSAncG8taWNvbi1hcnJvdy11cCc7XG4gICAgdGhpcy5kcm9wZG93bk9wZW4gPSB0cnVlO1xuXG4gICAgdGhpcy5kcm9wZG93bi5jb250cm9sVmlzaWJpbGl0eSh0cnVlKTtcbiAgICB0aGlzLnNldFZpc2libGVPcHRpb25zRHJvcGRvd24odGhpcy5vcHRpb25zKTtcbiAgICB0aGlzLmluaXRpYWxpemVMaXN0ZW5lcnMoKTtcbiAgICB0aGlzLnNjcm9sbFRvU2VsZWN0ZWRPcHRpb25zKCk7XG5cbiAgICB0aGlzLmNoYW5nZURldGVjdG9yLmRldGVjdENoYW5nZXMoKTtcbiAgICB0aGlzLnNldFBvc2l0aW9uRHJvcGRvd24oKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlTGlzdGVuZXJzKCk6IHZvaWQge1xuICAgIGlmICh0aGlzLmNsaWNrT3V0TGlzdGVuZXIpIHtcbiAgICAgIHRoaXMuY2xpY2tPdXRMaXN0ZW5lcigpO1xuICAgIH1cblxuICAgIGlmICh0aGlzLnJlc2l6ZUxpc3RlbmVyKSB7XG4gICAgICB0aGlzLnJlc2l6ZUxpc3RlbmVyKCk7XG4gICAgfVxuXG4gICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIHRoaXMub25TY3JvbGwsIHRydWUpO1xuICAgIHRoaXMuY2hhbmdlRGV0ZWN0b3IubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHNldFBvc2l0aW9uRHJvcGRvd24oKTogdm9pZCB7XG4gICAgdGhpcy5jb250cm9sUG9zaXRpb24uc2V0RWxlbWVudHMoXG4gICAgICB0aGlzLmRyb3Bkb3duLmNvbnRhaW5lci5uYXRpdmVFbGVtZW50LFxuICAgICAgcG9NdWx0aXNlbGVjdENvbnRhaW5lck9mZnNldCxcbiAgICAgIHRoaXMuaW5wdXRFbGVtZW50LFxuICAgICAgWyd0b3AnLCAnYm90dG9tJ10sXG4gICAgICB0cnVlXG4gICAgKTtcblxuICAgIHRoaXMuYWRqdXN0Q29udGFpbmVyUG9zaXRpb24oKTtcbiAgfVxufVxuIiwiPHBvLWZpZWxkLWNvbnRhaW5lclxuICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gIFtwLWxhYmVsXT1cImxhYmVsXCJcbiAgW3Atb3B0aW9uYWxdPVwib3B0aW9uYWxcIlxuICBbcC1yZXF1aXJlZF09XCJyZXF1aXJlZFwiXG4gIFtwLXNob3ctcmVxdWlyZWRdPVwic2hvd1JlcXVpcmVkXCJcbj5cbiAgPGRpdlxuICAgIGNka092ZXJsYXlPcmlnaW5cbiAgICAjdHJpZ2dlcj1cImNka092ZXJsYXlPcmlnaW5cIlxuICAgIGNsYXNzPVwicG8tZmllbGQtY29udGFpbmVyLWNvbnRlbnRcIlxuICAgIFtjbGFzcy5wby1tdWx0aXNlbGVjdC1zaG93XT1cImRyb3Bkb3duT3BlblwiXG4gID5cbiAgICA8ZGl2XG4gICAgICAjaW5wdXRFbGVtZW50XG4gICAgICBbdGFiaW5kZXhdPVwiZGlzYWJsZWQgPyAtMSA6IDBcIlxuICAgICAgW2F0dHIuZGlzYWJsZWRdPVwiZGlzYWJsZWRcIlxuICAgICAgW2F0dHIuYXJpYS1sYWJlbF09XCJsYWJlbFwiXG4gICAgICBjbGFzcz1cInBvLWlucHV0LWljb24tcmlnaHQgcG8tbXVsdGlzZWxlY3QtaW5wdXRcIlxuICAgICAgW2NsYXNzLnBvLW11bHRpc2VsZWN0LWlucHV0LWF1dG9dPVwiYXV0b0hlaWdodFwiXG4gICAgICBbY2xhc3MucG8tbXVsdGlzZWxlY3QtaW5wdXQtc3RhdGljXT1cIiFhdXRvSGVpZ2h0XCJcbiAgICAgIFtjbGFzcy5wby1tdWx0aXNlbGVjdC1pbnB1dC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICBbY2xhc3MucG8tbXVsdGlzZWxlY3QtaW5wdXQtZm9udF09XCIhZGlzYWJsZWQgJiYgIXZpc2libGVUYWdzPy5sZW5ndGhcIlxuICAgICAgKGtleWRvd24pPVwib25LZXlEb3duKCRldmVudClcIlxuICAgICAgKGNsaWNrKT1cInRvZ2dsZURyb3Bkb3duVmlzaWJpbGl0eSgpXCJcbiAgICAgIChibHVyKT1cIm9uQmx1cigpXCJcbiAgICA+XG4gICAgICA8c3BhbiAqbmdJZj1cIiFkaXNhYmxlZCAmJiAhdmlzaWJsZVRhZ3M/Lmxlbmd0aFwiIGNsYXNzPVwicG8tbXVsdGlzZWxlY3QtaW5wdXQtcGxhY2Vob2xkZXJcIiBhcmlhLWhpZGRlbj1cInRydWVcIj5cbiAgICAgICAge3sgcGxhY2Vob2xkZXIgPyBwbGFjZWhvbGRlciA6IGxpdGVyYWxzLnNlbGVjdEl0ZW0gfX1cbiAgICAgIDwvc3Bhbj5cblxuICAgICAgPHBvLXRhZ1xuICAgICAgICAqbmdGb3I9XCJsZXQgdGFnIG9mIHZpc2libGVUYWdzOyBpbmRleCBhcyBpXCJcbiAgICAgICAgW3AtdmFsdWVdPVwidGFnW2ZpZWxkTGFiZWxdXCJcbiAgICAgICAgW3AtbGl0ZXJhbHNdPVwiaSArIDEgPT09IHZpc2libGVUYWdzLmxlbmd0aCAmJiBoYXNNb3JlVGFnID8gbGl0ZXJhbHNUYWcgOiB1bmRlZmluZWRcIlxuICAgICAgICBbcC1yZW1vdmFibGVdPVwidHJ1ZVwiXG4gICAgICAgIFtjbGFzcy5wby1jbGlja2FibGVdPVwidGFnW2ZpZWxkVmFsdWVdID09PSAnJyAmJiAhZGlzYWJsZWRcIlxuICAgICAgICBbcC1kaXNhYmxlZF09XCJkaXNhYmxlZFwiXG4gICAgICAgIChwLWNsb3NlKT1cImNsb3NlVGFnKHRhZ1tmaWVsZFZhbHVlXSwgJGV2ZW50KVwiXG4gICAgICA+PC9wby10YWc+XG5cbiAgICAgIDxkaXYgY2xhc3M9XCJwby1maWVsZC1pY29uLWNvbnRhaW5lci1yaWdodFwiPlxuICAgICAgICA8c3BhblxuICAgICAgICAgICNpY29uRWxlbWVudFxuICAgICAgICAgIGNsYXNzPVwicG8taWNvbiBwby1maWVsZC1pY29uIHt7IGRyb3Bkb3duSWNvbiB9fSB7eyBkaXNhYmxlZCA/ICdwby1pY29uLWlucHV0LWRpc2FibGVkJyA6ICdwby1pY29uLWlucHV0JyB9fVwiXG4gICAgICAgICAgW25nQ2xhc3NdPVwiZGlzYWJsZWQgPyAncG8tZmllbGQtaWNvbi1kaXNhYmxlZCcgOiAnJ1wiXG4gICAgICAgID5cbiAgICAgICAgPC9zcGFuPlxuICAgICAgPC9kaXY+XG4gICAgPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxuZy1jb250YWluZXIgKm5nSWY9XCJhcHBlbmRCb3g7IHRoZW4gZHJvcGRvd25DREs7IGVsc2UgZHJvcGRvd25EZWZhdWx0XCI+IDwvbmctY29udGFpbmVyPlxuXG4gIDxuZy10ZW1wbGF0ZSAjZHJvcGRvd25EZWZhdWx0PlxuICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkxpc3Rib3hcIj4gPC9uZy1jb250YWluZXI+XG4gIDwvbmctdGVtcGxhdGU+XG5cbiAgPG5nLXRlbXBsYXRlICNkcm9wZG93bkNESz5cbiAgICA8bmctdGVtcGxhdGUgY2RrQ29ubmVjdGVkT3ZlcmxheSBbY2RrQ29ubmVjdGVkT3ZlcmxheU9yaWdpbl09XCJ0cmlnZ2VyXCIgW2Nka0Nvbm5lY3RlZE92ZXJsYXlPcGVuXT1cInRydWVcIj5cbiAgICAgIDxuZy1jb250YWluZXIgKm5nVGVtcGxhdGVPdXRsZXQ9XCJkcm9wZG93bkxpc3Rib3hcIj48L25nLWNvbnRhaW5lcj5cbiAgICA8L25nLXRlbXBsYXRlPlxuICA8L25nLXRlbXBsYXRlPlxuXG4gIDxwby1maWVsZC1jb250YWluZXItYm90dG9tIFtwLWhlbHBdPVwiaGVscFwiIFtwLWRpc2FibGVkXT1cImRpc2FibGVkXCI+PC9wby1maWVsZC1jb250YWluZXItYm90dG9tPlxuPC9wby1maWVsZC1jb250YWluZXI+XG5cbjxuZy10ZW1wbGF0ZSAjZHJvcGRvd25MaXN0Ym94PlxuICA8cG8tbXVsdGlzZWxlY3QtZHJvcGRvd25cbiAgICAjZHJvcGRvd25FbGVtZW50XG4gICAgW3Atc2VhcmNoaW5nXT1cImlzU2VydmVyU2VhcmNoaW5nXCJcbiAgICBbcC1oaWRlLXNlYXJjaF09XCJoaWRlU2VhcmNoXCJcbiAgICBbcC1oaWRlLXNlbGVjdC1hbGxdPVwiaGlkZVNlbGVjdEFsbFwiXG4gICAgW3AtbGl0ZXJhbHNdPVwibGl0ZXJhbHNcIlxuICAgIFtwLW9wdGlvbnNdPVwib3B0aW9uc1wiXG4gICAgW3AtdmlzaWJsZS1vcHRpb25zXT1cInZpc2libGVPcHRpb25zRHJvcGRvd25cIlxuICAgIFtwLXNlbGVjdGVkLW9wdGlvbnNdPVwic2VsZWN0ZWRPcHRpb25zXCJcbiAgICBbcC1wbGFjZWhvbGRlci1zZWFyY2hdPVwicGxhY2Vob2xkZXJTZWFyY2hcIlxuICAgIFtwLWZpZWxkLXZhbHVlXT1cImZpZWxkVmFsdWVcIlxuICAgIFtwLWZpZWxkLWxhYmVsXT1cImZpZWxkTGFiZWxcIlxuICAgIFtwLW11bHRpc2VsZWN0LXRlbXBsYXRlXT1cIm11bHRpc2VsZWN0T3B0aW9uVGVtcGxhdGVcIlxuICAgIChwLWNoYW5nZSk9XCJjaGFuZ2VJdGVtcygkZXZlbnQpXCJcbiAgICAocC1jaGFuZ2Utc2VhcmNoKT1cImNoYW5nZVNlYXJjaCgkZXZlbnQpXCJcbiAgICAocC1jbG9zZS1kcm9wZG93bik9XCJjb250cm9sRHJvcGRvd25WaXNpYmlsaXR5KGZhbHNlKVwiXG4gICAgKGtleWRvd24pPVwib25LZXlEb3duRHJvcGRvd24oJGV2ZW50LCAwKVwiXG4gID5cbiAgPC9wby1tdWx0aXNlbGVjdC1kcm9wZG93bj5cbjwvbmctdGVtcGxhdGU+XG4iXX0=