@c8y/ngx-components 1018.503.72 → 1018.503.76

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.
@@ -42,7 +42,7 @@ export class LoginService {
42
42
  this.TFATOKEN_KEY = 'TFAToken';
43
43
  this.isFirstLogin = true;
44
44
  this.GREEN_MIN_LENGTH_DEFAULT = 8;
45
- this.automaticLoginInProgress$ = new BehaviorSubject(true);
45
+ this.automaticLoginInProgress$ = new BehaviorSubject(false);
46
46
  // tslint:disable:max-line-length
47
47
  this.ERROR_MESSAGES = {
48
48
  minlength: gettext('Password must have at least 8 characters and no more than 32.'),
@@ -562,4 +562,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
562
562
  }], ctorParameters: function () { return [{ type: i0.Injector }, { type: i1.FetchClient }, { type: i1.BasicAuth }, { type: i1.CookieAuth }, { type: i2.AppStateService }, { type: i1.UserService }, { type: i1.TenantService }, { type: i1.Realtime }, { type: i3.AlertService }, { type: i4.ApiService }, { type: i5.TenantUiService }, { type: i1.TenantLoginOptionsService }, { type: i6.TranslateService }, { type: i7.LocationStrategy, decorators: [{
563
563
  type: Optional
564
564
  }] }]; } });
565
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvbG9naW4vbG9naW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUlYLFFBQVEsRUFDUix5QkFBeUIsRUFDekIsYUFBYSxFQUNiLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7OztBQUV2RDs7R0FFRztBQUVILE1BQU0sT0FBTyxZQUFZO0lBK0R2QixZQUNVLFFBQWtCLEVBQ2xCLE1BQW1CLEVBQ25CLFNBQW9CLEVBQ3BCLFVBQXNCLEVBQ3RCLEVBQW1CLEVBQ25CLElBQWlCLEVBQ2pCLE1BQXFCLEVBQ3JCLFFBQWtCLEVB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QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNuRixXQUFXLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDakQ7UUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDakMsQ0FBQyxDQUFDLDBCQUEwQixXQUFXLENBQUMsTUFBTSxFQUFFO1lBQ2hELENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDckIsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0I7UUFDbEMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDL0YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDOUUsQ0FBQzs7eUdBbm1CVSxZQUFZOzZHQUFaLFlBQVk7MkZBQVosWUFBWTtrQkFEeEIsVUFBVTs7MEJBOEVOLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJhc2ljQXV0aCxcbiAgQ29va2llQXV0aCxcbiAgRmV0Y2hDbGllbnQsXG4gIElBdXRoZW50aWNhdGlvbixcbiAgSUNyZWRlbnRpYWxzLFxuICBJVGVuYW50TG9naW5PcHRpb24sXG4gIFJlYWx0aW1lLFxuICBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlLFxuICBUZW5hbnRTZXJ2aWNlLFxuICBVc2VyU2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuL2dldHRleHQnO1xuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXBpJztcbmltcG9ydCB7IFRlbmFudFVpU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi90ZW5hbnQtdWkuc2VydmljZSc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2NhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGdldCwgaXNTdHJpbmcsIGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gbWFuYWdlIHRoZSBsb2dpbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvZ2luU2VydmljZSB7XG4gIHJlbWVtYmVyTWUgPSBmYWxzZTtcbiAgVE9LRU5fS0VZID0gJ190Y3k4JztcbiAgVEZBVE9LRU5fS0VZID0gJ1RGQVRva2VuJztcbiAgbG9naW5Nb2RlOiBJVGVuYW50TG9naW5PcHRpb247XG4gIG1hbmFnZW1lbnRMb2dpbk1vZGU6IElUZW5hbnRMb2dpbk9wdGlvbjtcbiAgb2F1dGhPcHRpb25zOiBJVGVuYW50TG9naW5PcHRpb247XG4gIGlzRmlyc3RMb2dpbiA9IHRydWU7XG4gIEdSRUVOX01JTl9MRU5HVEhfREVGQVVMVCA9IDg7XG4gIGF1dG9tYXRpY0xvZ2luSW5Qcm9ncmVzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KHRydWUpO1xuXG4gIC8vIHRzbGludDpkaXNhYmxlOm1heC1saW5lLWxlbmd0aFxuICBFUlJPUl9NRVNTQUdFUyA9IHtcbiAgICBtaW5sZW5ndGg6IGdldHRleHQoJ1Bhc3N3b3JkIG11c3QgaGF2ZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgYW5kIG5vIG1vcmUgdGhhbiAzMi4nKSxcbiAgICBwYXNzd29yZF9taXNzbWF0Y2g6IGdldHRleHQoJ1Bhc3N3b3JkIGNvbmZpcm1hdGlvbiBkb2VzIG5vdCBtYXRjaC4nKSxcbiAgICBtYXhsZW5ndGg6IGdldHRleHQoJ1Bhc3N3b3JkIG11c3QgaGF2ZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgYW5kIG5vIG1vcmUgdGhhbiAzMi4nKSxcbiAgICBwYXNzd29yZF9zdHJlbmd0aDogZ2V0dGV4dChcbiAgICAgICdZb3VyIHBhc3N3b3JkIGlzIG5vdCBzdHJvbmcgZW5vdWdoLiBQbGVhc2UgaW5jbHVkZSBudW1iZXJzLCBsb3dlciBhbmQgdXBwZXIgY2FzZSBjaGFyYWN0ZXJzJ1xuICAgICksXG4gICAgcmVtb3RlX2Vycm9yOiBnZXR0ZXh0KCdTZXJ2ZXIgZXJyb3Igb2NjdXJyZWQuJyksXG4gICAgZW1haWw6IGdldHRleHQoJ0ludmFsaWQgZW1haWwgYWRkcmVzcy4nKSxcbiAgICBwYXNzd29yZF9jaGFuZ2U6IGdldHRleHQoJ1lvdXIgcGFzc3dvcmQgaXMgZXhwaXJlZC4gUGxlYXNlIHNldCBhIG5ldyBwYXNzd29yZC4nKSxcbiAgICBwYXNzd29yZF9yZXNldF90b2tlbl9leHBpcmVkOiBnZXR0ZXh0KFxuICAgICAgJ1Bhc3N3b3JkIHJlc2V0IGxpbmsgZXhwaXJlZC4gUGxlYXNlIGVudGVyIHlvdXIgZW1haWwgYWRkcmVzcyB0byByZWNlaXZlIGEgbmV3IG9uZS4nXG4gICAgKSxcbiAgICB0ZmFfcGluX2ludmFsaWQ6IGdldHRleHQoJ1RoZSBjb2RlIHlvdSBlbnRlcmVkIGlzIGludmFsaWQuIFBsZWFzZSB0cnkgYWdhaW4uJyksXG4gICAgcGF0dGVybl9uZXdQYXNzd29yZDogdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoXG4gICAgICBnZXR0ZXh0KFxuICAgICAgICAnUGFzc3dvcmQgbXVzdCBoYXZlIGF0IGxlYXN0IDggY2hhcmFjdGVycyBhbmQgbm8gbW9yZSB0aGFuIDMyIGFuZCBjYW4gb25seSBjb250YWluIGxldHRlcnMsIG51bWJlcnMgYW5kIGZvbGxvd2luZyBzeW1ib2xzOiB7eyBzeW1ib2xzIH19J1xuICAgICAgKSxcbiAgICAgIHsgc3ltYm9sczogJ2B+IUAjJCVeJiooKV98Ky09Pzs6XFwnXCIsLjw+e31bXVxcXFwvJyB9XG4gICAgKSxcbiAgICBpbnRlcm5hdGlvbmFsUGhvbmVOdW1iZXI6IGdldHRleHQoXG4gICAgICAnTXVzdCBiZSBhIHZhbGlkIHBob25lIG51bWJlciAob25seSBkaWdpdHMsIHNwYWNlcywgc2xhc2hlcyAoXCIvXCIpLCBkYXNoZXMgKFwiLVwiKSwgYW5kIHBsdXMgKFwiK1wiKSBhbGxvd2VkLCBmb3IgZXhhbXBsZTogKzQ5IDkgODc2IDU0MyAyMTApLidcbiAgICApLFxuICAgIHBob25lX251bWJlcl9lcnJvcjogZ2V0dGV4dCgnQ291bGQgbm90IHVwZGF0ZSBwaG9uZSBudW1iZXIuJyksXG4gICAgcGluQWxyZWFkeVNlbnQ6IGdldHRleHQoXG4gICAgICAnVGhlIHZlcmlmaWNhdGlvbiBjb2RlIHdhcyBhbHJlYWR5IHNlbnQuIEZvciBhIG5ldyB2ZXJpZmljYXRpb24gY29kZSwgcGxlYXNlIGNsaWNrIG9uIHRoZSBsaW5rIGFib3ZlLidcbiAgICApLFxuICAgIHBhc3N3b3JkQ29uZmlybTogZ2V0dGV4dCgnUGFzc3dvcmQgY29uZmlybWF0aW9uIGRvZXMgbm90IG1hdGNoLicpLFxuICAgIHRmYUV4cGlyZWQ6IGdldHRleHQoJ1R3by1mYWN0b3IgYXV0aGVudGljYXRpb24gdG9rZW4gZXhwaXJlZC4nKVxuICB9O1xuICAvLyB0c2xpbnQ6ZW5hYmxlOm1heC1saW5lLWxlbmd0aFxuXG4gIHByaXZhdGUgU1VDQ0VTU19NRVNTQUdFUyA9IHtcbiAgICBwYXNzd29yZF9jaGFuZ2VkOiBnZXR0ZXh0KCdQYXNzd29yZCBjaGFuZ2VkLiBZb3UgY2FuIG5vdyBsb2cgaW4gdXNpbmcgbmV3IHBhc3N3b3JkLicpLFxuICAgIHBhc3N3b3JkX3Jlc2V0X3JlcXVlc3RlZDogZ2V0dGV4dChcbiAgICAgICdQYXNzd29yZCByZXNldCByZXF1ZXN0IGhhcyBiZWVuIHNlbnQuIFBsZWFzZSBjaGVjayB5b3VyIGVtYWlsLidcbiAgICApLFxuICAgIHJlc2VuZF9zbXM6IGdldHRleHQoJ1ZlcmlmaWNhdGlvbiBjb2RlIFNNUyByZXNlbnQuJyksXG4gICAgc2VuZF9zbXM6IGdldHRleHQoJ1ZlcmlmaWNhdGlvbiBjb2RlIFNNUyBzZW50LicpXG4gIH07XG5cbiAgcHJpdmF0ZSBwYXNzd29yZFN0cmVuZ3RoU2V0dGluZyA9IHtcbiAgICBlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aDogZmFsc2UsXG4gICAgZ3JlZW5NaW5MZW5ndGg6IHRoaXMuR1JFRU5fTUlOX0xFTkdUSF9ERUZBVUxULFxuICAgIHBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eTogZmFsc2VcbiAgfTtcblxuICBwcml2YXRlIGxvY2FsaG9zdFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ2xvY2FsaG9zdCcpO1xuICBwcml2YXRlIGxvY2FsaG9zdElwUmVnRXhwID0gbmV3IFJlZ0V4cCgnMTI3LjAuMC4xJyk7XG4gIHByaXZhdGUgc2hvd1RlbmFudFJlZ0V4cCA9IG5ldyBSZWdFeHAoJ3Nob3dUZW5hbnQnKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGluamVjdG9yOiBJbmplY3RvcixcbiAgICBwcml2YXRlIGNsaWVudDogRmV0Y2hDbGllbnQsXG4gICAgcHJpdmF0ZSBiYXNpY0F1dGg6IEJhc2ljQXV0aCxcbiAgICBwcml2YXRlIGNvb2tpZUF1dGg6IENvb2tpZUF1dGgsXG4gICAgcHJpdmF0ZSB1aTogQXBwU3RhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgdXNlcjogVXNlclNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnQ6IFRlbmFudFNlcnZpY2UsXG4gICAgcHJpdmF0ZSByZWFsdGltZTogUmVhbHRpbWUsXG4gICAgcHJpdmF0ZSBhbGVydDogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBpOiBBcGlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50VWlTZXJ2aWNlOiBUZW5hbnRVaVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0ZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlOiBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBAT3B0aW9uYWwoKSBwcml2YXRlIGxvY2F0aW9uOiBMb2NhdGlvblN0cmF0ZWd5XG4gICkge1xuICAgIHRoaXMuYXV0b0xvZ291dCgpO1xuICAgIHRoaXMuaW5pdExvZ2luT3B0aW9ucygpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGN1cnJlbnQgdGVuYW50LlxuICAgKiBAcmV0dXJuIFRoZSB0ZW5hbnQgbmFtZS5cbiAgICovXG4gIGdldFRlbmFudCgpIHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQudGVuYW50O1xuICB9XG5cbiAgaW5pdExvZ2luT3B0aW9ucygpIHtcbiAgICBjb25zdCBsb2dpbk9wdGlvbnMgPSB0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyB8fCBbXTtcbiAgICB0aGlzLmxvZ2luTW9kZSA9IHRoaXMudGVuYW50VWlTZXJ2aWNlLmdldFByZWZlcnJlZExvZ2luT3B0aW9uKGxvZ2luT3B0aW9ucyk7XG4gICAgdGhpcy5vYXV0aE9wdGlvbnMgPVxuICAgICAgdGhpcy50ZW5hbnRVaVNlcnZpY2UuZ2V0T2F1dGgyT3B0aW9uKGxvZ2luT3B0aW9ucykgfHwgKHt9IGFzIElUZW5hbnRMb2dpbk9wdGlvbik7XG4gIH1cblxuICByZWRpcmVjdFRvT2F1dGgoKSB7XG4gICAgY29uc3QgeyBpbml0UmVxdWVzdCB9ID0gdGhpcy5vYXV0aE9wdGlvbnM7XG4gICAgY29uc3QgZnVsbFBhdGggPSB3aW5kb3cubG9jYXRpb24uaHJlZjtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IGVuY29kZVVSSUNvbXBvbmVudChmdWxsUGF0aCk7XG4gICAgY29uc3Qgb3JpZ2luVXJpUGFyYW0gPSBgJHtpbml0UmVxdWVzdC5pbmNsdWRlcygnPycpID8gJyYnIDogJz8nfW9yaWdpblVyaT0ke3JlZGlyZWN0VXJsfWA7XG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBgJHtpbml0UmVxdWVzdH0ke29yaWdpblVyaVBhcmFtfWA7XG4gIH1cblxuICBhdXRvTG9nb3V0KCkge1xuICAgIGNvbnN0IGVycm9yUGF0dGVybiA9IC9pbnZhbGlkXFxzY3JlZGVudGlhbHMuKnBpbi4qZ2VuZXJhdGUvaTtcbiAgICBjb25zdCBpc1RmYUV4cGlyZWQgPSBkYXRhID0+XG4gICAgICBkYXRhICYmIHR5cGVvZiBkYXRhLm1lc3NhZ2UgPT09ICdzdHJpbmcnICYmIGVycm9yUGF0dGVybi50ZXN0KGRhdGEubWVzc2FnZSk7XG4gICAgdGhpcy51aS5jdXJyZW50VXNlclxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCh1ID0+XG4gICAgICAgICAgdSA/IHRoaXMuYXBpLmhvb2tSZXNwb25zZSgoeyByZXNwb25zZSB9KSA9PiByZXNwb25zZS5zdGF0dXMgPT09IDQwMSkgOiBFTVBUWVxuICAgICAgICApXG4gICAgICApXG4gICAgICAuc3Vic2NyaWJlKGFzeW5jIChhcGlDYWxsOiBhbnkpID0+IHtcbiAgICAgICAgY29uc3QgeyByZXNwb25zZSB9ID0gYXBpQ2FsbDtcbiAgICAgICAgbGV0IHdpbGxMb2dvdXQgPSBmYWxzZTtcbiAgICAgICAgaWYgKGlzVGZhRXhwaXJlZChyZXNwb25zZS5kYXRhKSkge1xuICAgICAgICAgIHdpbGxMb2dvdXQgPSB0cnVlO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIGlmICh0eXBlb2YgcmVzcG9uc2UuanNvbiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY29uc3QgZGF0YSA9IGF3YWl0IHJlc3BvbnNlLmNsb25lKCkuanNvbigpO1xuICAgICAgICAgICAgaWYgKGlzVGZhRXhwaXJlZChkYXRhKSkge1xuICAgICAgICAgICAgICB3aWxsTG9nb3V0ID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHdpbGxMb2dvdXQpIHtcbiAgICAgICAgICB0aGlzLmxvZ291dChmYWxzZSk7XG4gICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmFsZXJ0LmRhbmdlcih0aGlzLkVSUk9SX01FU1NBR0VTLnRmYUV4cGlyZWQpLCA1MDApO1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHRoZSBtaW5pbWFsIG51bWJlciBvZiBjaGFyYWN0ZXJzIHRoYXQgYSBwYXNzd29yZCBzaG91bGQgaGF2ZSB0byBiZSBjb25zaWRlcmVkIGEg4oCcZ3JlZW7igJ0gc3Ryb25nIG9uZS5cbiAgICogQHJldHVybiBUaGUgbWluIGxlbmd0aCBmb3IgcGFzc3dvcmQgb3IgZGVmYXVsdCB2YWx1ZS5cbiAgICovXG4gIGFzeW5jIGdldEdyZWVuTWluTGVuZ3RoKCkge1xuICAgIGNvbnN0IHsgZ3JlZW5NaW5MZW5ndGggfSA9IChhd2FpdCB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKCkpIHx8IHsgZ3JlZW5NaW5MZW5ndGg6IG51bGwgfTtcbiAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLmdyZWVuTWluTGVuZ3RoID0gZ3JlZW5NaW5MZW5ndGggfHwgdGhpcy5HUkVFTl9NSU5fTEVOR1RIX0RFRkFVTFQ7XG4gICAgcmV0dXJuIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZ3JlZW5NaW5MZW5ndGg7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHBhc3N3b3JkIHN0cmVuZ3RoIGlzIGVuZm9yY2VkIGZvciBzeXN0ZW1cbiAgICogYnkgcmV0cmlldmluZyB2YWx1ZSBvZiBgZW5mb3JjZVN0cmVuZ3RoYCBwcm9wZXJ0eSBmcm9tIGxvZ2luT3B0aW9ucyByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVmcmVzaCBib29sZWFuIHVzZWQgdG8gcmVmcmVzaCB0aGUgYXBwIHN0YXRlIHdoZXJlIHJlc3VsdCBvZiBsb2dpbk9wdGlvbnMgcmVzcG9uc2UgaXMgc3RvcmVkLlxuICAgKiBJZiBmYWxzZSwgaXQgdGFrZXMgdmFsdWUgZnJvbSBtZW1vcnksXG4gICAqIGlmIHRydWUsIGl0IHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB2YWx1ZSBhbmQgdGhlbiByZXRyaXZlcyBkYXRhLlxuICAgKiBAcmV0dXJuIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZW5mb3JjZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdldEVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoKHJlZnJlc2g/KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzaWNBdXRoTG9naW5PcHRpb24ocmVmcmVzaCkudGhlbihsb2dpbk9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCA9IGdldChsb2dpbk9wdGlvbiwgJ2VuZm9yY2VTdHJlbmd0aCcpO1xuICAgICAgaWYgKGlzU3RyaW5nKGVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoKSkge1xuICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLmVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoID1cbiAgICAgICAgICBlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5lbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCA9ICEhZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGg7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5lbmZvcmNlUGFzc3dvcmRTdHJlbmd0aDtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDaGVja3MgaWYgcGFzc3dvcmQgc3RyZW5ndGggaXMgZW5mb3JjZWQgZm9yIHBhcnRpY3VsYXIgdGVuYW50XG4gICAqIGJ5IHJldHJpZXZpbmcgdmFsdWUgb2YgYHN0cmVuZ3RoVmFsaWRpdHlgIHByb3BlcnR5IGZyb20gbG9naW5PcHRpb25zIHJlc3BvbnNlXG4gICAqIEBwYXJhbSByZWZyZXNoIGJvb2xlYW4gdXNlZCB0byByZWZyZXNoIHRoZSBhcHAgc3RhdGUgd2hlcmUgcmVzdWx0IG9mIGxvZ2luT3B0aW9ucyByZXNwb25zZSBpcyBzdG9yZWQuXG4gICAqIElmIGZhbHNlLCBpdCB0YWtlcyB2YWx1ZSBmcm9tIG1lbW9yeSxcbiAgICogaWYgdHJ1ZSwgaXQgcmVmcmVzaCB0aGUgYXBwIHN0YXRlIHZhbHVlIGFuZCB0aGVuIHJldHJpdmVzIGRhdGEuXG4gICAqIEByZXR1cm4gYm9vbGVhbiB2YWx1ZSwgdHJ1ZSBpZiBlbmZvcmNlZCwgZmFsc2Ugb3RoZXJ3aXNlLlxuICAgKi9cbiAgYXN5bmMgZ2V0UGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5KHJlZnJlc2g/KSB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0QmFzaWNBdXRoTG9naW5PcHRpb24ocmVmcmVzaCkudGhlbihsb2dpbk9wdGlvbiA9PiB7XG4gICAgICBjb25zdCBzdHJlbmd0aFZhbGlkaXR5ID0gZ2V0KGxvZ2luT3B0aW9uLCAnc3RyZW5ndGhWYWxpZGl0eScpO1xuICAgICAgaWYgKGlzU3RyaW5nKHN0cmVuZ3RoVmFsaWRpdHkpKSB7XG4gICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcucGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5ID1cbiAgICAgICAgICBzdHJlbmd0aFZhbGlkaXR5ID09PSAndHJ1ZScgPyB0cnVlIDogZmFsc2U7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eSA9ICEhc3RyZW5ndGhWYWxpZGl0eTtcbiAgICAgIH1cbiAgICAgIHJldHVybiB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBGdW5jdGlvbiBkZXRlcm1pbmVzIGlmIGVuZm9yY2VkIHN0cmVuZ3RoIGNoZWNrcyBzaG91bGQgYmUgZW5hYmxlZCBmb3IgY3VycmVudCB0ZW5hbnRcbiAgICogYmFzZWQgb24gcHJvcGVydGllcyByZXRyaWV2ZWQgZnJvbSBsb2dpbk9wdGlvbnNcbiAgICogQHBhcmFtIG9wdGlvbnMgb2JqZWN0IGNvbnRhaW5pbmcgc3BlY2lmaWMgb3B0aW9uczpcbiAgICogICAgLSB7cmVmcmVzaDogdHJ1ZX0gLSByZWZyZXNoZXMgdmFsdWVzIG9mIGFwcCBzdGF0ZSBhbmQgcmV0dXJucyBmcmVzaCB2YWx1ZXMgYXMgcmVzdWx0IG9mIGNhbGxcbiAgICogQHJldHVybiBib29sZWFuIHZhbHVlLCB0cnVlIGlmIHN0cmVuZ3RoIGlzIGVuZm9yY2VkIGZvciB0ZW5hbnQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdldFBhc3N3b3JkU3RyZW5ndGhFbmZvcmNlZChvcHRpb25zPykge1xuICAgIGNvbnN0IHJlZnJlc2ggPSBvcHRpb25zICYmIG9wdGlvbnMucmVmcmVzaDtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW1xuICAgICAgdGhpcy5nZXRFbmZvcmNlUGFzc3dvcmRTdHJlbmd0aChyZWZyZXNoKSxcbiAgICAgIHRoaXMuZ2V0UGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5KHJlZnJlc2gpXG4gICAgXSkudGhlbih2YWx1ZXMgPT4ge1xuICAgICAgY29uc3QgW2VuZm9yY2VQYXNzd29yZFN0cmVuZ3RoLCBwYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHldID0gdmFsdWVzO1xuICAgICAgcmV0dXJuIGVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoIHx8IHBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBDbGVhcnMgYWxsIGJhY2tlbmQgZXJyb3JzLlxuICAgKi9cbiAgY2xlYW5NZXNzYWdlcygpIHtcbiAgICB0aGlzLmFsZXJ0LmNsZWFyQWxsKCk7XG4gIH1cblxuICAvKipcbiAgICogQWRkcyBhIG5ldyBzdWNjZXNzIG1lc3NhZ2VcbiAgICogQHBhcmFtIHN1Y2Nlc3NLZXkgVGhlIGtleSBvZiB0aGUgc3VjY2VzcyBtZXNzYWdlIGFzIHVzZWQgaW4gU1VDQ0VTU19NRVNTQUdFU1xuICAgKi9cbiAgYWRkU3VjY2Vzc01lc3NhZ2Uoc3VjY2Vzc0tleTogc3RyaW5nKSB7XG4gICAgY29uc3Qgc3VjY2Vzc01lc3NhZ2UgPSB0aGlzLlNVQ0NFU1NfTUVTU0FHRVNbc3VjY2Vzc0tleV07XG4gICAgaWYgKHN1Y2Nlc3NNZXNzYWdlKSB7XG4gICAgICB0aGlzLmFsZXJ0LmFkZCh7XG4gICAgICAgIHRleHQ6IHN1Y2Nlc3NNZXNzYWdlLFxuICAgICAgICB0eXBlOiAnc3VjY2VzcycsXG4gICAgICAgIHRpbWVvdXQ6IDBcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHN0cmF0ZWd5LiBEZWZhdWx0cyB0byBjb29raWUsIGlmIGEgdG9rZW5cbiAgICogaXMgZm91bmQgaW4gbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlIHdlIHN3aXRjaCB0byBiYXNpYyBhdXRoLlxuICAgKiBAcmV0dXJucyBUaGUgY3VycmVudCBhdXRoIHN0cmF0ZWd5LlxuICAgKi9cbiAgZ2V0QXV0aFN0cmF0ZWd5KCk6IElBdXRoZW50aWNhdGlvbiB7XG4gICAgbGV0IGF1dGhTdHJhdGVneSA9IHRoaXMuY29va2llQXV0aCBhcyBJQXV0aGVudGljYXRpb247XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFN0b3JlZFRva2VuKCk7XG4gICAgY29uc3QgdGZhID0gdGhpcy5nZXRTdG9yZWRUZmFUb2tlbigpO1xuICAgIGlmICh0b2tlbikge1xuICAgICAgYXV0aFN0cmF0ZWd5ID0gdGhpcy5iYXNpY0F1dGg7XG4gICAgICB0aGlzLnNldENyZWRlbnRpYWxzKHsgdG9rZW4sIHRmYSB9LCB0aGlzLmJhc2ljQXV0aCk7XG4gICAgfVxuICAgIHJldHVybiBhdXRoU3RyYXRlZ3k7XG4gIH1cblxuICAvKipcbiAgICogRm9yY2VzIHRoZSB1c2Ugb2YgYmFzaWMgYXV0aCBhcyBzdHJhdGVneSB3aXRoIHRoaXMgY3JlZGVudGlhbHMuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgY3JlZGVudGlhbHMgdG8gdXNlLlxuICAgKi9cbiAgdXNlQmFzaWNBdXRoKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMpIHtcbiAgICB0aGlzLnNldENyZWRlbnRpYWxzKGNyZWRlbnRpYWxzLCB0aGlzLmJhc2ljQXV0aCk7XG4gICAgcmV0dXJuIHRoaXMuYmFzaWNBdXRoO1xuICB9XG5cbiAgLyoqXG4gICAqIFRyaWVzIHRvIGxvZ2luIGEgdXNlciB3aXRoIHRoZSBnaXZlbiBjcmVkZW50aWFscy5cbiAgICogSWYgc3VjY2Vzc2Z1bCwgdGhlIGN1cnJlbnQgdGVuYW50IGFuZCB1c2VyIGlzIHNldC4gSWYgbm90IGFuIGVycm9yXG4gICAqIGlzIHRocm93bi4gSXQgYWxzbyB2ZXJpZmllcyBpZiB0aGUgdXNlciBpcyBhbGxvd2VkIHRvIG9wZW4gdGhlXG4gICAqIGN1cnJlbnQgYXBwLlxuICAgKiBAcGFyYW0gYXV0aCBUaGUgYXV0aGVudGljYXRpb24gc3RyYXRlZ3kgdXNlZC5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyB0byB0cnkgdG8gbG9naW4uXG4gICAqL1xuICBhc3luYyBsb2dpbihhdXRoOiBJQXV0aGVudGljYXRpb24gPSB0aGlzLmdldEF1dGhTdHJhdGVneSgpLCBjcmVkZW50aWFscz86IElDcmVkZW50aWFscykge1xuICAgIHRoaXMuY2xpZW50LnNldEF1dGgoYXV0aCk7XG5cbiAgICBjb25zdCB0ZW5hbnRSZXMgPSBhd2FpdCB0aGlzLnRlbmFudC5jdXJyZW50KCk7XG4gICAgY29uc3QgdGVuYW50ID0gdGVuYW50UmVzLmRhdGE7XG5cbiAgICBpZiAoY3JlZGVudGlhbHMpIHtcbiAgICAgIGNyZWRlbnRpYWxzLnRlbmFudCA9IHRlbmFudC5uYW1lO1xuICAgIH1cblxuICAgIGlmIChhd2FpdCB0aGlzLnN3aXRjaExvZ2luTW9kZShjcmVkZW50aWFscykpIHtcbiAgICAgIGF1dGggPSB0aGlzLmNvb2tpZUF1dGg7XG4gICAgfVxuXG4gICAgY29uc3QgdXNlclJlcyA9IGF3YWl0IHRoaXMudXNlci5jdXJyZW50KCk7XG4gICAgY29uc3QgdXNlciA9IHVzZXJSZXMuZGF0YTtcbiAgICBhd2FpdCB0aGlzLnZlcmlmeUFwcEFjY2VzcygpO1xuXG4gICAgY29uc3Qgc3VwcG9ydFVzZXJOYW1lID0gdGhpcy5nZXRTdXBwb3J0VXNlck5hbWUoY3JlZGVudGlhbHMpO1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5zZXRDcmVkZW50aWFscyhcbiAgICAgIHtcbiAgICAgICAgdGVuYW50OiB0ZW5hbnQubmFtZSxcbiAgICAgICAgdXNlcjogKHN1cHBvcnRVc2VyTmFtZSA/IGAke3N1cHBvcnRVc2VyTmFtZX0kYCA6ICcnKSArIHVzZXIudXNlck5hbWVcbiAgICAgIH0sXG4gICAgICBhdXRoXG4gICAgKTtcblxuICAgIGlmICh0b2tlbikge1xuICAgICAgdGhpcy5zdG9yZUJhc2ljQXV0aFRva2VuKHRva2VuKTtcbiAgICB9XG5cbiAgICBhd2FpdCB0aGlzLmF1dGhGdWxmaWxsZWQodGVuYW50LCB1c2VyLCBzdXBwb3J0VXNlck5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRlbmFudCwgdXNlciBhbmQgc3VwcG9ydCB1c2VyIGluZm8gdG8gdGhlIGFwcCBzdGF0ZS5cbiAgICogQHBhcmFtIHRlbmFudCBUaGUgY3VycmVudCB0ZW5hbnQgb2JqZWN0LlxuICAgKiBAcGFyYW0gdXNlciBUaGUgY3VycmVudCB1c2VyIG9iamVjdC5cbiAgICogQHBhcmFtIHN1cHBvcnRVc2VyTmFtZSBUaGUgY3VycmVudCBzdXBwb3J0IHVzZXIgbmFtZS5cbiAgICovXG4gIGFzeW5jIGF1dGhGdWxmaWxsZWQodGVuYW50PywgdXNlcj8sIHN1cHBvcnRVc2VyTmFtZT8pIHtcbiAgICBpZiAoIXRlbmFudCkge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLnRlbmFudC5jdXJyZW50KCk7XG4gICAgICB0ZW5hbnQgPSBkYXRhO1xuICAgICAgdGhpcy5jbGllbnQudGVuYW50ID0gdGVuYW50Lm5hbWU7XG4gICAgfVxuXG4gICAgaWYgKCF1c2VyKSB7XG4gICAgICBjb25zdCB7IGRhdGEgfSA9IGF3YWl0IHRoaXMudXNlci5jdXJyZW50KCk7XG4gICAgICB1c2VyID0gZGF0YTtcbiAgICB9XG5cbiAgICBpZiAoIXN1cHBvcnRVc2VyTmFtZSkge1xuICAgICAgc3VwcG9ydFVzZXJOYW1lID0gbnVsbDtcbiAgICB9XG5cbiAgICB0aGlzLnVpLnNldFVzZXIoeyB1c2VyLCBzdXBwb3J0VXNlck5hbWUgfSk7XG4gICAgdGhpcy51aS5jdXJyZW50VGVuYW50Lm5leHQodGVuYW50KTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTd2l0Y2ggdGhlIGxvZ2luIG1vZGUgdG8gQ29va2llQXV0aCBpZiB0aGVcbiAgICogdXNlciBoYXMgY29uZmlndXJlZCB0byB1c2UgaXQgaW4gbG9naW5PcHRpb25zLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgVGhlIGNyZWRlbnRpYWxzIGZvciB0aGF0IGxvZ2luXG4gICAqL1xuICBhc3luYyBzd2l0Y2hMb2dpbk1vZGUoY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpIHtcbiAgICBjb25zdCBpc1Bhc3N3b3JkR3JhbnRMb2dpbiA9IGF3YWl0IHRoaXMuaXNQYXNzd29yZEdyYW50TG9naW4oY3JlZGVudGlhbHMpO1xuICAgIGlmIChpc1Bhc3N3b3JkR3JhbnRMb2dpbiAmJiBjcmVkZW50aWFscykge1xuICAgICAgY29uc3QgcmVzID0gYXdhaXQgdGhpcy5nZW5lcmF0ZU9hdXRoVG9rZW4oY3JlZGVudGlhbHMpO1xuICAgICAgaWYgKCEocmVzIGFzIFJlc3BvbnNlKS5vaykge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXMuanNvbigpO1xuICAgICAgICAgIHRocm93IHsgcmVzLCBkYXRhIH07XG4gICAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgICAgdGhyb3cgZXg7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHRoaXMuY2xpZW50LnNldEF1dGgodGhpcy5jb29raWVBdXRoKTtcbiAgICAgIHRoaXMuY2xlYW5Mb2NhbFN0b3JhZ2UoKTtcbiAgICAgIHRoaXMuYmFzaWNBdXRoLmxvZ291dCgpO1xuICAgIH1cbiAgICByZXR1cm4gaXNQYXNzd29yZEdyYW50TG9naW47XG4gIH1cblxuICBhc3luYyBnZW5lcmF0ZU9hdXRoVG9rZW4oY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpIHtcbiAgICBpZiAoKGF3YWl0IHRoaXMuaXNQYXNzd29yZEdyYW50TG9naW4oY3JlZGVudGlhbHMpKSAmJiBjcmVkZW50aWFscykge1xuICAgICAgY29uc3QgcGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh7XG4gICAgICAgIGdyYW50X3R5cGU6ICdQQVNTV09SRCcsXG4gICAgICAgIHVzZXJuYW1lOiBjcmVkZW50aWFscy51c2VyLFxuICAgICAgICBwYXNzd29yZDogY3JlZGVudGlhbHMucGFzc3dvcmQsXG4gICAgICAgIHRmYV9jb2RlOiBjcmVkZW50aWFscy50ZmFcbiAgICAgIH0pO1xuICAgICAgcmV0dXJuIGF3YWl0IG5ldyBGZXRjaENsaWVudCgpLmZldGNoKHRoaXMuZ2V0VXJsRm9yT2F1dGgoY3JlZGVudGlhbHMpLCB7XG4gICAgICAgIG1ldGhvZDogJ1BPU1QnLFxuICAgICAgICBib2R5OiBwYXJhbXMudG9TdHJpbmcoKSxcbiAgICAgICAgaGVhZGVyczoge1xuICAgICAgICAgICdjb250ZW50LXR5cGUnOiAnYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9VVRGLTgnXG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgbGV0IGxvZ2luTW9kZSA9IHRoaXMubG9naW5Nb2RlO1xuXG4gICAgaWYgKHRoaXMuaXNTdXBwb3J0VXNlcihjcmVkZW50aWFscykpIHtcbiAgICAgIGlmICghdGhpcy5tYW5hZ2VtZW50TG9naW5Nb2RlKSB7XG4gICAgICAgIHRoaXMubWFuYWdlbWVudExvZ2luTW9kZSA9IGF3YWl0IHRoaXMuZ2V0TWFuYWdlbWVudExvZ2luTW9kZSgpO1xuICAgICAgfVxuICAgICAgbG9naW5Nb2RlID0gdGhpcy5tYW5hZ2VtZW50TG9naW5Nb2RlO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLnRlbmFudFVpU2VydmljZS5pc09hdXRoSW50ZXJuYWwobG9naW5Nb2RlKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgcHJvdmlkZWQgY3JlZGVudGlhbHMgdXNlIGEgc3VwcG9ydCB1c2VyIHRvIGxvZyBpbiBvciBub3QuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBDcmVkZW50aWFscyB0byBjaGVjay5cbiAgICogQHJldHVybnMge2Jvb2xlYW59IFJldHVybnMgdHJ1ZSBpZiB1c2VyIGlzIGEgc3VwcG9ydCB1c2VyLlxuICAgKi9cbiAgaXNTdXBwb3J0VXNlcihjcmVkZW50aWFscz86IElDcmVkZW50aWFscyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiBjcmVkZW50aWFscyAmJiBjcmVkZW50aWFscy51c2VyLmluY2x1ZGVzKCckJyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHRlbmFudCBpbnB1dCBmaWVsZCBzaG91bGQgYmUgc2hvd25cbiAgICogb3Igbm90LlxuICAgKiBAcmV0dXJucyBJZiB0cnVlLCBzaG93IHRoZSB0ZW5hbnQgaW5wdXQuXG4gICAqL1xuICBzaG93VGVuYW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhdGhpcy51aS5zdGF0ZS5sb2dpbk9wdGlvbnMgfHwgdGhpcy5pc0xvY2FsKCkgfHwgdGhpcy5pc1Nob3dUZW5hbnQoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBWZXJpZmllcyBpZiB0aGUgdGVuYW50IHNldHVwIHNob3VsZCBiZSBzaG93blxuICAgKiBvciBub3QuXG4gICAqIEByZXR1cm5zIElmIHRydWUsIHNob3cgdGhlIHRlbmFudCBpbnB1dC5cbiAgICovXG4gIHNob3dUZW5hbnRTZXR1cCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudWkuc3RhdGUubG9naW5PcHRpb25zICYmICF0aGlzLmlzTG9jYWwoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBMb2dzIHRoZSB1c2VyIG91dFxuICAgKiBAcGFyYW0gcmVsb2FkIElmIHNldCB0byBmYWxzZSwgdGhlIHBhZ2Ugd2lsbCBub3QgcmVsb2FkXG4gICAqL1xuICBhc3luYyBsb2dvdXQocmVsb2FkID0gdHJ1ZSkge1xuICAgIGxldCByZXNEYXRhID0gbnVsbDtcbiAgICB0cnkge1xuICAgICAgY29uc3QgWywgY29va2llUmVzXSA9IGF3YWl0IHRoaXMucmVzZXQoKTtcbiAgICAgIHJlc0RhdGEgPSBhd2FpdCBjb29raWVSZXMuanNvbigpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0LnJlbW92ZUxhc3REYW5nZXIoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgaWYgKHJlc0RhdGEgJiYgcmVzRGF0YS51cmwpIHtcbiAgICAgICAgdGhpcy5yZWRpcmVjdChyZXNEYXRhLnVybCk7XG4gICAgICB9IGVsc2UgaWYgKHJlbG9hZCkge1xuICAgICAgICB0aGlzLmxvY2F0aW9uLnJlcGxhY2VTdGF0ZSh7fSwgJycsICcnLCAnJyk7XG4gICAgICAgIHdpbmRvdy5sb2NhdGlvbi5yZWxvYWQoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmVzZXRzIHRoZSBzdG9yZWQgYXV0aC1kYXRhXG4gICAqL1xuICBhc3luYyByZXNldCgpIHtcbiAgICB0aGlzLmNsZWFuTG9jYWxTdG9yYWdlKCk7XG4gICAgdGhpcy5jbGVhblNlc3Npb25TdG9yYWdlKCk7XG4gICAgdGhpcy5yZWFsdGltZS5kaXNjb25uZWN0KCk7XG4gICAgdGhpcy51aS5jdXJyZW50VXNlci5uZXh0KG51bGwpO1xuICAgIHJldHVybiBQcm9taXNlLmFsbChbdGhpcy5iYXNpY0F1dGgubG9nb3V0KCksIHRoaXMuY29va2llQXV0aC5sb2dvdXQoKV0pO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmVzIHRoZSBURkEgdG9rZW4gdG8gbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlLlxuICAgKiBAcGFyYW0gdGZhVG9rZW4gVGhlIHRmYSB0b2tlbiB0byBzYXZlLlxuICAgKiBAcGFyYW0gc3RvcmFnZSBUaGUgc3RvcmFnZSB0byB1c2UgKGxvY2FsIG9yIHNlc3Npb24pLlxuICAgKi9cbiAgc2F2ZVRGQVRva2VuKHRmYVRva2VuOiBzdHJpbmcsIHN0b3JhZ2U6IFN0b3JhZ2UpIHtcbiAgICBzdG9yYWdlLnNldEl0ZW0odGhpcy5URkFUT0tFTl9LRVksIHRmYVRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXF1ZXN0IHRoZSBtYW5pZmVzdCAtPiBvbiA0MDEgdXNlciBoYXMgbm8gYWNjZXNzIHRvIHRoYXQgYXBwbGljYXRpb25cbiAgICogYW5kIHdlIHRocm93IHRoZSBlcnJvciB1cCB0byB0aGUgbG9naW4gZm9ybS5cbiAgICovXG4gIGFzeW5jIHZlcmlmeUFwcEFjY2VzcygpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy51aS5sb2FkTWFuaWZlc3QoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgaWYgKCEoZXgucmVzICYmIGV4LnJlcy5zdGF0dXMgPT09IDQwNCAmJiB0aGlzLmlzTG9jYWwoKSkpIHtcbiAgICAgICAgdGhyb3cgZXg7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgcmVkaXJlY3RUb0RvbWFpbihkb21haW4pIHtcbiAgICBjb25zdCBvcmlnaW5VcmwgPSBuZXcgVVJMKHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgICBjb25zdCByZWRpcmVjdFVybCA9IG9yaWdpblVybC5ocmVmLnJlcGxhY2Uob3JpZ2luVXJsLmhvc3RuYW1lLCBkb21haW4pO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gcmVkaXJlY3RVcmw7XG4gIH1cblxuICAvKipcbiAgICogU2V0cyB0aGUgdGVuYW50IHRvIHRoZSBjbGllbnQgYW5kIHVwZGF0ZXMgdGhlIGNyZWRlbnRpYWxzIG9uIHRoZVxuICAgKiBhdXRoIHN0cmF0ZWd5LlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgVGhlIG5hbWUgb2YgdGhlIHRlbmFudC5cbiAgICogQHBhcmFtIGF1dGhTdHJhdGVneSBUaGUgYXV0aGVudGljYXRpb24gc3RyYXRlZ3kgdXNlZC5cbiAgICogQHJldHVybiBSZXR1cm5zIHRoZSB0b2tlbiBpZiBiYXNpYyBhdXRoLCBvdGhlcndpc2UgdW5kZWZpbmVkLlxuICAgKi9cbiAgcHJpdmF0ZSBzZXRDcmVkZW50aWFscyhjcmVkZW50aWFsczogSUNyZWRlbnRpYWxzLCBhdXRoU3RyYXRlZ3k6IElBdXRoZW50aWNhdGlvbikge1xuICAgIGlmIChjcmVkZW50aWFscy50ZW5hbnQpIHtcbiAgICAgIHRoaXMuY2xpZW50LnRlbmFudCA9IGNyZWRlbnRpYWxzLnRlbmFudDtcbiAgICB9XG4gICAgLy8gQ2hlY2sgaWYgYSB0b2tlbiBpcyBhbHJlYWR5IHNldCAoY2FzZSBmb3Igc3VwcG9ydCB1c2VyIGxvZ2luKVxuICAgIC8vIGlmIHllcyAtPiB3ZSBqdXN0IG5lZWQgdG8gdXBkYXRlIHRoZSB1c2VyLCBhbmQgcmV1c2UgdGhlIHRva2VuXG4gICAgLy8gb2YgdGhlIHN1cHBvcnQgdXNlci5cbiAgICAvLyBUaGVyZWZvcmUgd2UgbmVlZCB0byBwYXNzIHVzZXIgYW5kIHRlbmFudCwgdG8gZ2V0XG4gICAgLy8ganVzdCB0aGUgc3RvcmVkIHRva2VuIGFuZCBub3RoaW5nIGVsc2UgKHNlZSBCYXNpY0F1dGgudHM6MzEpLlxuICAgIGNvbnN0IHRva2VuID0gdGhpcy5iYXNpY0F1dGgudXBkYXRlQ3JlZGVudGlhbHMoe1xuICAgICAgdGVuYW50OiBjcmVkZW50aWFscy50ZW5hbnQsXG4gICAgICB1c2VyOiBjcmVkZW50aWFscy51c2VyXG4gICAgfSk7XG4gICAgY29uc3QgbmV3Q3JlZGVudGlhbHMgPSB7IHRva2VuLCAuLi5jcmVkZW50aWFscyB9O1xuXG4gICAgcmV0dXJuIGF1dGhTdHJhdGVneS51cGRhdGVDcmVkZW50aWFscyhuZXdDcmVkZW50aWFscyk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIGN1cnJlbnQgdXNlciBpcyBhIGRldmVsb3BlciBvciBub3QuXG4gICAqIFJ1bm5pbmcgb24gbG9jYWxob3N0IG1lYW5zIGRldmVsb3BtZW50IG1vZGUuXG4gICAqL1xuICBwcml2YXRlIGlzTG9jYWwoKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaG9zdG5hbWUgPSB3aW5kb3cubG9jYXRpb24uaG9zdG5hbWU7XG4gICAgcmV0dXJuIHRoaXMubG9jYWxob3N0SXBSZWdFeHAudGVzdChob3N0bmFtZSkgfHwgdGhpcy5sb2NhbGhvc3RSZWdFeHAudGVzdChob3N0bmFtZSk7XG4gIH1cblxuICAvKipcbiAgICogU2F2ZSB0aGUgdG9rZW4gdG8gbG9jYWwgb3Igc2Vzc2lvbiBzdG9yYWdlLlxuICAgKiBAcGFyYW0gdG9rZW4gVGhlIHRva2VuIHRvIHNhdmUuXG4gICAqIEBwYXJhbSBzdG9yYWdlIFRoZSBzdG9yYWdlIHRvIHVzZSAobG9jYWwgb3Igc2Vzc2lvbikuXG4gICAqL1xuICBwcml2YXRlIHNhdmVUb2tlbih0b2tlbjogc3RyaW5nLCBzdG9yYWdlOiBTdG9yYWdlKSB7XG4gICAgc3RvcmFnZS5zZXRJdGVtKHRoaXMuVE9LRU5fS0VZLCB0b2tlbik7XG4gIH1cblxuICBwcml2YXRlIHN0b3JlQmFzaWNBdXRoVG9rZW4odG9rZW46IHN0cmluZykge1xuICAgIHRoaXMuc2F2ZVRva2VuKHRva2VuLCBzZXNzaW9uU3RvcmFnZSk7XG4gICAgaWYgKHRoaXMucmVtZW1iZXJNZSkge1xuICAgICAgdGhpcy5zYXZlVG9rZW4odG9rZW4sIGxvY2FsU3RvcmFnZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjbGVhbkxvY2FsU3RvcmFnZSgpIHtcbiAgICBsb2NhbFN0b3JhZ2UucmVtb3ZlSXRlbSh0aGlzLlRPS0VOX0tFWSk7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5URkFUT0tFTl9LRVkpO1xuICB9XG5cbiAgcHJpdmF0ZSBjbGVhblNlc3Npb25TdG9yYWdlKCkge1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5UT0tFTl9LRVkpO1xuICAgIHNlc3Npb25TdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5URkFUT0tFTl9LRVkpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc1Nob3dUZW5hbnQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc2hvd1RlbmFudFJlZ0V4cC50ZXN0KHdpbmRvdy5sb2NhdGlvbi5ocmVmKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVkaXJlY3QodXJsOiBzdHJpbmcpIHtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHVybDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0QmFzaWNBdXRoTG9naW5PcHRpb24ocmVmcmVzaD8pOiBQcm9taXNlPElUZW5hbnRMb2dpbk9wdGlvbj4ge1xuICAgIGlmIChyZWZyZXNoKSB7XG4gICAgICBhd2FpdCB0aGlzLnVpLnJlZnJlc2hMb2dpbk9wdGlvbnMoKTtcbiAgICB9XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gdGhpcy51aS5zdGF0ZS5sb2dpbk9wdGlvbnMgfHwgW107XG4gICAgY29uc3QgYmFzaWNBdXRoTG9naW5PcHRpb24gPSBsb2dpbk9wdGlvbnMuZmluZCgoeyB0eXBlIH0pID0+IHR5cGUgPT09ICdCQVNJQycpO1xuICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoYmFzaWNBdXRoTG9naW5PcHRpb24pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgc3VwcG9ydCB1c2VyIG5hbWUgZnJvbSBjcmVkZW50aWFscy5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIENyZWRlbnRpYWxzIG9iamVjdCAoZGVmYXVsdHMgdG8gdGhlIHN0b3JlZCBvbmUpLlxuICAgKiBAcmV0dXJucyBTdXBwb3J0IHVzZXIgbmFtZS5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3VwcG9ydFVzZXJOYW1lKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMgPSB0aGlzLmdldFN0b3JlZENyZWRlbnRpYWxzKCkpOiBzdHJpbmcge1xuICAgIGlmICghY3JlZGVudGlhbHMpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgICBjb25zdCBzdXBwb3J0VXNlck5hbWUgPSBjcmVkZW50aWFscy51c2VyLm1hdGNoKC9eKC4rXFwvKT8oKC4rKVxcJCk/KC4rKT8kLylbM107XG4gICAgcmV0dXJuIHN1cHBvcnRVc2VyTmFtZTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIGNyZWRlbnRpYWxzIG9iamVjdCBmcm9tIHRoZSBzdG9yZWQgdG9rZW4uXG4gICAqIEByZXR1cm5zIENyZWRlbnRpYWxzIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RvcmVkQ3JlZGVudGlhbHMoKTogSUNyZWRlbnRpYWxzIHtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuZ2V0U3RvcmVkVG9rZW4oKTtcbiAgICBpZiAoIXRva2VuKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuZGVjb2RlVG9rZW4odG9rZW4pO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgc3RvcmVkIHRva2VuIGZyb20gbG9jYWwgc3RvcmFnZSBvciBzZXNzaW9uIHN0b3JhZ2UuXG4gICAqIEByZXR1cm5zIFN0b3JlZCB0b2tlbi5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RvcmVkVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5UT0tFTl9LRVkpIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5UT0tFTl9LRVkpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldHMgc3RvcmVkIFRGQSB0b2tlbiBmcm9tIGxvY2FsIHN0b3JhZ2Ugb3Igc2Vzc2lvbiBzdG9yYWdlLlxuICAgKiBAcmV0dXJucyBTdG9yZWQgVEZBIHRva2VuLlxuICAgKi9cbiAgcHJpdmF0ZSBnZXRTdG9yZWRUZmFUb2tlbigpOiBzdHJpbmcge1xuICAgIHJldHVybiBsb2NhbFN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRGQVRPS0VOX0tFWSkgfHwgc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbSh0aGlzLlRGQVRPS0VOX0tFWSk7XG4gIH1cblxuICAvKipcbiAgICogRGVjb2RlcyB0b2tlbiB0byBjcmVkZW50aWFscyBvYmplY3QuXG4gICAqIEBwYXJhbSB0b2tlbiBUb2tlbiB0byBkZWNvZGUuXG4gICAqIEByZXR1cm5zIENyZWRlbnRpYWxzIG9iamVjdC5cbiAgICovXG4gIHByaXZhdGUgZGVjb2RlVG9rZW4odG9rZW46IHN0cmluZyk6IElDcmVkZW50aWFscyB7XG4gICAgY29uc3QgZGVjb2RlZCA9IGRlY29kZVVSSUNvbXBvbmVudChlc2NhcGUod2luZG93LmF0b2IodG9rZW4pKSk7XG4gICAgY29uc3Qgc3BsaXQgPSBkZWNvZGVkLm1hdGNoKC8oKFteL10qKVxcLyk/KFteLzpdKyk6KC4rKS8pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHRlbmFudDogc3BsaXRbMl0sXG4gICAgICB1c2VyOiBzcGxpdFszXSxcbiAgICAgIHBhc3N3b3JkOiBzcGxpdFs0XVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIGdldFVybEZvck9hdXRoKGNyZWRlbnRpYWxzOiBJQ3JlZGVudGlhbHMpIHtcbiAgICBpZiAoaXNFbXB0eShjcmVkZW50aWFscy50ZW5hbnQpICYmIHRoaXMubG9naW5Nb2RlLmluaXRSZXF1ZXN0KSB7XG4gICAgICBjb25zdCB1cmxQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHRoaXMubG9naW5Nb2RlLmluaXRSZXF1ZXN0LnNwbGl0KCc/JykucG9wKCkpO1xuICAgICAgY3JlZGVudGlhbHMudGVuYW50ID0gdXJsUGFyYW1zLmdldCgndGVuYW50X2lkJyk7XG4gICAgfVxuICAgIHJldHVybiAhaXNFbXB0eShjcmVkZW50aWFscy50ZW5hbnQpXG4gICAgICA/IGB0ZW5hbnQvb2F1dGg/dGVuYW50X2lkPSR7Y3JlZGVudGlhbHMudGVuYW50fWBcbiAgICAgIDogYHRlbmFudC9vYXV0aGA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldE1hbmFnZW1lbnRMb2dpbk1vZGUoKSB7XG4gICAgY29uc3QgbWFuYWdlbWVudExvZ2luT3B0aW9ucyA9IChhd2FpdCB0aGlzLnRlbmFudExvZ2luT3B0aW9uc1NlcnZpY2UubGlzdEZvck1hbmFnZW1lbnQoKSkuZGF0YTtcbiAgICByZXR1cm4gdGhpcy50ZW5hbnRVaVNlcnZpY2UuZ2V0UHJlZmVycmVkTG9naW5PcHRpb24obWFuYWdlbWVudExvZ2luT3B0aW9ucyk7XG4gIH1cbn1cbiJdfQ==
565
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9naW4uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2NvcmUvbG9naW4vbG9naW4uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDL0QsT0FBTyxFQUNMLFNBQVMsRUFDVCxVQUFVLEVBQ1YsV0FBVyxFQUlYLFFBQVEsRUFDUix5QkFBeUIsRUFDekIsYUFBYSxFQUNiLFdBQVcsRUFDWixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDN0QsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3RELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDckQsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBQzlELE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzQyxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7OztBQUV2RDs7R0FFRztBQUVILE1BQU0sT0FBTyxZQUFZO0lBK0R2QixZQUNVLFFBQWtCLEVBQ2xCLE1BQW1CLEVBQ25CLFNBQW9CLEVBQ3BCLFVBQXNCLEVBQ3RCLEVBQW1CLEVBQ25CLElBQWlCLEVBQ2pCLE1BQXFCLEVBQ3JCLFFBQWtCLEVB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QyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztZQUNuRixXQUFXLENBQUMsTUFBTSxHQUFHLFNBQVMsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDakQ7UUFDRCxPQUFPLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUM7WUFDakMsQ0FBQyxDQUFDLDBCQUEwQixXQUFXLENBQUMsTUFBTSxFQUFFO1lBQ2hELENBQUMsQ0FBQyxjQUFjLENBQUM7SUFDckIsQ0FBQztJQUVPLEtBQUssQ0FBQyxzQkFBc0I7UUFDbEMsTUFBTSxzQkFBc0IsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLHlCQUF5QixDQUFDLGlCQUFpQixFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDL0YsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDOUUsQ0FBQzs7eUdBbm1CVSxZQUFZOzZHQUFaLFlBQVk7MkZBQVosWUFBWTtrQkFEeEIsVUFBVTs7MEJBOEVOLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RvciwgSW5qZWN0YWJsZSwgT3B0aW9uYWwgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gIEJhc2ljQXV0aCxcbiAgQ29va2llQXV0aCxcbiAgRmV0Y2hDbGllbnQsXG4gIElBdXRoZW50aWNhdGlvbixcbiAgSUNyZWRlbnRpYWxzLFxuICBJVGVuYW50TG9naW5PcHRpb24sXG4gIFJlYWx0aW1lLFxuICBUZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlLFxuICBUZW5hbnRTZXJ2aWNlLFxuICBVc2VyU2VydmljZVxufSBmcm9tICdAYzh5L2NsaWVudCc7XG5pbXBvcnQgeyBBcHBTdGF0ZVNlcnZpY2UgfSBmcm9tICcuLi9jb21tb24vdWktc3RhdGUuc2VydmljZSc7XG5pbXBvcnQgeyBBbGVydFNlcnZpY2UgfSBmcm9tICcuLi9hbGVydC9hbGVydC5zZXJ2aWNlJztcbmltcG9ydCB7IGdldHRleHQgfSBmcm9tICcuLi9pMThuL2dldHRleHQnO1xuaW1wb3J0IHsgQXBpU2VydmljZSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvYXBpJztcbmltcG9ydCB7IFRlbmFudFVpU2VydmljZSB9IGZyb20gJy4uL2NvbW1vbi90ZW5hbnQtdWkuc2VydmljZSc7XG5pbXBvcnQgeyBzd2l0Y2hNYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBMb2NhdGlvblN0cmF0ZWd5IH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IGdldCwgaXNTdHJpbmcsIGlzRW1wdHkgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG4vKipcbiAqIFNlcnZpY2UgdG8gbWFuYWdlIHRoZSBsb2dpbi5cbiAqL1xuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIExvZ2luU2VydmljZSB7XG4gIHJlbWVtYmVyTWUgPSBmYWxzZTtcbiAgVE9LRU5fS0VZID0gJ190Y3k4JztcbiAgVEZBVE9LRU5fS0VZID0gJ1RGQVRva2VuJztcbiAgbG9naW5Nb2RlOiBJVGVuYW50TG9naW5PcHRpb247XG4gIG1hbmFnZW1lbnRMb2dpbk1vZGU6IElUZW5hbnRMb2dpbk9wdGlvbjtcbiAgb2F1dGhPcHRpb25zOiBJVGVuYW50TG9naW5PcHRpb247XG4gIGlzRmlyc3RMb2dpbiA9IHRydWU7XG4gIEdSRUVOX01JTl9MRU5HVEhfREVGQVVMVCA9IDg7XG4gIGF1dG9tYXRpY0xvZ2luSW5Qcm9ncmVzcyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0KGZhbHNlKTtcblxuICAvLyB0c2xpbnQ6ZGlzYWJsZTptYXgtbGluZS1sZW5ndGhcbiAgRVJST1JfTUVTU0FHRVMgPSB7XG4gICAgbWlubGVuZ3RoOiBnZXR0ZXh0KCdQYXNzd29yZCBtdXN0IGhhdmUgYXQgbGVhc3QgOCBjaGFyYWN0ZXJzIGFuZCBubyBtb3JlIHRoYW4gMzIuJyksXG4gICAgcGFzc3dvcmRfbWlzc21hdGNoOiBnZXR0ZXh0KCdQYXNzd29yZCBjb25maXJtYXRpb24gZG9lcyBub3QgbWF0Y2guJyksXG4gICAgbWF4bGVuZ3RoOiBnZXR0ZXh0KCdQYXNzd29yZCBtdXN0IGhhdmUgYXQgbGVhc3QgOCBjaGFyYWN0ZXJzIGFuZCBubyBtb3JlIHRoYW4gMzIuJyksXG4gICAgcGFzc3dvcmRfc3RyZW5ndGg6IGdldHRleHQoXG4gICAgICAnWW91ciBwYXNzd29yZCBpcyBub3Qgc3Ryb25nIGVub3VnaC4gUGxlYXNlIGluY2x1ZGUgbnVtYmVycywgbG93ZXIgYW5kIHVwcGVyIGNhc2UgY2hhcmFjdGVycydcbiAgICApLFxuICAgIHJlbW90ZV9lcnJvcjogZ2V0dGV4dCgnU2VydmVyIGVycm9yIG9jY3VycmVkLicpLFxuICAgIGVtYWlsOiBnZXR0ZXh0KCdJbnZhbGlkIGVtYWlsIGFkZHJlc3MuJyksXG4gICAgcGFzc3dvcmRfY2hhbmdlOiBnZXR0ZXh0KCdZb3VyIHBhc3N3b3JkIGlzIGV4cGlyZWQuIFBsZWFzZSBzZXQgYSBuZXcgcGFzc3dvcmQuJyksXG4gICAgcGFzc3dvcmRfcmVzZXRfdG9rZW5fZXhwaXJlZDogZ2V0dGV4dChcbiAgICAgICdQYXNzd29yZCByZXNldCBsaW5rIGV4cGlyZWQuIFBsZWFzZSBlbnRlciB5b3VyIGVtYWlsIGFkZHJlc3MgdG8gcmVjZWl2ZSBhIG5ldyBvbmUuJ1xuICAgICksXG4gICAgdGZhX3Bpbl9pbnZhbGlkOiBnZXR0ZXh0KCdUaGUgY29kZSB5b3UgZW50ZXJlZCBpcyBpbnZhbGlkLiBQbGVhc2UgdHJ5IGFnYWluLicpLFxuICAgIHBhdHRlcm5fbmV3UGFzc3dvcmQ6IHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgZ2V0dGV4dChcbiAgICAgICAgJ1Bhc3N3b3JkIG11c3QgaGF2ZSBhdCBsZWFzdCA4IGNoYXJhY3RlcnMgYW5kIG5vIG1vcmUgdGhhbiAzMiBhbmQgY2FuIG9ubHkgY29udGFpbiBsZXR0ZXJzLCBudW1iZXJzIGFuZCBmb2xsb3dpbmcgc3ltYm9sczoge3sgc3ltYm9scyB9fSdcbiAgICAgICksXG4gICAgICB7IHN5bWJvbHM6ICdgfiFAIyQlXiYqKClffCstPT87OlxcJ1wiLC48Pnt9W11cXFxcLycgfVxuICAgICksXG4gICAgaW50ZXJuYXRpb25hbFBob25lTnVtYmVyOiBnZXR0ZXh0KFxuICAgICAgJ011c3QgYmUgYSB2YWxpZCBwaG9uZSBudW1iZXIgKG9ubHkgZGlnaXRzLCBzcGFjZXMsIHNsYXNoZXMgKFwiL1wiKSwgZGFzaGVzIChcIi1cIiksIGFuZCBwbHVzIChcIitcIikgYWxsb3dlZCwgZm9yIGV4YW1wbGU6ICs0OSA5IDg3NiA1NDMgMjEwKS4nXG4gICAgKSxcbiAgICBwaG9uZV9udW1iZXJfZXJyb3I6IGdldHRleHQoJ0NvdWxkIG5vdCB1cGRhdGUgcGhvbmUgbnVtYmVyLicpLFxuICAgIHBpbkFscmVhZHlTZW50OiBnZXR0ZXh0KFxuICAgICAgJ1RoZSB2ZXJpZmljYXRpb24gY29kZSB3YXMgYWxyZWFkeSBzZW50LiBGb3IgYSBuZXcgdmVyaWZpY2F0aW9uIGNvZGUsIHBsZWFzZSBjbGljayBvbiB0aGUgbGluayBhYm92ZS4nXG4gICAgKSxcbiAgICBwYXNzd29yZENvbmZpcm06IGdldHRleHQoJ1Bhc3N3b3JkIGNvbmZpcm1hdGlvbiBkb2VzIG5vdCBtYXRjaC4nKSxcbiAgICB0ZmFFeHBpcmVkOiBnZXR0ZXh0KCdUd28tZmFjdG9yIGF1dGhlbnRpY2F0aW9uIHRva2VuIGV4cGlyZWQuJylcbiAgfTtcbiAgLy8gdHNsaW50OmVuYWJsZTptYXgtbGluZS1sZW5ndGhcblxuICBwcml2YXRlIFNVQ0NFU1NfTUVTU0FHRVMgPSB7XG4gICAgcGFzc3dvcmRfY2hhbmdlZDogZ2V0dGV4dCgnUGFzc3dvcmQgY2hhbmdlZC4gWW91IGNhbiBub3cgbG9nIGluIHVzaW5nIG5ldyBwYXNzd29yZC4nKSxcbiAgICBwYXNzd29yZF9yZXNldF9yZXF1ZXN0ZWQ6IGdldHRleHQoXG4gICAgICAnUGFzc3dvcmQgcmVzZXQgcmVxdWVzdCBoYXMgYmVlbiBzZW50LiBQbGVhc2UgY2hlY2sgeW91ciBlbWFpbC4nXG4gICAgKSxcbiAgICByZXNlbmRfc21zOiBnZXR0ZXh0KCdWZXJpZmljYXRpb24gY29kZSBTTVMgcmVzZW50LicpLFxuICAgIHNlbmRfc21zOiBnZXR0ZXh0KCdWZXJpZmljYXRpb24gY29kZSBTTVMgc2VudC4nKVxuICB9O1xuXG4gIHByaXZhdGUgcGFzc3dvcmRTdHJlbmd0aFNldHRpbmcgPSB7XG4gICAgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGg6IGZhbHNlLFxuICAgIGdyZWVuTWluTGVuZ3RoOiB0aGlzLkdSRUVOX01JTl9MRU5HVEhfREVGQVVMVCxcbiAgICBwYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk6IGZhbHNlXG4gIH07XG5cbiAgcHJpdmF0ZSBsb2NhbGhvc3RSZWdFeHAgPSBuZXcgUmVnRXhwKCdsb2NhbGhvc3QnKTtcbiAgcHJpdmF0ZSBsb2NhbGhvc3RJcFJlZ0V4cCA9IG5ldyBSZWdFeHAoJzEyNy4wLjAuMScpO1xuICBwcml2YXRlIHNob3dUZW5hbnRSZWdFeHAgPSBuZXcgUmVnRXhwKCdzaG93VGVuYW50Jyk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBpbmplY3RvcjogSW5qZWN0b3IsXG4gICAgcHJpdmF0ZSBjbGllbnQ6IEZldGNoQ2xpZW50LFxuICAgIHByaXZhdGUgYmFzaWNBdXRoOiBCYXNpY0F1dGgsXG4gICAgcHJpdmF0ZSBjb29raWVBdXRoOiBDb29raWVBdXRoLFxuICAgIHByaXZhdGUgdWk6IEFwcFN0YXRlU2VydmljZSxcbiAgICBwcml2YXRlIHVzZXI6IFVzZXJTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50OiBUZW5hbnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgcmVhbHRpbWU6IFJlYWx0aW1lLFxuICAgIHByaXZhdGUgYWxlcnQ6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIGFwaTogQXBpU2VydmljZSxcbiAgICBwcml2YXRlIHRlbmFudFVpU2VydmljZTogVGVuYW50VWlTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50TG9naW5PcHRpb25zU2VydmljZTogVGVuYW50TG9naW5PcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHRyYW5zbGF0ZVNlcnZpY2U6IFRyYW5zbGF0ZVNlcnZpY2UsXG4gICAgQE9wdGlvbmFsKCkgcHJpdmF0ZSBsb2NhdGlvbjogTG9jYXRpb25TdHJhdGVneVxuICApIHtcbiAgICB0aGlzLmF1dG9Mb2dvdXQoKTtcbiAgICB0aGlzLmluaXRMb2dpbk9wdGlvbnMoKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHRlbmFudC5cbiAgICogQHJldHVybiBUaGUgdGVuYW50IG5hbWUuXG4gICAqL1xuICBnZXRUZW5hbnQoKSB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50LnRlbmFudDtcbiAgfVxuXG4gIGluaXRMb2dpbk9wdGlvbnMoKSB7XG4gICAgY29uc3QgbG9naW5PcHRpb25zID0gdGhpcy51aS5zdGF0ZS5sb2dpbk9wdGlvbnMgfHwgW107XG4gICAgdGhpcy5sb2dpbk1vZGUgPSB0aGlzLnRlbmFudFVpU2VydmljZS5nZXRQcmVmZXJyZWRMb2dpbk9wdGlvbihsb2dpbk9wdGlvbnMpO1xuICAgIHRoaXMub2F1dGhPcHRpb25zID1cbiAgICAgIHRoaXMudGVuYW50VWlTZXJ2aWNlLmdldE9hdXRoMk9wdGlvbihsb2dpbk9wdGlvbnMpIHx8ICh7fSBhcyBJVGVuYW50TG9naW5PcHRpb24pO1xuICB9XG5cbiAgcmVkaXJlY3RUb09hdXRoKCkge1xuICAgIGNvbnN0IHsgaW5pdFJlcXVlc3QgfSA9IHRoaXMub2F1dGhPcHRpb25zO1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gd2luZG93LmxvY2F0aW9uLmhyZWY7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBlbmNvZGVVUklDb21wb25lbnQoZnVsbFBhdGgpO1xuICAgIGNvbnN0IG9yaWdpblVyaVBhcmFtID0gYCR7aW5pdFJlcXVlc3QuaW5jbHVkZXMoJz8nKSA/ICcmJyA6ICc/J31vcmlnaW5Vcmk9JHtyZWRpcmVjdFVybH1gO1xuICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gYCR7aW5pdFJlcXVlc3R9JHtvcmlnaW5VcmlQYXJhbX1gO1xuICB9XG5cbiAgYXV0b0xvZ291dCgpIHtcbiAgICBjb25zdCBlcnJvclBhdHRlcm4gPSAvaW52YWxpZFxcc2NyZWRlbnRpYWxzLipwaW4uKmdlbmVyYXRlL2k7XG4gICAgY29uc3QgaXNUZmFFeHBpcmVkID0gZGF0YSA9PlxuICAgICAgZGF0YSAmJiB0eXBlb2YgZGF0YS5tZXNzYWdlID09PSAnc3RyaW5nJyAmJiBlcnJvclBhdHRlcm4udGVzdChkYXRhLm1lc3NhZ2UpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXJcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAodSA9PlxuICAgICAgICAgIHUgPyB0aGlzLmFwaS5ob29rUmVzcG9uc2UoKHsgcmVzcG9uc2UgfSkgPT4gcmVzcG9uc2Uuc3RhdHVzID09PSA0MDEpIDogRU1QVFlcbiAgICAgICAgKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShhc3luYyAoYXBpQ2FsbDogYW55KSA9PiB7XG4gICAgICAgIGNvbnN0IHsgcmVzcG9uc2UgfSA9IGFwaUNhbGw7XG4gICAgICAgIGxldCB3aWxsTG9nb3V0ID0gZmFsc2U7XG4gICAgICAgIGlmIChpc1RmYUV4cGlyZWQocmVzcG9uc2UuZGF0YSkpIHtcbiAgICAgICAgICB3aWxsTG9nb3V0ID0gdHJ1ZTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpZiAodHlwZW9mIHJlc3BvbnNlLmpzb24gPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5jbG9uZSgpLmpzb24oKTtcbiAgICAgICAgICAgIGlmIChpc1RmYUV4cGlyZWQoZGF0YSkpIHtcbiAgICAgICAgICAgICAgd2lsbExvZ291dCA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmICh3aWxsTG9nb3V0KSB7XG4gICAgICAgICAgdGhpcy5sb2dvdXQoZmFsc2UpO1xuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5hbGVydC5kYW5nZXIodGhpcy5FUlJPUl9NRVNTQUdFUy50ZmFFeHBpcmVkKSwgNTAwKTtcbiAgICAgICAgfVxuICAgICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyB0aGUgbWluaW1hbCBudW1iZXIgb2YgY2hhcmFjdGVycyB0aGF0IGEgcGFzc3dvcmQgc2hvdWxkIGhhdmUgdG8gYmUgY29uc2lkZXJlZCBhIOKAnGdyZWVu4oCdIHN0cm9uZyBvbmUuXG4gICAqIEByZXR1cm4gVGhlIG1pbiBsZW5ndGggZm9yIHBhc3N3b3JkIG9yIGRlZmF1bHQgdmFsdWUuXG4gICAqL1xuICBhc3luYyBnZXRHcmVlbk1pbkxlbmd0aCgpIHtcbiAgICBjb25zdCB7IGdyZWVuTWluTGVuZ3RoIH0gPSAoYXdhaXQgdGhpcy5nZXRCYXNpY0F1dGhMb2dpbk9wdGlvbigpKSB8fCB7IGdyZWVuTWluTGVuZ3RoOiBudWxsIH07XG4gICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5ncmVlbk1pbkxlbmd0aCA9IGdyZWVuTWluTGVuZ3RoIHx8IHRoaXMuR1JFRU5fTUlOX0xFTkdUSF9ERUZBVUxUO1xuICAgIHJldHVybiB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLmdyZWVuTWluTGVuZ3RoO1xuICB9XG5cbiAgLyoqXG4gICAqIENoZWNrcyBpZiBwYXNzd29yZCBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3Igc3lzdGVtXG4gICAqIGJ5IHJldHJpZXZpbmcgdmFsdWUgb2YgYGVuZm9yY2VTdHJlbmd0aGAgcHJvcGVydHkgZnJvbSBsb2dpbk9wdGlvbnMgcmVzcG9uc2VcbiAgICogQHBhcmFtIHJlZnJlc2ggYm9vbGVhbiB1c2VkIHRvIHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB3aGVyZSByZXN1bHQgb2YgbG9naW5PcHRpb25zIHJlc3BvbnNlIGlzIHN0b3JlZC5cbiAgICogSWYgZmFsc2UsIGl0IHRha2VzIHZhbHVlIGZyb20gbWVtb3J5LFxuICAgKiBpZiB0cnVlLCBpdCByZWZyZXNoIHRoZSBhcHAgc3RhdGUgdmFsdWUgYW5kIHRoZW4gcmV0cml2ZXMgZGF0YS5cbiAgICogQHJldHVybiBib29sZWFuIHZhbHVlLCB0cnVlIGlmIGVuZm9yY2VkLCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRFbmZvcmNlUGFzc3dvcmRTdHJlbmd0aChyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3QgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSBnZXQobG9naW5PcHRpb24sICdlbmZvcmNlU3RyZW5ndGgnKTtcbiAgICAgIGlmIChpc1N0cmluZyhlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCkpIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5lbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCA9XG4gICAgICAgICAgZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPT09ICd0cnVlJyA/IHRydWUgOiBmYWxzZTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGggPSAhIWVuZm9yY2VQYXNzd29yZFN0cmVuZ3RoO1xuICAgICAgfVxuICAgICAgcmV0dXJuIHRoaXMucGFzc3dvcmRTdHJlbmd0aFNldHRpbmcuZW5mb3JjZVBhc3N3b3JkU3RyZW5ndGg7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2hlY2tzIGlmIHBhc3N3b3JkIHN0cmVuZ3RoIGlzIGVuZm9yY2VkIGZvciBwYXJ0aWN1bGFyIHRlbmFudFxuICAgKiBieSByZXRyaWV2aW5nIHZhbHVlIG9mIGBzdHJlbmd0aFZhbGlkaXR5YCBwcm9wZXJ0eSBmcm9tIGxvZ2luT3B0aW9ucyByZXNwb25zZVxuICAgKiBAcGFyYW0gcmVmcmVzaCBib29sZWFuIHVzZWQgdG8gcmVmcmVzaCB0aGUgYXBwIHN0YXRlIHdoZXJlIHJlc3VsdCBvZiBsb2dpbk9wdGlvbnMgcmVzcG9uc2UgaXMgc3RvcmVkLlxuICAgKiBJZiBmYWxzZSwgaXQgdGFrZXMgdmFsdWUgZnJvbSBtZW1vcnksXG4gICAqIGlmIHRydWUsIGl0IHJlZnJlc2ggdGhlIGFwcCBzdGF0ZSB2YWx1ZSBhbmQgdGhlbiByZXRyaXZlcyBkYXRhLlxuICAgKiBAcmV0dXJuIGJvb2xlYW4gdmFsdWUsIHRydWUgaWYgZW5mb3JjZWQsIGZhbHNlIG90aGVyd2lzZS5cbiAgICovXG4gIGFzeW5jIGdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoPykge1xuICAgIHJldHVybiB0aGlzLmdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2gpLnRoZW4obG9naW5PcHRpb24gPT4ge1xuICAgICAgY29uc3Qgc3RyZW5ndGhWYWxpZGl0eSA9IGdldChsb2dpbk9wdGlvbiwgJ3N0cmVuZ3RoVmFsaWRpdHknKTtcbiAgICAgIGlmIChpc1N0cmluZyhzdHJlbmd0aFZhbGlkaXR5KSkge1xuICAgICAgICB0aGlzLnBhc3N3b3JkU3RyZW5ndGhTZXR0aW5nLnBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eSA9XG4gICAgICAgICAgc3RyZW5ndGhWYWxpZGl0eSA9PT0gJ3RydWUnID8gdHJ1ZSA6IGZhbHNlO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHkgPSAhIXN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgICB9XG4gICAgICByZXR1cm4gdGhpcy5wYXNzd29yZFN0cmVuZ3RoU2V0dGluZy5wYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogRnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBlbmZvcmNlZCBzdHJlbmd0aCBjaGVja3Mgc2hvdWxkIGJlIGVuYWJsZWQgZm9yIGN1cnJlbnQgdGVuYW50XG4gICAqIGJhc2VkIG9uIHByb3BlcnRpZXMgcmV0cmlldmVkIGZyb20gbG9naW5PcHRpb25zXG4gICAqIEBwYXJhbSBvcHRpb25zIG9iamVjdCBjb250YWluaW5nIHNwZWNpZmljIG9wdGlvbnM6XG4gICAqICAgIC0ge3JlZnJlc2g6IHRydWV9IC0gcmVmcmVzaGVzIHZhbHVlcyBvZiBhcHAgc3RhdGUgYW5kIHJldHVybnMgZnJlc2ggdmFsdWVzIGFzIHJlc3VsdCBvZiBjYWxsXG4gICAqIEByZXR1cm4gYm9vbGVhbiB2YWx1ZSwgdHJ1ZSBpZiBzdHJlbmd0aCBpcyBlbmZvcmNlZCBmb3IgdGVuYW50LCBmYWxzZSBvdGhlcndpc2UuXG4gICAqL1xuICBhc3luYyBnZXRQYXNzd29yZFN0cmVuZ3RoRW5mb3JjZWQob3B0aW9ucz8pIHtcbiAgICBjb25zdCByZWZyZXNoID0gb3B0aW9ucyAmJiBvcHRpb25zLnJlZnJlc2g7XG4gICAgcmV0dXJuIFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0RW5mb3JjZVBhc3N3b3JkU3RyZW5ndGgocmVmcmVzaCksXG4gICAgICB0aGlzLmdldFBhc3N3b3JkU3RyZW5ndGhWYWxpZGl0eShyZWZyZXNoKVxuICAgIF0pLnRoZW4odmFsdWVzID0+IHtcbiAgICAgIGNvbnN0IFtlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCwgcGFzc3dvcmRTdHJlbmd0aFZhbGlkaXR5XSA9IHZhbHVlcztcbiAgICAgIHJldHVybiBlbmZvcmNlUGFzc3dvcmRTdHJlbmd0aCB8fCBwYXNzd29yZFN0cmVuZ3RoVmFsaWRpdHk7XG4gICAgfSk7XG4gIH1cblxuICAvKipcbiAgICogQ2xlYXJzIGFsbCBiYWNrZW5kIGVycm9ycy5cbiAgICovXG4gIGNsZWFuTWVzc2FnZXMoKSB7XG4gICAgdGhpcy5hbGVydC5jbGVhckFsbCgpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYSBuZXcgc3VjY2VzcyBtZXNzYWdlXG4gICAqIEBwYXJhbSBzdWNjZXNzS2V5IFRoZSBrZXkgb2YgdGhlIHN1Y2Nlc3MgbWVzc2FnZSBhcyB1c2VkIGluIFNVQ0NFU1NfTUVTU0FHRVNcbiAgICovXG4gIGFkZFN1Y2Nlc3NNZXNzYWdlKHN1Y2Nlc3NLZXk6IHN0cmluZykge1xuICAgIGNvbnN0IHN1Y2Nlc3NNZXNzYWdlID0gdGhpcy5TVUNDRVNTX01FU1NBR0VTW3N1Y2Nlc3NLZXldO1xuICAgIGlmIChzdWNjZXNzTWVzc2FnZSkge1xuICAgICAgdGhpcy5hbGVydC5hZGQoe1xuICAgICAgICB0ZXh0OiBzdWNjZXNzTWVzc2FnZSxcbiAgICAgICAgdHlwZTogJ3N1Y2Nlc3MnLFxuICAgICAgICB0aW1lb3V0OiAwXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUmV0dXJucyB0aGUgY3VycmVudCBzdHJhdGVneS4gRGVmYXVsdHMgdG8gY29va2llLCBpZiBhIHRva2VuXG4gICAqIGlzIGZvdW5kIGluIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZSB3ZSBzd2l0Y2ggdG8gYmFzaWMgYXV0aC5cbiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgYXV0aCBzdHJhdGVneS5cbiAgICovXG4gIGdldEF1dGhTdHJhdGVneSgpOiBJQXV0aGVudGljYXRpb24ge1xuICAgIGxldCBhdXRoU3RyYXRlZ3kgPSB0aGlzLmNvb2tpZUF1dGggYXMgSUF1dGhlbnRpY2F0aW9uO1xuICAgIGNvbnN0IHRva2VuID0gdGhpcy5nZXRTdG9yZWRUb2tlbigpO1xuICAgIGNvbnN0IHRmYSA9IHRoaXMuZ2V0U3RvcmVkVGZhVG9rZW4oKTtcbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIGF1dGhTdHJhdGVneSA9IHRoaXMuYmFzaWNBdXRoO1xuICAgICAgdGhpcy5zZXRDcmVkZW50aWFscyh7IHRva2VuLCB0ZmEgfSwgdGhpcy5iYXNpY0F1dGgpO1xuICAgIH1cbiAgICByZXR1cm4gYXV0aFN0cmF0ZWd5O1xuICB9XG5cbiAgLyoqXG4gICAqIEZvcmNlcyB0aGUgdXNlIG9mIGJhc2ljIGF1dGggYXMgc3RyYXRlZ3kgd2l0aCB0aGlzIGNyZWRlbnRpYWxzLlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgVGhlIGNyZWRlbnRpYWxzIHRvIHVzZS5cbiAgICovXG4gIHVzZUJhc2ljQXV0aChjcmVkZW50aWFsczogSUNyZWRlbnRpYWxzKSB7XG4gICAgdGhpcy5zZXRDcmVkZW50aWFscyhjcmVkZW50aWFscywgdGhpcy5iYXNpY0F1dGgpO1xuICAgIHJldHVybiB0aGlzLmJhc2ljQXV0aDtcbiAgfVxuXG4gIC8qKlxuICAgKiBUcmllcyB0byBsb2dpbiBhIHVzZXIgd2l0aCB0aGUgZ2l2ZW4gY3JlZGVudGlhbHMuXG4gICAqIElmIHN1Y2Nlc3NmdWwsIHRoZSBjdXJyZW50IHRlbmFudCBhbmQgdXNlciBpcyBzZXQuIElmIG5vdCBhbiBlcnJvclxuICAgKiBpcyB0aHJvd24uIEl0IGFsc28gdmVyaWZpZXMgaWYgdGhlIHVzZXIgaXMgYWxsb3dlZCB0byBvcGVuIHRoZVxuICAgKiBjdXJyZW50IGFwcC5cbiAgICogQHBhcmFtIGF1dGggVGhlIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5IHVzZWQuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBUaGUgY3JlZGVudGlhbHMgdG8gdHJ5IHRvIGxvZ2luLlxuICAgKi9cbiAgYXN5bmMgbG9naW4oYXV0aDogSUF1dGhlbnRpY2F0aW9uID0gdGhpcy5nZXRBdXRoU3RyYXRlZ3koKSwgY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpIHtcbiAgICB0aGlzLmNsaWVudC5zZXRBdXRoKGF1dGgpO1xuXG4gICAgY29uc3QgdGVuYW50UmVzID0gYXdhaXQgdGhpcy50ZW5hbnQuY3VycmVudCgpO1xuICAgIGNvbnN0IHRlbmFudCA9IHRlbmFudFJlcy5kYXRhO1xuXG4gICAgaWYgKGNyZWRlbnRpYWxzKSB7XG4gICAgICBjcmVkZW50aWFscy50ZW5hbnQgPSB0ZW5hbnQubmFtZTtcbiAgICB9XG5cbiAgICBpZiAoYXdhaXQgdGhpcy5zd2l0Y2hMb2dpbk1vZGUoY3JlZGVudGlhbHMpKSB7XG4gICAgICBhdXRoID0gdGhpcy5jb29raWVBdXRoO1xuICAgIH1cblxuICAgIGNvbnN0IHVzZXJSZXMgPSBhd2FpdCB0aGlzLnVzZXIuY3VycmVudCgpO1xuICAgIGNvbnN0IHVzZXIgPSB1c2VyUmVzLmRhdGE7XG4gICAgYXdhaXQgdGhpcy52ZXJpZnlBcHBBY2Nlc3MoKTtcblxuICAgIGNvbnN0IHN1cHBvcnRVc2VyTmFtZSA9IHRoaXMuZ2V0U3VwcG9ydFVzZXJOYW1lKGNyZWRlbnRpYWxzKTtcbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuc2V0Q3JlZGVudGlhbHMoXG4gICAgICB7XG4gICAgICAgIHRlbmFudDogdGVuYW50Lm5hbWUsXG4gICAgICAgIHVzZXI6IChzdXBwb3J0VXNlck5hbWUgPyBgJHtzdXBwb3J0VXNlck5hbWV9JGAgOiAnJykgKyB1c2VyLnVzZXJOYW1lXG4gICAgICB9LFxuICAgICAgYXV0aFxuICAgICk7XG5cbiAgICBpZiAodG9rZW4pIHtcbiAgICAgIHRoaXMuc3RvcmVCYXNpY0F1dGhUb2tlbih0b2tlbik7XG4gICAgfVxuXG4gICAgYXdhaXQgdGhpcy5hdXRoRnVsZmlsbGVkKHRlbmFudCwgdXNlciwgc3VwcG9ydFVzZXJOYW1lKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0ZW5hbnQsIHVzZXIgYW5kIHN1cHBvcnQgdXNlciBpbmZvIHRvIHRoZSBhcHAgc3RhdGUuXG4gICAqIEBwYXJhbSB0ZW5hbnQgVGhlIGN1cnJlbnQgdGVuYW50IG9iamVjdC5cbiAgICogQHBhcmFtIHVzZXIgVGhlIGN1cnJlbnQgdXNlciBvYmplY3QuXG4gICAqIEBwYXJhbSBzdXBwb3J0VXNlck5hbWUgVGhlIGN1cnJlbnQgc3VwcG9ydCB1c2VyIG5hbWUuXG4gICAqL1xuICBhc3luYyBhdXRoRnVsZmlsbGVkKHRlbmFudD8sIHVzZXI/LCBzdXBwb3J0VXNlck5hbWU/KSB7XG4gICAgaWYgKCF0ZW5hbnQpIHtcbiAgICAgIGNvbnN0IHsgZGF0YSB9ID0gYXdhaXQgdGhpcy50ZW5hbnQuY3VycmVudCgpO1xuICAgICAgdGVuYW50ID0gZGF0YTtcbiAgICAgIHRoaXMuY2xpZW50LnRlbmFudCA9IHRlbmFudC5uYW1lO1xuICAgIH1cblxuICAgIGlmICghdXNlcikge1xuICAgICAgY29uc3QgeyBkYXRhIH0gPSBhd2FpdCB0aGlzLnVzZXIuY3VycmVudCgpO1xuICAgICAgdXNlciA9IGRhdGE7XG4gICAgfVxuXG4gICAgaWYgKCFzdXBwb3J0VXNlck5hbWUpIHtcbiAgICAgIHN1cHBvcnRVc2VyTmFtZSA9IG51bGw7XG4gICAgfVxuXG4gICAgdGhpcy51aS5zZXRVc2VyKHsgdXNlciwgc3VwcG9ydFVzZXJOYW1lIH0pO1xuICAgIHRoaXMudWkuY3VycmVudFRlbmFudC5uZXh0KHRlbmFudCk7XG4gIH1cblxuICAvKipcbiAgICogU3dpdGNoIHRoZSBsb2dpbiBtb2RlIHRvIENvb2tpZUF1dGggaWYgdGhlXG4gICAqIHVzZXIgaGFzIGNvbmZpZ3VyZWQgdG8gdXNlIGl0IGluIGxvZ2luT3B0aW9ucy5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBjcmVkZW50aWFscyBmb3IgdGhhdCBsb2dpblxuICAgKi9cbiAgYXN5bmMgc3dpdGNoTG9naW5Nb2RlKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgY29uc3QgaXNQYXNzd29yZEdyYW50TG9naW4gPSBhd2FpdCB0aGlzLmlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzKTtcbiAgICBpZiAoaXNQYXNzd29yZEdyYW50TG9naW4gJiYgY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuZ2VuZXJhdGVPYXV0aFRva2VuKGNyZWRlbnRpYWxzKTtcbiAgICAgIGlmICghKHJlcyBhcyBSZXNwb25zZSkub2spIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBkYXRhID0gYXdhaXQgcmVzLmpzb24oKTtcbiAgICAgICAgICB0aHJvdyB7IHJlcywgZGF0YSB9O1xuICAgICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICAgIHRocm93IGV4O1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICB0aGlzLmNsaWVudC5zZXRBdXRoKHRoaXMuY29va2llQXV0aCk7XG4gICAgICB0aGlzLmNsZWFuTG9jYWxTdG9yYWdlKCk7XG4gICAgICB0aGlzLmJhc2ljQXV0aC5sb2dvdXQoKTtcbiAgICB9XG4gICAgcmV0dXJuIGlzUGFzc3dvcmRHcmFudExvZ2luO1xuICB9XG5cbiAgYXN5bmMgZ2VuZXJhdGVPYXV0aFRva2VuKGNyZWRlbnRpYWxzPzogSUNyZWRlbnRpYWxzKSB7XG4gICAgaWYgKChhd2FpdCB0aGlzLmlzUGFzc3dvcmRHcmFudExvZ2luKGNyZWRlbnRpYWxzKSkgJiYgY3JlZGVudGlhbHMpIHtcbiAgICAgIGNvbnN0IHBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMoe1xuICAgICAgICBncmFudF90eXBlOiAnUEFTU1dPUkQnLFxuICAgICAgICB1c2VybmFtZTogY3JlZGVudGlhbHMudXNlcixcbiAgICAgICAgcGFzc3dvcmQ6IGNyZWRlbnRpYWxzLnBhc3N3b3JkLFxuICAgICAgICB0ZmFfY29kZTogY3JlZGVudGlhbHMudGZhXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBhd2FpdCBuZXcgRmV0Y2hDbGllbnQoKS5mZXRjaCh0aGlzLmdldFVybEZvck9hdXRoKGNyZWRlbnRpYWxzKSwge1xuICAgICAgICBtZXRob2Q6ICdQT1NUJyxcbiAgICAgICAgYm9keTogcGFyYW1zLnRvU3RyaW5nKCksXG4gICAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgICAnY29udGVudC10eXBlJzogJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04J1xuICAgICAgICB9XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyBpc1Bhc3N3b3JkR3JhbnRMb2dpbihjcmVkZW50aWFscz86IElDcmVkZW50aWFscykge1xuICAgIGxldCBsb2dpbk1vZGUgPSB0aGlzLmxvZ2luTW9kZTtcblxuICAgIGlmICh0aGlzLmlzU3VwcG9ydFVzZXIoY3JlZGVudGlhbHMpKSB7XG4gICAgICBpZiAoIXRoaXMubWFuYWdlbWVudExvZ2luTW9kZSkge1xuICAgICAgICB0aGlzLm1hbmFnZW1lbnRMb2dpbk1vZGUgPSBhd2FpdCB0aGlzLmdldE1hbmFnZW1lbnRMb2dpbk1vZGUoKTtcbiAgICAgIH1cbiAgICAgIGxvZ2luTW9kZSA9IHRoaXMubWFuYWdlbWVudExvZ2luTW9kZTtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy50ZW5hbnRVaVNlcnZpY2UuaXNPYXV0aEludGVybmFsKGxvZ2luTW9kZSk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHByb3ZpZGVkIGNyZWRlbnRpYWxzIHVzZSBhIHN1cHBvcnQgdXNlciB0byBsb2cgaW4gb3Igbm90LlxuICAgKiBAcGFyYW0gY3JlZGVudGlhbHMgQ3JlZGVudGlhbHMgdG8gY2hlY2suXG4gICAqIEByZXR1cm5zIHtib29sZWFufSBSZXR1cm5zIHRydWUgaWYgdXNlciBpcyBhIHN1cHBvcnQgdXNlci5cbiAgICovXG4gIGlzU3VwcG9ydFVzZXIoY3JlZGVudGlhbHM/OiBJQ3JlZGVudGlhbHMpOiBib29sZWFuIHtcbiAgICByZXR1cm4gY3JlZGVudGlhbHMgJiYgY3JlZGVudGlhbHMudXNlci5pbmNsdWRlcygnJCcpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSB0ZW5hbnQgaW5wdXQgZmllbGQgc2hvdWxkIGJlIHNob3duXG4gICAqIG9yIG5vdC5cbiAgICogQHJldHVybnMgSWYgdHJ1ZSwgc2hvdyB0aGUgdGVuYW50IGlucHV0LlxuICAgKi9cbiAgc2hvd1RlbmFudCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gIXRoaXMudWkuc3RhdGUubG9naW5PcHRpb25zIHx8IHRoaXMuaXNMb2NhbCgpIHx8IHRoaXMuaXNTaG93VGVuYW50KCk7XG4gIH1cblxuICAvKipcbiAgICogVmVyaWZpZXMgaWYgdGhlIHRlbmFudCBzZXR1cCBzaG91bGQgYmUgc2hvd25cbiAgICogb3Igbm90LlxuICAgKiBAcmV0dXJucyBJZiB0cnVlLCBzaG93IHRoZSB0ZW5hbnQgaW5wdXQuXG4gICAqL1xuICBzaG93VGVuYW50U2V0dXAoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICF0aGlzLnVpLnN0YXRlLmxvZ2luT3B0aW9ucyAmJiAhdGhpcy5pc0xvY2FsKCk7XG4gIH1cblxuICAvKipcbiAgICogTG9ncyB0aGUgdXNlciBvdXRcbiAgICogQHBhcmFtIHJlbG9hZCBJZiBzZXQgdG8gZmFsc2UsIHRoZSBwYWdlIHdpbGwgbm90IHJlbG9hZFxuICAgKi9cbiAgYXN5bmMgbG9nb3V0KHJlbG9hZCA9IHRydWUpIHtcbiAgICBsZXQgcmVzRGF0YSA9IG51bGw7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IFssIGNvb2tpZVJlc10gPSBhd2FpdCB0aGlzLnJlc2V0KCk7XG4gICAgICByZXNEYXRhID0gYXdhaXQgY29va2llUmVzLmpzb24oKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydC5yZW1vdmVMYXN0RGFuZ2VyKCk7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGlmIChyZXNEYXRhICYmIHJlc0RhdGEudXJsKSB7XG4gICAgICAgIHRoaXMucmVkaXJlY3QocmVzRGF0YS51cmwpO1xuICAgICAgfSBlbHNlIGlmIChyZWxvYWQpIHtcbiAgICAgICAgdGhpcy5sb2NhdGlvbi5yZXBsYWNlU3RhdGUoe30sICcnLCAnJywgJycpO1xuICAgICAgICB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJlc2V0cyB0aGUgc3RvcmVkIGF1dGgtZGF0YVxuICAgKi9cbiAgYXN5bmMgcmVzZXQoKSB7XG4gICAgdGhpcy5jbGVhbkxvY2FsU3RvcmFnZSgpO1xuICAgIHRoaXMuY2xlYW5TZXNzaW9uU3RvcmFnZSgpO1xuICAgIHRoaXMucmVhbHRpbWUuZGlzY29ubmVjdCgpO1xuICAgIHRoaXMudWkuY3VycmVudFVzZXIubmV4dChudWxsKTtcbiAgICByZXR1cm4gUHJvbWlzZS5hbGwoW3RoaXMuYmFzaWNBdXRoLmxvZ291dCgpLCB0aGlzLmNvb2tpZUF1dGgubG9nb3V0KCldKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBTYXZlcyB0aGUgVEZBIHRva2VuIHRvIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHBhcmFtIHRmYVRva2VuIFRoZSB0ZmEgdG9rZW4gdG8gc2F2ZS5cbiAgICogQHBhcmFtIHN0b3JhZ2UgVGhlIHN0b3JhZ2UgdG8gdXNlIChsb2NhbCBvciBzZXNzaW9uKS5cbiAgICovXG4gIHNhdmVURkFUb2tlbih0ZmFUb2tlbjogc3RyaW5nLCBzdG9yYWdlOiBTdG9yYWdlKSB7XG4gICAgc3RvcmFnZS5zZXRJdGVtKHRoaXMuVEZBVE9LRU5fS0VZLCB0ZmFUb2tlbik7XG4gIH1cblxuICAvKipcbiAgICogUmVxdWVzdCB0aGUgbWFuaWZlc3QgLT4gb24gNDAxIHVzZXIgaGFzIG5vIGFjY2VzcyB0byB0aGF0IGFwcGxpY2F0aW9uXG4gICAqIGFuZCB3ZSB0aHJvdyB0aGUgZXJyb3IgdXAgdG8gdGhlIGxvZ2luIGZvcm0uXG4gICAqL1xuICBhc3luYyB2ZXJpZnlBcHBBY2Nlc3MoKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMudWkubG9hZE1hbmlmZXN0KCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmICghKGV4LnJlcyAmJiBleC5yZXMuc3RhdHVzID09PSA0MDQgJiYgdGhpcy5pc0xvY2FsKCkpKSB7XG4gICAgICAgIHRocm93IGV4O1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIHJlZGlyZWN0VG9Eb21haW4oZG9tYWluKSB7XG4gICAgY29uc3Qgb3JpZ2luVXJsID0gbmV3IFVSTCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gICAgY29uc3QgcmVkaXJlY3RVcmwgPSBvcmlnaW5VcmwuaHJlZi5yZXBsYWNlKG9yaWdpblVybC5ob3N0bmFtZSwgZG9tYWluKTtcbiAgICB3aW5kb3cubG9jYXRpb24uaHJlZiA9IHJlZGlyZWN0VXJsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNldHMgdGhlIHRlbmFudCB0byB0aGUgY2xpZW50IGFuZCB1cGRhdGVzIHRoZSBjcmVkZW50aWFscyBvbiB0aGVcbiAgICogYXV0aCBzdHJhdGVneS5cbiAgICogQHBhcmFtIGNyZWRlbnRpYWxzIFRoZSBuYW1lIG9mIHRoZSB0ZW5hbnQuXG4gICAqIEBwYXJhbSBhdXRoU3RyYXRlZ3kgVGhlIGF1dGhlbnRpY2F0aW9uIHN0cmF0ZWd5IHVzZWQuXG4gICAqIEByZXR1cm4gUmV0dXJucyB0aGUgdG9rZW4gaWYgYmFzaWMgYXV0aCwgb3RoZXJ3aXNlIHVuZGVmaW5lZC5cbiAgICovXG4gIHByaXZhdGUgc2V0Q3JlZGVudGlhbHMoY3JlZGVudGlhbHM6IElDcmVkZW50aWFscywgYXV0aFN0cmF0ZWd5OiBJQXV0aGVudGljYXRpb24pIHtcbiAgICBpZiAoY3JlZGVudGlhbHMudGVuYW50KSB7XG4gICAgICB0aGlzLmNsaWVudC50ZW5hbnQgPSBjcmVkZW50aWFscy50ZW5hbnQ7XG4gICAgfVxuICAgIC8vIENoZWNrIGlmIGEgdG9rZW4gaXMgYWxyZWFkeSBzZXQgKGNhc2UgZm9yIHN1cHBvcnQgdXNlciBsb2dpbilcbiAgICAvLyBpZiB5ZXMgLT4gd2UganVzdCBuZWVkIHRvIHVwZGF0ZSB0aGUgdXNlciwgYW5kIHJldXNlIHRoZSB0b2tlblxuICAgIC8vIG9mIHRoZSBzdXBwb3J0IHVzZXIuXG4gICAgLy8gVGhlcmVmb3JlIHdlIG5lZWQgdG8gcGFzcyB1c2VyIGFuZCB0ZW5hbnQsIHRvIGdldFxuICAgIC8vIGp1c3QgdGhlIHN0b3JlZCB0b2tlbiBhbmQgbm90aGluZyBlbHNlIChzZWUgQmFzaWNBdXRoLnRzOjMxKS5cbiAgICBjb25zdCB0b2tlbiA9IHRoaXMuYmFzaWNBdXRoLnVwZGF0ZUNyZWRlbnRpYWxzKHtcbiAgICAgIHRlbmFudDogY3JlZGVudGlhbHMudGVuYW50LFxuICAgICAgdXNlcjogY3JlZGVudGlhbHMudXNlclxuICAgIH0pO1xuICAgIGNvbnN0IG5ld0NyZWRlbnRpYWxzID0geyB0b2tlbiwgLi4uY3JlZGVudGlhbHMgfTtcblxuICAgIHJldHVybiBhdXRoU3RyYXRlZ3kudXBkYXRlQ3JlZGVudGlhbHMobmV3Q3JlZGVudGlhbHMpO1xuICB9XG5cbiAgLyoqXG4gICAqIFZlcmlmaWVzIGlmIHRoZSBjdXJyZW50IHVzZXIgaXMgYSBkZXZlbG9wZXIgb3Igbm90LlxuICAgKiBSdW5uaW5nIG9uIGxvY2FsaG9zdCBtZWFucyBkZXZlbG9wbWVudCBtb2RlLlxuICAgKi9cbiAgcHJpdmF0ZSBpc0xvY2FsKCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGhvc3RuYW1lID0gd2luZG93LmxvY2F0aW9uLmhvc3RuYW1lO1xuICAgIHJldHVybiB0aGlzLmxvY2FsaG9zdElwUmVnRXhwLnRlc3QoaG9zdG5hbWUpIHx8IHRoaXMubG9jYWxob3N0UmVnRXhwLnRlc3QoaG9zdG5hbWUpO1xuICB9XG5cbiAgLyoqXG4gICAqIFNhdmUgdGhlIHRva2VuIHRvIGxvY2FsIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHBhcmFtIHRva2VuIFRoZSB0b2tlbiB0byBzYXZlLlxuICAgKiBAcGFyYW0gc3RvcmFnZSBUaGUgc3RvcmFnZSB0byB1c2UgKGxvY2FsIG9yIHNlc3Npb24pLlxuICAgKi9cbiAgcHJpdmF0ZSBzYXZlVG9rZW4odG9rZW46IHN0cmluZywgc3RvcmFnZTogU3RvcmFnZSkge1xuICAgIHN0b3JhZ2Uuc2V0SXRlbSh0aGlzLlRPS0VOX0tFWSwgdG9rZW4pO1xuICB9XG5cbiAgcHJpdmF0ZSBzdG9yZUJhc2ljQXV0aFRva2VuKHRva2VuOiBzdHJpbmcpIHtcbiAgICB0aGlzLnNhdmVUb2tlbih0b2tlbiwgc2Vzc2lvblN0b3JhZ2UpO1xuICAgIGlmICh0aGlzLnJlbWVtYmVyTWUpIHtcbiAgICAgIHRoaXMuc2F2ZVRva2VuKHRva2VuLCBsb2NhbFN0b3JhZ2UpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5Mb2NhbFN0b3JhZ2UoKSB7XG4gICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0odGhpcy5UT0tFTl9LRVkpO1xuICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKTtcbiAgfVxuXG4gIHByaXZhdGUgY2xlYW5TZXNzaW9uU3RvcmFnZSgpIHtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVE9LRU5fS0VZKTtcbiAgICBzZXNzaW9uU3RvcmFnZS5yZW1vdmVJdGVtKHRoaXMuVEZBVE9LRU5fS0VZKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNTaG93VGVuYW50KCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnNob3dUZW5hbnRSZWdFeHAudGVzdCh3aW5kb3cubG9jYXRpb24uaHJlZik7XG4gIH1cblxuICBwcml2YXRlIHJlZGlyZWN0KHVybDogc3RyaW5nKSB7XG4gICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSB1cmw7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldEJhc2ljQXV0aExvZ2luT3B0aW9uKHJlZnJlc2g/KTogUHJvbWlzZTxJVGVuYW50TG9naW5PcHRpb24+IHtcbiAgICBpZiAocmVmcmVzaCkge1xuICAgICAgYXdhaXQgdGhpcy51aS5yZWZyZXNoTG9naW5PcHRpb25zKCk7XG4gICAgfVxuICAgIGNvbnN0IGxvZ2luT3B0aW9ucyA9IHRoaXMudWkuc3RhdGUubG9naW5PcHRpb25zIHx8IFtdO1xuICAgIGNvbnN0IGJhc2ljQXV0aExvZ2luT3B0aW9uID0gbG9naW5PcHRpb25zLmZpbmQoKHsgdHlwZSB9KSA9PiB0eXBlID09PSAnQkFTSUMnKTtcbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGJhc2ljQXV0aExvZ2luT3B0aW9uKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHN1cHBvcnQgdXNlciBuYW1lIGZyb20gY3JlZGVudGlhbHMuXG4gICAqIEBwYXJhbSBjcmVkZW50aWFscyBDcmVkZW50aWFscyBvYmplY3QgKGRlZmF1bHRzIHRvIHRoZSBzdG9yZWQgb25lKS5cbiAgICogQHJldHVybnMgU3VwcG9ydCB1c2VyIG5hbWUuXG4gICAqL1xuICBwcml2YXRlIGdldFN1cHBvcnRVc2VyTmFtZShjcmVkZW50aWFsczogSUNyZWRlbnRpYWxzID0gdGhpcy5nZXRTdG9yZWRDcmVkZW50aWFscygpKTogc3RyaW5nIHtcbiAgICBpZiAoIWNyZWRlbnRpYWxzKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgY29uc3Qgc3VwcG9ydFVzZXJOYW1lID0gY3JlZGVudGlhbHMudXNlci5tYXRjaCgvXiguK1xcLyk/KCguKylcXCQpPyguKyk/JC8pWzNdO1xuICAgIHJldHVybiBzdXBwb3J0VXNlck5hbWU7XG4gIH1cblxuICAvKipcbiAgICogR2V0cyBjcmVkZW50aWFscyBvYmplY3QgZnJvbSB0aGUgc3RvcmVkIHRva2VuLlxuICAgKiBAcmV0dXJucyBDcmVkZW50aWFscyBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIGdldFN0b3JlZENyZWRlbnRpYWxzKCk6IElDcmVkZW50aWFscyB7XG4gICAgY29uc3QgdG9rZW4gPSB0aGlzLmdldFN0b3JlZFRva2VuKCk7XG4gICAgaWYgKCF0b2tlbikge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIHJldHVybiB0aGlzLmRlY29kZVRva2VuKHRva2VuKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHN0b3JlZCB0b2tlbiBmcm9tIGxvY2FsIHN0b3JhZ2Ugb3Igc2Vzc2lvbiBzdG9yYWdlLlxuICAgKiBAcmV0dXJucyBTdG9yZWQgdG9rZW4uXG4gICAqL1xuICBwcml2YXRlIGdldFN0b3JlZFRva2VuKCk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMuVE9LRU5fS0VZKSB8fCBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKHRoaXMuVE9LRU5fS0VZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXRzIHN0b3JlZCBURkEgdG9rZW4gZnJvbSBsb2NhbCBzdG9yYWdlIG9yIHNlc3Npb24gc3RvcmFnZS5cbiAgICogQHJldHVybnMgU3RvcmVkIFRGQSB0b2tlbi5cbiAgICovXG4gIHByaXZhdGUgZ2V0U3RvcmVkVGZhVG9rZW4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gbG9jYWxTdG9yYWdlLmdldEl0ZW0odGhpcy5URkFUT0tFTl9LRVkpIHx8IHNlc3Npb25TdG9yYWdlLmdldEl0ZW0odGhpcy5URkFUT0tFTl9LRVkpO1xuICB9XG5cbiAgLyoqXG4gICAqIERlY29kZXMgdG9rZW4gdG8gY3JlZGVudGlhbHMgb2JqZWN0LlxuICAgKiBAcGFyYW0gdG9rZW4gVG9rZW4gdG8gZGVjb2RlLlxuICAgKiBAcmV0dXJucyBDcmVkZW50aWFscyBvYmplY3QuXG4gICAqL1xuICBwcml2YXRlIGRlY29kZVRva2VuKHRva2VuOiBzdHJpbmcpOiBJQ3JlZGVudGlhbHMge1xuICAgIGNvbnN0IGRlY29kZWQgPSBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKHdpbmRvdy5hdG9iKHRva2VuKSkpO1xuICAgIGNvbnN0IHNwbGl0ID0gZGVjb2RlZC5tYXRjaCgvKChbXi9dKilcXC8pPyhbXi86XSspOiguKykvKTtcblxuICAgIHJldHVybiB7XG4gICAgICB0ZW5hbnQ6IHNwbGl0WzJdLFxuICAgICAgdXNlcjogc3BsaXRbM10sXG4gICAgICBwYXNzd29yZDogc3BsaXRbNF1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRVcmxGb3JPYXV0aChjcmVkZW50aWFsczogSUNyZWRlbnRpYWxzKSB7XG4gICAgaWYgKGlzRW1wdHkoY3JlZGVudGlhbHMudGVuYW50KSAmJiB0aGlzLmxvZ2luTW9kZS5pbml0UmVxdWVzdCkge1xuICAgICAgY29uc3QgdXJsUGFyYW1zID0gbmV3IFVSTFNlYXJjaFBhcmFtcyh0aGlzLmxvZ2luTW9kZS5pbml0UmVxdWVzdC5zcGxpdCgnPycpLnBvcCgpKTtcbiAgICAgIGNyZWRlbnRpYWxzLnRlbmFudCA9IHVybFBhcmFtcy5nZXQoJ3RlbmFudF9pZCcpO1xuICAgIH1cbiAgICByZXR1cm4gIWlzRW1wdHkoY3JlZGVudGlhbHMudGVuYW50KVxuICAgICAgPyBgdGVuYW50L29hdXRoP3RlbmFudF9pZD0ke2NyZWRlbnRpYWxzLnRlbmFudH1gXG4gICAgICA6IGB0ZW5hbnQvb2F1dGhgO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRNYW5hZ2VtZW50TG9naW5Nb2RlKCkge1xuICAgIGNvbnN0IG1hbmFnZW1lbnRMb2dpbk9wdGlvbnMgPSAoYXdhaXQgdGhpcy50ZW5hbnRMb2dpbk9wdGlvbnNTZXJ2aWNlLmxpc3RGb3JNYW5hZ2VtZW50KCkpLmRhdGE7XG4gICAgcmV0dXJuIHRoaXMudGVuYW50VWlTZXJ2aWNlLmdldFByZWZlcnJlZExvZ2luT3B0aW9uKG1hbmFnZW1lbnRMb2dpbk9wdGlvbnMpO1xuICB9XG59XG4iXX0=
@@ -147,7 +147,7 @@ export class PackageVersionsListComponent {
147
147
  });
148
148
  }
149
149
  catch (e) {
150
- // on cancel: do nothing
150
+ await this.refreshPackage();
151
151
  return;
152
152
  }
153
153
  await this.setVersionAsLatest(uploadedVersion);
@@ -167,4 +167,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.7", ngImpor
167
167
  }], ctorParameters: function () { return [{ type: i1.ActivatedRoute }, { type: i2.PluginsService }, { type: i3.EcosystemService }, { type: i4.TranslateService }, { type: i2.ModalService }, { type: i2.AlertService }, { type: i2.OptionsService }, { type: i2.Permissions }, { type: i2.GainsightService }]; }, propDecorators: { onVersionSelect: [{
168
168
  type: Output
169
169
  }] } });
170
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS12ZXJzaW9ucy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9wYWNrYWdlLXZlcnNpb25zL3BhY2thZ2UtdmVyc2lvbnMtbGlzdC9wYWNrYWdlLXZlcnNpb25zLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3BhY2thZ2VzL3BhY2thZ2UtdmVyc2lvbnMvcGFja2FnZS12ZXJzaW9ucy1saXN0L3BhY2thZ2UtdmVyc2lvbnMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFDTCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixjQUFjLEVBQ2QsV0FBVyxFQUNYLGNBQWMsRUFDZCxNQUFNLEVBQ04sT0FBTyxFQUNSLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBRXZELE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBTWxDLE1BQU0sT0FBTyw0QkFBNEI7SUFjdkMsWUFDVSxjQUE4QixFQUM5QixjQUE4QixFQUM5QixnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLEtBQW1CLEVBQ25CLFlBQTBCLEVBQzFCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLGdCQUFrQztRQVJsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFrQjtRQUNsQyxVQUFLLEdBQUwsS0FBSyxDQUFjO1FBQ25CLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLG1CQUFjLEdBQWQsY0FBYyxDQUFnQjtRQUM5QixnQkFBVyxHQUFYLFdBQVcsQ0FBYTtRQUN4QixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBdEI1QyxxQkFBZ0IsR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO1FBR2pDLGNBQVMsR0FBRyxLQUFLLENBQUM7UUFLbEIsd0JBQW1CLEdBQUcsS0FBSyxDQUFDO1FBQzVCLGtDQUE2QixHQUFHLEtBQUssQ0FBQztRQUU1QixvQkFBZSxHQUFHLElBQUksWUFBWSxFQUFpQixDQUFDO0lBWTNELENBQUM7SUFFSixLQUFLLENBQUMsUUFBUTtRQUNaLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FDakQsV0FBVyxDQUFDLGlDQUFpQyxDQUM5QyxDQUFDO1FBQ0YsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQztRQUN4RSxJQUFJLENBQUMsNkJBQTZCLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7UUFDakYsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQyxlQUFlLENBQzdELGFBQWEsRUFDYixnQkFBZ0IsRUFDaEIsc0JBQXNCLENBQ3ZCLENBQVcsQ0FBQztRQUNiLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLGVBQWUsQ0FBQyxVQUErQjtRQUNuRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7WUFDMUYsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO1lBQ3RFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLFFBQVE7WUFDeEQsR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7U0FDM0IsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsdUJBQXVCLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ3hELEVBQUUsRUFBRSxVQUFVLENBQUMsUUFBUTtZQUN2QixJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUk7U0FDckIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQ3BFLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsMEJBQTBCLEVBQUUsQ0FBQztJQUNwQyxDQUFDO0lBRUQsYUFBYSxDQUFDLE9BQXNCO1FBQ2xDLElBQUksQ0FBQyxlQUFlLEdBQUcsT0FBTyxDQUFDO1FBQy9CLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3JDLENBQUM7SUFFRCxLQUFLLENBQUMsb0JBQW9CLENBQUMsT0FBZTtRQUN4QyxJQUFJO1lBQ0YsTUFBTSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUM7WUFDNUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQ3ZCLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLDhDQUE4QyxDQUFDLEVBQUU7Z0JBQ3JGLE9BQU87YUFDUixDQUFDLENBQ0gsQ0FBQztZQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDMUYsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO2dCQUN0RSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUN0RCxNQUFNLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPO2dCQUN2RCxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjthQUMzQixDQUFDLENBQUM7U0FDSjtRQUFDLE9BQU8sQ0FBQyxFQUFFO1lBQ1YsSUFBSSxDQUFDLFlBQVksQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUN0QyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsWUFBWSxDQUFDLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7Z0JBQzFGLFNBQVMsRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsVUFBVSxDQUFDLGdCQUFnQjtnQkFDdEUsTUFBTSxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsTUFBTTtnQkFDdEQsTUFBTSxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsY0FBYztnQkFDOUQsR0FBRyxFQUFFLElBQUksQ0FBQyxnQkFBZ0I7YUFDM0IsQ0FBQyxDQUFDO1NBQ0o7UUFDRCxJQUFJLE9BQU8sS0FBSyxJQUFJLENBQUMsZUFBZSxFQUFFO1lBQ3BDLElBQUksQ0FBQyxhQUFhLENBQUMsSUFBSSxDQUFDLENBQUM7U0FDMUI7UUFDRCxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLFVBQStCO1FBQ3RELElBQUk7WUFDRixNQUFNLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUU7Z0JBQ2pGLEdBQUcsVUFBVSxDQUFDLElBQUk7Z0JBQ2xCLFFBQVE7YUFDVCxDQUFDLENBQUM7WUFFSCwwRUFBMEU7WUFDMUUscURBQXFEO1lBQ3JELE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25GLElBQUksQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUM7WUFDeEQsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFlBQVksQ0FBQyxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLGdCQUFnQixFQUFFO2dCQUMxRixTQUFTLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0I7Z0JBQ3RFLE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLGFBQWE7Z0JBQzdELE1BQU0sRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLE9BQU87Z0JBQ3ZELEdBQUcsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO2FBQzNCLENBQUMsQ0FBQztTQUNKO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixJQUFJLENBQUMsWUFBWSxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDMUYsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO2dCQUN0RSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxhQUFhO2dCQUM3RCxNQUFNLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxjQUFjO2dCQUM5RCxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjthQUMzQixDQUFDLENBQUM7WUFDSCxPQUFPO1NBQ1I7UUFDRCxNQUFNLElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsS0FBSyxDQUFDLHVCQUF1QjtRQUMzQixNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUMxQixPQUFPLENBQUMsd0JBQXdCLENBQUMsRUFDakMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FDM0IsT0FBTyxDQUNMLHNJQUFzSSxDQUN2SSxFQUNELEVBQUUsYUFBYSxFQUFFLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FDdEMsRUFDRCxNQUFNLENBQUMsSUFBSSxFQUNYLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FDakIsQ0FBQztRQUNGLE1BQU0sU0FBUyxDQUFDO0lBQ2xCLENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYztRQUMxQixJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUN0QixJQUFJLENBQUMsT0FBTyxHQUFHLE1BQU0sSUFBSSxDQUFDLGdCQUFnQixDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQzNFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDcEUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLENBQUM7SUFFTyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxjQUFjLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQ3BEO1lBQ0UsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CO1lBQ3RDLElBQUksRUFBRSxDQUFDLFNBQVMsQ0FBQztTQUNsQixFQUNELE1BQU0sQ0FDUCxDQUFDO1FBQ0YsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUM7SUFDakMsQ0FBQztJQUVPLEtBQUssQ0FBQywwQkFBMEI7UUFDdEMsTUFBTSxlQUFlLEdBQ25CLElBQUksQ0FBQyxPQUFPLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDaEYsSUFBSTtZQUNGLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxZQUFZLENBQUMsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxnQkFBZ0IsRUFBRTtnQkFDMUYsU0FBUyxFQUFFLGtCQUFrQixDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCO2dCQUN0RSxNQUFNLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUN0RCxNQUFNLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxPQUFPO2dCQUN2RCxHQUFHLEVBQUUsSUFBSSxDQUFDLGdCQUFnQjthQUMzQixDQUFDLENBQUM7WUFDSCxNQUFNLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUN0QixPQUFPLENBQUMsbUJBQW1CLENBQUMsRUFDNUIsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FDM0IsT0FBTyxDQUNMLGlIQUFpSCxDQUNsSCxFQUNELEVBQUUsT0FBTyxFQUFFLGVBQWUsQ0FBQyxPQUFPLEVBQUUsQ0FDckMsRUFDRCxNQUFNLENBQUMsT0FBTyxFQUNkO2dCQUNFLEVBQUUsRUFBRSxPQUFPLENBQUMsd0JBQXdCLENBQUM7Z0JBQ3JDLE1BQU0sRUFBRSxPQUFPLENBQUMseUJBQXlCLENBQUM7YUFDM0MsQ0FDRixDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLHdCQUF3QjtZQUN4QixPQUFPO1NBQ1I7UUFDRCxNQUFNLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sdUJBQXVCO1FBQzdCLElBQUksQ0FBQyxpQkFBaUI7WUFDcEIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLGFBQWE7Z0JBQzdDLENBQUMsQ0FBQyxJQUFJO2dCQUNOLENBQUMsQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2hELENBQUM7O3lIQW5NVSw0QkFBNEI7NkdBQTVCLDRCQUE0QixrSEN0QnpDLCs3R0E2RkE7MkZEdkVhLDRCQUE0QjtrQkFKeEMsU0FBUzsrQkFDRSwyQkFBMkI7NFVBZTNCLGVBQWU7c0JBQXhCLE1BQU0iLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEV2ZW50RW1pdHRlciwgT25Jbml0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlIH0gZnJvbSAnQGFuZ3VsYXIvcm91dGVyJztcbmltcG9ydCB7IElBcHBsaWNhdGlvbiwgSUFwcGxpY2F0aW9uVmVyc2lvbiB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7XG4gIEFsZXJ0U2VydmljZSxcbiAgR2FpbnNpZ2h0U2VydmljZSxcbiAgTW9kYWxTZXJ2aWNlLFxuICBPcHRpb25zU2VydmljZSxcbiAgUGVybWlzc2lvbnMsXG4gIFBsdWdpbnNTZXJ2aWNlLFxuICBTdGF0dXMsXG4gIGdldHRleHRcbn0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBFY29zeXN0ZW1TZXJ2aWNlLCBQUk9EVUNUX0VYUEVSSUVOQ0UgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzL2Vjb3N5c3RlbS9zaGFyZWQnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuXG5jb25zdCBERUZBVUxUX1ZFUlNJT05TX0xJTUlUID0gMjA7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS1wYWNrYWdlLXZlcnNpb25zLWxpc3QnLFxuICB0ZW1wbGF0ZVVybDogJy4vcGFja2FnZS12ZXJzaW9ucy1saXN0LmNvbXBvbmVudC5odG1sJ1xufSlcbmV4cG9ydCBjbGFzcyBQYWNrYWdlVmVyc2lvbnNMaXN0Q29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgQ1VSUkVOVF9MT0NBVElPTiA9IGxvY2F0aW9uLmhyZWY7XG5cbiAgdmVyc2lvbnNMaW1pdDogbnVtYmVyO1xuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgcGFja2FnZTogSUFwcGxpY2F0aW9uO1xuICBzb3J0ZWRWZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdO1xuICBzZWxlY3RlZFZlcnNpb246IHN0cmluZztcbiAgcHJlVXBsb2FkQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8YW55PjtcbiAgaGFzQWRtaW5QZXJtaXNzaW9ucyA9IGZhbHNlO1xuICBpc1BhY2thZ2VPd25lZEJ5Q3VycmVudFRlbmFudCA9IGZhbHNlO1xuXG4gIEBPdXRwdXQoKSBvblZlcnNpb25TZWxlY3QgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZyB8IG51bGw+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgcHJpdmF0ZSBhY3RpdmF0ZWRSb3V0ZTogQWN0aXZhdGVkUm91dGUsXG4gICAgcHJpdmF0ZSBwbHVnaW5zU2VydmljZTogUGx1Z2luc1NlcnZpY2UsXG4gICAgcHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIG1vZGFsOiBNb2RhbFNlcnZpY2UsXG4gICAgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSxcbiAgICBwcml2YXRlIG9wdGlvbnNTZXJ2aWNlOiBPcHRpb25zU2VydmljZSxcbiAgICBwcml2YXRlIHBlcm1pc3Npb25zOiBQZXJtaXNzaW9ucyxcbiAgICBwcml2YXRlIGdhaW5zaWdodFNlcnZpY2U6IEdhaW5zaWdodFNlcnZpY2VcbiAgKSB7fVxuXG4gIGFzeW5jIG5nT25Jbml0KCkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLmhhc0FkbWluUGVybWlzc2lvbnMgPSB0aGlzLnBlcm1pc3Npb25zLmhhc1JvbGUoXG4gICAgICBQZXJtaXNzaW9ucy5ST0xFX0FQUExJQ0FUSU9OX01BTkFHRU1FTlRfQURNSU5cbiAgICApO1xuICAgIHRoaXMucGFja2FnZSA9IHRoaXMuYWN0aXZhdGVkUm91dGU/LnNuYXBzaG90Py5wYXJlbnQ/LmRhdGE/LmNvbnRleHREYXRhO1xuICAgIHRoaXMuaXNQYWNrYWdlT3duZWRCeUN1cnJlbnRUZW5hbnQgPSB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNPd25lcih0aGlzLnBhY2thZ2UpO1xuICAgIHRoaXMudmVyc2lvbnNMaW1pdCA9IChhd2FpdCB0aGlzLm9wdGlvbnNTZXJ2aWNlLmdldFN5c3RlbU9wdGlvbihcbiAgICAgICdhcHBsaWNhdGlvbicsXG4gICAgICAndmVyc2lvbnMubGltaXQnLFxuICAgICAgREVGQVVMVF9WRVJTSU9OU19MSU1JVFxuICAgICkpIGFzIG51bWJlcjtcbiAgICB0aGlzLnNvcnRWZXJzaW9ucygpO1xuICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7XG4gIH1cblxuICBhc3luYyBkb3dubG9hZEFyY2hpdmUoYXBwVmVyc2lvbjogSUFwcGxpY2F0aW9uVmVyc2lvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuUEFDS0FHRV9WRVJTSU9OUywge1xuICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuUEFDS0FHRV9WRVJTSU9OUyxcbiAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLkRPV05MT0FELFxuICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICB9KTtcbiAgICBjb25zdCBhcmNoaXZlTU8gPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QXJjaGl2ZU1hbmFnZWRPYmplY3QoYXBwVmVyc2lvbi5iaW5hcnlJZCk7XG4gICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmRvd25sb2FkQXJjaGl2ZSh0aGlzLnBhY2thZ2UsIHtcbiAgICAgIGlkOiBhcHBWZXJzaW9uLmJpbmFyeUlkLFxuICAgICAgbmFtZTogYXJjaGl2ZU1PLm5hbWVcbiAgICB9KTtcbiAgfVxuXG4gIHBhY2thZ2VWZXJzaW9uVXBsb2FkZWQoKSB7XG4gICAgdGhpcy5hY3RpdmF0ZWRSb3V0ZS5zbmFwc2hvdC5wYXJlbnQuZGF0YS5jb250ZXh0RGF0YSA9IHRoaXMucGFja2FnZTtcbiAgICB0aGlzLnNvcnRWZXJzaW9ucygpO1xuICAgIHRoaXMuc2V0VXBsb2FkZWRWZXJzaW9uQXNMYXRlc3QoKTtcbiAgfVxuXG4gIHNlbGVjdFZlcnNpb24odmVyc2lvbjogc3RyaW5nIHwgbnVsbCk6IHZvaWQge1xuICAgIHRoaXMuc2VsZWN0ZWRWZXJzaW9uID0gdmVyc2lvbjtcbiAgICB0aGlzLm9uVmVyc2lvblNlbGVjdC5lbWl0KHZlcnNpb24pO1xuICB9XG5cbiAgYXN5bmMgcmVtb3ZlVmVyc2lvblBhY2thZ2UodmVyc2lvbjogc3RyaW5nKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5kZWxldGVQYWNrYWdlVmVyc2lvbih0aGlzLnBhY2thZ2UsIHsgdmVyc2lvbiB9KTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KGdldHRleHQoJ1BhY2thZ2UgdmVyc2lvbiB7e3ZlcnNpb259fSBoYXMgYmVlbiByZW1vdmVkJyksIHtcbiAgICAgICAgICB2ZXJzaW9uXG4gICAgICAgIH0pXG4gICAgICApO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5QQUNLQUdFX1ZFUlNJT05TLCB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBBQ0tBR0VfVkVSU0lPTlMsXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLkRFTEVURSxcbiAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuU1VDQ0VTUyxcbiAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfVkVSU0lPTlMsIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuUEFDS0FHRV9WRVJTSU9OUyxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuREVMRVRFLFxuICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TRVJWRVJfRkFJTFVSRSxcbiAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAodmVyc2lvbiA9PT0gdGhpcy5zZWxlY3RlZFZlcnNpb24pIHtcbiAgICAgIHRoaXMuc2VsZWN0VmVyc2lvbihudWxsKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoUGFja2FnZSgpO1xuICB9XG5cbiAgYXN5bmMgc2V0VmVyc2lvbkFzTGF0ZXN0KGFwcFZlcnNpb246IElBcHBsaWNhdGlvblZlcnNpb24pIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnNldFBhY2thZ2VWZXJzaW9uVGFnKHRoaXMucGFja2FnZSwgYXBwVmVyc2lvbi52ZXJzaW9uLCBbXG4gICAgICAgIC4uLmFwcFZlcnNpb24udGFncyxcbiAgICAgICAgJ2xhdGVzdCdcbiAgICAgIF0pO1xuXG4gICAgICAvLyBUT0RPIGFkZGVkIGl0IGR1ZSB0bzogaHR0cHM6Ly9jdW11bG9jaXR5LmF0bGFzc2lhbi5uZXQvYnJvd3NlL01UTS00ODU1M1xuICAgICAgLy8gUmVtb3ZlIGl0IHdoZW4gQkUgZml4ZXMgaXNzdWVzIHdpdGggYWN0aXZlVmVyc2lvbi5cbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5zZXRBcHBBY3RpdmVWZXJzaW9uKHRoaXMucGFja2FnZSwgYXBwVmVyc2lvbi5iaW5hcnlJZCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ1RhZyBoYXMgYmVlbiBzZXQuJykpO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5QQUNLQUdFX1ZFUlNJT05TLCB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBBQ0tBR0VfVkVSU0lPTlMsXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLlNFVF9BU19MQVRFU1QsXG4gICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlNVQ0NFU1MsXG4gICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICB9KTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGUpO1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5QQUNLQUdFX1ZFUlNJT05TLCB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBBQ0tBR0VfVkVSU0lPTlMsXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLlNFVF9BU19MQVRFU1QsXG4gICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlNFUlZFUl9GQUlMVVJFLFxuICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgfSk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMucmVmcmVzaFBhY2thZ2UoKTtcbiAgfVxuXG4gIGFzeW5jIGFja25vd2xlZGdlTGltaXRSZWFjaGVkKCkge1xuICAgIGF3YWl0IHRoaXMubW9kYWwuYWNrbm93bGVkZ2UoXG4gICAgICBnZXR0ZXh0KCdQYWNrYWdlIGxpbWl0IGV4Y2VlZGVkJyksXG4gICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgZ2V0dGV4dChcbiAgICAgICAgICAnWW91IGhhdmUgcmVhY2hlZCB0aGUgbWF4aW11bSBudW1iZXIgb2Yge3sgdmVyc2lvbnNMaW1pdCB9fSBwYWNrYWdlIHZlcnNpb25zLiBUbyBhZGQgYW5vdGhlciB2ZXJzaW9uLCBmaXJzdCBkZWxldGUgb25lIGZyb20gdGhlIGxpc3QuJ1xuICAgICAgICApLFxuICAgICAgICB7IHZlcnNpb25zTGltaXQ6IHRoaXMudmVyc2lvbnNMaW1pdCB9XG4gICAgICApLFxuICAgICAgU3RhdHVzLklORk8sXG4gICAgICBnZXR0ZXh0KCdDbG9zZScpXG4gICAgKTtcbiAgICB0aHJvdyB1bmRlZmluZWQ7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHJlZnJlc2hQYWNrYWdlKCkge1xuICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTtcbiAgICB0aGlzLnBhY2thZ2UgPSBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZ2V0QXBwbGljYXRpb24odGhpcy5wYWNrYWdlLmlkKTtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhID0gdGhpcy5wYWNrYWdlO1xuICAgIHRoaXMuc29ydFZlcnNpb25zKCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIHByaXZhdGUgc29ydFZlcnNpb25zKCkge1xuICAgIHRoaXMuc29ydGVkVmVyc2lvbnMgPSB0aGlzLnBsdWdpbnNTZXJ2aWNlLnNvcnRWZXJzaW9ucyhcbiAgICAgIHtcbiAgICAgICAgbGlzdDogdGhpcy5wYWNrYWdlLmFwcGxpY2F0aW9uVmVyc2lvbnMsXG4gICAgICAgIHBhdGg6IFsndmVyc2lvbiddXG4gICAgICB9LFxuICAgICAgJ2Rlc2MnXG4gICAgKTtcbiAgICB0aGlzLnRvZ2dsZVVwbG9hZFBvc3NpYmlsaXR5KCk7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIHNldFVwbG9hZGVkVmVyc2lvbkFzTGF0ZXN0KCkge1xuICAgIGNvbnN0IHVwbG9hZGVkVmVyc2lvbiA9XG4gICAgICB0aGlzLnBhY2thZ2UuYXBwbGljYXRpb25WZXJzaW9uc1t0aGlzLnBhY2thZ2UuYXBwbGljYXRpb25WZXJzaW9ucy5sZW5ndGggLSAxXTtcbiAgICB0cnkge1xuICAgICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5QQUNLQUdFX1ZFUlNJT05TLCB7XG4gICAgICAgIGNvbXBvbmVudDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5DT01QT05FTlRTLlBBQ0tBR0VfVkVSU0lPTlMsXG4gICAgICAgIGFjdGlvbjogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5BQ1RJT05TLlVQTE9BRCxcbiAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuU1VDQ0VTUyxcbiAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgIH0pO1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdVcGxvYWQgc3VjY2Vzc2Z1bCcpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgJ0RvIHlvdSB3YW50IHRvIHNldCB2ZXJzaW9uIHt7dmVyc2lvbn19IGFzIHRoZSBsYXRlc3Q/IERlcGxveWluZyBhIG5ldyBhcHBsaWNhdGlvbiB3aWxsIGFsd2F5cyB1c2UgdGhpcyB2ZXJzaW9uLidcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgdmVyc2lvbjogdXBsb2FkZWRWZXJzaW9uLnZlcnNpb24gfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuU1VDQ0VTUyxcbiAgICAgICAge1xuICAgICAgICAgIG9rOiBnZXR0ZXh0KCdTZXQgYXMgbGF0ZXN0YHZlcnNpb25gJyksXG4gICAgICAgICAgY2FuY2VsOiBnZXR0ZXh0KCdLZWVwIHVuY2hhbmdlZGB2ZXJzaW9uYCcpXG4gICAgICAgIH1cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgLy8gb24gY2FuY2VsOiBkbyBub3RoaW5nXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuc2V0VmVyc2lvbkFzTGF0ZXN0KHVwbG9hZGVkVmVyc2lvbik7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZVVwbG9hZFBvc3NpYmlsaXR5KCkge1xuICAgIHRoaXMucHJlVXBsb2FkQ2FsbGJhY2sgPVxuICAgICAgdGhpcy5zb3J0ZWRWZXJzaW9ucy5sZW5ndGggPCB0aGlzLnZlcnNpb25zTGltaXRcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5hY2tub3dsZWRnZUxpbWl0UmVhY2hlZC5iaW5kKHRoaXMpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsIHNwbGl0LXZpZXdfX2xpc3RcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvciBzdGlja3ktdG9wIGJnLWNvbXBvbmVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCIgdHJhbnNsYXRlPlZlcnNpb25zPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJiZy1sZXZlbC0xIGZsZXgtZ3Jvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJwLTE2XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgIDwvZGl2PlxuICAgIDx1bCBjbGFzcz1cIm5hdiBjOHktbmF2LXN0YWNrZWRcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICAgIDxsaVxuICAgICAgICBjbGFzcz1cImM4eS1zdGFja2VkLWl0ZW0gcC10LTAgcC1iLTAgcC1yLTRcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogc2VsZWN0ZWRWZXJzaW9uID09PSBhcHBsaWNhdGlvblZlcnNpb24udmVyc2lvbiB9XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGFwcGxpY2F0aW9uVmVyc2lvbiBvZiBzb3J0ZWRWZXJzaW9uc1wiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZsZXgtZ3JvdyBkLWZsZXggYS1pLWNlbnRlciBnYXAtNCBwLXQtOCBwLWItOFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFZlcnNpb24oYXBwbGljYXRpb25WZXJzaW9uLnZlcnNpb24pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJiaWctcGFyY2VsXCIgY2xhc3M9XCJpY29uLTIwXCI+PC9pPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiPlxuICAgICAgICAgICAge3sgJ1ZlcnNpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tZWRpdW1cIj57eyBhcHBsaWNhdGlvblZlcnNpb24udmVyc2lvbiB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC10cnVuY2F0ZSBkLWZsZXggai1jLWVuZCBmbGV4LWdyb3cgZ2FwLTQgZmxleC13cmFwIG0tbC1hdXRvXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdGFnIG9mIGFwcGxpY2F0aW9uVmVyc2lvbi50YWdzXCIgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XG4gICAgICAgICAgICAgIHt7IHRhZyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgZHJvcGRvd24gKm5nSWY9XCJoYXNBZG1pblBlcm1pc3Npb25zICYmIGlzUGFja2FnZU93bmVkQnlDdXJyZW50VGVuYW50XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi10b2dnbGUgYzh5LWRyb3Bkb3duXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2V0dGluZ3MnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cImVsbGlwc2lzLXZcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHVsICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIj5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1NldCBhcyBsYXRlc3RgdmVyc2lvbmAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VmVyc2lvbkFzTGF0ZXN0KGFwcGxpY2F0aW9uVmVyc2lvbilcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhcHBsaWNhdGlvblZlcnNpb24udGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJjb2xsZWN0XCIgY2xhc3M9XCJtLXItNFwiPjwvaT5cbiAgICAgICAgICAgICAgICB7eyAnU2V0IGFzIGxhdGVzdGB2ZXJzaW9uYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRG93bmxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRBcmNoaXZlKGFwcGxpY2F0aW9uVmVyc2lvbilcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImRvd25sb2FkXCIgY2xhc3M9XCJtLXItNFwiPjwvaT5cbiAgICAgICAgICAgICAgICB7eyAnRG93bmxvYWQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0RlbGV0ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVWZXJzaW9uUGFja2FnZShhcHBsaWNhdGlvblZlcnNpb24udmVyc2lvbilcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhcHBsaWNhdGlvblZlcnNpb24udGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJ0cmFzaFwiIGNsYXNzPVwibS1yLTRcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ0RlbGV0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3Igc3RpY2t5LWJvdHRvbVwiXG4gICAgKm5nSWY9XCIhaXNMb2FkaW5nICYmIGlzUGFja2FnZU93bmVkQnlDdXJyZW50VGVuYW50XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG0tYi0wXCI+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlPlVwbG9hZCBhIG5ldyB2ZXJzaW9uPC9sYWJlbD5cbiAgICAgIDxjOHktdXBsb2FkLWFyY2hpdmVcbiAgICAgICAgWyhhcHBsaWNhdGlvbildPVwicGFja2FnZVwiXG4gICAgICAgIFt1cGxvYWROZXdWZXJzaW9uXT1cInRydWVcIlxuICAgICAgICAocmVmcmVzaCk9XCJwYWNrYWdlVmVyc2lvblVwbG9hZGVkKClcIlxuICAgICAgICBbcHJlVXBsb2FkQ2FsbGJhY2tdPVwicHJlVXBsb2FkQ2FsbGJhY2tcIlxuICAgICAgPjwvYzh5LXVwbG9hZC1hcmNoaXZlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19
170
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS12ZXJzaW9ucy1saXN0LmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2Vjb3N5c3RlbS9wYWNrYWdlcy9wYWNrYWdlLXZlcnNpb25zL3BhY2thZ2UtdmVyc2lvbnMtbGlzdC9wYWNrYWdlLXZlcnNpb25zLWxpc3QuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3BhY2thZ2VzL3BhY2thZ2UtdmVyc2lvbnMvcGFja2FnZS12ZXJzaW9ucy1saXN0L3BhY2thZ2UtdmVyc2lvbnMtbGlzdC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBVSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBRWpELE9BQU8sRUFDTCxZQUFZLEVBQ1osZ0JBQWdCLEVBQ2hCLFlBQVksRUFDWixjQUFjLEVBQ2QsV0FBVyxFQUNYLGNBQWMsRUFDZCxNQUFNLEVBQ04sT0FBTyxFQUNSLE1BQU0scUJBQXFCLENBQUM7QUFDN0IsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDNUYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7Ozs7Ozs7O0FBRXZELE1BQU0sc0JBQXNCLEdBQUcsRUFBRSxDQUFDO0FBTWxDLE1BQU0sT0FBTyw0QkFBNEI7SUFjdkMsWUFDVSxjQUE4QixFQUM5QixjQUE4QixFQUM5QixnQkFBa0MsRUFDbEMsZ0JBQWtDLEVBQ2xDLEtBQW1CLEVBQ25CLFlBQTBCLEVBQzFCLGNBQThCLEVBQzlCLFdBQXdCLEVBQ3hCLGdCQUFrQztRQVJsQyxtQkFBYyxHQUFkLGNBQWMsQ0FBZ0I7UUFDOUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBQzlCLHFC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SSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQzVCLE9BQU87U0FDUjtRQUNELE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2pELENBQUM7SUFFTyx1QkFBdUI7UUFDN0IsSUFBSSxDQUFDLGlCQUFpQjtZQUNwQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsYUFBYTtnQkFDN0MsQ0FBQyxDQUFDLElBQUk7Z0JBQ04sQ0FBQyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDaEQsQ0FBQzs7eUhBbk1VLDRCQUE0Qjs2R0FBNUIsNEJBQTRCLGtIQ3RCekMsKzdHQTZGQTsyRkR2RWEsNEJBQTRCO2tCQUp4QyxTQUFTOytCQUNFLDJCQUEyQjs0VUFlM0IsZUFBZTtzQkFBeEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBPbkluaXQsIE91dHB1dCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xuaW1wb3J0IHsgSUFwcGxpY2F0aW9uLCBJQXBwbGljYXRpb25WZXJzaW9uIH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBHYWluc2lnaHRTZXJ2aWNlLFxuICBNb2RhbFNlcnZpY2UsXG4gIE9wdGlvbnNTZXJ2aWNlLFxuICBQZXJtaXNzaW9ucyxcbiAgUGx1Z2luc1NlcnZpY2UsXG4gIFN0YXR1cyxcbiAgZ2V0dGV4dFxufSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEVjb3N5c3RlbVNlcnZpY2UsIFBST0RVQ1RfRVhQRVJJRU5DRSB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMvZWNvc3lzdGVtL3NoYXJlZCc7XG5pbXBvcnQgeyBUcmFuc2xhdGVTZXJ2aWNlIH0gZnJvbSAnQG5neC10cmFuc2xhdGUvY29yZSc7XG5cbmNvbnN0IERFRkFVTFRfVkVSU0lPTlNfTElNSVQgPSAyMDtcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXBhY2thZ2UtdmVyc2lvbnMtbGlzdCcsXG4gIHRlbXBsYXRlVXJsOiAnLi9wYWNrYWdlLXZlcnNpb25zLWxpc3QuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFBhY2thZ2VWZXJzaW9uc0xpc3RDb21wb25lbnQgaW1wbGVtZW50cyBPbkluaXQge1xuICBDVVJSRU5UX0xPQ0FUSU9OID0gbG9jYXRpb24uaHJlZjtcblxuICB2ZXJzaW9uc0xpbWl0OiBudW1iZXI7XG4gIGlzTG9hZGluZyA9IGZhbHNlO1xuICBwYWNrYWdlOiBJQXBwbGljYXRpb247XG4gIHNvcnRlZFZlcnNpb25zOiBJQXBwbGljYXRpb25WZXJzaW9uW107XG4gIHNlbGVjdGVkVmVyc2lvbjogc3RyaW5nO1xuICBwcmVVcGxvYWRDYWxsYmFjazogKCkgPT4gUHJvbWlzZTxhbnk+O1xuICBoYXNBZG1pblBlcm1pc3Npb25zID0gZmFsc2U7XG4gIGlzUGFja2FnZU93bmVkQnlDdXJyZW50VGVuYW50ID0gZmFsc2U7XG5cbiAgQE91dHB1dCgpIG9uVmVyc2lvblNlbGVjdCA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nIHwgbnVsbD4oKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIGFjdGl2YXRlZFJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcbiAgICBwcml2YXRlIHBsdWdpbnNTZXJ2aWNlOiBQbHVnaW5zU2VydmljZSxcbiAgICBwcml2YXRlIGVjb3N5c3RlbVNlcnZpY2U6IEVjb3N5c3RlbVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB0cmFuc2xhdGVTZXJ2aWNlOiBUcmFuc2xhdGVTZXJ2aWNlLFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgb3B0aW9uc1NlcnZpY2U6IE9wdGlvbnNTZXJ2aWNlLFxuICAgIHByaXZhdGUgcGVybWlzc2lvbnM6IFBlcm1pc3Npb25zLFxuICAgIHByaXZhdGUgZ2FpbnNpZ2h0U2VydmljZTogR2FpbnNpZ2h0U2VydmljZVxuICApIHt9XG5cbiAgYXN5bmMgbmdPbkluaXQoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMuaGFzQWRtaW5QZXJtaXNzaW9ucyA9IHRoaXMucGVybWlzc2lvbnMuaGFzUm9sZShcbiAgICAgIFBlcm1pc3Npb25zLlJPTEVfQVBQTElDQVRJT05fTUFOQUdFTUVOVF9BRE1JTlxuICAgICk7XG4gICAgdGhpcy5wYWNrYWdlID0gdGhpcy5hY3RpdmF0ZWRSb3V0ZT8uc25hcHNob3Q/LnBhcmVudD8uZGF0YT8uY29udGV4dERhdGE7XG4gICAgdGhpcy5pc1BhY2thZ2VPd25lZEJ5Q3VycmVudFRlbmFudCA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc093bmVyKHRoaXMucGFja2FnZSk7XG4gICAgdGhpcy52ZXJzaW9uc0xpbWl0ID0gKGF3YWl0IHRoaXMub3B0aW9uc1NlcnZpY2UuZ2V0U3lzdGVtT3B0aW9uKFxuICAgICAgJ2FwcGxpY2F0aW9uJyxcbiAgICAgICd2ZXJzaW9ucy5saW1pdCcsXG4gICAgICBERUZBVUxUX1ZFUlNJT05TX0xJTUlUXG4gICAgKSkgYXMgbnVtYmVyO1xuICAgIHRoaXMuc29ydFZlcnNpb25zKCk7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTtcbiAgfVxuXG4gIGFzeW5jIGRvd25sb2FkQXJjaGl2ZShhcHBWZXJzaW9uOiBJQXBwbGljYXRpb25WZXJzaW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdGhpcy5nYWluc2lnaHRTZXJ2aWNlLnRyaWdnZXJFdmVudChQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkVWRU5UUy5QQUNLQUdFX1ZFUlNJT05TLCB7XG4gICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5QQUNLQUdFX1ZFUlNJT05TLFxuICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuRE9XTkxPQUQsXG4gICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgIH0pO1xuICAgIGNvbnN0IGFyY2hpdmVNTyA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRBcmNoaXZlTWFuYWdlZE9iamVjdChhcHBWZXJzaW9uLmJpbmFyeUlkKTtcbiAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuZG93bmxvYWRBcmNoaXZlKHRoaXMucGFja2FnZSwge1xuICAgICAgaWQ6IGFwcFZlcnNpb24uYmluYXJ5SWQsXG4gICAgICBuYW1lOiBhcmNoaXZlTU8ubmFtZVxuICAgIH0pO1xuICB9XG5cbiAgcGFja2FnZVZlcnNpb25VcGxvYWRlZCgpIHtcbiAgICB0aGlzLmFjdGl2YXRlZFJvdXRlLnNuYXBzaG90LnBhcmVudC5kYXRhLmNvbnRleHREYXRhID0gdGhpcy5wYWNrYWdlO1xuICAgIHRoaXMuc29ydFZlcnNpb25zKCk7XG4gICAgdGhpcy5zZXRVcGxvYWRlZFZlcnNpb25Bc0xhdGVzdCgpO1xuICB9XG5cbiAgc2VsZWN0VmVyc2lvbih2ZXJzaW9uOiBzdHJpbmcgfCBudWxsKTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZFZlcnNpb24gPSB2ZXJzaW9uO1xuICAgIHRoaXMub25WZXJzaW9uU2VsZWN0LmVtaXQodmVyc2lvbik7XG4gIH1cblxuICBhc3luYyByZW1vdmVWZXJzaW9uUGFja2FnZSh2ZXJzaW9uOiBzdHJpbmcpIHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmRlbGV0ZVBhY2thZ2VWZXJzaW9uKHRoaXMucGFja2FnZSwgeyB2ZXJzaW9uIH0pO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhcbiAgICAgICAgdGhpcy50cmFuc2xhdGVTZXJ2aWNlLmluc3RhbnQoZ2V0dGV4dCgnUGFja2FnZSB2ZXJzaW9uIHt7dmVyc2lvbn19IGhhcyBiZWVuIHJlbW92ZWQnKSwge1xuICAgICAgICAgIHZlcnNpb25cbiAgICAgICAgfSlcbiAgICAgICk7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfVkVSU0lPTlMsIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuUEFDS0FHRV9WRVJTSU9OUyxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuREVMRVRFLFxuICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TVUNDRVNTLFxuICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgfSk7XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuYWRkU2VydmVyRmFpbHVyZShlKTtcbiAgICAgIHRoaXMuZ2FpbnNpZ2h0U2VydmljZS50cmlnZ2VyRXZlbnQoUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5FVkVOVFMuUEFDS0FHRV9WRVJTSU9OUywge1xuICAgICAgICBjb21wb25lbnQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQ09NUE9ORU5UUy5QQUNLQUdFX1ZFUlNJT05TLFxuICAgICAgICBhY3Rpb246IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuQUNUSU9OUy5ERUxFVEUsXG4gICAgICAgIHJlc3VsdDogUFJPRFVDVF9FWFBFUklFTkNFLkFQUExJQ0FUSU9OUy5SRVNVTFRTLlNFUlZFUl9GQUlMVVJFLFxuICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgfSk7XG4gICAgfVxuICAgIGlmICh2ZXJzaW9uID09PSB0aGlzLnNlbGVjdGVkVmVyc2lvbikge1xuICAgICAgdGhpcy5zZWxlY3RWZXJzaW9uKG51bGwpO1xuICAgIH1cbiAgICBhd2FpdCB0aGlzLnJlZnJlc2hQYWNrYWdlKCk7XG4gIH1cblxuICBhc3luYyBzZXRWZXJzaW9uQXNMYXRlc3QoYXBwVmVyc2lvbjogSUFwcGxpY2F0aW9uVmVyc2lvbikge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2Uuc2V0UGFja2FnZVZlcnNpb25UYWcodGhpcy5wYWNrYWdlLCBhcHBWZXJzaW9uLnZlcnNpb24sIFtcbiAgICAgICAgLi4uYXBwVmVyc2lvbi50YWdzLFxuICAgICAgICAnbGF0ZXN0J1xuICAgICAgXSk7XG5cbiAgICAgIC8vIFRPRE8gYWRkZWQgaXQgZHVlIHRvOiBodHRwczovL2N1bXVsb2NpdHkuYXRsYXNzaWFuLm5ldC9icm93c2UvTVRNLTQ4NTUzXG4gICAgICAvLyBSZW1vdmUgaXQgd2hlbiBCRSBmaXhlcyBpc3N1ZXMgd2l0aCBhY3RpdmVWZXJzaW9uLlxuICAgICAgYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnNldEFwcEFjdGl2ZVZlcnNpb24odGhpcy5wYWNrYWdlLCBhcHBWZXJzaW9uLmJpbmFyeUlkKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnVGFnIGhhcyBiZWVuIHNldC4nKSk7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfVkVSU0lPTlMsIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuUEFDS0FHRV9WRVJTSU9OUyxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuU0VUX0FTX0xBVEVTVCxcbiAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuU1VDQ0VTUyxcbiAgICAgICAgdXJsOiB0aGlzLkNVUlJFTlRfTE9DQVRJT05cbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZSk7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfVkVSU0lPTlMsIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuUEFDS0FHRV9WRVJTSU9OUyxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuU0VUX0FTX0xBVEVTVCxcbiAgICAgICAgcmVzdWx0OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLlJFU1VMVFMuU0VSVkVSX0ZBSUxVUkUsXG4gICAgICAgIHVybDogdGhpcy5DVVJSRU5UX0xPQ0FUSU9OXG4gICAgICB9KTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5yZWZyZXNoUGFja2FnZSgpO1xuICB9XG5cbiAgYXN5bmMgYWNrbm93bGVkZ2VMaW1pdFJlYWNoZWQoKSB7XG4gICAgYXdhaXQgdGhpcy5tb2RhbC5hY2tub3dsZWRnZShcbiAgICAgIGdldHRleHQoJ1BhY2thZ2UgbGltaXQgZXhjZWVkZWQnKSxcbiAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICdZb3UgaGF2ZSByZWFjaGVkIHRoZSBtYXhpbXVtIG51bWJlciBvZiB7eyB2ZXJzaW9uc0xpbWl0IH19IHBhY2thZ2UgdmVyc2lvbnMuIFRvIGFkZCBhbm90aGVyIHZlcnNpb24sIGZpcnN0IGRlbGV0ZSBvbmUgZnJvbSB0aGUgbGlzdC4nXG4gICAgICAgICksXG4gICAgICAgIHsgdmVyc2lvbnNMaW1pdDogdGhpcy52ZXJzaW9uc0xpbWl0IH1cbiAgICAgICksXG4gICAgICBTdGF0dXMuSU5GTyxcbiAgICAgIGdldHRleHQoJ0Nsb3NlJylcbiAgICApO1xuICAgIHRocm93IHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgcmVmcmVzaFBhY2thZ2UoKSB7XG4gICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlO1xuICAgIHRoaXMucGFja2FnZSA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5nZXRBcHBsaWNhdGlvbih0aGlzLnBhY2thZ2UuaWQpO1xuICAgIHRoaXMuYWN0aXZhdGVkUm91dGUuc25hcHNob3QucGFyZW50LmRhdGEuY29udGV4dERhdGEgPSB0aGlzLnBhY2thZ2U7XG4gICAgdGhpcy5zb3J0VmVyc2lvbnMoKTtcbiAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlO1xuICB9XG5cbiAgcHJpdmF0ZSBzb3J0VmVyc2lvbnMoKSB7XG4gICAgdGhpcy5zb3J0ZWRWZXJzaW9ucyA9IHRoaXMucGx1Z2luc1NlcnZpY2Uuc29ydFZlcnNpb25zKFxuICAgICAge1xuICAgICAgICBsaXN0OiB0aGlzLnBhY2thZ2UuYXBwbGljYXRpb25WZXJzaW9ucyxcbiAgICAgICAgcGF0aDogWyd2ZXJzaW9uJ11cbiAgICAgIH0sXG4gICAgICAnZGVzYydcbiAgICApO1xuICAgIHRoaXMudG9nZ2xlVXBsb2FkUG9zc2liaWxpdHkoKTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgc2V0VXBsb2FkZWRWZXJzaW9uQXNMYXRlc3QoKSB7XG4gICAgY29uc3QgdXBsb2FkZWRWZXJzaW9uID1cbiAgICAgIHRoaXMucGFja2FnZS5hcHBsaWNhdGlvblZlcnNpb25zW3RoaXMucGFja2FnZS5hcHBsaWNhdGlvblZlcnNpb25zLmxlbmd0aCAtIDFdO1xuICAgIHRyeSB7XG4gICAgICB0aGlzLmdhaW5zaWdodFNlcnZpY2UudHJpZ2dlckV2ZW50KFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuRVZFTlRTLlBBQ0tBR0VfVkVSU0lPTlMsIHtcbiAgICAgICAgY29tcG9uZW50OiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkNPTVBPTkVOVFMuUEFDS0FHRV9WRVJTSU9OUyxcbiAgICAgICAgYWN0aW9uOiBQUk9EVUNUX0VYUEVSSUVOQ0UuQVBQTElDQVRJT05TLkFDVElPTlMuVVBMT0FELFxuICAgICAgICByZXN1bHQ6IFBST0RVQ1RfRVhQRVJJRU5DRS5BUFBMSUNBVElPTlMuUkVTVUxUUy5TVUNDRVNTLFxuICAgICAgICB1cmw6IHRoaXMuQ1VSUkVOVF9MT0NBVElPTlxuICAgICAgfSk7XG4gICAgICBhd2FpdCB0aGlzLm1vZGFsLmNvbmZpcm0oXG4gICAgICAgIGdldHRleHQoJ1VwbG9hZCBzdWNjZXNzZnVsJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICAnRG8geW91IHdhbnQgdG8gc2V0IHZlcnNpb24ge3t2ZXJzaW9ufX0gYXMgdGhlIGxhdGVzdD8gRGVwbG95aW5nIGEgbmV3IGFwcGxpY2F0aW9uIHdpbGwgYWx3YXlzIHVzZSB0aGlzIHZlcnNpb24uJ1xuICAgICAgICAgICksXG4gICAgICAgICAgeyB2ZXJzaW9uOiB1cGxvYWRlZFZlcnNpb24udmVyc2lvbiB9XG4gICAgICAgICksXG4gICAgICAgIFN0YXR1cy5TVUNDRVNTLFxuICAgICAgICB7XG4gICAgICAgICAgb2s6IGdldHRleHQoJ1NldCBhcyBsYXRlc3RgdmVyc2lvbmAnKSxcbiAgICAgICAgICBjYW5jZWw6IGdldHRleHQoJ0tlZXAgdW5jaGFuZ2VkYHZlcnNpb25gJylcbiAgICAgICAgfVxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICBhd2FpdCB0aGlzLnJlZnJlc2hQYWNrYWdlKCk7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMuc2V0VmVyc2lvbkFzTGF0ZXN0KHVwbG9hZGVkVmVyc2lvbik7XG4gIH1cblxuICBwcml2YXRlIHRvZ2dsZVVwbG9hZFBvc3NpYmlsaXR5KCkge1xuICAgIHRoaXMucHJlVXBsb2FkQ2FsbGJhY2sgPVxuICAgICAgdGhpcy5zb3J0ZWRWZXJzaW9ucy5sZW5ndGggPCB0aGlzLnZlcnNpb25zTGltaXRcbiAgICAgICAgPyBudWxsXG4gICAgICAgIDogdGhpcy5hY2tub3dsZWRnZUxpbWl0UmVhY2hlZC5iaW5kKHRoaXMpO1xuICB9XG59XG4iLCI8ZGl2IGNsYXNzPVwiaW5uZXItc2Nyb2xsIHNwbGl0LXZpZXdfX2xpc3RcIj5cbiAgPGRpdiBjbGFzcz1cImNhcmQtaGVhZGVyIHNlcGFyYXRvciBzdGlja3ktdG9wIGJnLWNvbXBvbmVudFwiPlxuICAgIDxkaXYgY2xhc3M9XCJjYXJkLXRpdGxlXCIgdHJhbnNsYXRlPlZlcnNpb25zPC9kaXY+XG4gIDwvZGl2PlxuXG4gIDxkaXYgY2xhc3M9XCJiZy1sZXZlbC0xIGZsZXgtZ3Jvd1wiPlxuICAgIDxkaXYgY2xhc3M9XCJwLTE2XCIgKm5nSWY9XCJpc0xvYWRpbmdcIj5cbiAgICAgIDxjOHktbG9hZGluZz48L2M4eS1sb2FkaW5nPlxuICAgIDwvZGl2PlxuICAgIDx1bCBjbGFzcz1cIm5hdiBjOHktbmF2LXN0YWNrZWRcIiAqbmdJZj1cIiFpc0xvYWRpbmdcIj5cbiAgICAgIDxsaVxuICAgICAgICBjbGFzcz1cImM4eS1zdGFja2VkLWl0ZW0gcC10LTAgcC1iLTAgcC1yLTRcIlxuICAgICAgICBbbmdDbGFzc109XCJ7IGFjdGl2ZTogc2VsZWN0ZWRWZXJzaW9uID09PSBhcHBsaWNhdGlvblZlcnNpb24udmVyc2lvbiB9XCJcbiAgICAgICAgKm5nRm9yPVwibGV0IGFwcGxpY2F0aW9uVmVyc2lvbiBvZiBzb3J0ZWRWZXJzaW9uc1wiXG4gICAgICA+XG4gICAgICAgIDxkaXZcbiAgICAgICAgICBjbGFzcz1cImZsZXgtZ3JvdyBkLWZsZXggYS1pLWNlbnRlciBnYXAtNCBwLXQtOCBwLWItOFwiXG4gICAgICAgICAgKGNsaWNrKT1cInNlbGVjdFZlcnNpb24oYXBwbGljYXRpb25WZXJzaW9uLnZlcnNpb24pXCJcbiAgICAgICAgPlxuICAgICAgICAgIDxpIGM4eUljb249XCJiaWctcGFyY2VsXCIgY2xhc3M9XCJpY29uLTIwXCI+PC9pPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1sYWJlbC1zbWFsbFwiPlxuICAgICAgICAgICAge3sgJ1ZlcnNpb24nIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDxzcGFuIGNsYXNzPVwidGV4dC1tZWRpdW1cIj57eyBhcHBsaWNhdGlvblZlcnNpb24udmVyc2lvbiB9fTwvc3Bhbj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPVwidGV4dC10cnVuY2F0ZSBkLWZsZXggai1jLWVuZCBmbGV4LWdyb3cgZ2FwLTQgZmxleC13cmFwIG0tbC1hdXRvXCI+XG4gICAgICAgICAgICA8c3BhbiAqbmdGb3I9XCJsZXQgdGFnIG9mIGFwcGxpY2F0aW9uVmVyc2lvbi50YWdzXCIgY2xhc3M9XCJsYWJlbCBsYWJlbC1pbmZvXCI+XG4gICAgICAgICAgICAgIHt7IHRhZyB9fVxuICAgICAgICAgICAgPC9zcGFuPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICA8L2Rpdj5cbiAgICAgICAgPGRpdiBjbGFzcz1cImRyb3Bkb3duXCIgZHJvcGRvd24gKm5nSWY9XCJoYXNBZG1pblBlcm1pc3Npb25zICYmIGlzUGFja2FnZU93bmVkQnlDdXJyZW50VGVuYW50XCI+XG4gICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgY2xhc3M9XCJkcm9wZG93bi10b2dnbGUgYzh5LWRyb3Bkb3duXCJcbiAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgdGl0bGU9XCJ7eyAnU2V0dGluZ3MnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgIGRyb3Bkb3duVG9nZ2xlXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPGkgYzh5SWNvbj1cImVsbGlwc2lzLXZcIj48L2k+XG4gICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgPHVsICpkcm9wZG93bk1lbnUgY2xhc3M9XCJkcm9wZG93bi1tZW51IGRyb3Bkb3duLW1lbnUtcmlnaHRcIj5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ1NldCBhcyBsYXRlc3RgdmVyc2lvbmAnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwic2V0VmVyc2lvbkFzTGF0ZXN0KGFwcGxpY2F0aW9uVmVyc2lvbilcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhcHBsaWNhdGlvblZlcnNpb24udGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJjb2xsZWN0XCIgY2xhc3M9XCJtLXItNFwiPjwvaT5cbiAgICAgICAgICAgICAgICB7eyAnU2V0IGFzIGxhdGVzdGB2ZXJzaW9uYCcgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgICAgPGxpPlxuICAgICAgICAgICAgICA8YnV0dG9uXG4gICAgICAgICAgICAgICAgdHlwZT1cImJ1dHRvblwiXG4gICAgICAgICAgICAgICAgdGl0bGU9XCJ7eyAnRG93bmxvYWQnIHwgdHJhbnNsYXRlIH19XCJcbiAgICAgICAgICAgICAgICAoY2xpY2spPVwiZG93bmxvYWRBcmNoaXZlKGFwcGxpY2F0aW9uVmVyc2lvbilcIlxuICAgICAgICAgICAgICA+XG4gICAgICAgICAgICAgICAgPGkgYzh5SWNvbj1cImRvd25sb2FkXCIgY2xhc3M9XCJtLXItNFwiPjwvaT5cbiAgICAgICAgICAgICAgICB7eyAnRG93bmxvYWQnIHwgdHJhbnNsYXRlIH19XG4gICAgICAgICAgICAgIDwvYnV0dG9uPlxuICAgICAgICAgICAgPC9saT5cbiAgICAgICAgICAgIDxsaT5cbiAgICAgICAgICAgICAgPGJ1dHRvblxuICAgICAgICAgICAgICAgIHR5cGU9XCJidXR0b25cIlxuICAgICAgICAgICAgICAgIHRpdGxlPVwie3sgJ0RlbGV0ZScgfCB0cmFuc2xhdGUgfX1cIlxuICAgICAgICAgICAgICAgIChjbGljayk9XCJyZW1vdmVWZXJzaW9uUGFja2FnZShhcHBsaWNhdGlvblZlcnNpb24udmVyc2lvbilcIlxuICAgICAgICAgICAgICAgIFtkaXNhYmxlZF09XCJhcHBsaWNhdGlvblZlcnNpb24udGFncz8uaW5jbHVkZXMoJ2xhdGVzdCcpXCJcbiAgICAgICAgICAgICAgPlxuICAgICAgICAgICAgICAgIDxpIGM4eUljb249XCJ0cmFzaFwiIGNsYXNzPVwibS1yLTRcIj48L2k+XG4gICAgICAgICAgICAgICAge3sgJ0RlbGV0ZScgfCB0cmFuc2xhdGUgfX1cbiAgICAgICAgICAgICAgPC9idXR0b24+XG4gICAgICAgICAgICA8L2xpPlxuICAgICAgICAgIDwvdWw+XG4gICAgICAgIDwvZGl2PlxuICAgICAgPC9saT5cbiAgICA8L3VsPlxuICA8L2Rpdj5cblxuICA8ZGl2XG4gICAgY2xhc3M9XCJjYXJkLWZvb3RlciBzZXBhcmF0b3Igc3RpY2t5LWJvdHRvbVwiXG4gICAgKm5nSWY9XCIhaXNMb2FkaW5nICYmIGlzUGFja2FnZU93bmVkQnlDdXJyZW50VGVuYW50XCJcbiAgPlxuICAgIDxkaXYgY2xhc3M9XCJmb3JtLWdyb3VwIG0tYi0wXCI+XG4gICAgICA8bGFiZWwgdHJhbnNsYXRlPlVwbG9hZCBhIG5ldyB2ZXJzaW9uPC9sYWJlbD5cbiAgICAgIDxjOHktdXBsb2FkLWFyY2hpdmVcbiAgICAgICAgWyhhcHBsaWNhdGlvbildPVwicGFja2FnZVwiXG4gICAgICAgIFt1cGxvYWROZXdWZXJzaW9uXT1cInRydWVcIlxuICAgICAgICAocmVmcmVzaCk9XCJwYWNrYWdlVmVyc2lvblVwbG9hZGVkKClcIlxuICAgICAgICBbcHJlVXBsb2FkQ2FsbGJhY2tdPVwicHJlVXBsb2FkQ2FsbGJhY2tcIlxuICAgICAgPjwvYzh5LXVwbG9hZC1hcmNoaXZlPlxuICAgIDwvZGl2PlxuICA8L2Rpdj5cbjwvZGl2PlxuIl19