@c8y/ngx-components 1018.0.264 → 1018.0.265

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.
@@ -447,7 +447,12 @@ export class EcosystemService {
447
447
  this.alertService.success(gettext('Archive deleted.'));
448
448
  }
449
449
  catch (ex) {
450
- this.alertError(ex);
450
+ if (ex) {
451
+ this.alertError(ex);
452
+ }
453
+ else {
454
+ return Promise.reject('cancelled');
455
+ }
451
456
  }
452
457
  }
453
458
  async deployApp(selectedPackage, formGroupValue, model) {
@@ -718,4 +723,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
718
723
  providedIn: 'root'
719
724
  }]
720
725
  }], ctorParameters: function () { return [{ type: i1.ModalService }, { type: i1.AlertService }, { type: i1.HumanizeAppNamePipe }, { type: i2.TranslateService }, { type: i3.ApplicationService }, { type: i1.AppStateService }, { type: i1.ZipService }, { type: i3.TenantService }, { type: i3.InventoryService }, { type: i1.WizardModalService }]; } });
721
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2Vjb3N5c3RlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFXZixnQkFBZ0IsRUFJaEIsYUFBYSxFQUNkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLFVBQVUsRUFDWCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEcsT0FBTyxFQUFFLGVBQWUsRUFBYyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFFTCxn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LENBQUMsQ0FBQyxDQUFDO1FBQ3pELE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFTyxLQUFLLENBQUMsa0JBQWtCLENBQzlCLE9BQWEsRUFDYixHQUFpQjtRQUVqQixNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxJQUFJLENBQUMsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7UUFDdkUsTUFBTSxnQkFBZ0IsR0FBRyxHQUFHLENBQUMsbUJBQW1CLEVBQUUsTUFBTSxLQUFLLENBQUMsQ0FBQztRQUMvRCxPQUFPO1lBQ0wsT0FBTyxFQUFFLFVBQVU7WUFDbkIsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxrRkFBa0Y7YUFDM0Y7WUFDRCxnQkFBZ0IsRUFBRSxtQkFBbUI7WUFDckMsV0FBVyxFQUFFO2dCQUNYLGtCQUFrQixFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsRUFBRTthQUMvRTtTQUNGLENBQUM7SUFDSixDQUFDO0lBRU8scUJBQXFCLENBQUMsSUFBWTtRQUN4QyxNQUFNLGFBQWEsR0FBRyxvQ0FBb0MsQ0FBQztRQUMzRCxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3pDLENBQUM7SUFFTyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsT0FBTztRQUN4QyxPQUFPLElBQUksQ0FBQyxNQUFNLEdBQUcsNEJBQTRCLElBQUksT0FBTyxLQUFLLGVBQWUsQ0FBQyxZQUFZLENBQUM7SUFDaEcsQ0FBQzs7NkdBLzJCVSxnQkFBZ0I7aUhBQWhCLGdCQUFnQixjQUZmLE1BQU07MkZBRVAsZ0JBQWdCO2tCQUg1QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksXG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBJQXBwbGljYXRpb24sXG4gIElBcHBsaWNhdGlvbkJpbmFyeSxcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbixcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbkRlbGV0ZVBhcmFtcyxcbiAgSUN1cnJlbnRUZW5hbnQsXG4gIElkUmVmZXJlbmNlLFxuICBJRmV0Y2hSZXNwb25zZSxcbiAgSUlkZW50aWZpZWQsXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJTWFuaWZlc3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElSZXN1bHQsXG4gIElSZXN1bHRMaXN0LFxuICBJVXBsb2FkUGFyYW1zT3ZlcnJpZGUsXG4gIFRlbmFudFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gIE1vZGFsU2VydmljZSxcbiAgUGFja2FnZVR5cGUsXG4gIFN0YXR1cyxcbiAgV2l6YXJkTW9kYWxTZXJ2aWNlLFxuICBaaXBTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGdldCwgZ3JvdXBCeSwga2ViYWJDYXNlLCBwaWNrLCB1bmlxQnksIG9taXQsIGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZGVmZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZSwgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGd0LCBjb2VyY2UgfSBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgRWNvc3lzdGVtRXJyb3IgfSBmcm9tICcuL2Vjb3N5c3RlbS1lcnJvcic7XG5pbXBvcnQgeyBBUFBfU1RBVEUsIEVSUk9SX01FU1NBR0VTIH0gZnJvbSAnLi9lY29zeXN0ZW0uY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU3RhdGUsXG4gIEVjb3N5c3RlbVdpemFyZHMsXG4gIEVSUk9SX1RZUEUsXG4gIExpY2Vuc2VkQXBwbGljYXRpb25QbHVnaW5cbn0gZnJvbSAnLi9lY29zeXN0ZW0ubW9kZWwnO1xuXG5jb25zdCBDVU1VTE9DSVRZX0pTT04gPSAnY3VtdWxvY2l0eS5qc29uJztcbmNvbnN0IE1JQ1JPU0VSVklDRV9OQU1FX01BWF9MRU5HVEggPSAyMztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRWNvc3lzdGVtU2VydmljZSB7XG4gIGFwcERlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElBcHBsaWNhdGlvbj4oKTtcbiAgcHJvZ3Jlc3M6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KG51bGwpO1xuICBwcml2YXRlIGFwcHNHcm91cGVkQnlDb250ZXh0UGF0aCQ6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgSUFwcGxpY2F0aW9uW10+PjtcbiAgcHJpdmF0ZSB4aHI6IFhNTEh0dHBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHVtYW5pemVBcHBOYW1lOiBIdW1hbml6ZUFwcE5hbWVQaXBlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6aXBTZXJ2aWNlOiBaaXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aXphcmRNb2RhbFNlcnZpY2U6IFdpemFyZE1vZGFsU2VydmljZVxuICApIHtcbiAgICB0aGlzLmFwcHNHcm91cGVkQnlDb250ZXh0UGF0aCQgPSBkZWZlcigoKSA9PiB0aGlzLmdldFdlYkFwcGxpY2F0aW9ucygpKS5waXBlKFxuICAgICAgbWFwKHdlYkFwcHMgPT4gZ3JvdXBCeSh3ZWJBcHBzLCAnY29udGV4dFBhdGgnKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldFVuaXF1ZUFwcENvbmZpZyhzcmNBcHA6IElBcHBsaWNhdGlvbiwgZXhpc3RpbmdBcHBzOiBJQXBwbGljYXRpb25bXSk6IElBcHBsaWNhdGlvbiB7XG4gICAgbGV0IGFwcDogSUFwcGxpY2F0aW9uID0ge1xuICAgICAgbmFtZTogc3JjQXBwLm5hbWUsXG4gICAgICBrZXk6IHNyY0FwcC5rZXksXG4gICAgICBjb250ZXh0UGF0aDogc3JjQXBwLmNvbnRleHRQYXRoXG4gICAgfTtcbiAgICBmb3IgKGxldCByZXRyeU5vID0gMDsgcmV0cnlObyA8IDk7ICkge1xuICAgICAgaWYgKHRoaXMuY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKGV4aXN0aW5nQXBwcywgYXBwLCByZXRyeU5vKSkge1xuICAgICAgICByZXRyeU5vKys7XG4gICAgICAgIGFwcCA9IHtcbiAgICAgICAgICBuYW1lOiBbc3JjQXBwLm5hbWUsIHJldHJ5Tm9dLmpvaW4oJy0nKSxcbiAgICAgICAgICBrZXk6IFtzcmNBcHAua2V5LCByZXRyeU5vXS5qb2luKCctJyksXG4gICAgICAgICAgY29udGV4dFBhdGg6IFtzcmNBcHAuY29udGV4dFBhdGgsIHJldHJ5Tm9dLmpvaW4oJy0nKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21tdW5pdHkgcGx1Z2lucyBuZWVkIHRvIHZlcmlmeSB0aGUgbGljZW5zZSBhZ3JlZW1lbnQuIElmIGEgcGFja2FnZSBpcyBhIGNvbW11bml0eVxuICAgKiBwYWNrYWdlLCB0aGUgbGljZW5zZSBpcyBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpbnNUb0luc3RhbGwgVGhlIGxpc3Qgb2YgcGx1Z2lucyB0byBpbnN0YWxsLlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbnN0YWxsYXRpb24gY2FuIGNvbnRpbnVlLlxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5TGljZW5zZXMocGx1Z2luc1RvSW5zdGFsbDogQXJyYXk8TGljZW5zZWRBcHBsaWNhdGlvblBsdWdpbj4pIHtcbiAgICBsZXQgX3Jlc29sdmU7XG4gICAgY29uc3QgcmVzdWx0OiBQcm9taXNlPGJvb2xlYW4+ID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBwbHVnaW5zVG9JbnN0YWxsID0gcGx1Z2luc1RvSW5zdGFsbC5maWx0ZXIocGx1Z2luID0+IHBsdWdpbi50eXBlICE9PSBQYWNrYWdlVHlwZS5DVVNUT00pO1xuXG4gICAgaWYgKHBsdWdpbnNUb0luc3RhbGwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWxTdGF0ZTogYW55ID0ge1xuICAgICAgaWQ6IEVjb3N5c3RlbVdpemFyZHMuTElDRU5TRV9DT05GSVJNLFxuICAgICAgY29tcG9uZW50SW5pdGlhbFN0YXRlOiB7XG4gICAgICAgIHBsdWdpbnNUb0luc3RhbGxcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsT3B0aW9ucyA9IHsgaW5pdGlhbFN0YXRlIH07XG4gICAgY29uc3Qgd2l6YXJkID0gdGhpcy53aXphcmRNb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbE9wdGlvbnMpO1xuXG4gICAgd2l6YXJkLmNvbnRlbnQub25DbG9zZS5zdWJzY3JpYmUoY29uZmlybWVkID0+IHtcbiAgICAgIF9yZXNvbHZlKGNvbmZpcm1lZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDb21wYXJlcyBjdXJyZW50bHkgZGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvbiB3aXRoIGFwcGxpY2F0aW9uIHZlcnNpb24gdGFnZ2VkIGFzIFwibGF0ZXN0XCJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24gRGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvblxuICAgKiBAcGFyYW0ge29iamVjdH0gbGF0ZXN0QXBwIExhdGVzdCBhcHBsaWNhdGlvbiB2ZXJzaW9uIG9iamVjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGxhdGVzdCB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50LCBvdGhlcndpc2UgZmFsc2VcbiAgICovXG4gIHNob3VsZFVwZ3JhZGVQYWNrYWdlKGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb246IHN0cmluZywgbGF0ZXN0QXBwOiBJQXBwbGljYXRpb25WZXJzaW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGF0ZXN0QXBwbGljYXRpb25WZXJzaW9uID0gbGF0ZXN0QXBwPy52ZXJzaW9uO1xuXG4gICAgaWYgKCFsYXRlc3RBcHBsaWNhdGlvblZlcnNpb24gfHwgIWN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3QoY29lcmNlKGxhdGVzdEFwcGxpY2F0aW9uVmVyc2lvbiksIGNvZXJjZShjdXJyZW50QXBwbGljYXRpb25WZXJzaW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VhcmNoZWQgdGFnXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IGFwcGxpY2F0aW9uVmVyc2lvbnMgQXJyYXkgd2l0aCBhbGwgYXZhaWxhYmxlIHZlcnNpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIFNlYXJjaGVkIHRhZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNlYXJjaGVkIHRhZ1xuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25WZXJzaW9uT2JqZWN0QnlUYWcoXG4gICAgYXBwbGljYXRpb25WZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdLFxuICAgIHRhZ05hbWU6IHN0cmluZ1xuICApOiBJQXBwbGljYXRpb25WZXJzaW9uIHtcbiAgICByZXR1cm4gYXBwbGljYXRpb25WZXJzaW9ucz8uZmluZChlbGVtZW50ID0+IGVsZW1lbnQudGFncy5pbmNsdWRlcyh0YWdOYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRBcHBsaWNhdGlvbihhcHBJZDogSWRSZWZlcmVuY2UpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGV0YWlsKGFwcElkKSkuZGF0YTtcbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQXBwbGljYXRpb24+PiB7XG4gICAgY29uc3QgZmlsdGVyOiBvYmplY3QgPSB7XG4gICAgICBwYWdlU2l6ZTogMjAwMCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKGZpbHRlciwgY3VzdG9tRmlsdGVyKTtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdEJ5VGVuYW50KGN1cnJlbnRUZW5hbnQubmFtZSwgZmlsdGVyKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1pY3Jvc2VydmljZXMoKTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoKSkuZGF0YTtcbiAgICBjb25zdCBtaWNyb3NlcnZpY2VzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNNaWNyb3NlcnZpY2UoYXBwKSk7XG4gICAgcmV0dXJuIG1pY3Jvc2VydmljZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRXZWJBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcikpLmRhdGE7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzQXBwbGljYXRpb24oYXBwKSk7XG4gICAgcmV0dXJuIHdlYkFwcHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRGZWF0dXJlQXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgYXBwcyA9IChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXIpKS5kYXRhO1xuICAgIGNvbnN0IHdlYkFwcHMgPSBhcHBzLmZpbHRlcihhcHAgPT4gdGhpcy5pc0ZlYXR1cmUoYXBwKSk7XG4gICAgcmV0dXJuIHdlYkFwcHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRQYWNrYWdlQXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgZmlsdGVyQ2FsbGJhY2sgPSBhcHAgPT4gdGhpcy5pc1BhY2thZ2UoYXBwKTtcbiAgICByZXR1cm4gdGhpcy5nZXRBcHBsaWNhdGlvbnNGaWx0ZXJlZChjdXN0b21GaWx0ZXIsIGZpbHRlckNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzeW5jIGdldEhvc3RlZEFuZFBhY2thZ2VBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBmaWx0ZXJDYWxsYmFjayA9IGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApIHx8IHRoaXMuaXNBcHBsaWNhdGlvbihhcHApO1xuICAgIHJldHVybiB0aGlzLmdldEFwcGxpY2F0aW9uc0ZpbHRlcmVkKGN1c3RvbUZpbHRlciwgZmlsdGVyQ2FsbGJhY2spO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXBwbGljYXRpb25zRmlsdGVyZWQoXG4gICAgY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSxcbiAgICBmaWx0ZXJDYWxsYmFjayA9IChhcHA6IElBcHBsaWNhdGlvbikgPT4gISFhcHBcbiAgKTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IE9iamVjdC5hc3NpZ24oe30sIGN1c3RvbUZpbHRlcik7XG4gICAgY29uc3Qgc2hhcmVkRmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRUQsXG4gICAgICAgIHR5cGU6ICdIT1NURUQnLFxuICAgICAgICBwYWdlU2l6ZTogMjAwMFxuICAgICAgfSxcbiAgICAgIGN1c3RvbUZpbHRlclxuICAgICk7XG4gICAgY29uc3QgW3sgZGF0YTogYXBwcyB9LCB7IGRhdGE6IHNoYXJlZCB9XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0QXBwbGljYXRpb25zKGZpbHRlciksXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0KHNoYXJlZEZpbHRlcilcbiAgICBdKTtcbiAgICBjb25zdCB3ZWJBcHBzID0gWy4uLmFwcHMsIC4uLnNoYXJlZF0uZmlsdGVyKGZpbHRlckNhbGxiYWNrKTtcbiAgICAvLyBhbiBhcHAgY291bGQgYmUgc3Vic2NyaWJlZCB0byBhIHRlbmFudCwgYnV0IGFsc28gaGF2ZSBpdCdzIGF2YWlsYWJpbGl0eSBzZXQgdG8gU0hBUkVELCBpbiB0aGF0IGNhc2UgaXQgd291bGQgb2NjdXIgdHdpY2UuXG4gICAgY29uc3QgdW5pcVdlYkFwcHMgPSB1bmlxQnkod2ViQXBwcywgKGFwcDogSUFwcGxpY2F0aW9uKSA9PiBhcHAuaWQpO1xuICAgIHJldHVybiB1bmlxV2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGlzTWljcm9zZXJ2aWNlSG9zdGluZ0FsbG93ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlOYW1lKCdmZWF0dXJlLW1pY3Jvc2VydmljZS1ob3N0aW5nJyk7XG4gICAgcmV0dXJuICEhYXBwcy5maWx0ZXIoYXBwID0+IGFwcC5vd25lcj8udGVuYW50Py5pZCA9PT0gJ21hbmFnZW1lbnQnKS5sZW5ndGg7XG4gIH1cblxuICBjYW5PcGVuQXBwSW5Ccm93c2VyKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNOb3RBRmVhdHVyZSA9ICF0aGlzLmlzRmVhdHVyZShhcHApO1xuICAgIGNvbnN0IGhhc1Byb3BlclR5cGUgPSBbXG4gICAgICBBcHBsaWNhdGlvblR5cGUuSE9TVEVELFxuICAgICAgQXBwbGljYXRpb25UeXBlLkVYVEVSTkFMLFxuICAgICAgQXBwbGljYXRpb25UeXBlLlJFUE9TSVRPUllcbiAgICBdLmluY2x1ZGVzKGFwcC50eXBlKTtcbiAgICBjb25zdCBpc05vdFBhY2thZ2UgPSAhdGhpcy5pc1BhY2thZ2UoYXBwKTtcbiAgICByZXR1cm4gaXNOb3RBRmVhdHVyZSAmJiBoYXNQcm9wZXJUeXBlICYmIGlzTm90UGFja2FnZTtcbiAgfVxuXG4gIG9wZW5BcHAoYXBwKSB7XG4gICAgd2luZG93Lm9wZW4odGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0SHJlZihhcHApLCAnX2JsYW5rJywgJ25vb3BlbmVyLG5vcmVmZXJyZXInKTtcbiAgfVxuXG4gIGFzeW5jIGNhbkRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzT3duZXIoYXBwKSAmJiAoIXRoaXMuaXNDdXJyZW50QXBwKGFwcCkgfHwgKGF3YWl0IHRoaXMuaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHApKSlcbiAgICApO1xuICB9XG5cbiAgaXNPd25lcihhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICBjb25zdCBhcHBPd25lciA9IGdldChhcHAsICdvd25lci50ZW5hbnQuaWQnKTtcbiAgICByZXR1cm4gY3VycmVudFRlbmFudC5uYW1lID09PSBhcHBPd25lcjtcbiAgfVxuXG4gIGlzRmVhdHVyZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWFwcC5uYW1lLm1hdGNoKC9mZWF0dXJlLS8pO1xuICB9XG5cbiAgaXNNaWNyb3NlcnZpY2UoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLnR5cGUgPT09ICdNSUNST1NFUlZJQ0UnO1xuICB9XG5cbiAgaXNFeHRlcm5hbChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAudHlwZSA9PT0gJ0VYVEVSTkFMJztcbiAgfVxuXG4gIGlzUGFja2FnZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAubWFuaWZlc3Q/LmlzUGFja2FnZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGlzUGx1Z2luKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC5tYW5pZmVzdD8ucGFja2FnZSA9PT0gJ3BsdWdpbic7XG4gIH1cblxuICBjYW5jZWxBcHBDcmVhdGlvbihhcHA6IElBcHBsaWNhdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgdGhpcy54aHIuYWJvcnQoKTtcbiAgICB9XG4gICAgaWYgKGFwcCkge1xuICAgICAgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVXBsb2FkUHJvZ3Jlc3MoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgY29uc3QgY3VycmVudFByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy52YWx1ZTtcbiAgICAgIHRoaXMucHJvZ3Jlc3MubmV4dChjdXJyZW50UHJvZ3Jlc3MgKyAoZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpICogKDk1IC0gY3VycmVudFByb2dyZXNzKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0QXBwQWN0aXZlVmVyc2lvbihhcHA6IElBcHBsaWNhdGlvbiwgYWN0aXZlVmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoeyBpZDogYXBwLmlkLCBhY3RpdmVWZXJzaW9uSWQgfSk7XG4gIH1cblxuICBzZXRQYWNrYWdlVmVyc2lvblRhZyhhcHA6IElBcHBsaWNhdGlvbiwgdmVyc2lvbjogc3RyaW5nLCB0YWdzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5zZXRQYWNrYWdlVmVyc2lvblRhZyhhcHAsIHZlcnNpb24sIHRhZ3MpO1xuICB9XG5cbiAgZGVsZXRlUGFja2FnZVZlcnNpb24oYXBwOiBJQXBwbGljYXRpb24sIHBhcmFtczogSUFwcGxpY2F0aW9uVmVyc2lvbkRlbGV0ZVBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShhcHAsIHBhcmFtcyk7XG4gIH1cblxuICBnZXRIdW1hbml6ZWRBcHBOYW1lKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5odW1hbml6ZUFwcE5hbWUudHJhbnNmb3JtKGFwcC5uYW1lKS5waXBlKGRlYm91bmNlVGltZSgyNTApLCB0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGNyZWF0ZUNvbmZpZyhhcHA6IElBcHBsaWNhdGlvbiwgZm9ybUdyb3VwVmFsdWU6IEZvcm1Hcm91cCk6IFBhcnRpYWw8SUFwcGxpY2F0aW9uPiB7XG4gICAgY29uc3QgeyBpZCwgdHlwZSwgYXZhaWxhYmlsaXR5IH0gPSBhcHA7XG4gICAgbGV0IGNvbmZpZyA9IHBpY2soZm9ybUdyb3VwVmFsdWUsIFsnbmFtZScsICdrZXknLCAnY29udGV4dFBhdGgnXSk7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgaXNTZXR1cDogdHJ1ZSxcbiAgICAgIGlkLFxuICAgICAgdHlwZSxcbiAgICAgIGF2YWlsYWJpbGl0eVxuICAgIH07XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIGFzeW5jIGxpc3RBcmNoaXZlcyhhcHBJZDogc3RyaW5nIHwgbnVtYmVyIHwgSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxJQXBwbGljYXRpb25CaW5hcnlbXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiAxMDBcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcElkKS5saXN0KGZpbHRlcikpLmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGVBcmNoaXZlKGFyY2hpdmU6IElBcHBsaWNhdGlvbkJpbmFyeSwgYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcmNoaXZlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0SHVtYW5pemVkQXBwTmFtZShhcmNoaXZlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgYXJjaGl2ZScpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGFyY2hpdmUgXCJ7eyBodW1hbml6ZWRBcmNoaXZlTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaHVtYW5pemVkQXJjaGl2ZU5hbWUgfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZGVsZXRlKGFyY2hpdmUuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIGRlbGV0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGdldChleCwgJ2RhdGEubWVzc2FnZScpLCBleC5kYXRhKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXJjaGl2ZU1hbmFnZWRPYmplY3QoYmluYXJ5SWQ6IHN0cmluZyk6IFByb21pc2U8SU1hbmFnZWRPYmplY3Q+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5SWQpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRBcmNoaXZlKFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGFyY2hpdmU6IFBpY2s8SUFwcGxpY2F0aW9uQmluYXJ5LCAnbmFtZScgfCAnaWQnPlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5nZXRCaW5hcnkoYXBwLCBhcmNoaXZlKTtcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24veC16aXAtY29tcHJlc3NlZCcgfSk7XG4gICAgICBzYXZlQXMoZmlsZUJpbmFyeSwgYXJjaGl2ZS5uYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgZGVsZXRlT25GYWlsdXJlID0gZmFsc2UpOiBQcm9taXNlPElSZXN1bHQ8SUFwcGxpY2F0aW9uPj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKGFwcCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgICBpZiAoZGVsZXRlT25GYWlsdXJlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShhcHAuaWQpO1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5BUFBMSUNBVElPTl9DUkVBVElPTl9GQUlMRUQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgc2lsZW50ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcHBOYW1lID0gYXdhaXQgdGhpcy5nZXRIdW1hbml6ZWRBcHBOYW1lKGFwcCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGFwcGxpY2F0aW9uJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgYXBwbGljYXRpb24gXCJ7eyBodW1hbml6ZWRBcHBOYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICksXG4gICAgICAgICAgeyBodW1hbml6ZWRBcHBOYW1lIH1cbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcC5pZCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gZGVsZXRlZC4nKSk7XG4gICAgfVxuICAgIHRoaXMuYXBwRGVsZXRlZC5lbWl0KGFwcCk7XG4gIH1cblxuICBhc3luYyBjaGVja0lmU3Vic2NyaWJlZChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpO1xuICAgIGNvbnN0IHN1YnNjcmliZWRBcHBzID0gY3VycmVudFRlbmFudC5kYXRhLmFwcGxpY2F0aW9ucy5yZWZlcmVuY2VzO1xuICAgIHJldHVybiBzdWJzY3JpYmVkQXBwcy5zb21lKGFwcGxpY2F0aW9uID0+IGFwcGxpY2F0aW9uLmFwcGxpY2F0aW9uLmlkID09PSBhcHAuaWQpO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2Uuc3Vic2NyaWJlQXBwbGljYXRpb24oY3VycmVudFRlbmFudCwgYXBwKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnU3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdG8gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudW5zdWJzY3JpYmVBcHBsaWNhdGlvbihjdXJyZW50VGVuYW50LCBhcHApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdTdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzVmFsaWRBcHBUeXBlKGFyY2hpdmU6IEZpbGUsIGFwcFR5cGU6IEFwcGxpY2F0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50VHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICAgIGlmIChjdXJyZW50VHlwZSAhPT0gYXBwVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEFyY2hpdmVUb0FwcChcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGlzTmV3VmVyc2lvbiA9IGZhbHNlXG4gICk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IHVwbG9hZE92ZXJyaWRlczogSVVwbG9hZFBhcmFtc092ZXJyaWRlO1xuICAgIGlmIChpc05ld1ZlcnNpb24pIHtcbiAgICAgIHVwbG9hZE92ZXJyaWRlcyA9IGF3YWl0IHRoaXMuZ2V0VXBsb2FkT3ZlcnJpZGVzKGFyY2hpdmUsIGFwcCk7XG4gICAgfVxuICAgIGNvbnN0IGJpbmFyeVNlcnZpY2UgPSB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKTtcbiAgICB0aGlzLnhociA9IGJpbmFyeVNlcnZpY2UudXBsb2FkV2l0aFByb2dyZXNzWGhyKFxuICAgICAgYXJjaGl2ZSxcbiAgICAgIHRoaXMudXBkYXRlVXBsb2FkUHJvZ3Jlc3MuYmluZCh0aGlzKSxcbiAgICAgICcnLFxuICAgICAgdXBsb2FkT3ZlcnJpZGVzXG4gICAgKTtcblxuICAgIGNvbnN0IGJpbmFyeU1vID0gYXdhaXQgYmluYXJ5U2VydmljZS5nZXRYTUxIdHRwUmVzcG9uc2UodGhpcy54aHIpO1xuICAgIC8vIFRPRE8gY29tbWVudGVkIGl0IGR1ZSB0bzogaHR0cHM6Ly9jdW11bG9jaXR5LmF0bGFzc2lhbi5uZXQvYnJvd3NlL01UTS00ODU1M1xuICAgIC8vIEFkZCBpdCBiYWNrIHdoZW4gQkUgZml4ZXMgaXNzdWVzIHdpdGggYWN0aXZlVmVyc2lvbi5cbiAgICAvLyBpZiAoaXNOZXdWZXJzaW9uKSB7XG4gICAgLy8gICByZXR1cm4gYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbihhcHApO1xuICAgIC8vIH1cbiAgICBjb25zdCBub3RJbml0aWFsUGFja2FnZSA9IGFwcC5hcHBsaWNhdGlvblZlcnNpb25zPy5sZW5ndGggPiAwO1xuICAgIGlmIChub3RJbml0aWFsUGFja2FnZSkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoeyBpZDogYXBwLmlkIH0pKS5kYXRhO1xuICAgIH1cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2V0QXBwQWN0aXZlVmVyc2lvbihhcHAsIChiaW5hcnlNby5iaW5hcnlJZCB8fCBiaW5hcnlNby5pZCkgYXMgc3RyaW5nKSkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQXJjaGl2ZVRvQXBwQ29tcGF0aWJpbGl0eShhcmNoaXZlOiBGaWxlLCBhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFwcFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgaWYgKGFwcFR5cGUgIT09IGFwcC50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX0FQUExJQ0FUSU9OKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTWljcm9zZXJ2aWNlKGFwcCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uKGFyY2hpdmUpO1xuICAgIC8vIEEgdXNlciBjYW4gdXBsb2FkIGFuIGFwcCB3aXRob3V0IGEgQ3VtdWxvY2l0eSBKU09OIGZpbGUgKGUuZy4gYSByZWFjdCBhcHApLlxuICAgIC8vIFRoaXMgaXMgYWxsb3dlZCBhbmQgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgdmFsaWRhdGlvbiBlcnJvci5cbiAgICBpZiAoIW1hbmlmZXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudmFsaWRhdGVQYWNrYWdlS2V5QW5kQ29udGV4dFBhdGgobWFuaWZlc3QsIGFwcCk7XG4gIH1cblxuICBhc3luYyBnZXRDdW11bG9jaXR5SnNvbihhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxJTWFuaWZlc3QgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGM4eU1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSkudG9Qcm9taXNlKCk7XG4gICAgICByZXR1cm4gYzh5TWFuaWZlc3Q7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFwcEZvckFyY2hpdmUoYXJjaGl2ZSwgaXNQYWNrYWdlVHlwZUFyY2hpdmUgPSBmYWxzZSk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IGlzUGFja2FnZSA9IGZhbHNlO1xuICAgIGNvbnN0IGFwcFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgbGV0IGFwcE1vZGVsOiBhbnkgPSB7fTtcbiAgICBjb25zdCBzdXBwb3J0ZWRBcHBUeXBlcyA9IFtBcHBsaWNhdGlvblR5cGUuSE9TVEVELCBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFXTtcblxuICAgIGlmIChzdXBwb3J0ZWRBcHBUeXBlcy5pbmNsdWRlcyhhcHBUeXBlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwTW9kZWwgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICAgICAgaXNQYWNrYWdlID0gYXBwTW9kZWwuaXNQYWNrYWdlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nLCB3ZSBhbGxvdyBoYXZpbmcgSE9TVEVEIGFwcGxpY2F0aW9ucyB3aXRob3V0IHRoZSBtYW5pZmVzdCBmaWxlXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldEJhc2VOYW1lRnJvbUFyY2hpdmVPckFwcE1vZGVsKGFyY2hpdmUsIGFwcFR5cGUsIGFwcE1vZGVsKTtcbiAgICBjb25zdCBjbGVhcmVkTmFtZSA9IHRoaXMucmVtb3ZlRm9yYmlkZGVuQ2hhcmFjdGVycyhuYW1lKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEFwcEtleShhcHBNb2RlbCwgY2xlYXJlZE5hbWUpO1xuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gdGhpcy5nZXRDb250ZXh0UGF0aChhcHBNb2RlbCwgbmFtZSk7XG5cbiAgICBjb25zdCBhcHBUb1NhdmUgPSB7XG4gICAgICByZXNvdXJjZXNVcmw6ICcvJyxcbiAgICAgIHR5cGU6IGFwcFR5cGUsXG4gICAgICBuYW1lLFxuICAgICAga2V5LFxuICAgICAgY29udGV4dFBhdGhcbiAgICB9O1xuXG4gICAgaWYgKGlzUGFja2FnZVR5cGVBcmNoaXZlICYmICFpc1BhY2thZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLklOVkFMSURfUEFDS0FHRSk7XG4gICAgfSBlbHNlIGlmICghaXNQYWNrYWdlVHlwZUFyY2hpdmUgJiYgaXNQYWNrYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX0FQUExJQ0FUSU9OKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNOYW1lTGVuZ3RoRXhjZWVkZWQobmFtZSwgYXBwVHlwZSkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICBlcnJvci5uYW1lID0gRVJST1JfVFlQRS5NSUNST1NFUlZJQ0VfTkFNRV9UT09fTE9ORztcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChFUlJPUl9NRVNTQUdFU1tlcnJvci5uYW1lXSwge1xuICAgICAgICBuYW1lLFxuICAgICAgICBtYXhDaGFyczogTUlDUk9TRVJWSUNFX05BTUVfTUFYX0xFTkdUSFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgIC4uLmFwcFRvU2F2ZSxcbiAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICBpc1BhY2thZ2UsXG4gICAgICAgICAgLi4uKGFwcE1vZGVsPy5wYWNrYWdlICYmIHsgcGFja2FnZTogYXBwTW9kZWwucGFja2FnZSB9KVxuICAgICAgICB9IGFzIHVua25vd24gYXMgSU1hbmlmZXN0XG4gICAgICB9KVxuICAgICkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHJlYWN0aXZhdGVBcmNoaXZlKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnJlYWN0aXZhdGVBcmNoaXZlKGFwcC5pZCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FwcGxpY2F0aW9uIHJlYWN0aXZhdGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydEVycm9yKGV4KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVPbGRlc3RBcmNoaXZlKGFwcDogSUFwcGxpY2F0aW9uLCBhcmNoaXZlczogSUFwcGxpY2F0aW9uQmluYXJ5W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgb2xkZXN0IGFyY2hpdmUgYW5kIGNvbnRpbnVlJyksXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1VwIHRvIDYgYXJjaGl2ZXMgY2FuIGJlIHNhdmVkIGluIHRoZSBwbGF0Zm9ybS4gSWYgeW91IHVwbG9hZCBhIG5ldyBhcmNoaXZlLCB0aGUgb2xkZXN0IGFyY2hpdmUgdGhhdCBpcyBub3QgYWN0aXZlIHdpbGwgYmUgZGVsZXRlZC4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICksXG4gICAgICAgIFN0YXR1cy5JTkZPLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUgYW5kIGNvbnRpbnVlJykgfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFyY2hpdmVUb0RlbGV0ZSA9IGFyY2hpdmVzW2FyY2hpdmVzLmxlbmd0aCAtIDJdO1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZGVsZXRlKGFyY2hpdmVUb0RlbGV0ZS5pZCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FyY2hpdmUgZGVsZXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZGVwbG95QXBwKHNlbGVjdGVkUGFja2FnZTogSUFwcGxpY2F0aW9uLCBmb3JtR3JvdXBWYWx1ZSwgbW9kZWwpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIC8vIENyZWF0ZSBuZXcgYXBwIGNvbmZpZ1xuICAgIGNvbnN0IGNvbmZpZyA9IHRoaXMuY3JlYXRlQ29uZmlnKHNlbGVjdGVkUGFja2FnZSwgZm9ybUdyb3VwVmFsdWUpO1xuICAgIGNvbnN0IHJlcXVlc3RlZFZlcnNpb24gPSBtb2RlbC5zZWxlY3RlZC52ZXJzaW9uO1xuICAgIGxldCBjbGVhbk1hbmlmZXN0O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBtYW5pZmVzdCA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcE1hbmlmZXN0KFxuICAgICAgICBzZWxlY3RlZFBhY2thZ2UsXG4gICAgICAgIHJlcXVlc3RlZFZlcnNpb25cbiAgICAgICk7XG4gICAgICBjbGVhbk1hbmlmZXN0ID0gb21pdChtYW5pZmVzdCwgWyduYW1lJywgJ2NvbnRleHRQYXRoJywgJ2tleSddKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuVkVSU0lPTl9OT1RfRk9VTkQpO1xuICAgIH1cblxuICAgIGNvbmZpZy5pc1NldHVwID0gdHJ1ZTtcbiAgICBjb25maWcubWFuaWZlc3QgPSBjbGVhbk1hbmlmZXN0O1xuICAgIGNvbmZpZy5hdmFpbGFiaWxpdHkgPSBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5QUklWQVRFO1xuICAgIGNvbmZpZy5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjb25maWcubWFuaWZlc3Quc291cmNlID0gc2VsZWN0ZWRQYWNrYWdlLmlkO1xuICAgIGNvbmZpZy5tYW5pZmVzdC5wYWNrYWdlID0gJ2JsdWVwcmludCc7XG5cbiAgICAvLyBiZWNhdXNlIG9mIGEgaXNzdWUgd2l0aCBTSEFSRUQgYXZhaWxhYmlsaXR5IHdlIGFsd2F5cyBzaG91bGQgY2hlY2sgYWdhaW5cbiAgICAvLyBpZiB0aGUgYXBwIG5vdCBleGlzdCBhbHJlYWR5XG4gICAgY29uc3QgYWxsRXhpc3RpbmdBcHBzID0gYXdhaXQgdGhpcy5nZXRIb3N0ZWRBbmRQYWNrYWdlQXBwbGljYXRpb25zKCk7XG4gICAgY29uc3QgZG9lc0FwcEtleU9yQ29udGV4dFBhdGhFeGlzdCA9IHRoaXMuY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKGFsbEV4aXN0aW5nQXBwcywgY29uZmlnKTtcbiAgICBpZiAoZG9lc0FwcEtleU9yQ29udGV4dFBhdGhFeGlzdCkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuQUxSRUFEWV9FWElTVCk7XG4gICAgfVxuXG4gICAgLy8gQ3JlYXRlIG5ldyBhcHBcbiAgICBjb25zdCBuZXdBcHAgPSAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY3JlYXRlKGNvbmZpZykpLmRhdGE7XG4gICAgdHJ5IHtcbiAgICAgIC8vIEJpbmFyeSB1cGxvYWQgY2FuIGZhaWwgaWYgU0hBUkVEIHBhY2thZ2VcbiAgICAgIC8vIGluIHRoaXMgY2FzZSwgY2F0Y2ggZXJyb3IgYW5kIGZhbGwgYmFjayB0b1xuICAgICAgLy8gY2xvbmUgQVBJLlxuICAgICAgYXdhaXQgdGhpcy51cGxvYWRCaW5hcnlGcm9tT3RoZXJQYWNrYWdlKFxuICAgICAgICBzZWxlY3RlZFBhY2thZ2UsXG4gICAgICAgIG5ld0FwcCxcbiAgICAgICAgbW9kZWwuc2VsZWN0ZWQuYmluYXJ5SWQsXG4gICAgICAgIHJlcXVlc3RlZFZlcnNpb25cbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGlmIChlcnJvcj8ucmVzPy5zdGF0dXMgPT09IDQwNCkge1xuICAgICAgICBhd2FpdCB0aGlzLmZhbGxiYWNrVG9DbG9uZShuZXdBcHAsIHNlbGVjdGVkUGFja2FnZSwgcmVxdWVzdGVkVmVyc2lvbik7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBuZXdBcHA7XG4gIH1cblxuICBhc3luYyBmYWxsYmFja1RvQ2xvbmUoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBzZWxlY3RlZFBhY2thZ2U6IElBcHBsaWNhdGlvbixcbiAgICByZXF1ZXN0ZWRWZXJzaW9uPzogc3RyaW5nXG4gICkge1xuICAgIGxldCB3YXNTdWNjZXNzID0gdHJ1ZTtcbiAgICBsZXQgY2xvbmVkUGtnO1xuICAgIHRyeSB7XG4gICAgICBjbG9uZWRQa2cgPSAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuY2xvbmUoc2VsZWN0ZWRQYWNrYWdlLCByZXF1ZXN0ZWRWZXJzaW9uKSkuZGF0YTtcbiAgICAgIGF3YWl0IHRoaXMudXBsb2FkQmluYXJ5RnJvbU90aGVyUGFja2FnZShcbiAgICAgICAgc2VsZWN0ZWRQYWNrYWdlLFxuICAgICAgICBhcHBsaWNhdGlvbixcbiAgICAgICAgY2xvbmVkUGtnLmFjdGl2ZVZlcnNpb25JZCxcbiAgICAgICAgcmVxdWVzdGVkVmVyc2lvbixcbiAgICAgICAgY2xvbmVkUGtnXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXJyb3IpO1xuICAgICAgd2FzU3VjY2VzcyA9IGZhbHNlO1xuICAgIH0gZmluYWxseSB7XG4gICAgICBhd2FpdCB0aGlzLmRlbGV0ZUFwcChjbG9uZWRQa2csIHRydWUpO1xuICAgIH1cbiAgICByZXR1cm4gd2FzU3VjY2VzcztcbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEJpbmFyeUZyb21PdGhlclBhY2thZ2UoXG4gICAgc2VsZWN0ZWRQYWNrYWdlOiBJQXBwbGljYXRpb24sXG4gICAgYXBwbGljYXRpb25Ub1VwbG9hZEJpbmFyeVRvOiBJQXBwbGljYXRpb24sXG4gICAgYmluYXJ5SWQ6IHN0cmluZyxcbiAgICByZXF1ZXN0ZWRWZXJzaW9uPzogc3RyaW5nLFxuICAgIHVzZUJpbmFyaWVzRnJvbT86IElBcHBsaWNhdGlvblxuICApIHtcbiAgICBjb25zdCB7IGRhdGE6IGJpbmFyeURldGFpbHMgfSA9IGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5SWQpO1xuXG4gICAgLy8gR2V0IGJpbmFyeSBmcm9tIHNwZWNpZmljIHBhY2thZ2UgdmVyc2lvblxuICAgIGNvbnN0IGJpbmFyeSA9IGF3YWl0IHRoaXMuZ2V0QmluYXJ5KHVzZUJpbmFyaWVzRnJvbSB8fCBzZWxlY3RlZFBhY2thZ2UsIHtcbiAgICAgIGlkOiBiaW5hcnlJZFxuICAgIH0pO1xuICAgIC8vIENyZWF0ZSB6aXBcbiAgICBjb25zdCBmaWxlQmluYXJ5ID0gbmV3IEJsb2IoW2JpbmFyeV0sIHsgdHlwZTogYmluYXJ5RGV0YWlscy5jb250ZW50VHlwZSB9KTtcbiAgICBjb25zdCBmaWxlID0gbmV3IEZpbGUoW2ZpbGVCaW5hcnldLCBiaW5hcnlEZXRhaWxzLm5hbWUsIHtcbiAgICAgIHR5cGU6IGJpbmFyeURldGFpbHMuY29udGVudFR5cGVcbiAgICB9KTtcblxuICAgIC8vIFVwbG9hZCBiaW5hcnkgdG8gbmV3IGFwcFxuICAgIGF3YWl0IHRoaXMudXBsb2FkQXJjaGl2ZVRvQXBwKGZpbGUsIGFwcGxpY2F0aW9uVG9VcGxvYWRCaW5hcnlUbyk7XG5cbiAgICAvLyB1cGRhdGUgdGhlIGFwcCBtYW5pZmVzdFxuICAgIGF3YWl0IHRoaXMudXBkYXRlQXBwTWFuaWZlc3QoYXBwbGljYXRpb25Ub1VwbG9hZEJpbmFyeVRvLCBzZWxlY3RlZFBhY2thZ2UsIHJlcXVlc3RlZFZlcnNpb24pO1xuICB9XG5cbiAgZ2V0QXBwU3RhdGUoYXBwOiBJQXBwbGljYXRpb24pOiBBcHBsaWNhdGlvblN0YXRlIHtcbiAgICBpZiAoIXRoaXMuaXNPd25lcihhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlNVQlNDUklCRUQ7XG4gICAgfSBlbHNlIGlmICh0aGlzLmlzVW5wYWNrZWQoYXBwKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5VTlBBQ0tFRDtcbiAgICB9IGVsc2UgaWYgKGFwcC50eXBlID09PSBBcHBsaWNhdGlvblR5cGUuRVhURVJOQUwpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuRVhURVJOQUw7XG4gICAgfVxuICAgIHJldHVybiBBUFBfU1RBVEUuQ1VTVE9NO1xuICB9XG5cbiAgZ2V0UGFja2FnZUNvbnRlbnRTdGF0ZShhcHA6IElBcHBsaWNhdGlvbik6IEFwcGxpY2F0aW9uU3RhdGUge1xuICAgIGlmICghdGhpcy5pc1BhY2thZ2UoYXBwKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1BhY2thZ2VCbHVlcHJpbnQoYXBwKSkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5QQUNLQUdFX0JMVUVQUklOVDtcbiAgICB9XG4gICAgaWYgKHRoaXMuaXNQbHVnaW5zUGFja2FnZShhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlBBQ0tBR0VfUExVR0lOO1xuICAgIH1cbiAgICByZXR1cm4gQVBQX1NUQVRFLlBBQ0tBR0VfVU5LTk9XTjtcbiAgfVxuXG4gIGlzUGFja2FnZUJsdWVwcmludChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUGFja2FnZShhcHApICYmIGFwcC5tYW5pZmVzdC5wYWNrYWdlID09PSAnYmx1ZXByaW50JztcbiAgfVxuXG4gIGlzUGx1Z2luc1BhY2thZ2UoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5pc1BhY2thZ2UoYXBwKSAmJiBhcHAubWFuaWZlc3QucGFja2FnZSA9PT0gJ3BsdWdpbic7XG4gIH1cblxuICBpc1VucGFja2VkKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhYXBwLm1hbmlmZXN0Py5zb3VyY2U7XG4gIH1cblxuICBoYXNFeHBvcnRzKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICEhYXBwLm1hbmlmZXN0Py5leHBvcnRzPy5sZW5ndGg7XG4gIH1cblxuICBpc0FwcGxpY2F0aW9uKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIChcbiAgICAgIGFwcC50eXBlICE9PSBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFICYmICF0aGlzLmlzRmVhdHVyZShhcHApICYmICF0aGlzLmlzUGFja2FnZShhcHApXG4gICAgKTtcbiAgfVxuXG4gIGlzQ3VzdG9tTWljcm9zZXJ2aWNlKGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMuaXNPd25lcihhcHApICYmIGFwcC50eXBlID09PSBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFO1xuICB9XG5cbiAgYXN5bmMgZ2V0QmluYXJ5KFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGFyY2hpdmU6IElBcHBsaWNhdGlvbkJpbmFyeSB8IElJZGVudGlmaWVkXG4gICk6IFByb21pc2U8QXJyYXlCdWZmZXI+IHtcbiAgICBsZXQgYmluYXJ5O1xuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKS5kb3dubG9hZEFyY2hpdmUoYXJjaGl2ZS5pZCk7XG4gICAgICBiaW5hcnkgPSBhd2FpdCByZXMuYXJyYXlCdWZmZXIoKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgY29uc3QgbXNnID0gZ2V0dGV4dCgnQ291bGQgbm90IGdldCB0aGUgYmluYXJ5LicpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKG1zZyk7XG4gICAgfVxuICAgIHJldHVybiBiaW5hcnk7XG4gIH1cblxuICBhc3luYyBpc092ZXJ3cml0dGVuQnlDdXN0b21BcHAoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gIXRoaXMuaXNPd25lcihhcHApICYmIChhd2FpdCB0aGlzLmhhc1N1YnNjcmliZWRBcHBQYXJlbnQoYXBwKSk7XG4gIH1cblxuICBhc3luYyBoYXNTdWJzY3JpYmVkQXBwUGFyZW50KGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgYXBwc0dyb3VwZWRCeUNvbnRleHRQYXRoID0gYXdhaXQgdGhpcy5hcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGgkLnBpcGUodGFrZSgxKSkudG9Qcm9taXNlKCk7XG4gICAgcmV0dXJuIGFwcC5jb250ZXh0UGF0aCAmJiBhcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGhbYXBwLmNvbnRleHRQYXRoXT8ubGVuZ3RoID09PSAyO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXByZWNhdGVkXG4gICAqL1xuICBzZXRBdmFpbGFiaWxpdHlUb1ByaXZhdGVJZk5vdFNldEFscmVhZHkoYXBwOiBJQXBwbGljYXRpb24pOiBJQXBwbGljYXRpb24ge1xuICAgIGFwcC5hdmFpbGFiaWxpdHkgPSBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5QUklWQVRFO1xuICAgIHJldHVybiBhcHA7XG4gIH1cblxuICAvKipcbiAgICogU2hvd3MgYW4gZXJyb3IgZGlhbG9nLlxuICAgKiBAcGFyYW0gZXJyb3IgRWl0aGVyIGEgc2VydmVyIGVycm9yIG9yIGFuIGludGVybmFsIFtbRWNvc3lzdGVtRXJyb3JdXS5cbiAgICovXG4gIGFsZXJ0RXJyb3IoZXJyb3I6IEVycm9yIHwgRWNvc3lzdGVtRXJyb3IpIHtcbiAgICBpZiAoZXJyb3IgaW5zdGFuY2VvZiBFY29zeXN0ZW1FcnJvcikge1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGVycm9yLm1lc3NhZ2UpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5hZGRTZXJ2ZXJGYWlsdXJlKGVycm9yKTtcbiAgICB9XG4gIH1cblxuICBhc3luYyB2YWxpZGF0ZVBhY2thZ2VLZXlBbmRDb250ZXh0UGF0aChtYW5pZmVzdDogSU1hbmlmZXN0LCBhcHA6IElBcHBsaWNhdGlvbikge1xuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gZ2V0KG1hbmlmZXN0LCAnY29udGV4dFBhdGgnKTtcbiAgICBjb25zdCBhcHBLZXkgPSBnZXQobWFuaWZlc3QsICdrZXknKTtcbiAgICBpZiAoY29udGV4dFBhdGggIT09IGFwcC5jb250ZXh0UGF0aCB8fCBhcHBLZXkgIT09IGFwcC5rZXkpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLktFWV9PUl9DT05URVhUX1BBVEhfTUlTTUFUQ0gpO1xuICAgIH1cbiAgfVxuXG4gIGZpbHRlckNvbnRhaW5TdHJpbmcobmFtZTogc3RyaW5nLCBmaWx0ZXJUZXJtOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICBjb25zdCB0ZXJtID0gZmlsdGVyVGVybS50b0xvd2VyQ2FzZSgpLnRyaW0oKTtcbiAgICByZXR1cm4gbmFtZSAmJiBuYW1lLnRvTG93ZXJDYXNlKCkuaW5kZXhPZih0ZXJtKSA+IC0xO1xuICB9XG5cbiAgYXN5bmMgdXBkYXRlQXBwTWFuaWZlc3QoXG4gICAgYXBwbGljYXRpb246IElBcHBsaWNhdGlvbixcbiAgICBzZWxlY3RlZFBhY2thZ2U6IElBcHBsaWNhdGlvbixcbiAgICByZXF1ZXN0ZWRWZXJzaW9uPzogc3RyaW5nXG4gICk6IFByb21pc2U8eyByZXM6IElGZXRjaFJlc3BvbnNlOyBkYXRhOiBhbnkgfT4ge1xuICAgIGNvbnN0IHsgaWQgfSA9IGFwcGxpY2F0aW9uO1xuICAgIGNvbnN0IGNsZWFuZWRBcHAgPSB0aGlzLnJlbW92ZUFwcFByb3BlcnRpZXMoYXBwbGljYXRpb24pO1xuICAgIGxldCBtYW5pZmVzdDogUGFydGlhbDxJTWFuaWZlc3Q+ID0gc2VsZWN0ZWRQYWNrYWdlLm1hbmlmZXN0IHx8IHt9O1xuICAgIGlmIChyZXF1ZXN0ZWRWZXJzaW9uKSB7XG4gICAgICB0cnkge1xuICAgICAgICBjb25zdCB2ZXJzaW9uZWRBcHBNYW5pZmVzdCA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmdldEFwcE1hbmlmZXN0KFxuICAgICAgICAgIHNlbGVjdGVkUGFja2FnZSxcbiAgICAgICAgICByZXF1ZXN0ZWRWZXJzaW9uXG4gICAgICAgICk7XG4gICAgICAgIG1hbmlmZXN0ID0gdmVyc2lvbmVkQXBwTWFuaWZlc3Q7XG4gICAgICB9IGNhdGNoIChleCkge1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5WRVJTSU9OX05PVF9GT1VORCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY2xlYW5lZEFwcC5tYW5pZmVzdCA9IG1hbmlmZXN0O1xuICAgIGNsZWFuZWRBcHAubWFuaWZlc3QuaXNQYWNrYWdlID0gZmFsc2U7XG4gICAgY2xlYW5lZEFwcC5tYW5pZmVzdC5zb3VyY2UgPSBzZWxlY3RlZFBhY2thZ2UuaWQ7XG5cbiAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2VcbiAgICAgIC5iaW5hcnkoaWQpXG4gICAgICAudXBkYXRlRmlsZXMoW3sgcGF0aDogQ1VNVUxPQ0lUWV9KU09OLCBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoY2xlYW5lZEFwcCkgYXMgYW55IH1dKTtcbiAgfVxuXG4gIHByaXZhdGUgY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKFxuICAgIGV4aXN0aW5nQXBwczogSUFwcGxpY2F0aW9uW10sXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgcmV0cnlObz86IG51bWJlclxuICApOiBJQXBwbGljYXRpb24ge1xuICAgIGlmIChpc1VuZGVmaW5lZChyZXRyeU5vKSkge1xuICAgICAgcmV0dXJuIGV4aXN0aW5nQXBwcy5maW5kKFxuICAgICAgICBleGlzdGluZ0FwcCA9PlxuICAgICAgICAgIGV4aXN0aW5nQXBwLm5hbWUgPT09IGFwcC5uYW1lIHx8XG4gICAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBhcHAua2V5IHx8XG4gICAgICAgICAgZXhpc3RpbmdBcHAuY29udGV4dFBhdGggPT09IGFwcC5jb250ZXh0UGF0aFxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGV4aXN0aW5nQXBwcy5maW5kKFxuICAgICAgZXhpc3RpbmdBcHAgPT5cbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gYXBwLm5hbWUgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBhcHAua2V5IHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGggfHxcbiAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gW2FwcC5uYW1lLCByZXRyeU5vXS5qb2luKCctJykgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAua2V5ID09PSBbYXBwLmtleSwgcmV0cnlOb10uam9pbignLScpIHx8XG4gICAgICAgIGV4aXN0aW5nQXBwLmNvbnRleHRQYXRoID09PSBbYXBwLmNvbnRleHRQYXRoLCByZXRyeU5vXS5qb2luKCctJylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRBcHBLZXkoYXBwTW9kZWw6IElBcHBsaWNhdGlvbiwgbmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBsZXQga2V5ID0gYXBwTW9kZWw/LmtleTtcbiAgICBpZiAoIWtleSkge1xuICAgICAga2V5ID0gYCR7a2ViYWJDYXNlKG5hbWUpfS1rZXlgO1xuICAgIH1cbiAgICByZXR1cm4ga2V5O1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDb250ZXh0UGF0aChhcHBNb2RlbDogSUFwcGxpY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBhcHBNb2RlbD8uY29udGV4dFBhdGggfHwgbmFtZS50b0xvd2VyQ2FzZSgpO1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVGb3JiaWRkZW5DaGFyYWN0ZXJzKHN0cjogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1teYS16QS1aMC05LV9dL2csICcnKTtcbiAgfVxuXG4gIHByaXZhdGUgaXNDdXJyZW50QXBwKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgY3VycmVudEFwcCA9IHRoaXMuYXBwU3RhdGVTZXJ2aWNlLnN0YXRlLmFwcDtcbiAgICByZXR1cm4gY3VycmVudEFwcC5jb250ZXh0UGF0aCA9PT0gYXBwLmNvbnRleHRQYXRoO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZTogRmlsZSk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgcmV0dXJuIHRoaXMuemlwU2VydmljZS5nZXRKc29uRGF0YShhcmNoaXZlLCB7XG4gICAgICBmaWxlbmFtZTogQ1VNVUxPQ0lUWV9KU09OXG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGdldEFwcFR5cGUoYXJjaGl2ZTogRmlsZSk6IFByb21pc2U8QXBwbGljYXRpb25UeXBlPiB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0Q3VtdWxvY2l0eUpzb24kKGFyY2hpdmUpXG4gICAgICAudG9Qcm9taXNlKClcbiAgICAgIC50aGVuKFxuICAgICAgICBkYXRhID0+XG4gICAgICAgICAgZ2V0KGRhdGEsICd0eXBlJykgfHxcbiAgICAgICAgICAoZ2V0KGRhdGEsICdhcGlWZXJzaW9uJykgPyBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFIDogQXBwbGljYXRpb25UeXBlLkhPU1RFRClcbiAgICAgIClcbiAgICAgIC5jYXRjaCgoKSA9PiBBcHBsaWNhdGlvblR5cGUuSE9TVEVEKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QmFzZU5hbWVGcm9tQXJjaGl2ZU9yQXBwTW9kZWwoXG4gICAgYXJjaGl2ZTogYW55LFxuICAgIGFwcFR5cGU6IEFwcGxpY2F0aW9uVHlwZSxcbiAgICBhcHBNb2RlbD86IElBcHBsaWNhdGlvblxuICApOiBzdHJpbmcge1xuICAgIGxldCBiYXNlTmFtZSA9IGFwcE1vZGVsPy5uYW1lIHx8IGFyY2hpdmUubmFtZS5yZXBsYWNlKC9cXC56aXAkL2ksICcnKTtcbiAgICBpZiAoYXBwVHlwZSA9PT0gJ01JQ1JPU0VSVklDRScpIHtcbiAgICAgIGJhc2VOYW1lID0gdGhpcy5yZW1vdmVWZXJzaW9uRnJvbU5hbWUoYmFzZU5hbWUpO1xuICAgIH1cbiAgICByZXR1cm4gYmFzZU5hbWU7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUFwcFByb3BlcnRpZXMoYXBwOiBJQXBwbGljYXRpb24pOiBJQXBwbGljYXRpb24ge1xuICAgIGNvbnN0IHRlbXBBcHAgPSBjbG9uZURlZXAoYXBwKTtcbiAgICBjb25zdCBwcm9wZXJ0aWVzVG9SZW1vdmUgPSBbJ2lkJywgJ293bmVyJywgJ2FjdGl2ZVZlcnNpb25JZCcsICdzZWxmJywgJ3R5cGUnXTtcblxuICAgIHByb3BlcnRpZXNUb1JlbW92ZS5mb3JFYWNoKHByb3AgPT4gZGVsZXRlIHRlbXBBcHBbcHJvcF0pO1xuICAgIHJldHVybiB0ZW1wQXBwO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBnZXRVcGxvYWRPdmVycmlkZXMoXG4gICAgYXJjaGl2ZTogRmlsZSxcbiAgICBhcHA6IElBcHBsaWNhdGlvblxuICApOiBQcm9taXNlPElVcGxvYWRQYXJhbXNPdmVycmlkZT4ge1xuICAgIGNvbnN0IHsgdmVyc2lvbiB9ID0gYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSkudG9Qcm9taXNlKCk7XG4gICAgY29uc3QgaXNJbml0aWFsUGFja2FnZSA9IGFwcC5hcHBsaWNhdGlvblZlcnNpb25zPy5sZW5ndGggPT09IDA7XG4gICAgcmV0dXJuIHtcbiAgICAgIGxpc3RVcmw6ICd2ZXJzaW9ucycsXG4gICAgICBoZWFkZXJzOiB7XG4gICAgICAgIEFjY2VwdDogJ2FwcGxpY2F0aW9uL3ZuZC5jb20ubnNuLmN1bXVsb2NpdHkuYXBwbGljYXRpb25WZXJzaW9uK2pzb247Y2hhcnNldD1VVEYtODt2ZXI9MC45J1xuICAgICAgfSxcbiAgICAgIGJvZHlGaWxlUHJvcGVydHk6ICdhcHBsaWNhdGlvbkJpbmFyeScsXG4gICAgICByZXF1ZXN0Qm9keToge1xuICAgICAgICBhcHBsaWNhdGlvblZlcnNpb246IHsgdmVyc2lvbiwgLi4uKGlzSW5pdGlhbFBhY2thZ2UgJiYgeyB0YWdzOiBbJ2xhdGVzdCddIH0pIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSByZW1vdmVWZXJzaW9uRnJvbU5hbWUobmFtZTogc3RyaW5nKSB7XG4gICAgY29uc3QgdmVyc2lvblJlZ0V4cCA9IC8tXFxkK1xcLlxcZCtcXC5cXGQrKFxcLlxcZCspPygtXFxkKyk/KC4qKSQvO1xuICAgIHJldHVybiBuYW1lLnJlcGxhY2UodmVyc2lvblJlZ0V4cCwgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc05hbWVMZW5ndGhFeGNlZWRlZChuYW1lLCBhcHBUeXBlKSB7XG4gICAgcmV0dXJuIG5hbWUubGVuZ3RoID4gTUlDUk9TRVJWSUNFX05BTUVfTUFYX0xFTkdUSCAmJiBhcHBUeXBlID09PSBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFO1xuICB9XG59XG4iXX0=
726
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWNvc3lzdGVtLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL2Vjb3N5c3RlbS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpELE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsa0JBQWtCLEVBQ2xCLGVBQWUsRUFXZixnQkFBZ0IsRUFJaEIsYUFBYSxFQUNkLE1BQU0sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sRUFDTCxZQUFZLEVBQ1osZUFBZSxFQUNmLE9BQU8sRUFDUCxtQkFBbUIsRUFDbkIsWUFBWSxFQUNaLFdBQVcsRUFDWCxNQUFNLEVBQ04sa0JBQWtCLEVBQ2xCLFVBQVUsRUFDWCxNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3ZELE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFDcEMsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDaEcsT0FBTyxFQUFFLGVBQWUsRUFBYyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDMUQsT0FBTyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsR0FBRyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNuRCxPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ2xFLE9BQU8sRUFFTCxn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O2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEV2ZW50RW1pdHRlciwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHtcbiAgQXBwbGljYXRpb25BdmFpbGFiaWxpdHksXG4gIEFwcGxpY2F0aW9uU2VydmljZSxcbiAgQXBwbGljYXRpb25UeXBlLFxuICBJQXBwbGljYXRpb24sXG4gIElBcHBsaWNhdGlvbkJpbmFyeSxcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbixcbiAgSUFwcGxpY2F0aW9uVmVyc2lvbkRlbGV0ZVBhcmFtcyxcbiAgSUN1cnJlbnRUZW5hbnQsXG4gIElkUmVmZXJlbmNlLFxuICBJRmV0Y2hSZXNwb25zZSxcbiAgSUlkZW50aWZpZWQsXG4gIElNYW5hZ2VkT2JqZWN0LFxuICBJTWFuaWZlc3QsXG4gIEludmVudG9yeVNlcnZpY2UsXG4gIElSZXN1bHQsXG4gIElSZXN1bHRMaXN0LFxuICBJVXBsb2FkUGFyYW1zT3ZlcnJpZGUsXG4gIFRlbmFudFNlcnZpY2Vcbn0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHtcbiAgQWxlcnRTZXJ2aWNlLFxuICBBcHBTdGF0ZVNlcnZpY2UsXG4gIGdldHRleHQsXG4gIEh1bWFuaXplQXBwTmFtZVBpcGUsXG4gIE1vZGFsU2VydmljZSxcbiAgUGFja2FnZVR5cGUsXG4gIFN0YXR1cyxcbiAgV2l6YXJkTW9kYWxTZXJ2aWNlLFxuICBaaXBTZXJ2aWNlXG59IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gJ0BuZ3gtdHJhbnNsYXRlL2NvcmUnO1xuaW1wb3J0IHsgc2F2ZUFzIH0gZnJvbSAnZmlsZS1zYXZlcic7XG5pbXBvcnQgeyBjbG9uZURlZXAsIGdldCwgZ3JvdXBCeSwga2ViYWJDYXNlLCBwaWNrLCB1bmlxQnksIG9taXQsIGlzVW5kZWZpbmVkIH0gZnJvbSAnbG9kYXNoLWVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgZGVmZXIgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IGRlYm91bmNlVGltZSwgdGFrZSwgbWFwLCBzaGFyZVJlcGxheSB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IGd0LCBjb2VyY2UgfSBmcm9tICdzZW12ZXInO1xuaW1wb3J0IHsgRWNvc3lzdGVtRXJyb3IgfSBmcm9tICcuL2Vjb3N5c3RlbS1lcnJvcic7XG5pbXBvcnQgeyBBUFBfU1RBVEUsIEVSUk9SX01FU1NBR0VTIH0gZnJvbSAnLi9lY29zeXN0ZW0uY29uc3RhbnRzJztcbmltcG9ydCB7XG4gIEFwcGxpY2F0aW9uU3RhdGUsXG4gIEVjb3N5c3RlbVdpemFyZHMsXG4gIEVSUk9SX1RZUEUsXG4gIExpY2Vuc2VkQXBwbGljYXRpb25QbHVnaW5cbn0gZnJvbSAnLi9lY29zeXN0ZW0ubW9kZWwnO1xuXG5jb25zdCBDVU1VTE9DSVRZX0pTT04gPSAnY3VtdWxvY2l0eS5qc29uJztcbmNvbnN0IE1JQ1JPU0VSVklDRV9OQU1FX01BWF9MRU5HVEggPSAyMztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgRWNvc3lzdGVtU2VydmljZSB7XG4gIGFwcERlbGV0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPElBcHBsaWNhdGlvbj4oKTtcbiAgcHJvZ3Jlc3M6IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxudW1iZXI+KG51bGwpO1xuICBwcml2YXRlIGFwcHNHcm91cGVkQnlDb250ZXh0UGF0aCQ6IE9ic2VydmFibGU8UmVjb3JkPHN0cmluZywgSUFwcGxpY2F0aW9uW10+PjtcbiAgcHJpdmF0ZSB4aHI6IFhNTEh0dHBSZXF1ZXN0O1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByaXZhdGUgbW9kYWw6IE1vZGFsU2VydmljZSxcbiAgICBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlLFxuICAgIHByaXZhdGUgaHVtYW5pemVBcHBOYW1lOiBIdW1hbml6ZUFwcE5hbWVQaXBlLFxuICAgIHByaXZhdGUgdHJhbnNsYXRlU2VydmljZTogVHJhbnNsYXRlU2VydmljZSxcbiAgICBwcml2YXRlIGFwcGxpY2F0aW9uU2VydmljZTogQXBwbGljYXRpb25TZXJ2aWNlLFxuICAgIHByaXZhdGUgYXBwU3RhdGVTZXJ2aWNlOiBBcHBTdGF0ZVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB6aXBTZXJ2aWNlOiBaaXBTZXJ2aWNlLFxuICAgIHByaXZhdGUgdGVuYW50U2VydmljZTogVGVuYW50U2VydmljZSxcbiAgICBwcml2YXRlIGludmVudG9yeVNlcnZpY2U6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJpdmF0ZSB3aXphcmRNb2RhbFNlcnZpY2U6IFdpemFyZE1vZGFsU2VydmljZVxuICApIHtcbiAgICB0aGlzLmFwcHNHcm91cGVkQnlDb250ZXh0UGF0aCQgPSBkZWZlcigoKSA9PiB0aGlzLmdldFdlYkFwcGxpY2F0aW9ucygpKS5waXBlKFxuICAgICAgbWFwKHdlYkFwcHMgPT4gZ3JvdXBCeSh3ZWJBcHBzLCAnY29udGV4dFBhdGgnKSksXG4gICAgICBzaGFyZVJlcGxheSh7IGJ1ZmZlclNpemU6IDEsIHJlZkNvdW50OiB0cnVlIH0pXG4gICAgKTtcbiAgfVxuXG4gIGdldFVuaXF1ZUFwcENvbmZpZyhzcmNBcHA6IElBcHBsaWNhdGlvbiwgZXhpc3RpbmdBcHBzOiBJQXBwbGljYXRpb25bXSk6IElBcHBsaWNhdGlvbiB7XG4gICAgbGV0IGFwcDogSUFwcGxpY2F0aW9uID0ge1xuICAgICAgbmFtZTogc3JjQXBwLm5hbWUsXG4gICAgICBrZXk6IHNyY0FwcC5rZXksXG4gICAgICBjb250ZXh0UGF0aDogc3JjQXBwLmNvbnRleHRQYXRoXG4gICAgfTtcbiAgICBmb3IgKGxldCByZXRyeU5vID0gMDsgcmV0cnlObyA8IDk7ICkge1xuICAgICAgaWYgKHRoaXMuY2hlY2tJZkFwcE5hbWVLZXlQYXRoRXhpc3RzKGV4aXN0aW5nQXBwcywgYXBwLCByZXRyeU5vKSkge1xuICAgICAgICByZXRyeU5vKys7XG4gICAgICAgIGFwcCA9IHtcbiAgICAgICAgICBuYW1lOiBbc3JjQXBwLm5hbWUsIHJldHJ5Tm9dLmpvaW4oJy0nKSxcbiAgICAgICAgICBrZXk6IFtzcmNBcHAua2V5LCByZXRyeU5vXS5qb2luKCctJyksXG4gICAgICAgICAgY29udGV4dFBhdGg6IFtzcmNBcHAuY29udGV4dFBhdGgsIHJldHJ5Tm9dLmpvaW4oJy0nKVxuICAgICAgICB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIGFwcDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBDb21tdW5pdHkgcGx1Z2lucyBuZWVkIHRvIHZlcmlmeSB0aGUgbGljZW5zZSBhZ3JlZW1lbnQuIElmIGEgcGFja2FnZSBpcyBhIGNvbW11bml0eVxuICAgKiBwYWNrYWdlLCB0aGUgbGljZW5zZSBpcyBzaG93bi5cbiAgICpcbiAgICogQHBhcmFtIHBsdWdpbnNUb0luc3RhbGwgVGhlIGxpc3Qgb2YgcGx1Z2lucyB0byBpbnN0YWxsLlxuICAgKiBAcmV0dXJucyB0cnVlIGlmIHRoZSBpbnN0YWxsYXRpb24gY2FuIGNvbnRpbnVlLlxuICAgKi9cbiAgYXN5bmMgdmVyaWZ5TGljZW5zZXMocGx1Z2luc1RvSW5zdGFsbDogQXJyYXk8TGljZW5zZWRBcHBsaWNhdGlvblBsdWdpbj4pIHtcbiAgICBsZXQgX3Jlc29sdmU7XG4gICAgY29uc3QgcmVzdWx0OiBQcm9taXNlPGJvb2xlYW4+ID0gbmV3IFByb21pc2UocmVzb2x2ZSA9PiB7XG4gICAgICBfcmVzb2x2ZSA9IHJlc29sdmU7XG4gICAgfSk7XG5cbiAgICBwbHVnaW5zVG9JbnN0YWxsID0gcGx1Z2luc1RvSW5zdGFsbC5maWx0ZXIocGx1Z2luID0+IHBsdWdpbi50eXBlICE9PSBQYWNrYWdlVHlwZS5DVVNUT00pO1xuXG4gICAgaWYgKHBsdWdpbnNUb0luc3RhbGwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHRydWUpO1xuICAgIH1cblxuICAgIGNvbnN0IGluaXRpYWxTdGF0ZTogYW55ID0ge1xuICAgICAgaWQ6IEVjb3N5c3RlbVdpemFyZHMuTElDRU5TRV9DT05GSVJNLFxuICAgICAgY29tcG9uZW50SW5pdGlhbFN0YXRlOiB7XG4gICAgICAgIHBsdWdpbnNUb0luc3RhbGxcbiAgICAgIH1cbiAgICB9O1xuICAgIGNvbnN0IG1vZGFsT3B0aW9ucyA9IHsgaW5pdGlhbFN0YXRlIH07XG4gICAgY29uc3Qgd2l6YXJkID0gdGhpcy53aXphcmRNb2RhbFNlcnZpY2Uuc2hvdyhtb2RhbE9wdGlvbnMpO1xuXG4gICAgd2l6YXJkLmNvbnRlbnQub25DbG9zZS5zdWJzY3JpYmUoY29uZmlybWVkID0+IHtcbiAgICAgIF9yZXNvbHZlKGNvbmZpcm1lZCk7XG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKiBDb21wYXJlcyBjdXJyZW50bHkgZGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvbiB3aXRoIGFwcGxpY2F0aW9uIHZlcnNpb24gdGFnZ2VkIGFzIFwibGF0ZXN0XCJcbiAgICpcbiAgICogQHBhcmFtIHtzdHJpbmd9IGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24gRGVwbG95ZWQgYXBwbGljYXRpb24gdmVyc2lvblxuICAgKiBAcGFyYW0ge29iamVjdH0gbGF0ZXN0QXBwIExhdGVzdCBhcHBsaWNhdGlvbiB2ZXJzaW9uIG9iamVjdFxuICAgKlxuICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0gUmV0dXJucyB0cnVlIGlmIGxhdGVzdCB2ZXJzaW9uIGlzIGdyZWF0ZXIgdGhhbiBjdXJyZW50LCBvdGhlcndpc2UgZmFsc2VcbiAgICovXG4gIHNob3VsZFVwZ3JhZGVQYWNrYWdlKGN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb246IHN0cmluZywgbGF0ZXN0QXBwOiBJQXBwbGljYXRpb25WZXJzaW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgbGF0ZXN0QXBwbGljYXRpb25WZXJzaW9uID0gbGF0ZXN0QXBwPy52ZXJzaW9uO1xuXG4gICAgaWYgKCFsYXRlc3RBcHBsaWNhdGlvblZlcnNpb24gfHwgIWN1cnJlbnRBcHBsaWNhdGlvblZlcnNpb24pIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICByZXR1cm4gZ3QoY29lcmNlKGxhdGVzdEFwcGxpY2F0aW9uVmVyc2lvbiksIGNvZXJjZShjdXJyZW50QXBwbGljYXRpb25WZXJzaW9uKSk7XG4gIH1cblxuICAvKipcbiAgICogQGRlc2NyaXB0aW9uXG4gICAqIEdldHMgYW4gb2JqZWN0IHRoYXQgY29udGFpbnMgc2VhcmNoZWQgdGFnXG4gICAqXG4gICAqIEBwYXJhbSB7YXJyYXl9IGFwcGxpY2F0aW9uVmVyc2lvbnMgQXJyYXkgd2l0aCBhbGwgYXZhaWxhYmxlIHZlcnNpb25zXG4gICAqIEBwYXJhbSB7c3RyaW5nfSB0YWdOYW1lIFNlYXJjaGVkIHRhZ1xuICAgKlxuICAgKiBAcmV0dXJucyB7b2JqZWN0fSBSZXR1cm5zIGFuIG9iamVjdCB3aXRoIHNlYXJjaGVkIHRhZ1xuICAgKi9cbiAgZ2V0QXBwbGljYXRpb25WZXJzaW9uT2JqZWN0QnlUYWcoXG4gICAgYXBwbGljYXRpb25WZXJzaW9uczogSUFwcGxpY2F0aW9uVmVyc2lvbltdLFxuICAgIHRhZ05hbWU6IHN0cmluZ1xuICApOiBJQXBwbGljYXRpb25WZXJzaW9uIHtcbiAgICByZXR1cm4gYXBwbGljYXRpb25WZXJzaW9ucz8uZmluZChlbGVtZW50ID0+IGVsZW1lbnQudGFncy5pbmNsdWRlcyh0YWdOYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRBcHBsaWNhdGlvbihhcHBJZDogSWRSZWZlcmVuY2UpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGV0YWlsKGFwcElkKSkuZGF0YTtcbiAgfVxuXG4gIGdldEFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXI6IGFueSA9IHt9KTogUHJvbWlzZTxJUmVzdWx0TGlzdDxJQXBwbGljYXRpb24+PiB7XG4gICAgY29uc3QgZmlsdGVyOiBvYmplY3QgPSB7XG4gICAgICBwYWdlU2l6ZTogMjAwMCxcbiAgICAgIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG4gICAgfTtcbiAgICBPYmplY3QuYXNzaWduKGZpbHRlciwgY3VzdG9tRmlsdGVyKTtcbiAgICBjb25zdCBjdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICByZXR1cm4gdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UubGlzdEJ5VGVuYW50KGN1cnJlbnRUZW5hbnQubmFtZSwgZmlsdGVyKTtcbiAgfVxuXG4gIGFzeW5jIGdldE1pY3Jvc2VydmljZXMoKTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGFwcHMgPSAoYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbnMoKSkuZGF0YTtcbiAgICBjb25zdCBtaWNyb3NlcnZpY2VzID0gYXBwcy5maWx0ZXIoYXBwID0+IHRoaXMuaXNNaWNyb3NlcnZpY2UoYXBwKSk7XG4gICAgcmV0dXJuIG1pY3Jvc2VydmljZXMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRXZWJBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBhcHBzID0gKGF3YWl0IHRoaXMuZ2V0QXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcikpLmRhdGE7XG4gICAgY29uc3Qgd2ViQXBwcyA9IGFwcHMuZmlsdGVyKGFwcCA9PiB0aGlzLmlzQXBwbGljYXRpb24oYXBwKSk7XG4gICAgcmV0dXJuIHdlYkFwcHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRGZWF0dXJlQXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgYXBwcyA9IChhd2FpdCB0aGlzLmdldEFwcGxpY2F0aW9ucyhjdXN0b21GaWx0ZXIpKS5kYXRhO1xuICAgIGNvbnN0IHdlYkFwcHMgPSBhcHBzLmZpbHRlcihhcHAgPT4gdGhpcy5pc0ZlYXR1cmUoYXBwKSk7XG4gICAgcmV0dXJuIHdlYkFwcHMuc29ydCgoYSwgYikgPT4gYS5uYW1lLmxvY2FsZUNvbXBhcmUoYi5uYW1lKSk7XG4gIH1cblxuICBhc3luYyBnZXRQYWNrYWdlQXBwbGljYXRpb25zKGN1c3RvbUZpbHRlcjogYW55ID0ge30pOiBQcm9taXNlPElBcHBsaWNhdGlvbltdPiB7XG4gICAgY29uc3QgZmlsdGVyQ2FsbGJhY2sgPSBhcHAgPT4gdGhpcy5pc1BhY2thZ2UoYXBwKTtcbiAgICByZXR1cm4gdGhpcy5nZXRBcHBsaWNhdGlvbnNGaWx0ZXJlZChjdXN0b21GaWx0ZXIsIGZpbHRlckNhbGxiYWNrKTtcbiAgfVxuXG4gIGFzeW5jIGdldEhvc3RlZEFuZFBhY2thZ2VBcHBsaWNhdGlvbnMoY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSk6IFByb21pc2U8SUFwcGxpY2F0aW9uW10+IHtcbiAgICBjb25zdCBmaWx0ZXJDYWxsYmFjayA9IGFwcCA9PiB0aGlzLmlzUGFja2FnZShhcHApIHx8IHRoaXMuaXNBcHBsaWNhdGlvbihhcHApO1xuICAgIHJldHVybiB0aGlzLmdldEFwcGxpY2F0aW9uc0ZpbHRlcmVkKGN1c3RvbUZpbHRlciwgZmlsdGVyQ2FsbGJhY2spO1xuICB9XG5cbiAgYXN5bmMgZ2V0QXBwbGljYXRpb25zRmlsdGVyZWQoXG4gICAgY3VzdG9tRmlsdGVyOiBhbnkgPSB7fSxcbiAgICBmaWx0ZXJDYWxsYmFjayA9IChhcHA6IElBcHBsaWNhdGlvbikgPT4gISFhcHBcbiAgKTogUHJvbWlzZTxJQXBwbGljYXRpb25bXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IE9iamVjdC5hc3NpZ24oe30sIGN1c3RvbUZpbHRlcik7XG4gICAgY29uc3Qgc2hhcmVkRmlsdGVyID0gT2JqZWN0LmFzc2lnbihcbiAgICAgIHtcbiAgICAgICAgYXZhaWxhYmlsaXR5OiBBcHBsaWNhdGlvbkF2YWlsYWJpbGl0eS5TSEFSRUQsXG4gICAgICAgIHR5cGU6ICdIT1NURUQnLFxuICAgICAgICBwYWdlU2l6ZTogMjAwMFxuICAgICAgfSxcbiAgICAgIGN1c3RvbUZpbHRlclxuICAgICk7XG4gICAgY29uc3QgW3sgZGF0YTogYXBwcyB9LCB7IGRhdGE6IHNoYXJlZCB9XSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgIHRoaXMuZ2V0QXBwbGljYXRpb25zKGZpbHRlciksXG4gICAgICB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0KHNoYXJlZEZpbHRlcilcbiAgICBdKTtcbiAgICBjb25zdCB3ZWJBcHBzID0gWy4uLmFwcHMsIC4uLnNoYXJlZF0uZmlsdGVyKGZpbHRlckNhbGxiYWNrKTtcbiAgICAvLyBhbiBhcHAgY291bGQgYmUgc3Vic2NyaWJlZCB0byBhIHRlbmFudCwgYnV0IGFsc28gaGF2ZSBpdCdzIGF2YWlsYWJpbGl0eSBzZXQgdG8gU0hBUkVELCBpbiB0aGF0IGNhc2UgaXQgd291bGQgb2NjdXIgdHdpY2UuXG4gICAgY29uc3QgdW5pcVdlYkFwcHMgPSB1bmlxQnkod2ViQXBwcywgKGFwcDogSUFwcGxpY2F0aW9uKSA9PiBhcHAuaWQpO1xuICAgIHJldHVybiB1bmlxV2ViQXBwcy5zb3J0KChhLCBiKSA9PiBhLm5hbWUubG9jYWxlQ29tcGFyZShiLm5hbWUpKTtcbiAgfVxuXG4gIGFzeW5jIGlzTWljcm9zZXJ2aWNlSG9zdGluZ0FsbG93ZWQoKTogUHJvbWlzZTxib29sZWFuPiB7XG4gICAgY29uc3QgeyBkYXRhOiBhcHBzIH0gPSBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5saXN0QnlOYW1lKCdmZWF0dXJlLW1pY3Jvc2VydmljZS1ob3N0aW5nJyk7XG4gICAgcmV0dXJuICEhYXBwcy5maWx0ZXIoYXBwID0+IGFwcC5vd25lcj8udGVuYW50Py5pZCA9PT0gJ21hbmFnZW1lbnQnKS5sZW5ndGg7XG4gIH1cblxuICBjYW5PcGVuQXBwSW5Ccm93c2VyKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgY29uc3QgaXNOb3RBRmVhdHVyZSA9ICF0aGlzLmlzRmVhdHVyZShhcHApO1xuICAgIGNvbnN0IGhhc1Byb3BlclR5cGUgPSBbXG4gICAgICBBcHBsaWNhdGlvblR5cGUuSE9TVEVELFxuICAgICAgQXBwbGljYXRpb25UeXBlLkVYVEVSTkFMLFxuICAgICAgQXBwbGljYXRpb25UeXBlLlJFUE9TSVRPUllcbiAgICBdLmluY2x1ZGVzKGFwcC50eXBlKTtcbiAgICBjb25zdCBpc05vdFBhY2thZ2UgPSAhdGhpcy5pc1BhY2thZ2UoYXBwKTtcbiAgICByZXR1cm4gaXNOb3RBRmVhdHVyZSAmJiBoYXNQcm9wZXJUeXBlICYmIGlzTm90UGFja2FnZTtcbiAgfVxuXG4gIG9wZW5BcHAoYXBwKSB7XG4gICAgd2luZG93Lm9wZW4odGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0SHJlZihhcHApLCAnX2JsYW5rJywgJ25vb3BlbmVyLG5vcmVmZXJyZXInKTtcbiAgfVxuXG4gIGFzeW5jIGNhbkRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAoXG4gICAgICB0aGlzLmlzT3duZXIoYXBwKSAmJiAoIXRoaXMuaXNDdXJyZW50QXBwKGFwcCkgfHwgKGF3YWl0IHRoaXMuaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHApKSlcbiAgICApO1xuICB9XG5cbiAgaXNPd25lcihhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQ6IElDdXJyZW50VGVuYW50ID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2UuY3VycmVudFRlbmFudC52YWx1ZTtcbiAgICBjb25zdCBhcHBPd25lciA9IGdldChhcHAsICdvd25lci50ZW5hbnQuaWQnKTtcbiAgICByZXR1cm4gY3VycmVudFRlbmFudC5uYW1lID09PSBhcHBPd25lcjtcbiAgfVxuXG4gIGlzRmVhdHVyZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiAhIWFwcC5uYW1lLm1hdGNoKC9mZWF0dXJlLS8pO1xuICB9XG5cbiAgaXNNaWNyb3NlcnZpY2UoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gYXBwLnR5cGUgPT09ICdNSUNST1NFUlZJQ0UnO1xuICB9XG5cbiAgaXNFeHRlcm5hbChhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAudHlwZSA9PT0gJ0VYVEVSTkFMJztcbiAgfVxuXG4gIGlzUGFja2FnZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiBhcHAubWFuaWZlc3Q/LmlzUGFja2FnZSA9PT0gdHJ1ZTtcbiAgfVxuXG4gIGlzUGx1Z2luKGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIGFwcC5tYW5pZmVzdD8ucGFja2FnZSA9PT0gJ3BsdWdpbic7XG4gIH1cblxuICBjYW5jZWxBcHBDcmVhdGlvbihhcHA6IElBcHBsaWNhdGlvbik6IHZvaWQge1xuICAgIGlmICh0aGlzLnhocikge1xuICAgICAgdGhpcy54aHIuYWJvcnQoKTtcbiAgICB9XG4gICAgaWYgKGFwcCkge1xuICAgICAgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcCk7XG4gICAgfVxuICB9XG5cbiAgdXBkYXRlVXBsb2FkUHJvZ3Jlc3MoZXZlbnQpOiB2b2lkIHtcbiAgICBpZiAoZXZlbnQubGVuZ3RoQ29tcHV0YWJsZSkge1xuICAgICAgY29uc3QgY3VycmVudFByb2dyZXNzID0gdGhpcy5wcm9ncmVzcy52YWx1ZTtcbiAgICAgIHRoaXMucHJvZ3Jlc3MubmV4dChjdXJyZW50UHJvZ3Jlc3MgKyAoZXZlbnQubG9hZGVkIC8gZXZlbnQudG90YWwpICogKDk1IC0gY3VycmVudFByb2dyZXNzKSk7XG4gICAgfVxuICB9XG5cbiAgc2V0QXBwQWN0aXZlVmVyc2lvbihhcHA6IElBcHBsaWNhdGlvbiwgYWN0aXZlVmVyc2lvbklkOiBzdHJpbmcpOiBQcm9taXNlPElBcHBsaWNhdGlvbj4ge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoeyBpZDogYXBwLmlkLCBhY3RpdmVWZXJzaW9uSWQgfSk7XG4gIH1cblxuICBzZXRQYWNrYWdlVmVyc2lvblRhZyhhcHA6IElBcHBsaWNhdGlvbiwgdmVyc2lvbjogc3RyaW5nLCB0YWdzOiBzdHJpbmdbXSkge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5zZXRQYWNrYWdlVmVyc2lvblRhZyhhcHAsIHZlcnNpb24sIHRhZ3MpO1xuICB9XG5cbiAgZGVsZXRlUGFja2FnZVZlcnNpb24oYXBwOiBJQXBwbGljYXRpb24sIHBhcmFtczogSUFwcGxpY2F0aW9uVmVyc2lvbkRlbGV0ZVBhcmFtcykge1xuICAgIHJldHVybiB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5kZWxldGVWZXJzaW9uUGFja2FnZShhcHAsIHBhcmFtcyk7XG4gIH1cblxuICBnZXRIdW1hbml6ZWRBcHBOYW1lKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICByZXR1cm4gdGhpcy5odW1hbml6ZUFwcE5hbWUudHJhbnNmb3JtKGFwcC5uYW1lKS5waXBlKGRlYm91bmNlVGltZSgyNTApLCB0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgfVxuXG4gIGNyZWF0ZUNvbmZpZyhhcHA6IElBcHBsaWNhdGlvbiwgZm9ybUdyb3VwVmFsdWU6IEZvcm1Hcm91cCk6IFBhcnRpYWw8SUFwcGxpY2F0aW9uPiB7XG4gICAgY29uc3QgeyBpZCwgdHlwZSwgYXZhaWxhYmlsaXR5IH0gPSBhcHA7XG4gICAgbGV0IGNvbmZpZyA9IHBpY2soZm9ybUdyb3VwVmFsdWUsIFsnbmFtZScsICdrZXknLCAnY29udGV4dFBhdGgnXSk7XG4gICAgY29uZmlnID0ge1xuICAgICAgLi4uY29uZmlnLFxuICAgICAgaXNTZXR1cDogdHJ1ZSxcbiAgICAgIGlkLFxuICAgICAgdHlwZSxcbiAgICAgIGF2YWlsYWJpbGl0eVxuICAgIH07XG4gICAgcmV0dXJuIGNvbmZpZztcbiAgfVxuXG4gIGFzeW5jIGxpc3RBcmNoaXZlcyhhcHBJZDogc3RyaW5nIHwgbnVtYmVyIHwgSUFwcGxpY2F0aW9uKTogUHJvbWlzZTxJQXBwbGljYXRpb25CaW5hcnlbXT4ge1xuICAgIGNvbnN0IGZpbHRlciA9IHtcbiAgICAgIHBhZ2VTaXplOiAxMDBcbiAgICB9O1xuICAgIHJldHVybiAoYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcElkKS5saXN0KGZpbHRlcikpLmRhdGE7XG4gIH1cblxuICBhc3luYyBkZWxldGVBcmNoaXZlKGFyY2hpdmU6IElBcHBsaWNhdGlvbkJpbmFyeSwgYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcmNoaXZlTmFtZSA9IGF3YWl0IHRoaXMuZ2V0SHVtYW5pemVkQXBwTmFtZShhcmNoaXZlKTtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgYXJjaGl2ZScpLFxuICAgICAgICB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChcbiAgICAgICAgICBnZXR0ZXh0KFxuICAgICAgICAgICAgYFlvdSBhcmUgYWJvdXQgdG8gZGVsZXRlIGFyY2hpdmUgXCJ7eyBodW1hbml6ZWRBcmNoaXZlTmFtZSB9fVwiLiBEbyB5b3Ugd2FudCB0byBwcm9jZWVkP2BcbiAgICAgICAgICApLFxuICAgICAgICAgIHsgaHVtYW5pemVkQXJjaGl2ZU5hbWUgfVxuICAgICAgICApLFxuICAgICAgICBTdGF0dXMuREFOR0VSLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUnKSwgY2FuY2VsOiBnZXR0ZXh0KCdDYW5jZWwnKSB9XG4gICAgICApO1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZGVsZXRlKGFyY2hpdmUuaWQpO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIGRlbGV0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBpZiAoZXgpIHtcbiAgICAgICAgdGhpcy5hbGVydFNlcnZpY2UuZGFuZ2VyKGdldChleCwgJ2RhdGEubWVzc2FnZScpLCBleC5kYXRhKTtcbiAgICAgIH1cbiAgICAgIHRocm93IG5ldyBFcnJvcignQ2FuY2VsbGVkJyk7XG4gICAgfVxuICB9XG5cbiAgYXN5bmMgZ2V0QXJjaGl2ZU1hbmFnZWRPYmplY3QoYmluYXJ5SWQ6IHN0cmluZyk6IFByb21pc2U8SU1hbmFnZWRPYmplY3Q+IHtcbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuaW52ZW50b3J5U2VydmljZS5kZXRhaWwoYmluYXJ5SWQpKS5kYXRhO1xuICB9XG5cbiAgYXN5bmMgZG93bmxvYWRBcmNoaXZlKFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGFyY2hpdmU6IFBpY2s8SUFwcGxpY2F0aW9uQmluYXJ5LCAnbmFtZScgfCAnaWQnPlxuICApOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5nZXRCaW5hcnkoYXBwLCBhcmNoaXZlKTtcbiAgICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiAnYXBwbGljYXRpb24veC16aXAtY29tcHJlc3NlZCcgfSk7XG4gICAgICBzYXZlQXMoZmlsZUJpbmFyeSwgYXJjaGl2ZS5uYW1lKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAvLyBlbXB0eVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwZGF0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgZGVsZXRlT25GYWlsdXJlID0gZmFsc2UpOiBQcm9taXNlPElSZXN1bHQ8SUFwcGxpY2F0aW9uPj4ge1xuICAgIHRyeSB7XG4gICAgICByZXR1cm4gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UudXBkYXRlKGFwcCk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihleCk7XG4gICAgICBpZiAoZGVsZXRlT25GYWlsdXJlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmRlbGV0ZShhcHAuaWQpO1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5BUFBMSUNBVElPTl9DUkVBVElPTl9GQUlMRUQpO1xuICAgICAgfVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlbGV0ZUFwcChhcHA6IElBcHBsaWNhdGlvbiwgc2lsZW50ID0gZmFsc2UpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBodW1hbml6ZWRBcHBOYW1lID0gYXdhaXQgdGhpcy5nZXRIdW1hbml6ZWRBcHBOYW1lKGFwcCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGF3YWl0IHRoaXMubW9kYWwuY29uZmlybShcbiAgICAgICAgZ2V0dGV4dCgnRGVsZXRlIGFwcGxpY2F0aW9uJyksXG4gICAgICAgIHRoaXMudHJhbnNsYXRlU2VydmljZS5pbnN0YW50KFxuICAgICAgICAgIGdldHRleHQoXG4gICAgICAgICAgICBgWW91IGFyZSBhYm91dCB0byBkZWxldGUgYXBwbGljYXRpb24gXCJ7eyBodW1hbml6ZWRBcHBOYW1lIH19XCIuIERvIHlvdSB3YW50IHRvIHByb2NlZWQ/YFxuICAgICAgICAgICksXG4gICAgICAgICAgeyBodW1hbml6ZWRBcHBOYW1lIH1cbiAgICAgICAgKSxcbiAgICAgICAgU3RhdHVzLkRBTkdFUixcbiAgICAgICAgeyBvazogZ2V0dGV4dCgnRGVsZXRlJyksIGNhbmNlbDogZ2V0dGV4dCgnQ2FuY2VsJykgfVxuICAgICAgKTtcbiAgICB9XG4gICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZGVsZXRlKGFwcC5pZCk7XG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXBwbGljYXRpb24gZGVsZXRlZC4nKSk7XG4gICAgfVxuICAgIHRoaXMuYXBwRGVsZXRlZC5lbWl0KGFwcCk7XG4gIH1cblxuICBhc3luYyBjaGVja0lmU3Vic2NyaWJlZChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIGNvbnN0IGN1cnJlbnRUZW5hbnQgPSBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UuY3VycmVudCgpO1xuICAgIGNvbnN0IHN1YnNjcmliZWRBcHBzID0gY3VycmVudFRlbmFudC5kYXRhLmFwcGxpY2F0aW9ucy5yZWZlcmVuY2VzO1xuICAgIHJldHVybiBzdWJzY3JpYmVkQXBwcy5zb21lKGFwcGxpY2F0aW9uID0+IGFwcGxpY2F0aW9uLmFwcGxpY2F0aW9uLmlkID09PSBhcHAuaWQpO1xuICB9XG5cbiAgYXN5bmMgc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2Uuc3Vic2NyaWJlQXBwbGljYXRpb24oY3VycmVudFRlbmFudCwgYXBwKTtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnU3VjY2Vzc2Z1bGx5IHN1YnNjcmliZWQgdG8gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVuc3Vic2NyaWJlQXBwKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgY3VycmVudFRlbmFudDogSUN1cnJlbnRUZW5hbnQgPSB0aGlzLmFwcFN0YXRlU2VydmljZS5jdXJyZW50VGVuYW50LnZhbHVlO1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLnRlbmFudFNlcnZpY2UudW5zdWJzY3JpYmVBcHBsaWNhdGlvbihjdXJyZW50VGVuYW50LCBhcHApO1xuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdTdWNjZXNzZnVsbHkgdW5zdWJzY3JpYmVkIGZyb20gYXBwbGljYXRpb24uJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGlzVmFsaWRBcHBUeXBlKGFyY2hpdmU6IEZpbGUsIGFwcFR5cGU6IEFwcGxpY2F0aW9uVHlwZSk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHRyeSB7XG4gICAgICBjb25zdCBjdXJyZW50VHlwZSA9IGF3YWl0IHRoaXMuZ2V0QXBwVHlwZShhcmNoaXZlKTtcbiAgICAgIGlmIChjdXJyZW50VHlwZSAhPT0gYXBwVHlwZSkge1xuICAgICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5UWVBFX1ZBTElEQVRJT04pO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHVwbG9hZEFyY2hpdmVUb0FwcChcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uLFxuICAgIGlzTmV3VmVyc2lvbiA9IGZhbHNlXG4gICk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IHVwbG9hZE92ZXJyaWRlczogSVVwbG9hZFBhcmFtc092ZXJyaWRlO1xuICAgIGlmIChpc05ld1ZlcnNpb24pIHtcbiAgICAgIHVwbG9hZE92ZXJyaWRlcyA9IGF3YWl0IHRoaXMuZ2V0VXBsb2FkT3ZlcnJpZGVzKGFyY2hpdmUsIGFwcCk7XG4gICAgfVxuICAgIGNvbnN0IGJpbmFyeVNlcnZpY2UgPSB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5iaW5hcnkoYXBwKTtcbiAgICB0aGlzLnhociA9IGJpbmFyeVNlcnZpY2UudXBsb2FkV2l0aFByb2dyZXNzWGhyKFxuICAgICAgYXJjaGl2ZSxcbiAgICAgIHRoaXMudXBkYXRlVXBsb2FkUHJvZ3Jlc3MuYmluZCh0aGlzKSxcbiAgICAgICcnLFxuICAgICAgdXBsb2FkT3ZlcnJpZGVzXG4gICAgKTtcblxuICAgIGNvbnN0IGJpbmFyeU1vID0gYXdhaXQgYmluYXJ5U2VydmljZS5nZXRYTUxIdHRwUmVzcG9uc2UodGhpcy54aHIpO1xuICAgIC8vIFRPRE8gY29tbWVudGVkIGl0IGR1ZSB0bzogaHR0cHM6Ly9jdW11bG9jaXR5LmF0bGFzc2lhbi5uZXQvYnJvd3NlL01UTS00ODU1M1xuICAgIC8vIEFkZCBpdCBiYWNrIHdoZW4gQkUgZml4ZXMgaXNzdWVzIHdpdGggYWN0aXZlVmVyc2lvbi5cbiAgICAvLyBpZiAoaXNOZXdWZXJzaW9uKSB7XG4gICAgLy8gICByZXR1cm4gYXdhaXQgdGhpcy5nZXRBcHBsaWNhdGlvbihhcHApO1xuICAgIC8vIH1cbiAgICBjb25zdCBub3RJbml0aWFsUGFja2FnZSA9IGFwcC5hcHBsaWNhdGlvblZlcnNpb25zPy5sZW5ndGggPiAwO1xuICAgIGlmIChub3RJbml0aWFsUGFja2FnZSkge1xuICAgICAgcmV0dXJuIChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS51cGRhdGUoeyBpZDogYXBwLmlkIH0pKS5kYXRhO1xuICAgIH1cbiAgICByZXR1cm4gKGF3YWl0IHRoaXMuc2V0QXBwQWN0aXZlVmVyc2lvbihhcHAsIChiaW5hcnlNby5iaW5hcnlJZCB8fCBiaW5hcnlNby5pZCkgYXMgc3RyaW5nKSkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlQXJjaGl2ZVRvQXBwQ29tcGF0aWJpbGl0eShhcmNoaXZlOiBGaWxlLCBhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGFwcFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgaWYgKGFwcFR5cGUgIT09IGFwcC50eXBlKSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX0FQUExJQ0FUSU9OKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wcm9ncmVzcy5uZXh0KHRoaXMucHJvZ3Jlc3MudmFsdWUgKyAxMCk7XG4gICAgfVxuICAgIGlmICh0aGlzLmlzTWljcm9zZXJ2aWNlKGFwcCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbWFuaWZlc3QgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uKGFyY2hpdmUpO1xuICAgIC8vIEEgdXNlciBjYW4gdXBsb2FkIGFuIGFwcCB3aXRob3V0IGEgQ3VtdWxvY2l0eSBKU09OIGZpbGUgKGUuZy4gYSByZWFjdCBhcHApLlxuICAgIC8vIFRoaXMgaXMgYWxsb3dlZCBhbmQgc2hvdWxkIG5vdCB0cmlnZ2VyIGEgdmFsaWRhdGlvbiBlcnJvci5cbiAgICBpZiAoIW1hbmlmZXN0KSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGF3YWl0IHRoaXMudmFsaWRhdGVQYWNrYWdlS2V5QW5kQ29udGV4dFBhdGgobWFuaWZlc3QsIGFwcCk7XG4gIH1cblxuICBhc3luYyBnZXRDdW11bG9jaXR5SnNvbihhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxJTWFuaWZlc3QgfCBudWxsPiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGM4eU1hbmlmZXN0ID0gYXdhaXQgdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSkudG9Qcm9taXNlKCk7XG4gICAgICByZXR1cm4gYzh5TWFuaWZlc3Q7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGNyZWF0ZUFwcEZvckFyY2hpdmUoYXJjaGl2ZSwgaXNQYWNrYWdlVHlwZUFyY2hpdmUgPSBmYWxzZSk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgbGV0IGlzUGFja2FnZSA9IGZhbHNlO1xuICAgIGNvbnN0IGFwcFR5cGUgPSBhd2FpdCB0aGlzLmdldEFwcFR5cGUoYXJjaGl2ZSk7XG4gICAgbGV0IGFwcE1vZGVsOiBhbnkgPSB7fTtcbiAgICBjb25zdCBzdXBwb3J0ZWRBcHBUeXBlcyA9IFtBcHBsaWNhdGlvblR5cGUuSE9TVEVELCBBcHBsaWNhdGlvblR5cGUuTUlDUk9TRVJWSUNFXTtcblxuICAgIGlmIChzdXBwb3J0ZWRBcHBUeXBlcy5pbmNsdWRlcyhhcHBUeXBlKSkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXBwTW9kZWwgPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICAgICAgaXNQYWNrYWdlID0gYXBwTW9kZWwuaXNQYWNrYWdlO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nLCB3ZSBhbGxvdyBoYXZpbmcgSE9TVEVEIGFwcGxpY2F0aW9ucyB3aXRob3V0IHRoZSBtYW5pZmVzdCBmaWxlXG4gICAgICB9XG4gICAgfVxuICAgIGNvbnN0IG5hbWUgPSB0aGlzLmdldEJhc2VOYW1lRnJvbUFyY2hpdmVPckFwcE1vZGVsKGFyY2hpdmUsIGFwcFR5cGUsIGFwcE1vZGVsKTtcbiAgICBjb25zdCBjbGVhcmVkTmFtZSA9IHRoaXMucmVtb3ZlRm9yYmlkZGVuQ2hhcmFjdGVycyhuYW1lKTtcbiAgICBjb25zdCBrZXkgPSB0aGlzLmdldEFwcEtleShhcHBNb2RlbCwgY2xlYXJlZE5hbWUpO1xuICAgIGNvbnN0IGNvbnRleHRQYXRoID0gdGhpcy5nZXRDb250ZXh0UGF0aChhcHBNb2RlbCwgbmFtZSk7XG5cbiAgICBjb25zdCBhcHBUb1NhdmUgPSB7XG4gICAgICByZXNvdXJjZXNVcmw6ICcvJyxcbiAgICAgIHR5cGU6IGFwcFR5cGUsXG4gICAgICBuYW1lLFxuICAgICAga2V5LFxuICAgICAgY29udGV4dFBhdGhcbiAgICB9O1xuXG4gICAgaWYgKGlzUGFja2FnZVR5cGVBcmNoaXZlICYmICFpc1BhY2thZ2UpIHtcbiAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLklOVkFMSURfUEFDS0FHRSk7XG4gICAgfSBlbHNlIGlmICghaXNQYWNrYWdlVHlwZUFyY2hpdmUgJiYgaXNQYWNrYWdlKSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5JTlZBTElEX0FQUExJQ0FUSU9OKTtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNOYW1lTGVuZ3RoRXhjZWVkZWQobmFtZSwgYXBwVHlwZSkpIHtcbiAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCk7XG4gICAgICBlcnJvci5uYW1lID0gRVJST1JfVFlQRS5NSUNST1NFUlZJQ0VfTkFNRV9UT09fTE9ORztcbiAgICAgIGVycm9yLm1lc3NhZ2UgPSB0aGlzLnRyYW5zbGF0ZVNlcnZpY2UuaW5zdGFudChFUlJPUl9NRVNTQUdFU1tlcnJvci5uYW1lXSwge1xuICAgICAgICBuYW1lLFxuICAgICAgICBtYXhDaGFyczogTUlDUk9TRVJWSUNFX05BTUVfTUFYX0xFTkdUSFxuICAgICAgfSk7XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gICAgcmV0dXJuIChcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmNyZWF0ZSh7XG4gICAgICAgIC4uLmFwcFRvU2F2ZSxcbiAgICAgICAgbWFuaWZlc3Q6IHtcbiAgICAgICAgICBpc1BhY2thZ2UsXG4gICAgICAgICAgLi4uKGFwcE1vZGVsPy5wYWNrYWdlICYmIHsgcGFja2FnZTogYXBwTW9kZWwucGFja2FnZSB9KVxuICAgICAgICB9IGFzIHVua25vd24gYXMgSU1hbmlmZXN0XG4gICAgICB9KVxuICAgICkuZGF0YTtcbiAgfVxuXG4gIGFzeW5jIHJlYWN0aXZhdGVBcmNoaXZlKGFwcDogSUFwcGxpY2F0aW9uKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLnJlYWN0aXZhdGVBcmNoaXZlKGFwcC5pZCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FwcGxpY2F0aW9uIHJlYWN0aXZhdGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy5hbGVydEVycm9yKGV4KTtcbiAgICB9XG4gIH1cblxuICBhc3luYyByZW1vdmVPbGRlc3RBcmNoaXZlKGFwcDogSUFwcGxpY2F0aW9uLCBhcmNoaXZlczogSUFwcGxpY2F0aW9uQmluYXJ5W10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgICB0cnkge1xuICAgICAgYXdhaXQgdGhpcy5tb2RhbC5jb25maXJtKFxuICAgICAgICBnZXR0ZXh0KCdEZWxldGUgb2xkZXN0IGFyY2hpdmUgYW5kIGNvbnRpbnVlJyksXG4gICAgICAgIGdldHRleHQoXG4gICAgICAgICAgJ1VwIHRvIDYgYXJjaGl2ZXMgY2FuIGJlIHNhdmVkIGluIHRoZSBwbGF0Zm9ybS4gSWYgeW91IHVwbG9hZCBhIG5ldyBhcmNoaXZlLCB0aGUgb2xkZXN0IGFyY2hpdmUgdGhhdCBpcyBub3QgYWN0aXZlIHdpbGwgYmUgZGVsZXRlZC4gRG8geW91IHdhbnQgdG8gcHJvY2VlZD8nXG4gICAgICAgICksXG4gICAgICAgIFN0YXR1cy5JTkZPLFxuICAgICAgICB7IG9rOiBnZXR0ZXh0KCdEZWxldGUgYW5kIGNvbnRpbnVlJykgfVxuICAgICAgKTtcbiAgICAgIGNvbnN0IGFyY2hpdmVUb0RlbGV0ZSA9IGFyY2hpdmVzW2FyY2hpdmVzLmxlbmd0aCAtIDJdO1xuICAgICAgYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuYmluYXJ5KGFwcCkuZGVsZXRlKGFyY2hpdmVUb0RlbGV0ZS5pZCk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5zdWNjZXNzKGdldHRleHQoJ0FyY2hpdmUgZGVsZXRlZC4nKSk7XG4gICAgfSBjYXRjaCAoZXgpIHtcbiAgICAgIGlmIChleCkge1xuICAgICAgICB0aGlzLmFsZXJ0RXJyb3IoZXgpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KCdjYW5jZWxsZWQnKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBhc3luYyBkZXBsb3lBcHAoc2VsZWN0ZWRQYWNrYWdlOiBJQXBwbGljYXRpb24sIGZvcm1Hcm91cFZhbHVlLCBtb2RlbCk6IFByb21pc2U8SUFwcGxpY2F0aW9uPiB7XG4gICAgLy8gQ3JlYXRlIG5ldyBhcHAgY29uZmlnXG4gICAgY29uc3QgY29uZmlnID0gdGhpcy5jcmVhdGVDb25maWcoc2VsZWN0ZWRQYWNrYWdlLCBmb3JtR3JvdXBWYWx1ZSk7XG4gICAgY29uc3QgcmVxdWVzdGVkVmVyc2lvbiA9IG1vZGVsLnNlbGVjdGVkLnZlcnNpb247XG4gICAgbGV0IGNsZWFuTWFuaWZlc3Q7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG1hbmlmZXN0ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0QXBwTWFuaWZlc3QoXG4gICAgICAgIHNlbGVjdGVkUGFja2FnZSxcbiAgICAgICAgcmVxdWVzdGVkVmVyc2lvblxuICAgICAgKTtcbiAgICAgIGNsZWFuTWFuaWZlc3QgPSBvbWl0KG1hbmlmZXN0LCBbJ25hbWUnLCAnY29udGV4dFBhdGgnLCAna2V5J10pO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5WRVJTSU9OX05PVF9GT1VORCk7XG4gICAgfVxuXG4gICAgY29uZmlnLmlzU2V0dXAgPSB0cnVlO1xuICAgIGNvbmZpZy5tYW5pZmVzdCA9IGNsZWFuTWFuaWZlc3Q7XG4gICAgY29uZmlnLmF2YWlsYWJpbGl0eSA9IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlBSSVZBVEU7XG4gICAgY29uZmlnLm1hbmlmZXN0LmlzUGFja2FnZSA9IGZhbHNlO1xuICAgIGNvbmZpZy5tYW5pZmVzdC5zb3VyY2UgPSBzZWxlY3RlZFBhY2thZ2UuaWQ7XG4gICAgY29uZmlnLm1hbmlmZXN0LnBhY2thZ2UgPSAnYmx1ZXByaW50JztcblxuICAgIC8vIGJlY2F1c2Ugb2YgYSBpc3N1ZSB3aXRoIFNIQVJFRCBhdmFpbGFiaWxpdHkgd2UgYWx3YXlzIHNob3VsZCBjaGVjayBhZ2FpblxuICAgIC8vIGlmIHRoZSBhcHAgbm90IGV4aXN0IGFscmVhZHlcbiAgICBjb25zdCBhbGxFeGlzdGluZ0FwcHMgPSBhd2FpdCB0aGlzLmdldEhvc3RlZEFuZFBhY2thZ2VBcHBsaWNhdGlvbnMoKTtcbiAgICBjb25zdCBkb2VzQXBwS2V5T3JDb250ZXh0UGF0aEV4aXN0ID0gdGhpcy5jaGVja0lmQXBwTmFtZUtleVBhdGhFeGlzdHMoYWxsRXhpc3RpbmdBcHBzLCBjb25maWcpO1xuICAgIGlmIChkb2VzQXBwS2V5T3JDb250ZXh0UGF0aEV4aXN0KSB7XG4gICAgICB0aHJvdyBuZXcgRWNvc3lzdGVtRXJyb3IoRVJST1JfVFlQRS5BTFJFQURZX0VYSVNUKTtcbiAgICB9XG5cbiAgICAvLyBDcmVhdGUgbmV3IGFwcFxuICAgIGNvbnN0IG5ld0FwcCA9IChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5jcmVhdGUoY29uZmlnKSkuZGF0YTtcbiAgICB0cnkge1xuICAgICAgLy8gQmluYXJ5IHVwbG9hZCBjYW4gZmFpbCBpZiBTSEFSRUQgcGFja2FnZVxuICAgICAgLy8gaW4gdGhpcyBjYXNlLCBjYXRjaCBlcnJvciBhbmQgZmFsbCBiYWNrIHRvXG4gICAgICAvLyBjbG9uZSBBUEkuXG4gICAgICBhd2FpdCB0aGlzLnVwbG9hZEJpbmFyeUZyb21PdGhlclBhY2thZ2UoXG4gICAgICAgIHNlbGVjdGVkUGFja2FnZSxcbiAgICAgICAgbmV3QXBwLFxuICAgICAgICBtb2RlbC5zZWxlY3RlZC5iaW5hcnlJZCxcbiAgICAgICAgcmVxdWVzdGVkVmVyc2lvblxuICAgICAgKTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgaWYgKGVycm9yPy5yZXM/LnN0YXR1cyA9PT0gNDA0KSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZmFsbGJhY2tUb0Nsb25lKG5ld0FwcCwgc2VsZWN0ZWRQYWNrYWdlLCByZXF1ZXN0ZWRWZXJzaW9uKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG5ld0FwcDtcbiAgfVxuXG4gIGFzeW5jIGZhbGxiYWNrVG9DbG9uZShcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHNlbGVjdGVkUGFja2FnZTogSUFwcGxpY2F0aW9uLFxuICAgIHJlcXVlc3RlZFZlcnNpb24/OiBzdHJpbmdcbiAgKSB7XG4gICAgbGV0IHdhc1N1Y2Nlc3MgPSB0cnVlO1xuICAgIGxldCBjbG9uZWRQa2c7XG4gICAgdHJ5IHtcbiAgICAgIGNsb25lZFBrZyA9IChhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZS5jbG9uZShzZWxlY3RlZFBhY2thZ2UsIHJlcXVlc3RlZFZlcnNpb24pKS5kYXRhO1xuICAgICAgYXdhaXQgdGhpcy51cGxvYWRCaW5hcnlGcm9tT3RoZXJQYWNrYWdlKFxuICAgICAgICBzZWxlY3RlZFBhY2thZ2UsXG4gICAgICAgIGFwcGxpY2F0aW9uLFxuICAgICAgICBjbG9uZWRQa2cuYWN0aXZlVmVyc2lvbklkLFxuICAgICAgICByZXF1ZXN0ZWRWZXJzaW9uLFxuICAgICAgICBjbG9uZWRQa2dcbiAgICAgICk7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIHRoaXMuYWxlcnRFcnJvcihlcnJvcik7XG4gICAgICB3YXNTdWNjZXNzID0gZmFsc2U7XG4gICAgfSBmaW5hbGx5IHtcbiAgICAgIGF3YWl0IHRoaXMuZGVsZXRlQXBwKGNsb25lZFBrZywgdHJ1ZSk7XG4gICAgfVxuICAgIHJldHVybiB3YXNTdWNjZXNzO1xuICB9XG5cbiAgYXN5bmMgdXBsb2FkQmluYXJ5RnJvbU90aGVyUGFja2FnZShcbiAgICBzZWxlY3RlZFBhY2thZ2U6IElBcHBsaWNhdGlvbixcbiAgICBhcHBsaWNhdGlvblRvVXBsb2FkQmluYXJ5VG86IElBcHBsaWNhdGlvbixcbiAgICBiaW5hcnlJZDogc3RyaW5nLFxuICAgIHJlcXVlc3RlZFZlcnNpb24/OiBzdHJpbmcsXG4gICAgdXNlQmluYXJpZXNGcm9tPzogSUFwcGxpY2F0aW9uXG4gICkge1xuICAgIGNvbnN0IHsgZGF0YTogYmluYXJ5RGV0YWlscyB9ID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmRldGFpbChiaW5hcnlJZCk7XG5cbiAgICAvLyBHZXQgYmluYXJ5IGZyb20gc3BlY2lmaWMgcGFja2FnZSB2ZXJzaW9uXG4gICAgY29uc3QgYmluYXJ5ID0gYXdhaXQgdGhpcy5nZXRCaW5hcnkodXNlQmluYXJpZXNGcm9tIHx8IHNlbGVjdGVkUGFja2FnZSwge1xuICAgICAgaWQ6IGJpbmFyeUlkXG4gICAgfSk7XG4gICAgLy8gQ3JlYXRlIHppcFxuICAgIGNvbnN0IGZpbGVCaW5hcnkgPSBuZXcgQmxvYihbYmluYXJ5XSwgeyB0eXBlOiBiaW5hcnlEZXRhaWxzLmNvbnRlbnRUeXBlIH0pO1xuICAgIGNvbnN0IGZpbGUgPSBuZXcgRmlsZShbZmlsZUJpbmFyeV0sIGJpbmFyeURldGFpbHMubmFtZSwge1xuICAgICAgdHlwZTogYmluYXJ5RGV0YWlscy5jb250ZW50VHlwZVxuICAgIH0pO1xuXG4gICAgLy8gVXBsb2FkIGJpbmFyeSB0byBuZXcgYXBwXG4gICAgYXdhaXQgdGhpcy51cGxvYWRBcmNoaXZlVG9BcHAoZmlsZSwgYXBwbGljYXRpb25Ub1VwbG9hZEJpbmFyeVRvKTtcblxuICAgIC8vIHVwZGF0ZSB0aGUgYXBwIG1hbmlmZXN0XG4gICAgYXdhaXQgdGhpcy51cGRhdGVBcHBNYW5pZmVzdChhcHBsaWNhdGlvblRvVXBsb2FkQmluYXJ5VG8sIHNlbGVjdGVkUGFja2FnZSwgcmVxdWVzdGVkVmVyc2lvbik7XG4gIH1cblxuICBnZXRBcHBTdGF0ZShhcHA6IElBcHBsaWNhdGlvbik6IEFwcGxpY2F0aW9uU3RhdGUge1xuICAgIGlmICghdGhpcy5pc093bmVyKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuU1VCU0NSSUJFRDtcbiAgICB9IGVsc2UgaWYgKHRoaXMuaXNVbnBhY2tlZChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlVOUEFDS0VEO1xuICAgIH0gZWxzZSBpZiAoYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5FWFRFUk5BTCkge1xuICAgICAgcmV0dXJuIEFQUF9TVEFURS5FWFRFUk5BTDtcbiAgICB9XG4gICAgcmV0dXJuIEFQUF9TVEFURS5DVVNUT007XG4gIH1cblxuICBnZXRQYWNrYWdlQ29udGVudFN0YXRlKGFwcDogSUFwcGxpY2F0aW9uKTogQXBwbGljYXRpb25TdGF0ZSB7XG4gICAgaWYgKCF0aGlzLmlzUGFja2FnZShhcHApKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmICh0aGlzLmlzUGFja2FnZUJsdWVwcmludChhcHApKSB7XG4gICAgICByZXR1cm4gQVBQX1NUQVRFLlBBQ0tBR0VfQkxVRVBSSU5UO1xuICAgIH1cbiAgICBpZiAodGhpcy5pc1BsdWdpbnNQYWNrYWdlKGFwcCkpIHtcbiAgICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9QTFVHSU47XG4gICAgfVxuICAgIHJldHVybiBBUFBfU1RBVEUuUEFDS0FHRV9VTktOT1dOO1xuICB9XG5cbiAgaXNQYWNrYWdlQmx1ZXByaW50KGFwcDogSUFwcGxpY2F0aW9uKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuaXNQYWNrYWdlKGFwcCkgJiYgYXBwLm1hbmlmZXN0LnBhY2thZ2UgPT09ICdibHVlcHJpbnQnO1xuICB9XG5cbiAgaXNQbHVnaW5zUGFja2FnZShhcHA6IElBcHBsaWNhdGlvbik6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmlzUGFja2FnZShhcHApICYmIGFwcC5tYW5pZmVzdC5wYWNrYWdlID09PSAncGx1Z2luJztcbiAgfVxuXG4gIGlzVW5wYWNrZWQoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LnNvdXJjZTtcbiAgfVxuXG4gIGhhc0V4cG9ydHMoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gISFhcHAubWFuaWZlc3Q/LmV4cG9ydHM/Lmxlbmd0aDtcbiAgfVxuXG4gIGlzQXBwbGljYXRpb24oYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICByZXR1cm4gKFxuICAgICAgYXBwLnR5cGUgIT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgJiYgIXRoaXMuaXNGZWF0dXJlKGFwcCkgJiYgIXRoaXMuaXNQYWNrYWdlKGFwcClcbiAgICApO1xuICB9XG5cbiAgaXNDdXN0b21NaWNyb3NlcnZpY2UoYXBwOiBJQXBwbGljYXRpb24pIHtcbiAgICByZXR1cm4gdGhpcy5pc093bmVyKGFwcCkgJiYgYXBwLnR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cblxuICBhc3luYyBnZXRCaW5hcnkoXG4gICAgYXBwOiBJQXBwbGljYXRpb24sXG4gICAgYXJjaGl2ZTogSUFwcGxpY2F0aW9uQmluYXJ5IHwgSUlkZW50aWZpZWRcbiAgKTogUHJvbWlzZTxBcnJheUJ1ZmZlcj4ge1xuICAgIGxldCBiaW5hcnk7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IHRoaXMuYXBwbGljYXRpb25TZXJ2aWNlLmJpbmFyeShhcHApLmRvd25sb2FkQXJjaGl2ZShhcmNoaXZlLmlkKTtcbiAgICAgIGJpbmFyeSA9IGF3YWl0IHJlcy5hcnJheUJ1ZmZlcigpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICBjb25zdCBtc2cgPSBnZXR0ZXh0KCdDb3VsZCBub3QgZ2V0IHRoZSBiaW5hcnkuJyk7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIobXNnKTtcbiAgICB9XG4gICAgcmV0dXJuIGJpbmFyeTtcbiAgfVxuXG4gIGFzeW5jIGlzT3ZlcndyaXR0ZW5CeUN1c3RvbUFwcChhcHA6IElBcHBsaWNhdGlvbik6IFByb21pc2U8Ym9vbGVhbj4ge1xuICAgIHJldHVybiAhdGhpcy5pc093bmVyKGFwcCkgJiYgKGF3YWl0IHRoaXMuaGFzU3Vic2NyaWJlZEFwcFBhcmVudChhcHApKTtcbiAgfVxuXG4gIGFzeW5jIGhhc1N1YnNjcmliZWRBcHBQYXJlbnQoYXBwOiBJQXBwbGljYXRpb24pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgICBjb25zdCBhcHBzR3JvdXBlZEJ5Q29udGV4dFBhdGggPSBhd2FpdCB0aGlzLmFwcHNHcm91cGVkQnlDb250ZXh0UGF0aCQucGlwZSh0YWtlKDEpKS50b1Byb21pc2UoKTtcbiAgICByZXR1cm4gYXBwLmNvbnRleHRQYXRoICYmIGFwcHNHcm91cGVkQnlDb250ZXh0UGF0aFthcHAuY29udGV4dFBhdGhdPy5sZW5ndGggPT09IDI7XG4gIH1cblxuICAvKipcbiAgICogQGRlcHJlY2F0ZWRcbiAgICovXG4gIHNldEF2YWlsYWJpbGl0eVRvUHJpdmF0ZUlmTm90U2V0QWxyZWFkeShhcHA6IElBcHBsaWNhdGlvbik6IElBcHBsaWNhdGlvbiB7XG4gICAgYXBwLmF2YWlsYWJpbGl0eSA9IEFwcGxpY2F0aW9uQXZhaWxhYmlsaXR5LlBSSVZBVEU7XG4gICAgcmV0dXJuIGFwcDtcbiAgfVxuXG4gIC8qKlxuICAgKiBTaG93cyBhbiBlcnJvciBkaWFsb2cuXG4gICAqIEBwYXJhbSBlcnJvciBFaXRoZXIgYSBzZXJ2ZXIgZXJyb3Igb3IgYW4gaW50ZXJuYWwgW1tFY29zeXN0ZW1FcnJvcl1dLlxuICAgKi9cbiAgYWxlcnRFcnJvcihlcnJvcjogRXJyb3IgfCBFY29zeXN0ZW1FcnJvcikge1xuICAgIGlmIChlcnJvciBpbnN0YW5jZW9mIEVjb3N5c3RlbUVycm9yKSB7XG4gICAgICB0aGlzLmFsZXJ0U2VydmljZS5kYW5nZXIoZXJyb3IubWVzc2FnZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLmFkZFNlcnZlckZhaWx1cmUoZXJyb3IpO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIHZhbGlkYXRlUGFja2FnZUtleUFuZENvbnRleHRQYXRoKG1hbmlmZXN0OiBJTWFuaWZlc3QsIGFwcDogSUFwcGxpY2F0aW9uKSB7XG4gICAgY29uc3QgY29udGV4dFBhdGggPSBnZXQobWFuaWZlc3QsICdjb250ZXh0UGF0aCcpO1xuICAgIGNvbnN0IGFwcEtleSA9IGdldChtYW5pZmVzdCwgJ2tleScpO1xuICAgIGlmIChjb250ZXh0UGF0aCAhPT0gYXBwLmNvbnRleHRQYXRoIHx8IGFwcEtleSAhPT0gYXBwLmtleSkge1xuICAgICAgdGhyb3cgbmV3IEVjb3N5c3RlbUVycm9yKEVSUk9SX1RZUEUuS0VZX09SX0NPTlRFWFRfUEFUSF9NSVNNQVRDSCk7XG4gICAgfVxuICB9XG5cbiAgZmlsdGVyQ29udGFpblN0cmluZyhuYW1lOiBzdHJpbmcsIGZpbHRlclRlcm06IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IHRlcm0gPSBmaWx0ZXJUZXJtLnRvTG93ZXJDYXNlKCkudHJpbSgpO1xuICAgIHJldHVybiBuYW1lICYmIG5hbWUudG9Mb3dlckNhc2UoKS5pbmRleE9mKHRlcm0pID4gLTE7XG4gIH1cblxuICBhc3luYyB1cGRhdGVBcHBNYW5pZmVzdChcbiAgICBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uLFxuICAgIHNlbGVjdGVkUGFja2FnZTogSUFwcGxpY2F0aW9uLFxuICAgIHJlcXVlc3RlZFZlcnNpb24/OiBzdHJpbmdcbiAgKTogUHJvbWlzZTx7IHJlczogSUZldGNoUmVzcG9uc2U7IGRhdGE6IGFueSB9PiB7XG4gICAgY29uc3QgeyBpZCB9ID0gYXBwbGljYXRpb247XG4gICAgY29uc3QgY2xlYW5lZEFwcCA9IHRoaXMucmVtb3ZlQXBwUHJvcGVydGllcyhhcHBsaWNhdGlvbik7XG4gICAgbGV0IG1hbmlmZXN0OiBQYXJ0aWFsPElNYW5pZmVzdD4gPSBzZWxlY3RlZFBhY2thZ2UubWFuaWZlc3QgfHwge307XG4gICAgaWYgKHJlcXVlc3RlZFZlcnNpb24pIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHZlcnNpb25lZEFwcE1hbmlmZXN0ID0gYXdhaXQgdGhpcy5hcHBsaWNhdGlvblNlcnZpY2UuZ2V0QXBwTWFuaWZlc3QoXG4gICAgICAgICAgc2VsZWN0ZWRQYWNrYWdlLFxuICAgICAgICAgIHJlcXVlc3RlZFZlcnNpb25cbiAgICAgICAgKTtcbiAgICAgICAgbWFuaWZlc3QgPSB2ZXJzaW9uZWRBcHBNYW5pZmVzdDtcbiAgICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICAgIHRocm93IG5ldyBFY29zeXN0ZW1FcnJvcihFUlJPUl9UWVBFLlZFUlNJT05fTk9UX0ZPVU5EKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBjbGVhbmVkQXBwLm1hbmlmZXN0ID0gbWFuaWZlc3Q7XG4gICAgY2xlYW5lZEFwcC5tYW5pZmVzdC5pc1BhY2thZ2UgPSBmYWxzZTtcbiAgICBjbGVhbmVkQXBwLm1hbmlmZXN0LnNvdXJjZSA9IHNlbGVjdGVkUGFja2FnZS5pZDtcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLmFwcGxpY2F0aW9uU2VydmljZVxuICAgICAgLmJpbmFyeShpZClcbiAgICAgIC51cGRhdGVGaWxlcyhbeyBwYXRoOiBDVU1VTE9DSVRZX0pTT04sIGNvbnRlbnRzOiBKU09OLnN0cmluZ2lmeShjbGVhbmVkQXBwKSBhcyBhbnkgfV0pO1xuICB9XG5cbiAgcHJpdmF0ZSBjaGVja0lmQXBwTmFtZUtleVBhdGhFeGlzdHMoXG4gICAgZXhpc3RpbmdBcHBzOiBJQXBwbGljYXRpb25bXSxcbiAgICBhcHA6IElBcHBsaWNhdGlvbixcbiAgICByZXRyeU5vPzogbnVtYmVyXG4gICk6IElBcHBsaWNhdGlvbiB7XG4gICAgaWYgKGlzVW5kZWZpbmVkKHJldHJ5Tm8pKSB7XG4gICAgICByZXR1cm4gZXhpc3RpbmdBcHBzLmZpbmQoXG4gICAgICAgIGV4aXN0aW5nQXBwID0+XG4gICAgICAgICAgZXhpc3RpbmdBcHAubmFtZSA9PT0gYXBwLm5hbWUgfHxcbiAgICAgICAgICBleGlzdGluZ0FwcC5rZXkgPT09IGFwcC5rZXkgfHxcbiAgICAgICAgICBleGlzdGluZ0FwcC5jb250ZXh0UGF0aCA9PT0gYXBwLmNvbnRleHRQYXRoXG4gICAgICApO1xuICAgIH1cbiAgICByZXR1cm4gZXhpc3RpbmdBcHBzLmZpbmQoXG4gICAgICBleGlzdGluZ0FwcCA9PlxuICAgICAgICBleGlzdGluZ0FwcC5uYW1lID09PSBhcHAubmFtZSB8fFxuICAgICAgICBleGlzdGluZ0FwcC5rZXkgPT09IGFwcC5rZXkgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAuY29udGV4dFBhdGggPT09IGFwcC5jb250ZXh0UGF0aCB8fFxuICAgICAgICBleGlzdGluZ0FwcC5uYW1lID09PSBbYXBwLm5hbWUsIHJldHJ5Tm9dLmpvaW4oJy0nKSB8fFxuICAgICAgICBleGlzdGluZ0FwcC5rZXkgPT09IFthcHAua2V5LCByZXRyeU5vXS5qb2luKCctJykgfHxcbiAgICAgICAgZXhpc3RpbmdBcHAuY29udGV4dFBhdGggPT09IFthcHAuY29udGV4dFBhdGgsIHJldHJ5Tm9dLmpvaW4oJy0nKVxuICAgICk7XG4gIH1cblxuICBwcml2YXRlIGdldEFwcEtleShhcHBNb2RlbDogSUFwcGxpY2F0aW9uLCBuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGxldCBrZXkgPSBhcHBNb2RlbD8ua2V5O1xuICAgIGlmICgha2V5KSB7XG4gICAgICBrZXkgPSBgJHtrZWJhYkNhc2UobmFtZSl9LWtleWA7XG4gICAgfVxuICAgIHJldHVybiBrZXk7XG4gIH1cblxuICBwcml2YXRlIGdldENvbnRleHRQYXRoKGFwcE1vZGVsOiBJQXBwbGljYXRpb24sIG5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgcmV0dXJuIGFwcE1vZGVsPy5jb250ZXh0UGF0aCB8fCBuYW1lLnRvTG93ZXJDYXNlKCk7XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZUZvcmJpZGRlbkNoYXJhY3RlcnMoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBzdHIucmVwbGFjZSgvW15hLXpBLVowLTktX10vZywgJycpO1xuICB9XG5cbiAgcHJpdmF0ZSBpc0N1cnJlbnRBcHAoYXBwOiBJQXBwbGljYXRpb24pOiBib29sZWFuIHtcbiAgICBjb25zdCBjdXJyZW50QXBwID0gdGhpcy5hcHBTdGF0ZVNlcnZpY2Uuc3RhdGUuYXBwO1xuICAgIHJldHVybiBjdXJyZW50QXBwLmNvbnRleHRQYXRoID09PSBhcHAuY29udGV4dFBhdGg7XG4gIH1cblxuICBwcml2YXRlIGdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlOiBGaWxlKTogT2JzZXJ2YWJsZTxhbnk+IHtcbiAgICByZXR1cm4gdGhpcy56aXBTZXJ2aWNlLmdldEpzb25EYXRhKGFyY2hpdmUsIHtcbiAgICAgIGZpbGVuYW1lOiBDVU1VTE9DSVRZX0pTT05cbiAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0QXBwVHlwZShhcmNoaXZlOiBGaWxlKTogUHJvbWlzZTxBcHBsaWNhdGlvblR5cGU+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRDdW11bG9jaXR5SnNvbiQoYXJjaGl2ZSlcbiAgICAgIC50b1Byb21pc2UoKVxuICAgICAgLnRoZW4oXG4gICAgICAgIGRhdGEgPT5cbiAgICAgICAgICBnZXQoZGF0YSwgJ3R5cGUnKSB8fFxuICAgICAgICAgIChnZXQoZGF0YSwgJ2FwaVZlcnNpb24nKSA/IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0UgOiBBcHBsaWNhdGlvblR5cGUuSE9TVEVEKVxuICAgICAgKVxuICAgICAgLmNhdGNoKCgpID0+IEFwcGxpY2F0aW9uVHlwZS5IT1NURUQpO1xuICB9XG5cbiAgcHJpdmF0ZSBnZXRCYXNlTmFtZUZyb21BcmNoaXZlT3JBcHBNb2RlbChcbiAgICBhcmNoaXZlOiBhbnksXG4gICAgYXBwVHlwZTogQXBwbGljYXRpb25UeXBlLFxuICAgIGFwcE1vZGVsPzogSUFwcGxpY2F0aW9uXG4gICk6IHN0cmluZyB7XG4gICAgbGV0IGJhc2VOYW1lID0gYXBwTW9kZWw/Lm5hbWUgfHwgYXJjaGl2ZS5uYW1lLnJlcGxhY2UoL1xcLnppcCQvaSwgJycpO1xuICAgIGlmIChhcHBUeXBlID09PSAnTUlDUk9TRVJWSUNFJykge1xuICAgICAgYmFzZU5hbWUgPSB0aGlzLnJlbW92ZVZlcnNpb25Gcm9tTmFtZShiYXNlTmFtZSk7XG4gICAgfVxuICAgIHJldHVybiBiYXNlTmFtZTtcbiAgfVxuXG4gIHByaXZhdGUgcmVtb3ZlQXBwUHJvcGVydGllcyhhcHA6IElBcHBsaWNhdGlvbik6IElBcHBsaWNhdGlvbiB7XG4gICAgY29uc3QgdGVtcEFwcCA9IGNsb25lRGVlcChhcHApO1xuICAgIGNvbnN0IHByb3BlcnRpZXNUb1JlbW92ZSA9IFsnaWQnLCAnb3duZXInLCAnYWN0aXZlVmVyc2lvbklkJywgJ3NlbGYnLCAndHlwZSddO1xuXG4gICAgcHJvcGVydGllc1RvUmVtb3ZlLmZvckVhY2gocHJvcCA9PiBkZWxldGUgdGVtcEFwcFtwcm9wXSk7XG4gICAgcmV0dXJuIHRlbXBBcHA7XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGdldFVwbG9hZE92ZXJyaWRlcyhcbiAgICBhcmNoaXZlOiBGaWxlLFxuICAgIGFwcDogSUFwcGxpY2F0aW9uXG4gICk6IFByb21pc2U8SVVwbG9hZFBhcmFtc092ZXJyaWRlPiB7XG4gICAgY29uc3QgeyB2ZXJzaW9uIH0gPSBhd2FpdCB0aGlzLmdldEN1bXVsb2NpdHlKc29uJChhcmNoaXZlKS50b1Byb21pc2UoKTtcbiAgICBjb25zdCBpc0luaXRpYWxQYWNrYWdlID0gYXBwLmFwcGxpY2F0aW9uVmVyc2lvbnM/Lmxlbmd0aCA9PT0gMDtcbiAgICByZXR1cm4ge1xuICAgICAgbGlzdFVybDogJ3ZlcnNpb25zJyxcbiAgICAgIGhlYWRlcnM6IHtcbiAgICAgICAgQWNjZXB0OiAnYXBwbGljYXRpb24vdm5kLmNvbS5uc24uY3VtdWxvY2l0eS5hcHBsaWNhdGlvblZlcnNpb24ranNvbjtjaGFyc2V0PVVURi04O3Zlcj0wLjknXG4gICAgICB9LFxuICAgICAgYm9keUZpbGVQcm9wZXJ0eTogJ2FwcGxpY2F0aW9uQmluYXJ5JyxcbiAgICAgIHJlcXVlc3RCb2R5OiB7XG4gICAgICAgIGFwcGxpY2F0aW9uVmVyc2lvbjogeyB2ZXJzaW9uLCAuLi4oaXNJbml0aWFsUGFja2FnZSAmJiB7IHRhZ3M6IFsnbGF0ZXN0J10gfSkgfVxuICAgICAgfVxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHJlbW92ZVZlcnNpb25Gcm9tTmFtZShuYW1lOiBzdHJpbmcpIHtcbiAgICBjb25zdCB2ZXJzaW9uUmVnRXhwID0gLy1cXGQrXFwuXFxkK1xcLlxcZCsoXFwuXFxkKyk/KC1cXGQrKT8oLiopJC87XG4gICAgcmV0dXJuIG5hbWUucmVwbGFjZSh2ZXJzaW9uUmVnRXhwLCAnJyk7XG4gIH1cblxuICBwcml2YXRlIGlzTmFtZUxlbmd0aEV4Y2VlZGVkKG5hbWUsIGFwcFR5cGUpIHtcbiAgICByZXR1cm4gbmFtZS5sZW5ndGggPiBNSUNST1NFUlZJQ0VfTkFNRV9NQVhfTEVOR1RIICYmIGFwcFR5cGUgPT09IEFwcGxpY2F0aW9uVHlwZS5NSUNST1NFUlZJQ0U7XG4gIH1cbn1cbiJdfQ==
@@ -62,6 +62,9 @@ export class UploadArchiveComponent {
62
62
  }
63
63
  catch (ex) {
64
64
  this.uploadInProgress = false;
65
+ if (ex === 'cancelled') {
66
+ return;
67
+ }
65
68
  this.ecosystemService.alertError(ex);
66
69
  }
67
70
  }
@@ -82,4 +85,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.0.6", ngImpor
82
85
  }], refresh: [{
83
86
  type: Output
84
87
  }] } });
85
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWFyY2hpdmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3NoYXJlZC91cGxvYWQtYXJjaGl2ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL3VwbG9hZC1hcmNoaXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFNdkQsTUFBTSxPQUFPLHNCQUFzQjtJQWVqQyxZQUFvQixnQkFBa0MsRUFBVSxZQUEwQjtRQUF0RSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFiakYscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXhCLHNCQUFpQixHQUErQixJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUNqRixZQUFPLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUQsYUFBUSxHQUF5QixFQUFFLENBQUM7UUFLcEMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO0lBRXVFLENBQUM7SUFFOUYsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUs7UUFDNUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQ2hDO1lBQUMsT0FB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QTFCLE1BQU07Z0JBQ0csT0FBTztzQkFBaEIsTUFBTSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgRXZlbnRFbWl0dGVyLCBJbnB1dCwgT3V0cHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBJQXBwbGljYXRpb24sIElBcHBsaWNhdGlvbkJpbmFyeSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFsZXJ0U2VydmljZSwgZ2V0dGV4dCB9IGZyb20gJ0BjOHkvbmd4LWNvbXBvbmVudHMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBFY29zeXN0ZW1TZXJ2aWNlIH0gZnJvbSAnLi9lY29zeXN0ZW0uc2VydmljZSc7XG5cbkBDb21wb25lbnQoe1xuICBzZWxlY3RvcjogJ2M4eS11cGxvYWQtYXJjaGl2ZScsXG4gIHRlbXBsYXRlVXJsOiAndXBsb2FkLWFyY2hpdmUuY29tcG9uZW50Lmh0bWwnXG59KVxuZXhwb3J0IGNsYXNzIFVwbG9hZEFyY2hpdmVDb21wb25lbnQge1xuICBASW5wdXQoKSBhcHBsaWNhdGlvbjogSUFwcGxpY2F0aW9uO1xuICBASW5wdXQoKSB1cGxvYWROZXdWZXJzaW9uID0gZmFsc2U7XG4gIEBJbnB1dCgpIHByZVVwbG9hZENhbGxiYWNrOiAoKSA9PiBQcm9taXNlPGFueT47XG4gIEBPdXRwdXQoKSBhcHBsaWNhdGlvbkNoYW5nZTogRXZlbnRFbWl0dGVyPElBcHBsaWNhdGlvbj4gPSBuZXcgRXZlbnRFbWl0dGVyPElBcHBsaWNhdGlvbj4oKTtcbiAgQE91dHB1dCgpIHJlZnJlc2g6IEV2ZW50RW1pdHRlcjxhbnk+ID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuXG4gIGFyY2hpdmVzOiBJQXBwbGljYXRpb25CaW5hcnlbXSA9IFtdO1xuICB0b0FjdGl2YXRlVmVyc2lvbklkOiBzdHJpbmc7XG4gIGxhc3Q6IElBcHBsaWNhdGlvbkJpbmFyeTtcbiAgaXNMb2FkaW5nOiBib29sZWFuO1xuICBmaWxlTGlzdDogRmlsZUxpc3Q7XG4gIHVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgY2FuUmVhY3RpdmF0ZSA9IGZhbHNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgZWNvc3lzdGVtU2VydmljZTogRWNvc3lzdGVtU2VydmljZSwgcHJpdmF0ZSBhbGVydFNlcnZpY2U6IEFsZXJ0U2VydmljZSkge31cblxuICBnZXQgdXBsb2FkUHJvZ3Jlc3MoKTogQmVoYXZpb3JTdWJqZWN0PG51bWJlcj4ge1xuICAgIHJldHVybiB0aGlzLmVjb3N5c3RlbVNlcnZpY2UucHJvZ3Jlc3M7XG4gIH1cblxuICBhc3luYyBvbkZpbGVEcm9wcGVkRXZlbnQoZXZlbnQpIHtcbiAgICBpZiAodGhpcy5wcmVVcGxvYWRDYWxsYmFjaykge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgdGhpcy5wcmVVcGxvYWRDYWxsYmFjaygpO1xuICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAvLyBkbyBub3RoaW5nLCBpLmUuIHdoZW4gY29uZmlybSBtb2RhbCBjYW5jZWxzIGFuZCB0aHJvd3MgdW5kZWZpbmVkXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGV2ZW50ICYmIGV2ZW50Lmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnN0IGZpbGUgPSBldmVudFswXS5maWxlO1xuICAgICAgdGhpcy5vbkZpbGUoZmlsZSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBvbkZpbGUoZmlsZTogRmlsZSk6IFByb21pc2U8dm9pZD4ge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UudmFsaWRhdGVBcmNoaXZlVG9BcHBDb21wYXRpYmlsaXR5KGZpbGUsIHRoaXMuYXBwbGljYXRpb24pO1xuICAgICAgY29uc3QgaXNDdXN0b21NaWNyb3NlcnZpY2UgPSB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNDdXN0b21NaWNyb3NlcnZpY2UodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgICBjb25zdCBpc1BhY2thZ2UgPSB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuaXNQYWNrYWdlKHRoaXMuYXBwbGljYXRpb24pO1xuICAgICAgdGhpcy5hcmNoaXZlcyA9IGlzQ3VzdG9tTWljcm9zZXJ2aWNlXG4gICAgICAgID8gW11cbiAgICAgICAgOiBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UubGlzdEFyY2hpdmVzKHRoaXMuYXBwbGljYXRpb24uaWQpO1xuICAgICAgdGhpcy5hcmNoaXZlcy5zb3J0KChhLCBiKSA9PiB7XG4gICAgICAgIHJldHVybiAobmV3IERhdGUoYi5jcmVhdGVkKSBhcyBhbnkpIC0gKG5ldyBEYXRlKGEuY3JlYXRlZCkgYXMgYW55KTtcbiAgICAgIH0pO1xuICAgICAgdGhpcy51cGxvYWRJblByb2dyZXNzID0gdHJ1ZTtcbiAgICAgIHRoaXMudXBsb2FkUHJvZ3Jlc3MubmV4dCgwKTtcbiAgICAgIGlmICh0aGlzLmFyY2hpdmVzLmxlbmd0aCA9PT0gNiAmJiAhaXNDdXN0b21NaWNyb3NlcnZpY2UgJiYgIWlzUGFja2FnZSkge1xuICAgICAgICBhd2FpdCB0aGlzLmVjb3N5c3RlbVNlcnZpY2UucmVtb3ZlT2xkZXN0QXJjaGl2ZSh0aGlzLmFwcGxpY2F0aW9uLCB0aGlzLmFyY2hpdmVzKTtcbiAgICAgIH1cbiAgICAgIGNvbnN0IGFwcCA9IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS51cGxvYWRBcmNoaXZlVG9BcHAoXG4gICAgICAgIGZpbGUsXG4gICAgICAgIHRoaXMuYXBwbGljYXRpb24sXG4gICAgICAgIHRoaXMudXBsb2FkTmV3VmVyc2lvblxuICAgICAgKTtcbiAgICAgIHRoaXMuYXBwbGljYXRpb25DaGFuZ2UuZW1pdChhcHApO1xuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5uZXh0KDEwMCk7XG4gICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIHRoaXMucmVmcmVzaC5lbWl0KCk7XG4gICAgICBpZiAodGhpcy51cGxvYWROZXdWZXJzaW9uKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHRoaXMuYWxlcnRTZXJ2aWNlLnN1Y2Nlc3MoZ2V0dGV4dCgnQXJjaGl2ZSB1cGxvYWRlZCBhbmQgYWN0aXZhdGVkLicpKTtcbiAgICB9IGNhdGNoIChleCkge1xuICAgICAgdGhpcy51cGxvYWRJblByb2dyZXNzID0gZmFsc2U7XG4gICAgICB0aGlzLmVjb3N5c3RlbVNlcnZpY2UuYWxlcnRFcnJvcihleCk7XG4gICAgfVxuICB9XG59XG4iLCI8Yzh5LWRyb3AtYXJlYVxuICAoZHJvcHBlZCk9XCJvbkZpbGVEcm9wcGVkRXZlbnQoJGV2ZW50KVwiXG4gIFthY2NlcHRdPVwiJy56aXAnXCJcbiAgW2xvYWRpbmddPVwidXBsb2FkSW5Qcm9ncmVzc1wiXG4gIFttYXhBbGxvd2VkRmlsZXNdPVwiMVwiXG4gIFttZXNzYWdlXT1cIidVcGxvYWQgYSAqLnppcCBmaWxlJyB8IHRyYW5zbGF0ZVwiXG4gIFtwcm9ncmVzc109XCJ1cGxvYWRQcm9ncmVzcyB8IGFzeW5jXCJcbiAgW2ZvcmNlSGlkZUxpc3RdPVwidHJ1ZVwiXG4gIGNsYXNzPVwiZHJvcC1hcmVhLXNtXCJcbj5cbjwvYzh5LWRyb3AtYXJlYT5cbiJdfQ==
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBsb2FkLWFyY2hpdmUuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZWNvc3lzdGVtL3NoYXJlZC91cGxvYWQtYXJjaGl2ZS5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi9lY29zeXN0ZW0vc2hhcmVkL3VwbG9hZC1hcmNoaXZlLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsWUFBWSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFdkUsT0FBTyxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUU1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7Ozs7QUFNdkQsTUFBTSxPQUFPLHNCQUFzQjtJQWVqQyxZQUFvQixnQkFBa0MsRUFBVSxZQUEwQjtRQUF0RSxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQVUsaUJBQVksR0FBWixZQUFZLENBQWM7UUFiakYscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBRXhCLHNCQUFpQixHQUErQixJQUFJLFlBQVksRUFBZ0IsQ0FBQztRQUNqRixZQUFPLEdBQXNCLElBQUksWUFBWSxFQUFFLENBQUM7UUFFMUQsYUFBUSxHQUF5QixFQUFFLENBQUM7UUFLcEMscUJBQWdCLEdBQUcsS0FBSyxDQUFDO1FBQ3pCLGtCQUFhLEdBQUcsS0FBSyxDQUFDO0lBRXVFLENBQUM7SUFFOUYsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQztJQUN4QyxDQUFDO0lBRUQsS0FBSyxDQUFDLGtCQUFrQixDQUFDLEtBQUs7UUFDNUIsSUFBSSxJQUFJLENBQUMsaUJBQWlCLEVBQUU7WUFDMUIsSUFBSTtnQkFDRixNQUFNLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO2FBQ2hDO1lBQUMsT0FB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LEtBQUs7Z0JBQ0csaUJBQWlCO3NCQUF6QixLQUFLO2dCQUNJLGlCQUFpQjtzQkFBMUIsTUFBTTtnQkFDRyxPQUFPO3NCQUFoQixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50LCBFdmVudEVtaXR0ZXIsIElucHV0LCBPdXRwdXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElBcHBsaWNhdGlvbiwgSUFwcGxpY2F0aW9uQmluYXJ5IH0gZnJvbSAnQGM4eS9jbGllbnQnO1xuaW1wb3J0IHsgQWxlcnRTZXJ2aWNlLCBnZXR0ZXh0IH0gZnJvbSAnQGM4eS9uZ3gtY29tcG9uZW50cyc7XG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEVjb3N5c3RlbVNlcnZpY2UgfSBmcm9tICcuL2Vjb3N5c3RlbS5zZXJ2aWNlJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnYzh5LXVwbG9hZC1hcmNoaXZlJyxcbiAgdGVtcGxhdGVVcmw6ICd1cGxvYWQtYXJjaGl2ZS5jb21wb25lbnQuaHRtbCdcbn0pXG5leHBvcnQgY2xhc3MgVXBsb2FkQXJjaGl2ZUNvbXBvbmVudCB7XG4gIEBJbnB1dCgpIGFwcGxpY2F0aW9uOiBJQXBwbGljYXRpb247XG4gIEBJbnB1dCgpIHVwbG9hZE5ld1ZlcnNpb24gPSBmYWxzZTtcbiAgQElucHV0KCkgcHJlVXBsb2FkQ2FsbGJhY2s6ICgpID0+IFByb21pc2U8YW55PjtcbiAgQE91dHB1dCgpIGFwcGxpY2F0aW9uQ2hhbmdlOiBFdmVudEVtaXR0ZXI8SUFwcGxpY2F0aW9uPiA9IG5ldyBFdmVudEVtaXR0ZXI8SUFwcGxpY2F0aW9uPigpO1xuICBAT3V0cHV0KCkgcmVmcmVzaDogRXZlbnRFbWl0dGVyPGFueT4gPSBuZXcgRXZlbnRFbWl0dGVyKCk7XG5cbiAgYXJjaGl2ZXM6IElBcHBsaWNhdGlvbkJpbmFyeVtdID0gW107XG4gIHRvQWN0aXZhdGVWZXJzaW9uSWQ6IHN0cmluZztcbiAgbGFzdDogSUFwcGxpY2F0aW9uQmluYXJ5O1xuICBpc0xvYWRpbmc6IGJvb2xlYW47XG4gIGZpbGVMaXN0OiBGaWxlTGlzdDtcbiAgdXBsb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICBjYW5SZWFjdGl2YXRlID0gZmFsc2U7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBlY29zeXN0ZW1TZXJ2aWNlOiBFY29zeXN0ZW1TZXJ2aWNlLCBwcml2YXRlIGFsZXJ0U2VydmljZTogQWxlcnRTZXJ2aWNlKSB7fVxuXG4gIGdldCB1cGxvYWRQcm9ncmVzcygpOiBCZWhhdmlvclN1YmplY3Q8bnVtYmVyPiB7XG4gICAgcmV0dXJuIHRoaXMuZWNvc3lzdGVtU2VydmljZS5wcm9ncmVzcztcbiAgfVxuXG4gIGFzeW5jIG9uRmlsZURyb3BwZWRFdmVudChldmVudCkge1xuICAgIGlmICh0aGlzLnByZVVwbG9hZENhbGxiYWNrKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCB0aGlzLnByZVVwbG9hZENhbGxiYWNrKCk7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGRvIG5vdGhpbmcsIGkuZS4gd2hlbiBjb25maXJtIG1vZGFsIGNhbmNlbHMgYW5kIHRocm93cyB1bmRlZmluZWRcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZXZlbnQgJiYgZXZlbnQubGVuZ3RoID4gMCkge1xuICAgICAgY29uc3QgZmlsZSA9IGV2ZW50WzBdLmZpbGU7XG4gICAgICB0aGlzLm9uRmlsZShmaWxlKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGFzeW5jIG9uRmlsZShmaWxlOiBGaWxlKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS52YWxpZGF0ZUFyY2hpdmVUb0FwcENvbXBhdGliaWxpdHkoZmlsZSwgdGhpcy5hcHBsaWNhdGlvbik7XG4gICAgICBjb25zdCBpc0N1c3RvbU1pY3Jvc2VydmljZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc0N1c3RvbU1pY3Jvc2VydmljZSh0aGlzLmFwcGxpY2F0aW9uKTtcbiAgICAgIGNvbnN0IGlzUGFja2FnZSA9IHRoaXMuZWNvc3lzdGVtU2VydmljZS5pc1BhY2thZ2UodGhpcy5hcHBsaWNhdGlvbik7XG4gICAgICB0aGlzLmFyY2hpdmVzID0gaXNDdXN0b21NaWNyb3NlcnZpY2VcbiAgICAgICAgPyBbXVxuICAgICAgICA6IGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5saXN0QXJjaGl2ZXModGhpcy5hcHBsaWNhdGlvbi5pZCk7XG4gICAgICB0aGlzLmFyY2hpdmVzLnNvcnQoKGEsIGIpID0+IHtcbiAgICAgICAgcmV0dXJuIChuZXcgRGF0ZShiLmNyZWF0ZWQpIGFzIGFueSkgLSAobmV3IERhdGUoYS5jcmVhdGVkKSBhcyBhbnkpO1xuICAgICAgfSk7XG4gICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSB0cnVlO1xuICAgICAgdGhpcy51cGxvYWRQcm9ncmVzcy5uZXh0KDApO1xuICAgICAgaWYgKHRoaXMuYXJjaGl2ZXMubGVuZ3RoID09PSA2ICYmICFpc0N1c3RvbU1pY3Jvc2VydmljZSAmJiAhaXNQYWNrYWdlKSB7XG4gICAgICAgIGF3YWl0IHRoaXMuZWNvc3lzdGVtU2VydmljZS5yZW1vdmVPbGRlc3RBcmNoaXZlKHRoaXMuYXBwbGljYXRpb24sIHRoaXMuYXJjaGl2ZXMpO1xuICAgICAgfVxuICAgICAgY29uc3QgYXBwID0gYXdhaXQgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLnVwbG9hZEFyY2hpdmVUb0FwcChcbiAgICAgICAgZmlsZSxcbiAgICAgICAgdGhpcy5hcHBsaWNhdGlvbixcbiAgICAgICAgdGhpcy51cGxvYWROZXdWZXJzaW9uXG4gICAgICApO1xuICAgICAgdGhpcy5hcHBsaWNhdGlvbkNoYW5nZS5lbWl0KGFwcCk7XG4gICAgICB0aGlzLnVwbG9hZFByb2dyZXNzLm5leHQoMTAwKTtcbiAgICAgIHRoaXMudXBsb2FkSW5Qcm9ncmVzcyA9IGZhbHNlO1xuICAgICAgdGhpcy5yZWZyZXNoLmVtaXQoKTtcbiAgICAgIGlmICh0aGlzLnVwbG9hZE5ld1ZlcnNpb24pIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5hbGVydFNlcnZpY2Uuc3VjY2VzcyhnZXR0ZXh0KCdBcmNoaXZlIHVwbG9hZGVkIGFuZCBhY3RpdmF0ZWQuJykpO1xuICAgIH0gY2F0Y2ggKGV4KSB7XG4gICAgICB0aGlzLnVwbG9hZEluUHJvZ3Jlc3MgPSBmYWxzZTtcbiAgICAgIGlmIChleCA9PT0gJ2NhbmNlbGxlZCcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgICAgfVxuICAgICAgdGhpcy5lY29zeXN0ZW1TZXJ2aWNlLmFsZXJ0RXJyb3IoZXgpO1xuICAgIH1cbiAgfVxufVxuIiwiPGM4eS1kcm9wLWFyZWFcbiAgKGRyb3BwZWQpPVwib25GaWxlRHJvcHBlZEV2ZW50KCRldmVudClcIlxuICBbYWNjZXB0XT1cIicuemlwJ1wiXG4gIFtsb2FkaW5nXT1cInVwbG9hZEluUHJvZ3Jlc3NcIlxuICBbbWF4QWxsb3dlZEZpbGVzXT1cIjFcIlxuICBbbWVzc2FnZV09XCInVXBsb2FkIGEgKi56aXAgZmlsZScgfCB0cmFuc2xhdGVcIlxuICBbcHJvZ3Jlc3NdPVwidXBsb2FkUHJvZ3Jlc3MgfCBhc3luY1wiXG4gIFtmb3JjZUhpZGVMaXN0XT1cInRydWVcIlxuICBjbGFzcz1cImRyb3AtYXJlYS1zbVwiXG4+XG48L2M4eS1kcm9wLWFyZWE+XG4iXX0=
@@ -681,7 +681,12 @@ class EcosystemService {
681
681
  this.alertService.success(gettext('Archive deleted.'));
682
682
  }
683
683
  catch (ex) {
684
- this.alertError(ex);
684
+ if (ex) {
685
+ this.alertError(ex);
686
+ }
687
+ else {
688
+ return Promise.reject('cancelled');
689
+ }
685
690
  }
686
691
  });
687
692
  }
@@ -1631,6 +1636,9 @@ class UploadArchiveComponent {
1631
1636
  }
1632
1637
  catch (ex) {
1633
1638
  this.uploadInProgress = false;
1639
+ if (ex === 'cancelled') {
1640
+ return;
1641
+ }
1634
1642
  this.ecosystemService.alertError(ex);
1635
1643
  }
1636
1644
  });