mmhglobal-dynamicform 2.11.0 → 2.11.2

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.
@@ -189,7 +189,7 @@ export class SfquerybuilderComponent {
189
189
  });
190
190
  }
191
191
  }
192
- else {
192
+ else if (field.Type != 'zlabel') {
193
193
  this.sdFilter.push({
194
194
  field: componentField,
195
195
  label: componentLabel,
@@ -499,10 +499,10 @@ export class SfquerybuilderComponent {
499
499
  }
500
500
  }
501
501
  SfquerybuilderComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SfquerybuilderComponent, deps: [{ token: i1.FieldService }, { token: i1.ResourceApiService }, { token: i1.WebApiService }], target: i0.ɵɵFactoryTarget.Component });
502
- SfquerybuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SfquerybuilderComponent, selector: "app-sfquerybuilder", inputs: { data: "data", group: "group", form: "form" }, viewQueries: [{ propertyName: "qryBldrObj", first: true, predicate: ["querybuilder"], descendants: true }], ngImport: i0, template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <div class=\"qbcontainer\">\r\n <ejs-querybuilder *ngIf=\"issfLoaded\"\r\n #querybuilder\r\n width=\"100%\"\r\n [dataSource]=\"sfData\"\r\n [columns]=\"sdFilter\"\r\n [rule]=\"importRules\"\r\n (ruleChange)=\"updateRule($event)\"\r\n (created)=\"onChange()\">\r\n </ejs-querybuilder>\r\n\r\n <div *ngIf=\"!data.HideShowResultPanel\">\r\n <br>\r\n <ion-label>Result</ion-label>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n style=\"border: 1px solid #d3d3d3; width: 100%;\">{{displayRule}}</textarea>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}#querybuilder .e-slider-container.e-control-wrapper{height:0}ejs-querybuilder{display:block}.e-query-builder{margin:0 auto;display:block;background-color:#fff;border-color:#e0e0e0}.highcontrast textarea#ruleContent{background-color:#000}.e-query-builder .e-group-body .e-rule-container{box-shadow:0 2px 6px #d3d3d3;height:auto;margin-top:0;padding-right:12px;border:none;border-color:none}.e-bigger.e-small .e-ddl.e-popup .e-list-item,.e-bigger.e-small .e-ddl.e-popup .e-list-group-item,.e-bigger.e-small .e-ddl.e-popup .e-fixed-head{font-size:14px;line-height:34px;padding-left:0;text-indent:16px}.e-query-builder .e-group-body .e-rule-container .e-rule-filter{width:30%!important}.e-query-builder .e-group-body .e-rule-container .e-value{width:40%!important}\n"], components: [{ type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { type: i3.QueryBuilderComponent, selector: "ejs-querybuilder", inputs: ["allowValidation", "columns", "cssClass", "dataSource", "displayMode", "enableNotCondition", "enablePersistence", "enableRtl", "fieldMode", "fieldModel", "headerTemplate", "height", "immediateModeDelay", "locale", "matchCase", "maxGroupCount", "operatorModel", "readonly", "rule", "separator", "showButtons", "sortDirection", "summaryView", "valueModel", "width"], outputs: ["actionBegin", "beforeChange", "change", "created", "dataBound", "ruleChange"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
502
+ SfquerybuilderComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: SfquerybuilderComponent, selector: "app-sfquerybuilder", inputs: { data: "data", group: "group", form: "form" }, viewQueries: [{ propertyName: "qryBldrObj", first: true, predicate: ["querybuilder"], descendants: true }], ngImport: i0, template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <div class=\"qbcontainer\">\r\n <ejs-querybuilder *ngIf=\"issfLoaded\"\r\n #querybuilder\r\n width=\"100%\"\r\n [dataSource]=\"sfData\"\r\n [columns]=\"sdFilter\"\r\n [rule]=\"importRules\"\r\n (ruleChange)=\"updateRule($event)\"\r\n (created)=\"onChange()\">\r\n </ejs-querybuilder>\r\n\r\n <div *ngIf=\"!data.HideShowResultPanel\">\r\n <br>\r\n <ion-label>Result</ion-label>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n style=\"border: 1px solid #d3d3d3; width: 100%;\">{{displayRule}}</textarea>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}#querybuilder .e-slider-container.e-control-wrapper{height:0}ejs-querybuilder{display:block}.e-query-builder{margin:0 auto;display:block;background-color:#fff;border-color:#e0e0e0}.highcontrast textarea#ruleContent{background-color:#000}.e-query-builder .e-group-body .e-rule-container{box-shadow:0 2px 6px #d3d3d3;height:auto;margin-top:0;padding-right:12px;border:none;border-color:none}.e-bigger.e-small .e-ddl.e-popup .e-list-item,.e-bigger.e-small .e-ddl.e-popup .e-list-group-item,.e-bigger.e-small .e-ddl.e-popup .e-fixed-head{font-size:14px;line-height:34px;padding-left:0;text-indent:16px}.e-query-builder .e-group-body .e-rule-container .e-rule-filter,.e-query-builder .e-group-body .e-rule-container .e-value{width:40%!important}.e-query-builder .e-group-body .e-rule-container .e-operator{width:15%!important}\n"], components: [{ type: i2.IonItem, selector: "ion-item", inputs: ["button", "color", "counter", "counterFormatter", "detail", "detailIcon", "disabled", "download", "fill", "href", "lines", "mode", "rel", "routerAnimation", "routerDirection", "shape", "target", "type"] }, { type: i3.QueryBuilderComponent, selector: "ejs-querybuilder", inputs: ["allowValidation", "columns", "cssClass", "dataSource", "displayMode", "enableNotCondition", "enablePersistence", "enableRtl", "fieldMode", "fieldModel", "headerTemplate", "height", "immediateModeDelay", "locale", "matchCase", "maxGroupCount", "operatorModel", "readonly", "rule", "separator", "showButtons", "sortDirection", "summaryView", "valueModel", "width"], outputs: ["actionBegin", "beforeChange", "change", "created", "dataBound", "ruleChange"] }, { type: i2.IonLabel, selector: "ion-label", inputs: ["color", "mode", "position"] }], directives: [{ type: i4.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }] });
503
503
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: SfquerybuilderComponent, decorators: [{
504
504
  type: Component,
505
- args: [{ selector: 'app-sfquerybuilder', template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <div class=\"qbcontainer\">\r\n <ejs-querybuilder *ngIf=\"issfLoaded\"\r\n #querybuilder\r\n width=\"100%\"\r\n [dataSource]=\"sfData\"\r\n [columns]=\"sdFilter\"\r\n [rule]=\"importRules\"\r\n (ruleChange)=\"updateRule($event)\"\r\n (created)=\"onChange()\">\r\n </ejs-querybuilder>\r\n\r\n <div *ngIf=\"!data.HideShowResultPanel\">\r\n <br>\r\n <ion-label>Result</ion-label>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n style=\"border: 1px solid #d3d3d3; width: 100%;\">{{displayRule}}</textarea>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}#querybuilder .e-slider-container.e-control-wrapper{height:0}ejs-querybuilder{display:block}.e-query-builder{margin:0 auto;display:block;background-color:#fff;border-color:#e0e0e0}.highcontrast textarea#ruleContent{background-color:#000}.e-query-builder .e-group-body .e-rule-container{box-shadow:0 2px 6px #d3d3d3;height:auto;margin-top:0;padding-right:12px;border:none;border-color:none}.e-bigger.e-small .e-ddl.e-popup .e-list-item,.e-bigger.e-small .e-ddl.e-popup .e-list-group-item,.e-bigger.e-small .e-ddl.e-popup .e-fixed-head{font-size:14px;line-height:34px;padding-left:0;text-indent:16px}.e-query-builder .e-group-body .e-rule-container .e-rule-filter{width:30%!important}.e-query-builder .e-group-body .e-rule-container .e-value{width:40%!important}\n"] }]
505
+ args: [{ selector: 'app-sfquerybuilder', template: "<ion-item *ngIf=\"(!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible)\">\r\n <div class=\"qbcontainer\">\r\n <ejs-querybuilder *ngIf=\"issfLoaded\"\r\n #querybuilder\r\n width=\"100%\"\r\n [dataSource]=\"sfData\"\r\n [columns]=\"sdFilter\"\r\n [rule]=\"importRules\"\r\n (ruleChange)=\"updateRule($event)\"\r\n (created)=\"onChange()\">\r\n </ejs-querybuilder>\r\n\r\n <div *ngIf=\"!data.HideShowResultPanel\">\r\n <br>\r\n <ion-label>Result</ion-label>\r\n <textarea class=\"output\"\r\n resizable=\"none\"\r\n [rows]=\"10\"\r\n style=\"border: 1px solid #d3d3d3; width: 100%;\">{{displayRule}}</textarea>\r\n </div>\r\n </div>\r\n</ion-item>\r\n", styles: [".qbcontainer{border-radius:5px;border:1px solid rgba(0,0,0,.08);padding:10px;margin:10px 0;width:100%}#querybuilder .e-slider-container.e-control-wrapper{height:0}ejs-querybuilder{display:block}.e-query-builder{margin:0 auto;display:block;background-color:#fff;border-color:#e0e0e0}.highcontrast textarea#ruleContent{background-color:#000}.e-query-builder .e-group-body .e-rule-container{box-shadow:0 2px 6px #d3d3d3;height:auto;margin-top:0;padding-right:12px;border:none;border-color:none}.e-bigger.e-small .e-ddl.e-popup .e-list-item,.e-bigger.e-small .e-ddl.e-popup .e-list-group-item,.e-bigger.e-small .e-ddl.e-popup .e-fixed-head{font-size:14px;line-height:34px;padding-left:0;text-indent:16px}.e-query-builder .e-group-body .e-rule-container .e-rule-filter,.e-query-builder .e-group-body .e-rule-container .e-value{width:40%!important}.e-query-builder .e-group-body .e-rule-container .e-operator{width:15%!important}\n"] }]
506
506
  }], ctorParameters: function () { return [{ type: i1.FieldService }, { type: i1.ResourceApiService }, { type: i1.WebApiService }]; }, propDecorators: { qryBldrObj: [{
507
507
  type: ViewChild,
508
508
  args: ['querybuilder']
@@ -513,4 +513,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
513
513
  }], form: [{
514
514
  type: Input
515
515
  }] } });
516
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFHdEYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNTLGdCQUFnQixFQUFFLG9CQUFvQixFQUNoQyx3QkFBd0IsRUFDN0MsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQWUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQVExRCxNQUFNLE9BQU8sdUJBQXVCO0lBa0dsQyxZQUNVLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxhQUE0QjtRQUY1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztR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c291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWxheSwgaWdub3JlRWxlbWVudHMsIG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbi8vaW1wb3J0IHsgUXVlcnlCdWlsZGVyQ29uZmlnLCBRdWVyeUJ1aWxkZXJDbGFzc05hbWVzIH0gZnJvbSAnYW5ndWxhcjItcXVlcnktYnVpbGRlcic7XHJcbmltcG9ydCB7IFJ1bGVNb2RlbCwgUXVlcnlCdWlsZGVyQ29tcG9uZW50LCBDb2x1bW5zTW9kZWwsIFRlbXBsYXRlQ29sdW1uLCBSdWxlQ2hhbmdlRXZlbnRBcmdzIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcXVlcnlidWlsZGVyJztcclxuaW1wb3J0IHsgRHJvcERvd25MaXN0LCBNdWx0aVNlbGVjdCB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1kcm9wZG93bnMnO1xyXG5pbXBvcnQgeyBnZXRDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYmFzZSc7XHJcbmltcG9ydCB7IENoZWNrQm94IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWJ1dHRvbnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEZpZWxkU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudFByb3BlcnRpZXMsIFpGaWVsZCwgWkdyb3VwLFxyXG4gIEZvbnRBd2VTb21lU2VydmljZSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zLCBXZWJBcGlTZXJ2aWNlLCBSZXNvdXJjZUFwaVNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuaW1wb3J0IHsgRGF0YU1hbmFnZXIsIFF1ZXJ5IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWRhdGEnO1xyXG5kZWNsYXJlIHZhciAkOiBhbnlcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNmcXVlcnlidWlsZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NmcXVlcnlidWlsZGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZnF1ZXJ5YnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgncXVlcnlidWlsZGVyJykgcXJ5Qmxkck9iajogUXVlcnlCdWlsZGVyQ29tcG9uZW50O1xyXG4gIC8vQElucHV0KCkgY2xhc3NOYW1lczogUXVlcnlCdWlsZGVyQ2xhc3NOYW1lcztcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIHFiSXRlbXMgPSB7fTtcclxuXHJcbiAgcHVibGljIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICBwdWJsaWMgaXNzZkxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBxdWVyeUN0cmw6IGFueTtcclxuICAvL3B1YmxpYyBjdXJyZW50Q29uZmlnOiBRdWVyeUJ1aWxkZXJDb25maWcgPSB7XHJcbiAgLy8gIGZpZWxkczoge30sXHJcbiAgLy8gIGFsbG93RW1wdHlSdWxlc2V0czogdHJ1ZVxyXG4gIC8vfTtcclxuICBwdWJsaWMgYWxsb3dSdWxlc2V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgYWxsb3dDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcnVsZTogYW55O1xyXG4gIHB1YmxpYyBmaWx0ZXJzOiBhbnk7XHJcbiAgcHJpdmF0ZSBmaWVsZHM6IGFueTtcclxuICBwdWJsaWMgZGlzcGxheVJ1bGU6IGFueSA9ICcnO1xyXG5cclxuICBwcml2YXRlIGxvYWRlZERyb3Bkb3duT3B0aW9ucyA9IFtdO1xyXG5cclxuICAvL3NmXHJcbiAgcHVibGljIHNmRGF0YTogT2JqZWN0W107XHJcbiAgcHVibGljIGltcG9ydFJ1bGVzOiBSdWxlTW9kZWw7XHJcbiAgcHVibGljIHNkRmlsdGVyOiBDb2x1bW5zTW9kZWxbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZlFCVGVtcGxhdGU6IFRlbXBsYXRlQ29sdW1uO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGVxdWFsT3BlcmF0b3IgPSB7IHZhbHVlOiAnZXF1YWwnLCBrZXk6ICdFcXVhbHMnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBub3RlcXVhbE9wZXJhdG9yID0geyB2YWx1ZTogJ25vdGVxdWFsJywga2V5OiAnTm90IEVxdWFscycgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0c3dpdGhPcGVyYXRvciA9IHsgdmFsdWU6ICdzdGFydHN3aXRoJywga2V5OiAnU3RhcnQgV2l0aCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVuZHN3aXRoT3BlcmF0b3IgPSB7IHZhbHVlOiAnZW5kc3dpdGgnLCBrZXk6ICdFbmQgV2l0aCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5zT3BlcmF0b3IgPSB7IHZhbHVlOiAnY29udGFpbnMnLCBrZXk6ICdDb250YWlucycgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGlzZW1wdHlPcGVyYXRvciA9IHsgdmFsdWU6ICdpc2VtcHR5Jywga2V5OiAnSXMgRW1wdHknIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc25vdGVtcHR5T3BlcmF0b3IgPSB7IHZhbHVlOiAnaXNub3RlbXB0eScsIGtleTogJ0lzIE5vdCBFbXB0eScgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGlzbnVsbE9wZXJhdG9yID0geyB2YWx1ZTogJ2lzbnVsbCcsIGtleTogJ0lzIE51bGwnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc25vdG51bGxPcGVyYXRvciA9IHsgdmFsdWU6ICdpc25vdG51bGwnLCBrZXk6ICdJcyBOb3QgTnVsbCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGluT3BlcmF0b3IgPSB7IHZhbHVlOiAnaW4nLCBrZXk6ICdJbicgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGluT3BlcmF0b3IgPSB7IHZhbHVlOiAnbm90aW4nLCBrZXk6ICdOb3QgSW4nIH1cclxuICBwcml2YXRlIHJlYWRvbmx5IGdyZWF0ZXJ0aGFuT3BlcmF0b3IgPSB7IHZhbHVlOiAnZ3JlYXRlcnRoYW4nLCBrZXk6ICdHcmVhdGVyIFRoYW4nIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBncmVhdGVydGhhbm9yZXF1YWxPcGVyYXRvciA9IHsgdmFsdWU6ICdncmVhdGVydGhhbm9yZXF1YWwnLCBrZXk6ICdHcmVhdGVyIFRoYW4gT3IgRXF1YWxzJyB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGVzc3RoYW5PcGVyYXRvciA9IHsgdmFsdWU6ICdsZXNzdGhhbicsIGtleTogJ0xlc3MgVGhhbicgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxlc3N0aGFub3JlcXVhbE9wZXJhdG9yID0geyB2YWx1ZTogJ2xlc3N0aGFub3JlcXVhbCcsIGtleTogJ0xlc3MgVGhhbiBPciBFcXVhbHMnIH07XHJcblxyXG4gIHB1YmxpYyBpbk9wZXJhdG9yczogc3RyaW5nW10gPSBbJ2luJywgJ25vdGluJ107XHJcbiAgcHVibGljIGRyb3Bkb3duT3BlcmF0b3JzOiBhbnkgPSBbXHJcbiAgICB0aGlzLmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmluT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGluT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgcHVibGljIHN0cmluZ09wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5zdGFydHN3aXRoT3BlcmF0b3IsXHJcbiAgICB0aGlzLmVuZHN3aXRoT3BlcmF0b3IsXHJcbiAgICB0aGlzLmNvbnRhaW5zT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzZW1wdHlPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RlbXB0eU9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc251bGxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RudWxsT3BlcmF0b3JcclxuICBdO1xyXG4gIHB1YmxpYyBpbnRlZ2VyT3BlcmF0b3JzOiBhbnkgPSBbXHJcbiAgICB0aGlzLmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmdyZWF0ZXJ0aGFuT3BlcmF0b3IsXHJcbiAgICB0aGlzLmdyZWF0ZXJ0aGFub3JlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5sZXNzdGhhbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5sZXNzdGhhbm9yZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNudWxsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90bnVsbE9wZXJhdG9yXHJcbiAgXTtcclxuICBwdWJsaWMgZGF0ZU9wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbm9yZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5PcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5vcmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgcHVibGljIGJvb2xlYW5PcGVyYXRvcnM6IGFueSA9IFtcclxuICAgIHRoaXMuZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubm90ZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNudWxsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90bnVsbE9wZXJhdG9yXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHNlbGVjdGlvbkNvbXBvbmVudExpc3QgPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIG9mKHRydWUpLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iZWZvcmVMb2FkRmllbGQodGhpcy5kYXRhKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcChkYXRhID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhIGFzIFpGaWVsZDtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkUXVlcnlCdWlsZGVyKCk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIC8vIFdoZXJlIHRvIHVwZGF0ZSBvcGVyYXRvciBzeW50YXhcclxuICAgICAgLy8gMS4gRTEgLSBxdWVyeUJ1aWxkZXJUZW1wbGF0ZTJcclxuICAgICAgLy8gMi4gc2hhcmVkIGZvbGRlciA+IGhlbHBlciA+IHF1ZXJ5YnVpbGRlci1maWVsZGluZm8taGVscGVyLnRzXHJcbiAgICAgIC8vIDMuIHBhdGNoIGRiIGRhdGEgd2l0aCBzbWFsbCBjYXBpdGFsIGxldHRlclxyXG5cclxuICAgICAgLy90aGlzLmlzc2ZMb2FkZWQgPSB0cnVlOyAgXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFF1ZXJ5QnVpbGRlcigpIHtcclxuICAgIGlmICh0aGlzLmRhdGFbJ0FsbG93Q29sbGFwc2UnXSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmFsbG93Q29sbGFwc2UgPSB0aGlzLmRhdGFbJ0FsbG93Q29sbGFwc2UnXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhWydBbGxvd1J1bGVzZXQnXSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5hbGxvd1J1bGVzZXQgPSB0aGlzLmRhdGFbJ0FsbG93UnVsZXNldCddO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGFbJ0ZpbHRlcnMnXSkge1xyXG4gICAgICB0aGlzLmZpbHRlcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICB0aGlzLmRhdGFbJ0ZpbHRlcnMnXSxcclxuICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKHRoaXMuZGF0YS5WYWx1ZSwgXCJGb3JtRmllbGRcIiwgbnVsbCwgbnVsbCk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGlzR3JvdXBlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpZWxkcy5waXBlKFxyXG4gICAgICAgIHRhcCgoZGF0YTogW10pID0+IHtcclxuXHJcbiAgICAgICAgICAvLyBpZiBbaXNHcm91cGVkID0gdHJ1ZV0gaW5jbHVkZSBncm91cGluZyBuYW1lIGFzIHByZWZpeFxyXG4gICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBpc0dyb3VwZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBkYXRhLmZvckVhY2goYXN5bmMgKGZpZWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRUeXBlKGZpZWxkLCBpc0dyb3VwZWQpO1xyXG4gICAgICAgICAgfSk7Ly9lbmQgZm9yZWFjaFxyXG5cclxuICAgICAgICAgIHRoaXMuaXNzZkxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcImVycm9yOiBcIiwgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZW5kZXJDb21wb25lbnRUeXBlKGZpZWxkOiBhbnksIGlzR3JvdXBlZDogYm9vbGVhbiwgZmllbGRUaXRsZT86IHN0cmluZykge1xyXG4gICAgbGV0IGNvbXBvbmVudExhYmVsID0gZmllbGQuU3ViVHlwZSA/IGZpZWxkLkxhYmVsIDogZmllbGQuTGFiZWwgPz8gZmllbGQuTmFtZTtcclxuICAgIGNvbXBvbmVudExhYmVsID0gIWlzR3JvdXBlZCAmJiAhWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eShmaWVsZFRpdGxlKSA/IFwiW1wiICsgZmllbGRUaXRsZSArIFwiXSBcIiArIGZpZWxkLkxhYmVsIDogIVpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkoZmllbGQuTGFiZWwpID8gZmllbGQuTGFiZWwgOiBmaWVsZC5OYW1lO1xyXG5cclxuICAgIGxldCBjb21wb25lbnRGaWVsZCA9ICFaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KGZpZWxkVGl0bGUpID8gZmllbGRUaXRsZSArIFwiX1wiICsgZmllbGQuVmFsdWUgOiBmaWVsZC5WYWx1ZTtcclxuXHJcbiAgICBpZiAoZmllbGQuVHlwZSA9PT0gJ2NhdGVnb3J5JyB8fCBmaWVsZC5UeXBlID09PSAnbXVsdGlzZWxlY3QnIHx8IGZpZWxkLlR5cGUgPT09ICd6dWlzZWxlY3RtdWx0aXBsZScpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5kcm9wZG93bk9wZXJhdG9ycyxcclxuICAgICAgICB0ZW1wbGF0ZTogYXdhaXQgdGhpcy5nZW5lcmF0ZUNvbHVtblNlbGVjdGlvbihmaWVsZCksXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5UeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5kYXRlT3BlcmF0b3JzLFxyXG4gICAgICAgIHR5cGU6ICdkYXRlJ1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmllbGQuVHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5pbnRlZ2VyT3BlcmF0b3JzLFxyXG4gICAgICAgIHR5cGU6ICdudW1iZXInXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5WYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHRoaXMuc2RGaWx0ZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGNvbXBvbmVudEZpZWxkLFxyXG4gICAgICAgIGxhYmVsOiBjb21wb25lbnRMYWJlbCxcclxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgICAgICAgb3BlcmF0b3JzOiB0aGlzLmJvb2xlYW5PcGVyYXRvcnMsXHJcbiAgICAgICAgdGVtcGxhdGU6IGF3YWl0IHRoaXMuZ2VuZXJhdGVDb2x1bW5DaGVja2JveChmaWVsZC5OYW1lLCBmYWxzZSlcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZpZWxkLlR5cGUgPT09ICdrY2FyZCcpIHtcclxuICAgICAgaWYgKGZpZWxkLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmaWVsZC5WYWx1ZS5mb3JFYWNoKGFzeW5jIChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50VHlwZShpdGVtLCBpc0dyb3VwZWQsIGZpZWxkLlRpdGxlKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5zdHJpbmdPcGVyYXRvcnMsXHJcbiAgICAgICAgdHlwZTogJ3N0cmluZydcclxuICAgICAgfSlcclxuICAgIH1cclxuXHJcbiAgICB0aGlzLnNkRmlsdGVyLnNvcnQoKGEsIGIpID0+IGEubGFiZWwudG9Mb3dlckNhc2UoKSA8IGIubGFiZWwudG9Mb3dlckNhc2UoKSA/IC0xIDogMSk7XHJcbiAgfVxyXG5cclxuICAvLyNyZWdpb24gY2hlY2tib3hcclxuICBwcml2YXRlIGdlbmVyYXRlQ29sdW1uQ2hlY2tib3gobGFiZWw6IHN0cmluZywgdmFsdWU6IGJvb2xlYW4pOiBUZW1wbGF0ZUNvbHVtbiB7XHJcbiAgICByZXR1cm4ge1xyXG4gICAgICBjcmVhdGU6ICgpID0+IHtcclxuICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnaW5wdXQnLCB7IGF0dHJzOiB7ICd0eXBlJzogJ2NoZWNrYm94JyB9IH0pO1xyXG4gICAgICB9LFxyXG4gICAgICBkZXN0cm95OiAoYXJnczogeyBlbGVtZW50SWQ6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgKGdldENvbXBvbmVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhcmdzLmVsZW1lbnRJZCksICdjaGVja2JveCcpIGFzIENoZWNrQm94KS5kZXN0cm95KCk7XHJcbiAgICAgIH0sXHJcbiAgICAgIHdyaXRlOiAoYXJnczogeyBlbGVtZW50czogRWxlbWVudCwgdmFsdWVzOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgIGNvbnN0IGJveE9iajogQ2hlY2tCb3ggPSBuZXcgQ2hlY2tCb3goe1xyXG4gICAgICAgICAgbGFiZWw6IGxhYmVsLFxyXG4gICAgICAgICAgY2hlY2tlZDogdmFsdWUsXHJcbiAgICAgICAgICBjaGFuZ2U6IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5xcnlCbGRyT2JqLm5vdGlmeUNoYW5nZSh2YWx1ZSwgZS5ldmVudC50YXJnZXQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJveE9iai5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIC8vI3JlZ2lvbiBkcm9wZG93bi9tdWx0aXNlbGVjdFxyXG4gIHByaXZhdGUgZ2VuZXJhdGVDb2x1bW5TZWxlY3Rpb24oZmllbGRFbGVtZW50RGF0YTogYW55KTogVGVtcGxhdGVDb2x1bW4ge1xyXG4gICAgcmV0dXJuIHtcclxuXHJcbiAgICAgIC8vIENyZWF0ZXMgdGhlIGN1c3RvbSBjb21wb25lbnRcclxuICAgICAgY3JlYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgLy8gQWRkaXRpb25hbCBmaWx0ZXIgc2V0IGluIHRoZSBwYWdlXHJcbiAgICAgICAgaWYgKHRoaXMuZGF0YVsnRmlsdGVycyddKSB7XHJcbiAgICAgICAgICB0aGlzLmZpbHRlcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgICAgIHRoaXMsXHJcbiAgICAgICAgICAgIHRoaXMuZGF0YVsnRmlsdGVycyddLFxyXG4gICAgICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy9yZXR1cm4gY3JlYXRlRWxlbWVudCgnaW5wdXQnLCB7IGF0dHJzOiB7ICd0eXBlJzogJ3RleHQnLCAnc3R5bGUnOiAnZGlzcGxheTogbm9uZScgfSB9KTtcclxuICAgICAgICByZXR1cm4gY3JlYXRlRWxlbWVudCgnaW5wdXQnLCB7IGF0dHJzOiB7ICd0eXBlJzogJ3RleHQnIH0gfSk7XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvLyBEZXN0cm95IHRoZSBjdXN0b20gY29tcG9uZW50XHJcbiAgICAgIGRlc3Ryb3k6IChhcmdzOiB7IGVsZW1lbnRJZDogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICBpZiAoYXJnc1snZWxlbWVudHMnXSkge1xyXG4gICAgICAgICAgbGV0IG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdCA9IChnZXRDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXJncy5lbGVtZW50SWQpLCAnbXVsdGlzZWxlY3QnKSBhcyBNdWx0aVNlbGVjdCk7XHJcbiAgICAgICAgICBpZiAobXVsdGlTZWxlY3QpIHtcclxuICAgICAgICAgICAgbXVsdGlTZWxlY3QuZGVzdHJveSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgICAgbGV0IGRyb3Bkb3duOiBEcm9wRG93bkxpc3QgPSAoZ2V0Q29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyZ3MuZWxlbWVudElkKSwgJ2Ryb3Bkb3dubGlzdCcpIGFzIERyb3BEb3duTGlzdCk7XHJcbiAgICAgICAgICBpZiAoZHJvcGRvd24pIHtcclxuICAgICAgICAgICAgZHJvcGRvd24uZGVzdHJveSgpO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ107XHJcbiAgICAgICAgICBpZiAoc2VsZWN0T3B0aW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwgPSBzZWxlY3RPcHRpb25zWydSZXNvdXJjZVVSTCddO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nID0gc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMICsgJ18nICsgYXJncy5lbGVtZW50SWQ7XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5sb2FkZWREcm9wZG93bk9wdGlvbnMuaW5jbHVkZXMocHJlZml4UmVzb3VyY2VVUkxDaGVja2luZykpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucyA9IHRoaXMucmVtb3ZlQXJyYXlJdGVtKHRoaXMubG9hZGVkRHJvcGRvd25PcHRpb25zLCBwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfSxcclxuXHJcbiAgICAgIC8vIFdpcmUgZXZlbnRzIGZvciB0aGUgY3VzdG9tIGNvbXBvbmVudC5cclxuICAgICAgd3JpdGU6IChhcmdzOiB7IGVsZW1lbnRzOiBFbGVtZW50LCB2YWx1ZXM6IHN0cmluZ1tdIHwgc3RyaW5nLCBvcGVyYXRvcjogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICAvL29yaWdpblxyXG4gICAgICAgIGlmIChmaWVsZEVsZW1lbnREYXRhWydWYWx1ZU9wdGlvbnMnXSkge1xyXG4gICAgICAgICAgLy8gY29udmVydCB0byBwcm9wZXJ0eSBuYW1lIHVzZWQgaW4gdGhlIGNvbXBvbmVudCByZW5kZXJpbmdcclxuICAgICAgICAgIGNvbnN0IG9wdGlvbkxpc3Q6IHsgW25hbWU6IHN0cmluZ106IE9iamVjdCB9W10gPSBbXTtcclxuICAgICAgICAgIGZpZWxkRWxlbWVudERhdGFbJ1ZhbHVlT3B0aW9ucyddLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgIHRleHQ6IGl0ZW1bJ05hbWUnXSxcclxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbVsnVmFsdWUnXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ29tcG9uZW50ID0gdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzLCBvcHRpb25MaXN0KTtcclxuICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIG1hbnVhbCBkcm9wZG93biBvciB6dWRmIG1hbnVhbCBkcm9wZG93blxyXG4gICAgICAgIGVsc2UgaWYgKGZpZWxkRWxlbWVudERhdGFbJ1NlbGVjdE9wdGlvbnMnXSAmJiBBcnJheS5pc0FycmF5KGZpZWxkRWxlbWVudERhdGFbJ1NlbGVjdE9wdGlvbnMnXSkpIHtcclxuICAgICAgICAgIC8vIGNvbnZlcnQgdG8gcHJvcGVydHkgbmFtZSB1c2VkIGluIHRoZSBjb21wb25lbnQgcmVuZGVyaW5nXHJcbiAgICAgICAgICBjb25zdCBvcHRpb25MaXN0OiB7IFtuYW1lOiBzdHJpbmddOiBPYmplY3QgfVtdID0gW107XHJcbiAgICAgICAgICBmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ10uZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIG9wdGlvbkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgdGV4dDogaXRlbVsndGV4dCddLFxyXG4gICAgICAgICAgICAgIHZhbHVlOiBpdGVtWyd2YWx1ZSddXHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Db21wb25lbnQgPSB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3MsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgICAgc2VsZWN0aW9uQ29tcG9uZW50LmFwcGVuZFRvKCcjJyArIGFyZ3MuZWxlbWVudHMuaWQpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8genVkZiBSZXNvdXJjZVVSTCAvIENvbW1vbiBNYXN0ZXIgZHJvcGRvd25cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnMgPSBmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ107XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwgPSBzZWxlY3RPcHRpb25zWydSZXNvdXJjZVVSTCddO1xyXG5cclxuICAgICAgICAgIC8vIFJlc291cmNlVVJMIGRyb3Bkb3duXHJcbiAgICAgICAgICBpZiAoc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHByZWZpeFJlc291cmNlVVJMQ2hlY2tpbmcgPSBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwgKyAnXycgKyBhcmdzLmVsZW1lbnRzLmlkO1xyXG5cclxuICAgICAgICAgICAgaWYgKCF0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucy5pbmNsdWRlcyhwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nKSkge1xyXG4gICAgICAgICAgICAgIHRoaXMubG9hZGVkRHJvcGRvd25PcHRpb25zLnB1c2gocHJlZml4UmVzb3VyY2VVUkxDaGVja2luZyk7XHJcblxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnMpIHtcclxuICAgICAgICAgICAgICAgIHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXSA9IHRoaXMuZmlsdGVycztcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zKTtcclxuICAgICAgICAgICAgICBwYXJhbS5wYWdlU2l6ZSA9IHNlbGVjdE9wdGlvbnNbJ1BhZ2VTaXplJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uY29sdW1ucyA9IHNlbGVjdE9wdGlvbnNbJ0NvbHVtbnMnXTtcclxuICAgICAgICAgICAgICBwYXJhbS5maWx0ZXJzICs9IHNlbGVjdE9wdGlvbnNbJ0ZpbHRlcnMnXTtcclxuICAgICAgICAgICAgICBwYXJhbS5zb3J0Q29sdW1uTmFtZSA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRDb2x1bW5OYW1lJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uc29ydE9yZGVyID0gc2VsZWN0T3B0aW9uc1snU29ydE9yZGVyJ107XHJcblxyXG4gICAgICAgICAgICAgIC8vIE5lZWQgZGVsYXkgNDAwbXMgaWYgbm90IDNyZCBzZWdtZW50ICh2YWx1ZSkgd2lsbCBub3QgYmUgcmVuZGVyZWQuXHJcbiAgICAgICAgICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JCh0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRQYWdlVXJsKHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCksIHBhcmFtKS5waXBlKFxyXG4gICAgICAgICAgICAgICAgZGVsYXkoNDAwKSxcclxuICAgICAgICAgICAgICAgIG1hcCgocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25MaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICAgIHJlc3AuZGF0YVNldC5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbVtzZWxlY3RPcHRpb25zWydOYW1lJ11dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bc2VsZWN0T3B0aW9uc1snVmFsdWUnXV1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbXBvbmVudCA9IHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJncywgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgIC8vY29uc3QgeHh4ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgICAgICAgICAgICAgIC8vLy94eHguYXBwZW5kQ2hpbGQoaW5wdXRFbGVtZW50KTtcclxuICAgICAgICAgICAgICAgICAgLy94eHguc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvLyNyZWdpb24gdXNlZCBmb3IgdXBkYXRlU2VsZWN0aW9uT3B0aW9uXHJcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGV4aXN0aW5nSW5kZXggPSB0aGlzLnNlbGVjdGlvbkNvbXBvbmVudExpc3QuZmluZEluZGV4KFxyXG4gICAgICAgICAgICAgICAgICAgIChpdGVtKSA9PiBpdGVtLmNvbXBvbmVudElkID09PSBhcmdzLmVsZW1lbnRzLmlkXHJcbiAgICAgICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgICAgICBpZiAoZXhpc3RpbmdJbmRleCAhPT0gLTEpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBPYmplY3Qgd2l0aCB0aGUgc2FtZSBjb21wb25lbnRJZCBleGlzdHMsIHJlcGxhY2UgcmVzb3VyY2VVcmxcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbXBvbmVudExpc3RbZXhpc3RpbmdJbmRleF0ucmVzb3VyY2VVcmwgPSBzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkw7XHJcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT2JqZWN0IHdpdGggY29tcG9uZW50SWQgZG9lc24ndCBleGlzdCwgcHVzaCBhIG5ldyBvYmplY3RcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGlvbkNvbXBvbmVudExpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICByZXNvdXJjZVVybDogc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMLFxyXG4gICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50SWQ6IGFyZ3MuZWxlbWVudHMuaWRcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAvLyNlbmRyZWdpb25cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIHp1ZGYgQ29tbW9uIE1hc3RlciBkcm9wZG93blxyXG4gICAgICAgICAgZWxzZSBpZiAoZmllbGRFbGVtZW50RGF0YS56dWRmRGF0YVNvdXJjZVR5cGUgJiYgZmllbGRFbGVtZW50RGF0YS56dWRmRGF0YVNvdXJjZVR5cGUgPT09IFwicmVzb3VyY2VcIikge1xyXG5cclxuICAgICAgICAgICAgLy8gZXh0cmFjdCB6dWRmX2Ryb3Bkb3duIGZyb20gc2Vzc2lvbiBzdG9yYWdlXHJcbiAgICAgICAgICAgIGNvbnN0IHp1ZGZfZHJvcGRvd24gPSBzZXNzaW9uU3RvcmFnZS5nZXRJdGVtKFwienVkZl9kcm9wZG93blwiKSA/IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInp1ZGZfZHJvcGRvd25cIikpIDogbnVsbDtcclxuICAgICAgICAgICAgaWYgKHp1ZGZfZHJvcGRvd24pIHtcclxuICAgICAgICAgICAgICBjb25zdCBvcHRpb25MaXN0ID0gW107XHJcblxyXG4gICAgICAgICAgICAgIHp1ZGZfZHJvcGRvd24uZm9yRWFjaChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbmFtZSA9IHJlcy50ZXh0LnNwbGl0KFwiT3B0aW9uc1wiKVswXTtcclxuICAgICAgICAgICAgICAgIGlmIChmaWVsZEVsZW1lbnREYXRhLkxhYmVsID09PSBuYW1lKSB7XHJcbiAgICAgICAgICAgICAgICAgIHJlcy52YWx1ZS5mb3JFYWNoKHZhbCA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IHZhbFsnTmFtZSddLFxyXG4gICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHZhbFsnSWQnXVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbXBvbmVudCA9IHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJncywgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgICAgICAgc2VsZWN0aW9uQ29tcG9uZW50LmFwcGVuZFRvKCcjJyArIGFyZ3MuZWxlbWVudHMuaWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgLy8gVXNlciBMaXN0IGRyb3Bkb3duXHJcbiAgICAgICAgICBlbHNlIGlmIChmaWVsZEVsZW1lbnREYXRhLnp1ZGZEYXRhU291cmNlVHlwZSAmJiBmaWVsZEVsZW1lbnREYXRhLnp1ZGZEYXRhU291cmNlVHlwZSA9PT0gXCJ1c2VyXCIpIHtcclxuICAgICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyTGlzdCA9IEpTT04ucGFyc2Uoc2Vzc2lvblN0b3JhZ2U/LmdldEl0ZW0oXCJ1c2VyTGlzdFwiKSA/PyAnbnVsbCcpO1xyXG5cclxuICAgICAgICAgICAgLy9jb25zdCBhcnJheVRlc3QgPSB1c2VyTGlzdC5tYXAoKHsgU2VsZWN0aW9uTmFtZSwgSWQgfSkgPT4gKHsgdGV4dDogU2VsZWN0aW9uTmFtZSwgdmFsdWU6IElkIH0pKTtcclxuICAgICAgICAgICAgdXNlckxpc3QuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1bJ1NlbGVjdGlvbk5hbWUnXSxcclxuICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtWydJZCddXHJcbiAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Db21wb25lbnQgPSB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3MsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgICAgICBzZWxlY3Rpb25Db21wb25lbnQuYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9Ly9lbmQgd3JpdGVcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyB1cGRhdGVTZWxlY3Rpb25PcHRpb24ocmVzb3VyY2VVcmw6IHN0cmluZywgZGF0YTogYW55KSB7XHJcbiAgICB0aGlzLnNlbGVjdGlvbkNvbXBvbmVudExpc3QuZm9yRWFjaChzZWxlY3Rpb25Db21wb25lbnQgPT4ge1xyXG4gICAgICBsZXQgbXVsdGlTZWxlY3Q6IE11bHRpU2VsZWN0ID0gKGdldENvbXBvbmVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzZWxlY3Rpb25Db21wb25lbnQuY29tcG9uZW50SWQpLCAnbXVsdGlzZWxlY3QnKSBhcyBNdWx0aVNlbGVjdCk7XHJcbiAgICAgIGlmIChtdWx0aVNlbGVjdCkge1xyXG4gICAgICAgIG11bHRpU2VsZWN0LnZhbHVlID0gZGF0YTtcclxuICAgICAgfVxyXG4gICAgICBsZXQgZHJvcGRvd246IERyb3BEb3duTGlzdCA9IChnZXRDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZWN0aW9uQ29tcG9uZW50LmNvbXBvbmVudElkKSwgJ2Ryb3Bkb3dubGlzdCcpIGFzIERyb3BEb3duTGlzdCk7XHJcbiAgICAgIGlmIChkcm9wZG93bikge1xyXG4gICAgICAgIHRoaXMuZmllbGRTZXJ2aWNlLmRhdGFGb3JtRmllbGRzW3RoaXMuZGF0YS5WYWx1ZV0uZm9yRWFjaChhc3luYyAoZmllbGQ6IGFueSkgPT4ge1xyXG4gICAgICAgICAgaWYgKGZpZWxkLlNlbGVjdE9wdGlvbnMuUmVzb3VyY2VVUkwgPT09IHNlbGVjdGlvbkNvbXBvbmVudC5yZXNvdXJjZVVybCkge1xyXG4gICAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zID0gZmllbGRbJ1NlbGVjdE9wdGlvbnMnXTtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMID0gc2VsZWN0T3B0aW9uc1snUmVzb3VyY2VVUkwnXTtcclxuICAgICAgICAgICAgY29uc3QgcGFyYW0gPSBPYmplY3QuYXNzaWduKHt9LCBEZWZhdWx0UGFnZVNldHRpbmdQYXJhbXMpO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMuZGF0YVsnRmlsdGVycyddKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5maWx0ZXJzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgICAgICAgICAgdGhpcyxcclxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YVsnRmlsdGVycyddLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5ncm91cFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmZpbHRlcnMpIHtcclxuICAgICAgICAgICAgICBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ10gPSB0aGlzLmZpbHRlcnM7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIHBhcmFtLnBhZ2VTaXplID0gc2VsZWN0T3B0aW9uc1snUGFnZVNpemUnXTtcclxuICAgICAgICAgICAgcGFyYW0uY29sdW1ucyA9IHNlbGVjdE9wdGlvbnNbJ0NvbHVtbnMnXTtcclxuICAgICAgICAgICAgcGFyYW0uZmlsdGVycyArPSBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ107XHJcbiAgICAgICAgICAgIHBhcmFtLnNvcnRDb2x1bW5OYW1lID0gc2VsZWN0T3B0aW9uc1snU29ydENvbHVtbk5hbWUnXTtcclxuICAgICAgICAgICAgcGFyYW0uc29ydE9yZGVyID0gc2VsZWN0T3B0aW9uc1snU29ydE9yZGVyJ107XHJcblxyXG4gICAgICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFBhZ2VVcmwoc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMKSwgcGFyYW0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgbWFwKChyZXNwKSA9PiB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25MaXN0ID0gW107XHJcbiAgICAgICAgICAgICAgICByZXNwLmRhdGFTZXQuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIG9wdGlvbkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGV4dDogaXRlbVtzZWxlY3RPcHRpb25zWydOYW1lJ11dLFxyXG4gICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW3NlbGVjdE9wdGlvbnNbJ1ZhbHVlJ11dXHJcbiAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfSlcclxuXHJcbiAgICAgICAgICAgICAgICBkcm9wZG93bi5kYXRhU291cmNlID0gb3B0aW9uTGlzdDtcclxuICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICApLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICB9XHJcbiAgICB9KVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSByZW1vdmVBcnJheUl0ZW08VD4oYXJyOiBBcnJheTxUPiwgdmFsdWU6IFQpOiBBcnJheTxUPiB7XHJcbiAgICBjb25zdCBpbmRleCA9IGFyci5pbmRleE9mKHZhbHVlKTtcclxuICAgIGlmIChpbmRleCA+IC0xKSB7XHJcbiAgICAgIGFyci5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJnczogYW55LCBvcHRpb25MaXN0OiBhbnkpIHtcclxuICAgIGlmICh0aGlzLmluT3BlcmF0b3JzLmluZGV4T2YoYXJncy5vcGVyYXRvcikgPiAtMSkge1xyXG4gICAgICByZXR1cm4gbmV3IE11bHRpU2VsZWN0KHtcclxuICAgICAgICBkYXRhU291cmNlOiBvcHRpb25MaXN0LFxyXG4gICAgICAgIGZpZWxkczogeyB0ZXh0OiAndGV4dCcsIHZhbHVlOiAndmFsdWUnIH0sXHJcbiAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWVzIGFzIHN0cmluZ1tdLFxyXG4gICAgICAgIG1vZGU6ICdDaGVja0JveCcsXHJcbiAgICAgICAgY2hhbmdlOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLnFyeUJsZHJPYmoubm90aWZ5Q2hhbmdlKGUudmFsdWUsIGUuZWxlbWVudCk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICAvLyBzZXQgY29udGFpbnMgc2VhcmNoIGJ5IGRlZmF1bHRcclxuICAgICAgICBmaWx0ZXJpbmc6IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMub25GaWx0ZXJpbmcoZSwgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgfSAgXHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIHJldHVybiBuZXcgRHJvcERvd25MaXN0KHtcclxuICAgICAgICBhbGxvd0ZpbHRlcmluZzogdHJ1ZSwgLy8gc2VhcmNoIGJveCBhcHBlYXJcclxuICAgICAgICBkYXRhU291cmNlOiBvcHRpb25MaXN0LFxyXG4gICAgICAgIGZpZWxkczogeyB0ZXh0OiAndGV4dCcsIHZhbHVlOiAndmFsdWUnIH0sXHJcbiAgICAgICAgdmFsdWU6IGFyZ3MudmFsdWVzIGFzIHN0cmluZyxcclxuICAgICAgICBjaGFuZ2U6IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIGUudmFsdWUgIT09IG51bGwgPyB0aGlzLnFyeUJsZHJPYmoubm90aWZ5Q2hhbmdlKGUuaXRlbURhdGEudmFsdWUsIGUuZWxlbWVudCkgOiBpZ25vcmVFbGVtZW50cztcclxuICAgICAgICB9LFxyXG4gICAgICAgIC8vIHNldCBkZWZhdWx0IHNlYXJjaCBieSAnY29udGFpbnMnXHJcbiAgICAgICAgZmlsdGVyaW5nOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9uRmlsdGVyaW5nKGUsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICBvbkZpbHRlcmluZyhlOiBhbnksIG9wdGlvbkxpc3Q6IGFueSk6IGFueSB7XHJcbiAgICAvLyBsb2FkIG92ZXJhbGwgZGF0YSB3aGVuIHNlYXJjaCBrZXkgZW1wdHkuXHJcbiAgICBpZiAoZS50ZXh0ID09PSAnJykge1xyXG4gICAgICBlLnVwZGF0ZURhdGEodGhpcy5kYXRhKTtcclxuICAgIH1cclxuICAgIGVsc2Uge1xyXG4gICAgICAvLyBEZWZpbmUgYXJyYXkgZGF0YVxyXG4gICAgICBsZXQgc2VhcmNoRGF0YSA9IG9wdGlvbkxpc3Q7XHJcblxyXG4gICAgICAvL0JpbmQgdGhlIGZpbHRlciBldmVudFxyXG4gICAgICBsZXQgcXVlcnkgPSBuZXcgUXVlcnkoKTtcclxuXHJcbiAgICAgIC8vZnJhbWUgdGhlIHF1ZXJ5IGJhc2VkIG9uIHNlYXJjaCBzdHJpbmcgd2l0aCBmaWx0ZXIgdHlwZS5cclxuICAgICAgcXVlcnkgPSAoZS50ZXh0ICE9IFwiXCIpID8gcXVlcnkud2hlcmUoXCJ0ZXh0XCIsIFwiY29udGFpbnNcIiwgZS50ZXh0LCB0cnVlKSA6IHF1ZXJ5O1xyXG5cclxuICAgICAgLy9wYXNzIHRoZSBmaWx0ZXIgZGF0YSBzb3VyY2UsIGZpbHRlciBxdWVyeSB0byB1cGRhdGVEYXRhIG1ldGhvZC5cclxuICAgICAgZS51cGRhdGVEYXRhKHNlYXJjaERhdGEsIHF1ZXJ5KTtcclxuICAgIH1cclxuICB9O1xyXG5cclxuICBwdWJsaWMgc2V0UXVlcnlWYWx1ZShzYXZlZERhdGE6IGFueSkge1xyXG4gICAgLy9pZiAoIXRoaXMucXJ5Qmxkck9iaikge1xyXG4gICAgLy8gIGNvbnNvbGUud2FybigncXVlcnkgYnVpbGRlciBvYmplY3QgaXMgbnVsbC4nKTtcclxuICAgIC8vICByZXR1cm47XHJcbiAgICAvL31cclxuXHJcbiAgICBpZiAoc2F2ZWREYXRhKSB7XHJcbiAgICAgIHRoaXMucXJ5Qmxkck9iai5zZXRSdWxlcyhzYXZlZERhdGEpO1xyXG4gICAgICB0aGlzLnVwZGF0ZVJ1bGUoeyBydWxlOiBzYXZlZERhdGEgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgZ2V0UmVzdWx0KCkge1xyXG4gICAgcmV0dXJuIHRoaXMucXJ5Qmxkck9iai5nZXRSdWxlcygpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHVwZGF0ZVJ1bGUoYXJnczogUnVsZUNoYW5nZUV2ZW50QXJncyk6IHZvaWQge1xyXG4gICAgdGhpcy5kaXNwbGF5UnVsZSA9IEpTT04uc3RyaW5naWZ5KGFyZ3MucnVsZSwgbnVsbCwgMTIpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIG9uQ2hhbmdlKCk6IHZvaWQge1xyXG4gICAgdGhpcy51cGRhdGVSdWxlKHsgcnVsZTogdGhpcy5xcnlCbGRyT2JqLmdldFZhbGlkUnVsZXModGhpcy5xcnlCbGRyT2JqLnJ1bGUpIH0pO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGJlZm9yZUxvYWRGaWVsZChmaWVsZEVsZW1lbnREYXRhOiBhbnkpIHtcclxuICAgIGxldCBiZWZvcmVMb2FkRmllbGQgPSBmaWVsZEVsZW1lbnREYXRhWydCZWZvcmVMb2FkRmllbGQnXTtcclxuICAgIGlmIChiZWZvcmVMb2FkRmllbGQpIHtcclxuICAgICAgYmVmb3JlTG9hZEZpZWxkID0gYmVmb3JlTG9hZEZpZWxkLnJlcGxhY2UoJ21vZGFsR3JvdXAuJywgJ2dyb3VwLicpO1xyXG4gICAgICBjb25zdCBjYWxsRnVuYyA9IGV2YWwoJ3RoaXMuJyArIGJlZm9yZUxvYWRGaWVsZCk7XHJcblxyXG4gICAgICBpZiAodHlwZW9mIGNhbGxGdW5jID09PSBcImZ1bmN0aW9uXCIpIHtcclxuICAgICAgICBjb25zdCBuZXdGdW5jID0gY2FsbEZ1bmMuYmluZCh0aGlzKTtcclxuICAgICAgICByZXR1cm4gbmV3RnVuYyhldmVudCwgdGhpcywgZmllbGRFbGVtZW50RGF0YSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBvZihmaWVsZEVsZW1lbnREYXRhKTtcclxuICB9XHJcbn1cclxuXHJcbi8vZXhwb3J0IGVudW0gb3BlcmF0b3JzIHtcclxuLy8gIEluID0gJ2luJyxcclxuLy99XHJcblxyXG5cclxuLy9leHBvcnQgaW50ZXJmYWNlIFF1ZXJ5UnVsZSB7XHJcbi8vICBjb25kaXRpb246IHN0cmluZztcclxuLy8gIHJ1bGVzOiBRdWVyeVJ1bGVbXTtcclxuLy8gIGZpZWxkOiBzdHJpbmc7XHJcbi8vICB0eXBlOiBzdHJpbmc7XHJcbi8vICBvcGVyYXRvcjogc3RyaW5nO1xyXG4vLyAgdmFsdWU6IHN0cmluZ1tdO1xyXG4vL31cclxuXHJcbi8vZXhwb3J0IGZ1bmN0aW9uIHRvUXVlcnlSdWxlKHF1ZXJ5QnVpbGRlck1vZGVsOiBhbnkpOiBRdWVyeVJ1bGUge1xyXG4vLyAgbGV0IHJ1bGUgPSA8UXVlcnlSdWxlPnt9O1xyXG4vLyAgaWYgKHF1ZXJ5QnVpbGRlck1vZGVsLmNvbmRpdGlvbikge1xyXG4vLyAgICBydWxlLmNvbmRpdGlvbiA9IHF1ZXJ5QnVpbGRlck1vZGVsLmNvbmRpdGlvbjtcclxuLy8gICAgcnVsZS5ydWxlcyA9IHF1ZXJ5QnVpbGRlck1vZGVsLnJ1bGVzLm1hcChxID0+IHRvUXVlcnlSdWxlKHEpKTtcclxuLy8gIH1cclxuLy8gIGVsc2Uge1xyXG4vLyAgICBydWxlLmZpZWxkID0gcXVlcnlCdWlsZGVyTW9kZWwuZmllbGQ7XHJcbi8vICAgIHJ1bGUudHlwZSA9ICdzdHJpbmcnO1xyXG4vLyAgICBydWxlLm9wZXJhdG9yID0gJ2VxdWFsJztcclxuLy8gICAgcnVsZS52YWx1ZSA9IHF1ZXJ5QnVpbGRlck1vZGVsLnZhbHVlIGluc3RhbmNlb2YgQXJyYXlcclxuLy8gICAgICA/IHF1ZXJ5QnVpbGRlck1vZGVsLnR5cGUgPT09ICdkYXRlJyA/IG5ldyBEYXRlKHF1ZXJ5QnVpbGRlck1vZGVsLnZhbHVlKSA6IHF1ZXJ5QnVpbGRlck1vZGVsLnZhbHVlXHJcbi8vICAgICAgOiBbcXVlcnlCdWlsZGVyTW9kZWwudHlwZSA9PT0gJ2RhdGUnID8gbmV3IERhdGUocXVlcnlCdWlsZGVyTW9kZWwudmFsdWUpIDogcXVlcnlCdWlsZGVyTW9kZWwudmFsdWVdO1xyXG4vLyAgfVxyXG4vLyAgcmV0dXJuIHJ1bGU7XHJcbi8vfVxyXG4iLCI8aW9uLWl0ZW0gKm5nSWY9XCIoISFjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkID8gZ3JvdXBbY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZF0gOiBjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZSlcIj5cclxuICA8ZGl2IGNsYXNzPVwicWJjb250YWluZXJcIj5cclxuICAgIDxlanMtcXVlcnlidWlsZGVyICpuZ0lmPVwiaXNzZkxvYWRlZFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAjcXVlcnlidWlsZGVyXHJcbiAgICAgICAgICAgICAgICAgICAgICB3aWR0aD1cIjEwMCVcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2RhdGFTb3VyY2VdPVwic2ZEYXRhXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtjb2x1bW5zXT1cInNkRmlsdGVyXCJcclxuICAgICAgICAgICAgICAgICAgICAgIFtydWxlXT1cImltcG9ydFJ1bGVzXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChydWxlQ2hhbmdlKT1cInVwZGF0ZVJ1bGUoJGV2ZW50KVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAoY3JlYXRlZCk9XCJvbkNoYW5nZSgpXCI+XHJcbiAgICA8L2Vqcy1xdWVyeWJ1aWxkZXI+XHJcblxyXG4gICAgPGRpdiAqbmdJZj1cIiFkYXRhLkhpZGVTaG93UmVzdWx0UGFuZWxcIj5cclxuICAgICAgPGJyPlxyXG4gICAgICA8aW9uLWxhYmVsPlJlc3VsdDwvaW9uLWxhYmVsPlxyXG4gICAgICA8dGV4dGFyZWEgY2xhc3M9XCJvdXRwdXRcIlxyXG4gICAgICAgICAgICAgICAgcmVzaXphYmxlPVwibm9uZVwiXHJcbiAgICAgICAgICAgICAgICBbcm93c109XCIxMFwiXHJcbiAgICAgICAgICAgICAgICBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNkM2QzZDM7IHdpZHRoOiAxMDAlO1wiPnt7ZGlzcGxheVJ1bGV9fTwvdGV4dGFyZWE+XHJcbiAgICA8L2Rpdj5cclxuICA8L2Rpdj5cclxuPC9pb24taXRlbT5cclxuIl19
516
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvc2ZxdWVyeWJ1aWxkZXIvc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsK0JBQStCO0FBQy9CLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFVLFNBQVMsRUFBb0IsTUFBTSxlQUFlLENBQUM7QUFHdEYsNkJBQTZCO0FBRTdCLDhCQUE4QjtBQUM5QixPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzFCLE9BQU8sRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFHNUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUN0RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGFBQWEsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ25FLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUVuRCwyQ0FBMkM7QUFDM0MsT0FBTyxFQUNTLGdCQUFnQixFQUFFLG9CQUFvQixFQUNoQyx3QkFBd0IsRUFDN0MsTUFBTSxpQkFBaUIsQ0FBQztBQUV6QixPQUFPLEVBQWUsS0FBSyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7Ozs7OztBQVExRCxNQUFNLE9BQU8sdUJBQXVCO0lBa0dsQyxZQUNVLFlBQTBCLEVBQzFCLGtCQUFzQyxFQUN0QyxhQUE0QjtRQUY1QixpQkFBWSxHQUFaLFlBQVksQ0FBYztR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O3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiLyoqKioqKioqKiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIElucHV0LCBPbkluaXQsIFZpZXdDaGlsZCwgVmlld0NvbnRhaW5lclJlZiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwLCBWYWxpZGF0b3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqKioqKioqKiogSW9uaWMgKioqKioqKioqKi9cclxuXHJcbi8qKioqKioqKioqIFBsdWdpbiAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBvZiB9IGZyb20gJ3J4anMnO1xyXG5pbXBvcnQgeyBkZWxheSwgaWdub3JlRWxlbWVudHMsIG1hcCwgc3dpdGNoTWFwLCB0YXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XHJcbi8vaW1wb3J0IHsgUXVlcnlCdWlsZGVyQ29uZmlnLCBRdWVyeUJ1aWxkZXJDbGFzc05hbWVzIH0gZnJvbSAnYW5ndWxhcjItcXVlcnktYnVpbGRlcic7XHJcbmltcG9ydCB7IFJ1bGVNb2RlbCwgUXVlcnlCdWlsZGVyQ29tcG9uZW50LCBDb2x1bW5zTW9kZWwsIFRlbXBsYXRlQ29sdW1uLCBSdWxlQ2hhbmdlRXZlbnRBcmdzIH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWFuZ3VsYXItcXVlcnlidWlsZGVyJztcclxuaW1wb3J0IHsgRHJvcERvd25MaXN0LCBNdWx0aVNlbGVjdCB9IGZyb20gJ0BzeW5jZnVzaW9uL2VqMi1kcm9wZG93bnMnO1xyXG5pbXBvcnQgeyBnZXRDb21wb25lbnQsIGNyZWF0ZUVsZW1lbnQgfSBmcm9tICdAc3luY2Z1c2lvbi9lajItYmFzZSc7XHJcbmltcG9ydCB7IENoZWNrQm94IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWJ1dHRvbnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQge1xyXG4gIEZpZWxkU2VydmljZSwgWkNvbXBvbmVudEhlbHBlciwgWkNvbXBvbmVudFByb3BlcnRpZXMsIFpGaWVsZCwgWkdyb3VwLFxyXG4gIEZvbnRBd2VTb21lU2VydmljZSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zLCBXZWJBcGlTZXJ2aWNlLCBSZXNvdXJjZUFwaVNlcnZpY2VcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuaW1wb3J0IHsgRGF0YU1hbmFnZXIsIFF1ZXJ5IH0gZnJvbSAnQHN5bmNmdXNpb24vZWoyLWRhdGEnO1xyXG5kZWNsYXJlIHZhciAkOiBhbnlcclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXNmcXVlcnlidWlsZGVyJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vc2ZxdWVyeWJ1aWxkZXIuY29tcG9uZW50Lmh0bWwnLFxyXG4gIHN0eWxlVXJsczogWycuL3NmcXVlcnlidWlsZGVyLmNvbXBvbmVudC5zY3NzJ10sXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBTZnF1ZXJ5YnVpbGRlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCB7XHJcbiAgQFZpZXdDaGlsZCgncXVlcnlidWlsZGVyJykgcXJ5Qmxkck9iajogUXVlcnlCdWlsZGVyQ29tcG9uZW50O1xyXG4gIC8vQElucHV0KCkgY2xhc3NOYW1lczogUXVlcnlCdWlsZGVyQ2xhc3NOYW1lcztcclxuICBASW5wdXQoKSBkYXRhOiBaRmllbGQ7XHJcbiAgQElucHV0KCkgZ3JvdXA6IFpHcm91cDtcclxuICBASW5wdXQoKSBmb3JtOiBGb3JtR3JvdXA7XHJcblxyXG4gIHFiSXRlbXMgPSB7fTtcclxuXHJcbiAgcHVibGljIGNvbXBvbmVudFByb3BlcnRpZXMgPSBuZXcgWkNvbXBvbmVudFByb3BlcnRpZXMoKTtcclxuICBwdWJsaWMgaXNzZkxvYWRlZDogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBxdWVyeUN0cmw6IGFueTtcclxuICAvL3B1YmxpYyBjdXJyZW50Q29uZmlnOiBRdWVyeUJ1aWxkZXJDb25maWcgPSB7XHJcbiAgLy8gIGZpZWxkczoge30sXHJcbiAgLy8gIGFsbG93RW1wdHlSdWxlc2V0czogdHJ1ZVxyXG4gIC8vfTtcclxuICBwdWJsaWMgYWxsb3dSdWxlc2V0OiBib29sZWFuID0gdHJ1ZTtcclxuICBwdWJsaWMgYWxsb3dDb2xsYXBzZTogYm9vbGVhbiA9IGZhbHNlO1xyXG4gIHB1YmxpYyBwZXJzaXN0VmFsdWVPbkZpZWxkQ2hhbmdlOiBib29sZWFuID0gZmFsc2U7XHJcbiAgcHVibGljIGlzRGlzYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuICBwdWJsaWMgcnVsZTogYW55O1xyXG4gIHB1YmxpYyBmaWx0ZXJzOiBhbnk7XHJcbiAgcHJpdmF0ZSBmaWVsZHM6IGFueTtcclxuICBwdWJsaWMgZGlzcGxheVJ1bGU6IGFueSA9ICcnO1xyXG5cclxuICBwcml2YXRlIGxvYWRlZERyb3Bkb3duT3B0aW9ucyA9IFtdO1xyXG5cclxuICAvL3NmXHJcbiAgcHVibGljIHNmRGF0YTogT2JqZWN0W107XHJcbiAgcHVibGljIGltcG9ydFJ1bGVzOiBSdWxlTW9kZWw7XHJcbiAgcHVibGljIHNkRmlsdGVyOiBDb2x1bW5zTW9kZWxbXSA9IFtdO1xyXG4gIHB1YmxpYyBzZlFCVGVtcGxhdGU6IFRlbXBsYXRlQ29sdW1uO1xyXG5cclxuICBwcml2YXRlIHJlYWRvbmx5IGVxdWFsT3BlcmF0b3IgPSB7IHZhbHVlOiAnZXF1YWwnLCBrZXk6ICdFcXVhbHMnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBub3RlcXVhbE9wZXJhdG9yID0geyB2YWx1ZTogJ25vdGVxdWFsJywga2V5OiAnTm90IEVxdWFscycgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IHN0YXJ0c3dpdGhPcGVyYXRvciA9IHsgdmFsdWU6ICdzdGFydHN3aXRoJywga2V5OiAnU3RhcnQgV2l0aCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGVuZHN3aXRoT3BlcmF0b3IgPSB7IHZhbHVlOiAnZW5kc3dpdGgnLCBrZXk6ICdFbmQgV2l0aCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGNvbnRhaW5zT3BlcmF0b3IgPSB7IHZhbHVlOiAnY29udGFpbnMnLCBrZXk6ICdDb250YWlucycgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGlzZW1wdHlPcGVyYXRvciA9IHsgdmFsdWU6ICdpc2VtcHR5Jywga2V5OiAnSXMgRW1wdHknIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc25vdGVtcHR5T3BlcmF0b3IgPSB7IHZhbHVlOiAnaXNub3RlbXB0eScsIGtleTogJ0lzIE5vdCBFbXB0eScgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGlzbnVsbE9wZXJhdG9yID0geyB2YWx1ZTogJ2lzbnVsbCcsIGtleTogJ0lzIE51bGwnIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBpc25vdG51bGxPcGVyYXRvciA9IHsgdmFsdWU6ICdpc25vdG51bGwnLCBrZXk6ICdJcyBOb3QgTnVsbCcgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGluT3BlcmF0b3IgPSB7IHZhbHVlOiAnaW4nLCBrZXk6ICdJbicgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IG5vdGluT3BlcmF0b3IgPSB7IHZhbHVlOiAnbm90aW4nLCBrZXk6ICdOb3QgSW4nIH1cclxuICBwcml2YXRlIHJlYWRvbmx5IGdyZWF0ZXJ0aGFuT3BlcmF0b3IgPSB7IHZhbHVlOiAnZ3JlYXRlcnRoYW4nLCBrZXk6ICdHcmVhdGVyIFRoYW4nIH07XHJcbiAgcHJpdmF0ZSByZWFkb25seSBncmVhdGVydGhhbm9yZXF1YWxPcGVyYXRvciA9IHsgdmFsdWU6ICdncmVhdGVydGhhbm9yZXF1YWwnLCBrZXk6ICdHcmVhdGVyIFRoYW4gT3IgRXF1YWxzJyB9O1xyXG4gIHByaXZhdGUgcmVhZG9ubHkgbGVzc3RoYW5PcGVyYXRvciA9IHsgdmFsdWU6ICdsZXNzdGhhbicsIGtleTogJ0xlc3MgVGhhbicgfTtcclxuICBwcml2YXRlIHJlYWRvbmx5IGxlc3N0aGFub3JlcXVhbE9wZXJhdG9yID0geyB2YWx1ZTogJ2xlc3N0aGFub3JlcXVhbCcsIGtleTogJ0xlc3MgVGhhbiBPciBFcXVhbHMnIH07XHJcblxyXG4gIHB1YmxpYyBpbk9wZXJhdG9yczogc3RyaW5nW10gPSBbJ2luJywgJ25vdGluJ107XHJcbiAgcHVibGljIGRyb3Bkb3duT3BlcmF0b3JzOiBhbnkgPSBbXHJcbiAgICB0aGlzLmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmluT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGluT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgcHVibGljIHN0cmluZ09wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5zdGFydHN3aXRoT3BlcmF0b3IsXHJcbiAgICB0aGlzLmVuZHN3aXRoT3BlcmF0b3IsXHJcbiAgICB0aGlzLmNvbnRhaW5zT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzZW1wdHlPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RlbXB0eU9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc251bGxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNub3RudWxsT3BlcmF0b3JcclxuICBdO1xyXG4gIHB1YmxpYyBpbnRlZ2VyT3BlcmF0b3JzOiBhbnkgPSBbXHJcbiAgICB0aGlzLmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLm5vdGVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmdyZWF0ZXJ0aGFuT3BlcmF0b3IsXHJcbiAgICB0aGlzLmdyZWF0ZXJ0aGFub3JlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5sZXNzdGhhbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5sZXNzdGhhbm9yZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNudWxsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90bnVsbE9wZXJhdG9yXHJcbiAgXTtcclxuICBwdWJsaWMgZGF0ZU9wZXJhdG9yczogYW55ID0gW1xyXG4gICAgdGhpcy5lcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ub3RlcXVhbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbk9wZXJhdG9yLFxyXG4gICAgdGhpcy5ncmVhdGVydGhhbm9yZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5PcGVyYXRvcixcclxuICAgIHRoaXMubGVzc3RoYW5vcmVxdWFsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbnVsbE9wZXJhdG9yLFxyXG4gICAgdGhpcy5pc25vdG51bGxPcGVyYXRvclxyXG4gIF07XHJcbiAgcHVibGljIGJvb2xlYW5PcGVyYXRvcnM6IGFueSA9IFtcclxuICAgIHRoaXMuZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMubm90ZXF1YWxPcGVyYXRvcixcclxuICAgIHRoaXMuaXNudWxsT3BlcmF0b3IsXHJcbiAgICB0aGlzLmlzbm90bnVsbE9wZXJhdG9yXHJcbiAgXTtcclxuXHJcbiAgcHVibGljIHNlbGVjdGlvbkNvbXBvbmVudExpc3QgPSBbXTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwcml2YXRlIGZpZWxkU2VydmljZTogRmllbGRTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgd2ViQXBpU2VydmljZTogV2ViQXBpU2VydmljZVxyXG4gICkge1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnNldENvbXBvbmVudFByb3BlcnRpZXModGhpcyk7XHJcbiAgICBaQ29tcG9uZW50SGVscGVyLnJlZ2lzdGVyQ29tcG9uZW50KHRoaXMpO1xyXG5cclxuICAgIG9mKHRydWUpLnBpcGUoXHJcbiAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5iZWZvcmVMb2FkRmllbGQodGhpcy5kYXRhKTtcclxuICAgICAgfSksXHJcbiAgICAgIHRhcChkYXRhID0+IHtcclxuICAgICAgICB0aGlzLmRhdGEgPSBkYXRhIGFzIFpGaWVsZDtcclxuICAgICAgfSksXHJcbiAgICAgIHN3aXRjaE1hcChfID0+IHtcclxuICAgICAgICByZXR1cm4gdGhpcy5sb2FkUXVlcnlCdWlsZGVyKCk7XHJcbiAgICAgIH0pXHJcbiAgICApLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgIC8vIFdoZXJlIHRvIHVwZGF0ZSBvcGVyYXRvciBzeW50YXhcclxuICAgICAgLy8gMS4gRTEgLSBxdWVyeUJ1aWxkZXJUZW1wbGF0ZTJcclxuICAgICAgLy8gMi4gc2hhcmVkIGZvbGRlciA+IGhlbHBlciA+IHF1ZXJ5YnVpbGRlci1maWVsZGluZm8taGVscGVyLnRzXHJcbiAgICAgIC8vIDMuIHBhdGNoIGRiIGRhdGEgd2l0aCBzbWFsbCBjYXBpdGFsIGxldHRlclxyXG5cclxuICAgICAgLy90aGlzLmlzc2ZMb2FkZWQgPSB0cnVlOyAgXHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgbG9hZFF1ZXJ5QnVpbGRlcigpIHtcclxuICAgIGlmICh0aGlzLmRhdGFbJ0FsbG93Q29sbGFwc2UnXSA9PT0gdHJ1ZSkge1xyXG4gICAgICB0aGlzLmFsbG93Q29sbGFwc2UgPSB0aGlzLmRhdGFbJ0FsbG93Q29sbGFwc2UnXTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAodGhpcy5kYXRhWydBbGxvd1J1bGVzZXQnXSA9PT0gZmFsc2UpIHtcclxuICAgICAgdGhpcy5hbGxvd1J1bGVzZXQgPSB0aGlzLmRhdGFbJ0FsbG93UnVsZXNldCddO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLmRhdGFbJ0ZpbHRlcnMnXSkge1xyXG4gICAgICB0aGlzLmZpbHRlcnMgPSBaQ29tcG9uZW50SGVscGVyLmdldEdyb3VwRXZhbFZhbHVlLmNhbGwoXHJcbiAgICAgICAgdGhpcyxcclxuICAgICAgICB0aGlzLmRhdGFbJ0ZpbHRlcnMnXSxcclxuICAgICAgICB0aGlzLmdyb3VwXHJcbiAgICAgICk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5maWVsZHMgPSB0aGlzLmZpZWxkU2VydmljZS5nZXRGb3JtRmllbGRDb2RlKHRoaXMuZGF0YS5WYWx1ZSwgXCJGb3JtRmllbGRcIiwgbnVsbCwgbnVsbCk7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgbGV0IGlzR3JvdXBlZCA9IHRydWU7XHJcbiAgICAgIHJldHVybiB0aGlzLmZpZWxkcy5waXBlKFxyXG4gICAgICAgIHRhcCgoZGF0YTogW10pID0+IHtcclxuXHJcbiAgICAgICAgICAvLyBpZiBbaXNHcm91cGVkID0gdHJ1ZV0gaW5jbHVkZSBncm91cGluZyBuYW1lIGFzIHByZWZpeFxyXG4gICAgICAgICAgaWYgKGRhdGEubGVuZ3RoID4gMSkge1xyXG4gICAgICAgICAgICBpc0dyb3VwZWQgPSBmYWxzZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBkYXRhLmZvckVhY2goYXN5bmMgKGZpZWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5yZW5kZXJDb21wb25lbnRUeXBlKGZpZWxkLCBpc0dyb3VwZWQpO1xyXG4gICAgICAgICAgfSk7Ly9lbmQgZm9yZWFjaFxyXG5cclxuICAgICAgICAgIHRoaXMuaXNzZkxvYWRlZCA9IHRydWU7XHJcbiAgICAgICAgfSlcclxuICAgICAgKVxyXG5cclxuICAgICAgcmV0dXJuIG9mKHRydWUpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcImVycm9yOiBcIiwgZXJyb3IpO1xyXG4gICAgICByZXR1cm4gb2YoZmFsc2UpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhc3luYyByZW5kZXJDb21wb25lbnRUeXBlKGZpZWxkOiBhbnksIGlzR3JvdXBlZDogYm9vbGVhbiwgZmllbGRUaXRsZT86IHN0cmluZykge1xyXG4gICAgbGV0IGNvbXBvbmVudExhYmVsID0gZmllbGQuU3ViVHlwZSA/IGZpZWxkLkxhYmVsIDogZmllbGQuTGFiZWwgPz8gZmllbGQuTmFtZTtcclxuICAgIGNvbXBvbmVudExhYmVsID0gIWlzR3JvdXBlZCAmJiAhWkNvbXBvbmVudEhlbHBlci5pc051bGxVbmRlZmluZWRFbXB0eShmaWVsZFRpdGxlKSA/IFwiW1wiICsgZmllbGRUaXRsZSArIFwiXSBcIiArIGZpZWxkLkxhYmVsIDogIVpDb21wb25lbnRIZWxwZXIuaXNOdWxsVW5kZWZpbmVkRW1wdHkoZmllbGQuTGFiZWwpID8gZmllbGQuTGFiZWwgOiBmaWVsZC5OYW1lO1xyXG5cclxuICAgIGxldCBjb21wb25lbnRGaWVsZCA9ICFaQ29tcG9uZW50SGVscGVyLmlzTnVsbFVuZGVmaW5lZEVtcHR5KGZpZWxkVGl0bGUpID8gZmllbGRUaXRsZSArIFwiX1wiICsgZmllbGQuVmFsdWUgOiBmaWVsZC5WYWx1ZTtcclxuXHJcbiAgICBpZiAoZmllbGQuVHlwZSA9PT0gJ2NhdGVnb3J5JyB8fCBmaWVsZC5UeXBlID09PSAnbXVsdGlzZWxlY3QnIHx8IGZpZWxkLlR5cGUgPT09ICd6dWlzZWxlY3RtdWx0aXBsZScpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5kcm9wZG93bk9wZXJhdG9ycyxcclxuICAgICAgICB0ZW1wbGF0ZTogYXdhaXQgdGhpcy5nZW5lcmF0ZUNvbHVtblNlbGVjdGlvbihmaWVsZCksXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5UeXBlID09PSAnZGF0ZScpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5kYXRlT3BlcmF0b3JzLFxyXG4gICAgICAgIHR5cGU6ICdkYXRlJ1xyXG4gICAgICB9KVxyXG4gICAgfVxyXG4gICAgZWxzZSBpZiAoZmllbGQuVHlwZSA9PT0gJ251bWJlcicpIHtcclxuICAgICAgdGhpcy5zZEZpbHRlci5wdXNoKHtcclxuICAgICAgICBmaWVsZDogY29tcG9uZW50RmllbGQsXHJcbiAgICAgICAgbGFiZWw6IGNvbXBvbmVudExhYmVsLFxyXG4gICAgICAgIG9wZXJhdG9yczogdGhpcy5pbnRlZ2VyT3BlcmF0b3JzLFxyXG4gICAgICAgIHR5cGU6ICdudW1iZXInXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5WYWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XHJcbiAgICAgIHRoaXMuc2RGaWx0ZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGNvbXBvbmVudEZpZWxkLFxyXG4gICAgICAgIGxhYmVsOiBjb21wb25lbnRMYWJlbCxcclxuICAgICAgICB0eXBlOiAnYm9vbGVhbicsXHJcbiAgICAgICAgb3BlcmF0b3JzOiB0aGlzLmJvb2xlYW5PcGVyYXRvcnMsXHJcbiAgICAgICAgdGVtcGxhdGU6IGF3YWl0IHRoaXMuZ2VuZXJhdGVDb2x1bW5DaGVja2JveChmaWVsZC5OYW1lLCBmYWxzZSlcclxuICAgICAgfSlcclxuICAgIH1cclxuICAgIGVsc2UgaWYgKGZpZWxkLlR5cGUgPT09ICdrY2FyZCcpIHtcclxuICAgICAgaWYgKGZpZWxkLlZhbHVlLmxlbmd0aCA+IDApIHtcclxuICAgICAgICBmaWVsZC5WYWx1ZS5mb3JFYWNoKGFzeW5jIChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMucmVuZGVyQ29tcG9uZW50VHlwZShpdGVtLCBpc0dyb3VwZWQsIGZpZWxkLlRpdGxlKTtcclxuICAgICAgICB9KVxyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBlbHNlIGlmIChmaWVsZC5UeXBlICE9ICd6bGFiZWwnKSB7XHJcbiAgICAgIHRoaXMuc2RGaWx0ZXIucHVzaCh7XHJcbiAgICAgICAgZmllbGQ6IGNvbXBvbmVudEZpZWxkLFxyXG4gICAgICAgIGxhYmVsOiBjb21wb25lbnRMYWJlbCxcclxuICAgICAgICBvcGVyYXRvcnM6IHRoaXMuc3RyaW5nT3BlcmF0b3JzLFxyXG4gICAgICAgIHR5cGU6ICdzdHJpbmcnXHJcbiAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5zZEZpbHRlci5zb3J0KChhLCBiKSA9PiBhLmxhYmVsLnRvTG93ZXJDYXNlKCkgPCBiLmxhYmVsLnRvTG93ZXJDYXNlKCkgPyAtMSA6IDEpO1xyXG4gIH1cclxuXHJcbiAgLy8jcmVnaW9uIGNoZWNrYm94XHJcbiAgcHJpdmF0ZSBnZW5lcmF0ZUNvbHVtbkNoZWNrYm94KGxhYmVsOiBzdHJpbmcsIHZhbHVlOiBib29sZWFuKTogVGVtcGxhdGVDb2x1bW4ge1xyXG4gICAgcmV0dXJuIHtcclxuICAgICAgY3JlYXRlOiAoKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgeyBhdHRyczogeyAndHlwZSc6ICdjaGVja2JveCcgfSB9KTtcclxuICAgICAgfSxcclxuICAgICAgZGVzdHJveTogKGFyZ3M6IHsgZWxlbWVudElkOiBzdHJpbmcgfSkgPT4ge1xyXG4gICAgICAgIChnZXRDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYXJncy5lbGVtZW50SWQpLCAnY2hlY2tib3gnKSBhcyBDaGVja0JveCkuZGVzdHJveSgpO1xyXG4gICAgICB9LFxyXG4gICAgICB3cml0ZTogKGFyZ3M6IHsgZWxlbWVudHM6IEVsZW1lbnQsIHZhbHVlczogc3RyaW5nIH0pID0+IHtcclxuICAgICAgICBjb25zdCBib3hPYmo6IENoZWNrQm94ID0gbmV3IENoZWNrQm94KHtcclxuICAgICAgICAgIGxhYmVsOiBsYWJlbCxcclxuICAgICAgICAgIGNoZWNrZWQ6IHZhbHVlLFxyXG4gICAgICAgICAgY2hhbmdlOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMucXJ5Qmxkck9iai5ub3RpZnlDaGFuZ2UodmFsdWUsIGUuZXZlbnQudGFyZ2V0KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBib3hPYmouYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgfVxyXG4gIC8vI2VuZHJlZ2lvblxyXG5cclxuICAvLyNyZWdpb24gZHJvcGRvd24vbXVsdGlzZWxlY3RcclxuICBwcml2YXRlIGdlbmVyYXRlQ29sdW1uU2VsZWN0aW9uKGZpZWxkRWxlbWVudERhdGE6IGFueSk6IFRlbXBsYXRlQ29sdW1uIHtcclxuICAgIHJldHVybiB7XHJcblxyXG4gICAgICAvLyBDcmVhdGVzIHRoZSBjdXN0b20gY29tcG9uZW50XHJcbiAgICAgIGNyZWF0ZTogKCkgPT4ge1xyXG4gICAgICAgIC8vIEFkZGl0aW9uYWwgZmlsdGVyIHNldCBpbiB0aGUgcGFnZVxyXG4gICAgICAgIGlmICh0aGlzLmRhdGFbJ0ZpbHRlcnMnXSkge1xyXG4gICAgICAgICAgdGhpcy5maWx0ZXJzID0gWkNvbXBvbmVudEhlbHBlci5nZXRHcm91cEV2YWxWYWx1ZS5jYWxsKFxyXG4gICAgICAgICAgICB0aGlzLFxyXG4gICAgICAgICAgICB0aGlzLmRhdGFbJ0ZpbHRlcnMnXSxcclxuICAgICAgICAgICAgdGhpcy5ncm91cFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgeyBhdHRyczogeyAndHlwZSc6ICd0ZXh0JywgJ3N0eWxlJzogJ2Rpc3BsYXk6IG5vbmUnIH0gfSk7XHJcbiAgICAgICAgcmV0dXJuIGNyZWF0ZUVsZW1lbnQoJ2lucHV0JywgeyBhdHRyczogeyAndHlwZSc6ICd0ZXh0JyB9IH0pO1xyXG4gICAgICB9LFxyXG5cclxuICAgICAgLy8gRGVzdHJveSB0aGUgY3VzdG9tIGNvbXBvbmVudFxyXG4gICAgICBkZXN0cm95OiAoYXJnczogeyBlbGVtZW50SWQ6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgaWYgKGFyZ3NbJ2VsZW1lbnRzJ10pIHtcclxuICAgICAgICAgIGxldCBtdWx0aVNlbGVjdDogTXVsdGlTZWxlY3QgPSAoZ2V0Q29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyZ3MuZWxlbWVudElkKSwgJ211bHRpc2VsZWN0JykgYXMgTXVsdGlTZWxlY3QpO1xyXG4gICAgICAgICAgaWYgKG11bHRpU2VsZWN0KSB7XHJcbiAgICAgICAgICAgIG11bHRpU2VsZWN0LmRlc3Ryb3koKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGxldCBkcm9wZG93bjogRHJvcERvd25MaXN0ID0gKGdldENvbXBvbmVudChkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhcmdzLmVsZW1lbnRJZCksICdkcm9wZG93bmxpc3QnKSBhcyBEcm9wRG93bkxpc3QpO1xyXG4gICAgICAgICAgaWYgKGRyb3Bkb3duKSB7XHJcbiAgICAgICAgICAgIGRyb3Bkb3duLmRlc3Ryb3koKTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zID0gZmllbGRFbGVtZW50RGF0YVsnU2VsZWN0T3B0aW9ucyddO1xyXG4gICAgICAgICAgaWYgKHNlbGVjdE9wdGlvbnMpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMID0gc2VsZWN0T3B0aW9uc1snUmVzb3VyY2VVUkwnXTtcclxuICAgICAgICAgICAgY29uc3QgcHJlZml4UmVzb3VyY2VVUkxDaGVja2luZyA9IHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCArICdfJyArIGFyZ3MuZWxlbWVudElkO1xyXG5cclxuICAgICAgICAgICAgaWYgKHRoaXMubG9hZGVkRHJvcGRvd25PcHRpb25zLmluY2x1ZGVzKHByZWZpeFJlc291cmNlVVJMQ2hlY2tpbmcpKSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5sb2FkZWREcm9wZG93bk9wdGlvbnMgPSB0aGlzLnJlbW92ZUFycmF5SXRlbSh0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucywgcHJlZml4UmVzb3VyY2VVUkxDaGVja2luZyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH0sXHJcblxyXG4gICAgICAvLyBXaXJlIGV2ZW50cyBmb3IgdGhlIGN1c3RvbSBjb21wb25lbnQuXHJcbiAgICAgIHdyaXRlOiAoYXJnczogeyBlbGVtZW50czogRWxlbWVudCwgdmFsdWVzOiBzdHJpbmdbXSB8IHN0cmluZywgb3BlcmF0b3I6IHN0cmluZyB9KSA9PiB7XHJcbiAgICAgICAgLy9vcmlnaW5cclxuICAgICAgICBpZiAoZmllbGRFbGVtZW50RGF0YVsnVmFsdWVPcHRpb25zJ10pIHtcclxuICAgICAgICAgIC8vIGNvbnZlcnQgdG8gcHJvcGVydHkgbmFtZSB1c2VkIGluIHRoZSBjb21wb25lbnQgcmVuZGVyaW5nXHJcbiAgICAgICAgICBjb25zdCBvcHRpb25MaXN0OiB7IFtuYW1lOiBzdHJpbmddOiBPYmplY3QgfVtdID0gW107XHJcbiAgICAgICAgICBmaWVsZEVsZW1lbnREYXRhWydWYWx1ZU9wdGlvbnMnXS5mb3JFYWNoKChpdGVtOiBhbnkpID0+IHtcclxuICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICB0ZXh0OiBpdGVtWydOYW1lJ10sXHJcbiAgICAgICAgICAgICAgdmFsdWU6IGl0ZW1bJ1ZhbHVlJ11cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkNvbXBvbmVudCA9IHRoaXMuZ2VuZXJhdGVTZWxlY3Rpb25Db21wb25lbnQoYXJncywgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgICBzZWxlY3Rpb25Db21wb25lbnQuYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyBtYW51YWwgZHJvcGRvd24gb3IgenVkZiBtYW51YWwgZHJvcGRvd25cclxuICAgICAgICBlbHNlIGlmIChmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ10gJiYgQXJyYXkuaXNBcnJheShmaWVsZEVsZW1lbnREYXRhWydTZWxlY3RPcHRpb25zJ10pKSB7XHJcbiAgICAgICAgICAvLyBjb252ZXJ0IHRvIHByb3BlcnR5IG5hbWUgdXNlZCBpbiB0aGUgY29tcG9uZW50IHJlbmRlcmluZ1xyXG4gICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdDogeyBbbmFtZTogc3RyaW5nXTogT2JqZWN0IH1bXSA9IFtdO1xyXG4gICAgICAgICAgZmllbGRFbGVtZW50RGF0YVsnU2VsZWN0T3B0aW9ucyddLmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgIHRleHQ6IGl0ZW1bJ3RleHQnXSxcclxuICAgICAgICAgICAgICB2YWx1ZTogaXRlbVsndmFsdWUnXVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ29tcG9uZW50ID0gdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzLCBvcHRpb25MaXN0KTtcclxuICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHp1ZGYgUmVzb3VyY2VVUkwgLyBDb21tb24gTWFzdGVyIGRyb3Bkb3duXHJcbiAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICBjb25zdCBzZWxlY3RPcHRpb25zID0gZmllbGRFbGVtZW50RGF0YVsnU2VsZWN0T3B0aW9ucyddO1xyXG4gICAgICAgICAgY29uc3Qgc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMID0gc2VsZWN0T3B0aW9uc1snUmVzb3VyY2VVUkwnXTtcclxuXHJcbiAgICAgICAgICAvLyBSZXNvdXJjZVVSTCBkcm9wZG93blxyXG4gICAgICAgICAgaWYgKHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCkge1xyXG4gICAgICAgICAgICBjb25zdCBwcmVmaXhSZXNvdXJjZVVSTENoZWNraW5nID0gc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMICsgJ18nICsgYXJncy5lbGVtZW50cy5pZDtcclxuXHJcbiAgICAgICAgICAgIGlmICghdGhpcy5sb2FkZWREcm9wZG93bk9wdGlvbnMuaW5jbHVkZXMocHJlZml4UmVzb3VyY2VVUkxDaGVja2luZykpIHtcclxuICAgICAgICAgICAgICB0aGlzLmxvYWRlZERyb3Bkb3duT3B0aW9ucy5wdXNoKHByZWZpeFJlc291cmNlVVJMQ2hlY2tpbmcpO1xyXG5cclxuICAgICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ10gPSB0aGlzLmZpbHRlcnM7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCBwYXJhbSA9IE9iamVjdC5hc3NpZ24oe30sIERlZmF1bHRQYWdlU2V0dGluZ1BhcmFtcyk7XHJcbiAgICAgICAgICAgICAgcGFyYW0ucGFnZVNpemUgPSBzZWxlY3RPcHRpb25zWydQYWdlU2l6ZSddO1xyXG4gICAgICAgICAgICAgIHBhcmFtLmNvbHVtbnMgPSBzZWxlY3RPcHRpb25zWydDb2x1bW5zJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uZmlsdGVycyArPSBzZWxlY3RPcHRpb25zWydGaWx0ZXJzJ107XHJcbiAgICAgICAgICAgICAgcGFyYW0uc29ydENvbHVtbk5hbWUgPSBzZWxlY3RPcHRpb25zWydTb3J0Q29sdW1uTmFtZSddO1xyXG4gICAgICAgICAgICAgIHBhcmFtLnNvcnRPcmRlciA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRPcmRlciddO1xyXG5cclxuICAgICAgICAgICAgICAvLyBOZWVkIGRlbGF5IDQwMG1zIGlmIG5vdCAzcmQgc2VnbWVudCAodmFsdWUpIHdpbGwgbm90IGJlIHJlbmRlcmVkLlxyXG4gICAgICAgICAgICAgIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQodGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0UGFnZVVybChzZWxlY3RPcHRpb25zUmVzb3VyY2VVUkwpLCBwYXJhbSkucGlwZShcclxuICAgICAgICAgICAgICAgIGRlbGF5KDQwMCksXHJcbiAgICAgICAgICAgICAgICBtYXAoKHJlc3ApID0+IHtcclxuICAgICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICByZXNwLmRhdGFTZXQuZm9yRWFjaCgoaXRlbTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9uTGlzdC5wdXNoKHtcclxuICAgICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1bc2VsZWN0T3B0aW9uc1snTmFtZSddXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiBpdGVtW3NlbGVjdE9wdGlvbnNbJ1ZhbHVlJ11dXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Db21wb25lbnQgPSB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3MsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgICAgICAgICAgICBzZWxlY3Rpb25Db21wb25lbnQuYXBwZW5kVG8oJyMnICsgYXJncy5lbGVtZW50cy5pZCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAvL2NvbnN0IHh4eCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGFyZ3MuZWxlbWVudHMuaWQpO1xyXG4gICAgICAgICAgICAgICAgICAvLy8veHh4LmFwcGVuZENoaWxkKGlucHV0RWxlbWVudCk7XHJcbiAgICAgICAgICAgICAgICAgIC8veHh4LnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG5cclxuICAgICAgICAgICAgICAgICAgLy8jcmVnaW9uIHVzZWQgZm9yIHVwZGF0ZVNlbGVjdGlvbk9wdGlvblxyXG4gICAgICAgICAgICAgICAgICBjb25zdCBleGlzdGluZ0luZGV4ID0gdGhpcy5zZWxlY3Rpb25Db21wb25lbnRMaXN0LmZpbmRJbmRleChcclxuICAgICAgICAgICAgICAgICAgICAoaXRlbSkgPT4gaXRlbS5jb21wb25lbnRJZCA9PT0gYXJncy5lbGVtZW50cy5pZFxyXG4gICAgICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgaWYgKGV4aXN0aW5nSW5kZXggIT09IC0xKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gT2JqZWN0IHdpdGggdGhlIHNhbWUgY29tcG9uZW50SWQgZXhpc3RzLCByZXBsYWNlIHJlc291cmNlVXJsXHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db21wb25lbnRMaXN0W2V4aXN0aW5nSW5kZXhdLnJlc291cmNlVXJsID0gc2VsZWN0T3B0aW9uc1Jlc291cmNlVVJMO1xyXG4gICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIC8vIE9iamVjdCB3aXRoIGNvbXBvbmVudElkIGRvZXNuJ3QgZXhpc3QsIHB1c2ggYSBuZXcgb2JqZWN0XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3Rpb25Db21wb25lbnRMaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VVcmw6IHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCxcclxuICAgICAgICAgICAgICAgICAgICAgIGNvbXBvbmVudElkOiBhcmdzLmVsZW1lbnRzLmlkXHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgLy8jZW5kcmVnaW9uXHJcbiAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyB6dWRmIENvbW1vbiBNYXN0ZXIgZHJvcGRvd25cclxuICAgICAgICAgIGVsc2UgaWYgKGZpZWxkRWxlbWVudERhdGEuenVkZkRhdGFTb3VyY2VUeXBlICYmIGZpZWxkRWxlbWVudERhdGEuenVkZkRhdGFTb3VyY2VUeXBlID09PSBcInJlc291cmNlXCIpIHtcclxuXHJcbiAgICAgICAgICAgIC8vIGV4dHJhY3QgenVkZl9kcm9wZG93biBmcm9tIHNlc3Npb24gc3RvcmFnZVxyXG4gICAgICAgICAgICBjb25zdCB6dWRmX2Ryb3Bkb3duID0gc2Vzc2lvblN0b3JhZ2UuZ2V0SXRlbShcInp1ZGZfZHJvcGRvd25cIikgPyBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlLmdldEl0ZW0oXCJ6dWRmX2Ryb3Bkb3duXCIpKSA6IG51bGw7XHJcbiAgICAgICAgICAgIGlmICh6dWRmX2Ryb3Bkb3duKSB7XHJcbiAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICB6dWRmX2Ryb3Bkb3duLmZvckVhY2gocmVzID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5hbWUgPSByZXMudGV4dC5zcGxpdChcIk9wdGlvbnNcIilbMF07XHJcbiAgICAgICAgICAgICAgICBpZiAoZmllbGRFbGVtZW50RGF0YS5MYWJlbCA9PT0gbmFtZSkge1xyXG4gICAgICAgICAgICAgICAgICByZXMudmFsdWUuZm9yRWFjaCh2YWwgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0ZXh0OiB2YWxbJ05hbWUnXSxcclxuICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOiB2YWxbJ0lkJ11cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgICBjb25zdCBzZWxlY3Rpb25Db21wb25lbnQgPSB0aGlzLmdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3MsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgICAgICAgIHNlbGVjdGlvbkNvbXBvbmVudC5hcHBlbmRUbygnIycgKyBhcmdzLmVsZW1lbnRzLmlkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIFVzZXIgTGlzdCBkcm9wZG93blxyXG4gICAgICAgICAgZWxzZSBpZiAoZmllbGRFbGVtZW50RGF0YS56dWRmRGF0YVNvdXJjZVR5cGUgJiYgZmllbGRFbGVtZW50RGF0YS56dWRmRGF0YVNvdXJjZVR5cGUgPT09IFwidXNlclwiKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbkxpc3QgPSBbXTtcclxuICAgICAgICAgICAgY29uc3QgdXNlckxpc3QgPSBKU09OLnBhcnNlKHNlc3Npb25TdG9yYWdlPy5nZXRJdGVtKFwidXNlckxpc3RcIikgPz8gJ251bGwnKTtcclxuXHJcbiAgICAgICAgICAgIC8vY29uc3QgYXJyYXlUZXN0ID0gdXNlckxpc3QubWFwKCh7IFNlbGVjdGlvbk5hbWUsIElkIH0pID0+ICh7IHRleHQ6IFNlbGVjdGlvbk5hbWUsIHZhbHVlOiBJZCB9KSk7XHJcbiAgICAgICAgICAgIHVzZXJMaXN0LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgIG9wdGlvbkxpc3QucHVzaCh7XHJcbiAgICAgICAgICAgICAgICB0ZXh0OiBpdGVtWydTZWxlY3Rpb25OYW1lJ10sXHJcbiAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVsnSWQnXVxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KVxyXG5cclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0aW9uQ29tcG9uZW50ID0gdGhpcy5nZW5lcmF0ZVNlbGVjdGlvbkNvbXBvbmVudChhcmdzLCBvcHRpb25MaXN0KTtcclxuICAgICAgICAgICAgc2VsZWN0aW9uQ29tcG9uZW50LmFwcGVuZFRvKCcjJyArIGFyZ3MuZWxlbWVudHMuaWQpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfS8vZW5kIHdyaXRlXHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlU2VsZWN0aW9uT3B0aW9uKHJlc291cmNlVXJsOiBzdHJpbmcsIGRhdGE6IGFueSkge1xyXG4gICAgdGhpcy5zZWxlY3Rpb25Db21wb25lbnRMaXN0LmZvckVhY2goc2VsZWN0aW9uQ29tcG9uZW50ID0+IHtcclxuICAgICAgbGV0IG11bHRpU2VsZWN0OiBNdWx0aVNlbGVjdCA9IChnZXRDb21wb25lbnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc2VsZWN0aW9uQ29tcG9uZW50LmNvbXBvbmVudElkKSwgJ211bHRpc2VsZWN0JykgYXMgTXVsdGlTZWxlY3QpO1xyXG4gICAgICBpZiAobXVsdGlTZWxlY3QpIHtcclxuICAgICAgICBtdWx0aVNlbGVjdC52YWx1ZSA9IGRhdGE7XHJcbiAgICAgIH1cclxuICAgICAgbGV0IGRyb3Bkb3duOiBEcm9wRG93bkxpc3QgPSAoZ2V0Q29tcG9uZW50KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNlbGVjdGlvbkNvbXBvbmVudC5jb21wb25lbnRJZCksICdkcm9wZG93bmxpc3QnKSBhcyBEcm9wRG93bkxpc3QpO1xyXG4gICAgICBpZiAoZHJvcGRvd24pIHtcclxuICAgICAgICB0aGlzLmZpZWxkU2VydmljZS5kYXRhRm9ybUZpZWxkc1t0aGlzLmRhdGEuVmFsdWVdLmZvckVhY2goYXN5bmMgKGZpZWxkOiBhbnkpID0+IHtcclxuICAgICAgICAgIGlmIChmaWVsZC5TZWxlY3RPcHRpb25zLlJlc291cmNlVVJMID09PSBzZWxlY3Rpb25Db21wb25lbnQucmVzb3VyY2VVcmwpIHtcclxuICAgICAgICAgICAgY29uc3Qgc2VsZWN0T3B0aW9ucyA9IGZpZWxkWydTZWxlY3RPcHRpb25zJ107XHJcbiAgICAgICAgICAgIGNvbnN0IHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCA9IHNlbGVjdE9wdGlvbnNbJ1Jlc291cmNlVVJMJ107XHJcbiAgICAgICAgICAgIGNvbnN0IHBhcmFtID0gT2JqZWN0LmFzc2lnbih7fSwgRGVmYXVsdFBhZ2VTZXR0aW5nUGFyYW1zKTtcclxuXHJcbiAgICAgICAgICAgIGlmICh0aGlzLmRhdGFbJ0ZpbHRlcnMnXSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmlsdGVycyA9IFpDb21wb25lbnRIZWxwZXIuZ2V0R3JvdXBFdmFsVmFsdWUuY2FsbChcclxuICAgICAgICAgICAgICAgIHRoaXMsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGFbJ0ZpbHRlcnMnXSxcclxuICAgICAgICAgICAgICAgIHRoaXMuZ3JvdXBcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBpZiAodGhpcy5maWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgc2VsZWN0T3B0aW9uc1snRmlsdGVycyddID0gdGhpcy5maWx0ZXJzO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBwYXJhbS5wYWdlU2l6ZSA9IHNlbGVjdE9wdGlvbnNbJ1BhZ2VTaXplJ107XHJcbiAgICAgICAgICAgIHBhcmFtLmNvbHVtbnMgPSBzZWxlY3RPcHRpb25zWydDb2x1bW5zJ107XHJcbiAgICAgICAgICAgIHBhcmFtLmZpbHRlcnMgKz0gc2VsZWN0T3B0aW9uc1snRmlsdGVycyddO1xyXG4gICAgICAgICAgICBwYXJhbS5zb3J0Q29sdW1uTmFtZSA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRDb2x1bW5OYW1lJ107XHJcbiAgICAgICAgICAgIHBhcmFtLnNvcnRPcmRlciA9IHNlbGVjdE9wdGlvbnNbJ1NvcnRPcmRlciddO1xyXG5cclxuICAgICAgICAgICAgdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JCh0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRQYWdlVXJsKHNlbGVjdE9wdGlvbnNSZXNvdXJjZVVSTCksIHBhcmFtKS5waXBlKFxyXG4gICAgICAgICAgICAgIG1hcCgocmVzcCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgb3B0aW9uTGlzdCA9IFtdO1xyXG4gICAgICAgICAgICAgICAgcmVzcC5kYXRhU2V0LmZvckVhY2goKGl0ZW06IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICBvcHRpb25MaXN0LnB1c2goe1xyXG4gICAgICAgICAgICAgICAgICAgIHRleHQ6IGl0ZW1bc2VsZWN0T3B0aW9uc1snTmFtZSddXSxcclxuICAgICAgICAgICAgICAgICAgICB2YWx1ZTogaXRlbVtzZWxlY3RPcHRpb25zWydWYWx1ZSddXVxyXG4gICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgZHJvcGRvd24uZGF0YVNvdXJjZSA9IG9wdGlvbkxpc3Q7XHJcbiAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgcmVtb3ZlQXJyYXlJdGVtPFQ+KGFycjogQXJyYXk8VD4sIHZhbHVlOiBUKTogQXJyYXk8VD4ge1xyXG4gICAgY29uc3QgaW5kZXggPSBhcnIuaW5kZXhPZih2YWx1ZSk7XHJcbiAgICBpZiAoaW5kZXggPiAtMSkge1xyXG4gICAgICBhcnIuc3BsaWNlKGluZGV4LCAxKTtcclxuICAgIH1cclxuICAgIHJldHVybiBhcnI7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGdlbmVyYXRlU2VsZWN0aW9uQ29tcG9uZW50KGFyZ3M6IGFueSwgb3B0aW9uTGlzdDogYW55KSB7XHJcbiAgICBpZiAodGhpcy5pbk9wZXJhdG9ycy5pbmRleE9mKGFyZ3Mub3BlcmF0b3IpID4gLTEpIHtcclxuICAgICAgcmV0dXJuIG5ldyBNdWx0aVNlbGVjdCh7XHJcbiAgICAgICAgZGF0YVNvdXJjZTogb3B0aW9uTGlzdCxcclxuICAgICAgICBmaWVsZHM6IHsgdGV4dDogJ3RleHQnLCB2YWx1ZTogJ3ZhbHVlJyB9LFxyXG4gICAgICAgIHZhbHVlOiBhcmdzLnZhbHVlcyBhcyBzdHJpbmdbXSxcclxuICAgICAgICBtb2RlOiAnQ2hlY2tCb3gnLFxyXG4gICAgICAgIGNoYW5nZTogKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgdGhpcy5xcnlCbGRyT2JqLm5vdGlmeUNoYW5nZShlLnZhbHVlLCBlLmVsZW1lbnQpO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gc2V0IGNvbnRhaW5zIHNlYXJjaCBieSBkZWZhdWx0XHJcbiAgICAgICAgZmlsdGVyaW5nOiAoZTogYW55KSA9PiB7XHJcbiAgICAgICAgICB0aGlzLm9uRmlsdGVyaW5nKGUsIG9wdGlvbkxpc3QpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgICBlbHNlIHtcclxuICAgICAgcmV0dXJuIG5ldyBEcm9wRG93bkxpc3Qoe1xyXG4gICAgICAgIGFsbG93RmlsdGVyaW5nOiB0cnVlLCAvLyBzZWFyY2ggYm94IGFwcGVhclxyXG4gICAgICAgIGRhdGFTb3VyY2U6IG9wdGlvbkxpc3QsXHJcbiAgICAgICAgZmllbGRzOiB7IHRleHQ6ICd0ZXh0JywgdmFsdWU6ICd2YWx1ZScgfSxcclxuICAgICAgICB2YWx1ZTogYXJncy52YWx1ZXMgYXMgc3RyaW5nLFxyXG4gICAgICAgIGNoYW5nZTogKGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgZS52YWx1ZSAhPT0gbnVsbCA/IHRoaXMucXJ5Qmxkck9iai5ub3RpZnlDaGFuZ2UoZS5pdGVtRGF0YS52YWx1ZSwgZS5lbGVtZW50KSA6IGlnbm9yZUVsZW1lbnRzO1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgLy8gc2V0IGRlZmF1bHQgc2VhcmNoIGJ5ICdjb250YWlucydcclxuICAgICAgICBmaWx0ZXJpbmc6IChlOiBhbnkpID0+IHtcclxuICAgICAgICAgIHRoaXMub25GaWx0ZXJpbmcoZSwgb3B0aW9uTGlzdCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcbiAgLy8jZW5kcmVnaW9uXHJcblxyXG4gIG9uRmlsdGVyaW5nKGU6IGFueSwgb3B0aW9uTGlzdDogYW55KTogYW55IHtcclxuICAgIC8vIGxvYWQgb3ZlcmFsbCBkYXRhIHdoZW4gc2VhcmNoIGtleSBlbXB0eS5cclxuICAgIGlmIChlLnRleHQgPT09ICcnKSB7XHJcbiAgICAgIGUudXBkYXRlRGF0YSh0aGlzLmRhdGEpO1xyXG4gICAgfVxyXG4gICAgZWxzZSB7XHJcbiAgICAgIC8vIERlZmluZSBhcnJheSBkYXRhXHJcbiAgICAgIGxldCBzZWFyY2hEYXRhID0gb3B0aW9uTGlzdDtcclxuXHJcbiAgICAgIC8vQmluZCB0aGUgZmlsdGVyIGV2ZW50XHJcbiAgICAgIGxldCBxdWVyeSA9IG5ldyBRdWVyeSgpO1xyXG5cclxuICAgICAgLy9mcmFtZSB0aGUgcXVlcnkgYmFzZWQgb24gc2VhcmNoIHN0cmluZyB3aXRoIGZpbHRlciB0eXBlLlxyXG4gICAgICBxdWVyeSA9IChlLnRleHQgIT0gXCJcIikgPyBxdWVyeS53aGVyZShcInRleHRcIiwgXCJjb250YWluc1wiLCBlLnRleHQsIHRydWUpIDogcXVlcnk7XHJcblxyXG4gICAgICAvL3Bhc3MgdGhlIGZpbHRlciBkYXRhIHNvdXJjZSwgZmlsdGVyIHF1ZXJ5IHRvIHVwZGF0ZURhdGEgbWV0aG9kLlxyXG4gICAgICBlLnVwZGF0ZURhdGEoc2VhcmNoRGF0YSwgcXVlcnkpO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBzZXRRdWVyeVZhbHVlKHNhdmVkRGF0YTogYW55KSB7XHJcbiAgICAvL2lmICghdGhpcy5xcnlCbGRyT2JqKSB7XHJcbiAgICAvLyAgY29uc29sZS53YXJuKCdxdWVyeSBidWlsZGVyIG9iamVjdCBpcyBudWxsLicpO1xyXG4gICAgLy8gIHJldHVybjtcclxuICAgIC8vfVxyXG5cclxuICAgIGlmIChzYXZlZERhdGEpIHtcclxuICAgICAgdGhpcy5xcnlCbGRyT2JqLnNldFJ1bGVzKHNhdmVkRGF0YSk7XHJcbiAgICAgIHRoaXMudXBkYXRlUnVsZSh7IHJ1bGU6IHNhdmVkRGF0YSB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHB1YmxpYyBnZXRSZXN1bHQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5xcnlCbGRyT2JqLmdldFJ1bGVzKCk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgdXBkYXRlUnVsZShhcmdzOiBSdWxlQ2hhbmdlRXZlbnRBcmdzKTogdm9pZCB7XHJcbiAgICB0aGlzLmRpc3BsYXlSdWxlID0gSlNPTi5zdHJpbmdpZnkoYXJncy5ydWxlLCBudWxsLCAxMik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgb25DaGFuZ2UoKTogdm9pZCB7XHJcbiAgICB0aGlzLnVwZGF0ZVJ1bGUoeyBydWxlOiB0aGlzLnFyeUJsZHJPYmouZ2V0VmFsaWRSdWxlcyh0aGlzLnFyeUJsZHJPYmoucnVsZSkgfSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYmVmb3JlTG9hZEZpZWxkKGZpZWxkRWxlbWVudERhdGE6IGFueSkge1xyXG4gICAgbGV0IGJlZm9yZUxvYWRGaWVsZCA9IGZpZWxkRWxlbWVudERhdGFbJ0JlZm9yZUxvYWRGaWVsZCddO1xyXG4gICAgaWYgKGJlZm9yZUxvYWRGaWVsZCkge1xyXG4gICAgICBiZWZvcmVMb2FkRmllbGQgPSBiZWZvcmVMb2FkRmllbGQucmVwbGFjZSgnbW9kYWxHcm91cC4nLCAnZ3JvdXAuJyk7XHJcbiAgICAgIGNvbnN0IGNhbGxGdW5jID0gZXZhbCgndGhpcy4nICsgYmVmb3JlTG9hZEZpZWxkKTtcclxuXHJcbiAgICAgIGlmICh0eXBlb2YgY2FsbEZ1bmMgPT09IFwiZnVuY3Rpb25cIikge1xyXG4gICAgICAgIGNvbnN0IG5ld0Z1bmMgPSBjYWxsRnVuYy5iaW5kKHRoaXMpO1xyXG4gICAgICAgIHJldHVybiBuZXdGdW5jKGV2ZW50LCB0aGlzLCBmaWVsZEVsZW1lbnREYXRhKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIG9mKGZpZWxkRWxlbWVudERhdGEpO1xyXG4gIH1cclxufVxyXG5cclxuLy9leHBvcnQgZW51bSBvcGVyYXRvcnMge1xyXG4vLyAgSW4gPSAnaW4nLFxyXG4vL31cclxuXHJcblxyXG4vL2V4cG9ydCBpbnRlcmZhY2UgUXVlcnlSdWxlIHtcclxuLy8gIGNvbmRpdGlvbjogc3RyaW5nO1xyXG4vLyAgcnVsZXM6IFF1ZXJ5UnVsZVtdO1xyXG4vLyAgZmllbGQ6IHN0cmluZztcclxuLy8gIHR5cGU6IHN0cmluZztcclxuLy8gIG9wZXJhdG9yOiBzdHJpbmc7XHJcbi8vICB2YWx1ZTogc3RyaW5nW107XHJcbi8vfVxyXG5cclxuLy9leHBvcnQgZnVuY3Rpb24gdG9RdWVyeVJ1bGUocXVlcnlCdWlsZGVyTW9kZWw6IGFueSk6IFF1ZXJ5UnVsZSB7XHJcbi8vICBsZXQgcnVsZSA9IDxRdWVyeVJ1bGU+e307XHJcbi8vICBpZiAocXVlcnlCdWlsZGVyTW9kZWwuY29uZGl0aW9uKSB7XHJcbi8vICAgIHJ1bGUuY29uZGl0aW9uID0gcXVlcnlCdWlsZGVyTW9kZWwuY29uZGl0aW9uO1xyXG4vLyAgICBydWxlLnJ1bGVzID0gcXVlcnlCdWlsZGVyTW9kZWwucnVsZXMubWFwKHEgPT4gdG9RdWVyeVJ1bGUocSkpO1xyXG4vLyAgfVxyXG4vLyAgZWxzZSB7XHJcbi8vICAgIHJ1bGUuZmllbGQgPSBxdWVyeUJ1aWxkZXJNb2RlbC5maWVsZDtcclxuLy8gICAgcnVsZS50eXBlID0gJ3N0cmluZyc7XHJcbi8vICAgIHJ1bGUub3BlcmF0b3IgPSAnZXF1YWwnO1xyXG4vLyAgICBydWxlLnZhbHVlID0gcXVlcnlCdWlsZGVyTW9kZWwudmFsdWUgaW5zdGFuY2VvZiBBcnJheVxyXG4vLyAgICAgID8gcXVlcnlCdWlsZGVyTW9kZWwudHlwZSA9PT0gJ2RhdGUnID8gbmV3IERhdGUocXVlcnlCdWlsZGVyTW9kZWwudmFsdWUpIDogcXVlcnlCdWlsZGVyTW9kZWwudmFsdWVcclxuLy8gICAgICA6IFtxdWVyeUJ1aWxkZXJNb2RlbC50eXBlID09PSAnZGF0ZScgPyBuZXcgRGF0ZShxdWVyeUJ1aWxkZXJNb2RlbC52YWx1ZSkgOiBxdWVyeUJ1aWxkZXJNb2RlbC52YWx1ZV07XHJcbi8vICB9XHJcbi8vICByZXR1cm4gcnVsZTtcclxuLy99XHJcbiIsIjxpb24taXRlbSAqbmdJZj1cIighIWNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGQgPyBncm91cFtjb21wb25lbnRQcm9wZXJ0aWVzLmlzVmlzaWJsZUZpZWxkXSA6IGNvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlKVwiPlxyXG4gIDxkaXYgY2xhc3M9XCJxYmNvbnRhaW5lclwiPlxyXG4gICAgPGVqcy1xdWVyeWJ1aWxkZXIgKm5nSWY9XCJpc3NmTG9hZGVkXCJcclxuICAgICAgICAgICAgICAgICAgICAgICNxdWVyeWJ1aWxkZXJcclxuICAgICAgICAgICAgICAgICAgICAgIHdpZHRoPVwiMTAwJVwiXHJcbiAgICAgICAgICAgICAgICAgICAgICBbZGF0YVNvdXJjZV09XCJzZkRhdGFcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW2NvbHVtbnNdPVwic2RGaWx0ZXJcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgW3J1bGVdPVwiaW1wb3J0UnVsZXNcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgKHJ1bGVDaGFuZ2UpPVwidXBkYXRlUnVsZSgkZXZlbnQpXCJcclxuICAgICAgICAgICAgICAgICAgICAgIChjcmVhdGVkKT1cIm9uQ2hhbmdlKClcIj5cclxuICAgIDwvZWpzLXF1ZXJ5YnVpbGRlcj5cclxuXHJcbiAgICA8ZGl2ICpuZ0lmPVwiIWRhdGEuSGlkZVNob3dSZXN1bHRQYW5lbFwiPlxyXG4gICAgICA8YnI+XHJcbiAgICAgIDxpb24tbGFiZWw+UmVzdWx0PC9pb24tbGFiZWw+XHJcbiAgICAgIDx0ZXh0YXJlYSBjbGFzcz1cIm91dHB1dFwiXHJcbiAgICAgICAgICAgICAgICByZXNpemFibGU9XCJub25lXCJcclxuICAgICAgICAgICAgICAgIFtyb3dzXT1cIjEwXCJcclxuICAgICAgICAgICAgICAgIHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI2QzZDNkMzsgd2lkdGg6IDEwMCU7XCI+e3tkaXNwbGF5UnVsZX19PC90ZXh0YXJlYT5cclxuICAgIDwvZGl2PlxyXG4gIDwvZGl2PlxyXG48L2lvbi1pdGVtPlxyXG4iXX0=
@@ -229,6 +229,12 @@ export class ZworkflowbuttonsComponent extends ButtonFieldBase {
229
229
  isButtonDisableTrigger(data, button) {
230
230
  return button.DisableTrigger != undefined ? button.DisableTrigger : (data.DisableTrigger != undefined ? data.DisableTrigger : false);
231
231
  }
232
+ removeGotoButton() {
233
+ const indexToDelete = this.leftBtns.findIndex(obj => obj.fieldAttribute.TypeCode === "GOTO");
234
+ if (indexToDelete !== -1) {
235
+ this.leftBtns.splice(indexToDelete, 1);
236
+ }
237
+ }
232
238
  }
233
239
  ZworkflowbuttonsComponent.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.4.0", ngImport: i0, type: ZworkflowbuttonsComponent, deps: [{ token: i1.ZComponentService }, { token: i2.FontAweSomeService }, { token: i2.WebApiService }, { token: i2.ResourceApiService }, { token: i2.ComponentErrorHandlerService }, { token: i2.WorkflowService }], target: i0.ɵɵFactoryTarget.Component });
234
240
  ZworkflowbuttonsComponent.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "12.0.0", version: "13.4.0", type: ZworkflowbuttonsComponent, selector: "app-zworkflowbuttons", usesInheritance: true, ngImport: i0, template: "<div class=\"e1tag-style\"\r\n *ngIf=\"!group.isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible) && items.length > 0\"\r\n [style]=\"componentProperties.style.style\">\r\n <div class=\"ion-margin-vertical e1tag-style1\" *ngIf=\"isMobileScreen() && items.length > 1 && FirstZbtn === false\" [style]=\"componentProperties.style.style1\">\r\n <kendo-dropdownbutton [data]=\"items\" size=\"large\" [look]=\"'outline'\" class=\"ion-activatable ripple-parent e1tag-style2\" [style]=\"componentProperties.style.style2\">\r\n Actions\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </kendo-dropdownbutton>\r\n </div>\r\n\r\n <div *ngIf=\"!isMobileScreen() || items.length === 1\" [ngClass]=\"data.DivClass\" class=\"btn-container e1tag-style3\" [style]=\"componentProperties.style.style3\">\r\n <!-- <button *ngFor=\"let item of items; let i = index\" (click)=\"buttonClick(item.fieldAttribute)\"\r\n kendoButton [togglable]=\"true\" [icon]=\"item.icon\" [hidden]=\"!isBtnVisible(item.visible)\"\r\n style=\"margin-right: 5px;\">\r\n {{item.text}}\r\n </button> -->\r\n <div class=\"btn-left e1tag-style4\" [style]=\"componentProperties.style.style4\">\r\n <ion-button [fill]=\"item.fill\" [size]=\"item.size\" [color]=\"item.color\" strong=\"true\" *ngFor=\"let item of leftBtns; let i = index\"\r\n [ngClass]=\"item.class\" (click)=\"buttonClick(item.fieldAttribute)\" [hidden]=\"!isBtnVisible(item.visible)\"\r\n [disabled]=\"group.isTriggered\" [style]=\"componentProperties.style.style5\" class=\"e1tag-style5\">\r\n <fa-icon class=\"btn-icon\" *ngIf=\"item.icon\" [icon]=\"getFontAwesome(item.icon, fontAweSomeService)\"></fa-icon>\r\n <span *ngIf=\"item.text\" [class.btn-label]=\"item.icon\" class=\"ion-text-capitalize\">{{item.text}}</span>\r\n </ion-button>\r\n </div>\r\n <div class=\"btn-right e1tag-style6\" [style]=\"componentProperties.style.style6\">\r\n <ion-button [fill]=\"item.fill\" [size]=\"item.size\" [color]=\"item.color\" strong=\"true\" *ngFor=\"let item of rightBtns; let i = index\"\r\n [ngClass]=\"item.class\" (click)=\"buttonClick(item.fieldAttribute)\" [hidden]=\"!isBtnVisible(item.visible)\"\r\n [disabled]=\"group.isTriggered\" [style]=\"componentProperties.style.style7\" class=\"e1tag-style7\">\r\n <fa-icon class=\"btn-icon\" *ngIf=\"item.icon\" [icon]=\"getFontAwesome(item.icon, fontAweSomeService)\"></fa-icon>\r\n <span *ngIf=\"item.text\" [class.btn-label]=\"item.icon\" class=\"ion-text-capitalize\">{{item.text}}</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".ripple-parent{position:relative;overflow:hidden}.btn-container{padding:5px 0;display:flex;flex-direction:row;justify-content:space-between}ion-button{font-size:var(--button-font-size);margin-left:10px;--border-radius: var(--button-border-radius);--box-shadow: 1px 2px 4px 0px rgba(0, 0, 0, .25)}ion-button.useCustomClass{--background-hover-opacity: 1;--border-width: 2px;--border-style: solid;--background: #fff;--background-hover: rgba(var(--ion-color-primary-rgb), .05);--color: var(--ion-color-primary);--border-color: var(--ion-color-primary)}ion-button.primary-light{--background: rgba(var(--ion-color-primary-rgb), .05);--background-hover: #fff;--color: var(--ion-color-primary);--border-color: var(--ion-color-primary)}ion-button.primary{--background: var(--ion-color-primary);--background-hover: var(--ion-color-primary-tint);--color: var(--ion-color-primary-contrast);--border-color: var(--ion-color-primary-shade)}ion-button.success{--background: var(--ion-color-success);--background-hover: var(--ion-color-success-tint);--color: var(--ion-color-success-contrast);--border-color: var(--ion-color-success-shade)}ion-button.danger{--background: var(--ion-color-danger);--background-hover: var(--ion-color-danger-tint2);--color: var(--ion-color-danger-contrast);--border-color: var(--ion-color-danger-shade)}ion-button.warning{--background: var(--ion-color-warning);--background-hover: var(--ion-color-warning-tint);--color: #000;--border-color: var(--ion-color-warning-shade)}ion-button.no-shadow{--box-shadow: none}.btn-label{padding-left:8px}\n"], components: [{ type: i3.DropDownButtonComponent, selector: "kendo-dropdownbutton", inputs: ["icon", "iconClass", "imageUrl", "textField", "data", "size", "rounded", "fillMode", "themeColor"], outputs: ["itemClick", "focus", "blur"], exportAs: ["kendoDropDownButton"] }, { type: i4.IonRippleEffect, selector: "ion-ripple-effect", inputs: ["type"] }, { type: i4.IonButton, selector: "ion-button", inputs: ["buttonType", "color", "disabled", "download", "expand", "fill", "form", "href", "mode", "rel", "routerAnimation", "routerDirection", "shape", "size", "strong", "target", "type"] }, { type: i5.FaIconComponent, selector: "fa-icon", inputs: ["icon", "title", "spin", "pulse", "mask", "styles", "flip", "size", "pull", "border", "inverse", "symbol", "rotate", "fixedWidth", "classes", "transform", "a11yRole"] }], directives: [{ type: i6.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { type: i6.NgClass, selector: "[ngClass]", inputs: ["class", "ngClass"] }, { type: i7.DefaultClassDirective, selector: " [ngClass], [ngClass.xs], [ngClass.sm], [ngClass.md], [ngClass.lg], [ngClass.xl], [ngClass.lt-sm], [ngClass.lt-md], [ngClass.lt-lg], [ngClass.lt-xl], [ngClass.gt-xs], [ngClass.gt-sm], [ngClass.gt-md], [ngClass.gt-lg]", inputs: ["ngClass", "ngClass.xs", "ngClass.sm", "ngClass.md", "ngClass.lg", "ngClass.xl", "ngClass.lt-sm", "ngClass.lt-md", "ngClass.lt-lg", "ngClass.lt-xl", "ngClass.gt-xs", "ngClass.gt-sm", "ngClass.gt-md", "ngClass.gt-lg"] }, { type: i6.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }] });
@@ -236,4 +242,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
236
242
  type: Component,
237
243
  args: [{ selector: 'app-zworkflowbuttons', template: "<div class=\"e1tag-style\"\r\n *ngIf=\"!group.isLoading && (!!componentProperties.isVisibleField ? group[componentProperties.isVisibleField] : componentProperties.isVisible) && items.length > 0\"\r\n [style]=\"componentProperties.style.style\">\r\n <div class=\"ion-margin-vertical e1tag-style1\" *ngIf=\"isMobileScreen() && items.length > 1 && FirstZbtn === false\" [style]=\"componentProperties.style.style1\">\r\n <kendo-dropdownbutton [data]=\"items\" size=\"large\" [look]=\"'outline'\" class=\"ion-activatable ripple-parent e1tag-style2\" [style]=\"componentProperties.style.style2\">\r\n Actions\r\n <ion-ripple-effect></ion-ripple-effect>\r\n </kendo-dropdownbutton>\r\n </div>\r\n\r\n <div *ngIf=\"!isMobileScreen() || items.length === 1\" [ngClass]=\"data.DivClass\" class=\"btn-container e1tag-style3\" [style]=\"componentProperties.style.style3\">\r\n <!-- <button *ngFor=\"let item of items; let i = index\" (click)=\"buttonClick(item.fieldAttribute)\"\r\n kendoButton [togglable]=\"true\" [icon]=\"item.icon\" [hidden]=\"!isBtnVisible(item.visible)\"\r\n style=\"margin-right: 5px;\">\r\n {{item.text}}\r\n </button> -->\r\n <div class=\"btn-left e1tag-style4\" [style]=\"componentProperties.style.style4\">\r\n <ion-button [fill]=\"item.fill\" [size]=\"item.size\" [color]=\"item.color\" strong=\"true\" *ngFor=\"let item of leftBtns; let i = index\"\r\n [ngClass]=\"item.class\" (click)=\"buttonClick(item.fieldAttribute)\" [hidden]=\"!isBtnVisible(item.visible)\"\r\n [disabled]=\"group.isTriggered\" [style]=\"componentProperties.style.style5\" class=\"e1tag-style5\">\r\n <fa-icon class=\"btn-icon\" *ngIf=\"item.icon\" [icon]=\"getFontAwesome(item.icon, fontAweSomeService)\"></fa-icon>\r\n <span *ngIf=\"item.text\" [class.btn-label]=\"item.icon\" class=\"ion-text-capitalize\">{{item.text}}</span>\r\n </ion-button>\r\n </div>\r\n <div class=\"btn-right e1tag-style6\" [style]=\"componentProperties.style.style6\">\r\n <ion-button [fill]=\"item.fill\" [size]=\"item.size\" [color]=\"item.color\" strong=\"true\" *ngFor=\"let item of rightBtns; let i = index\"\r\n [ngClass]=\"item.class\" (click)=\"buttonClick(item.fieldAttribute)\" [hidden]=\"!isBtnVisible(item.visible)\"\r\n [disabled]=\"group.isTriggered\" [style]=\"componentProperties.style.style7\" class=\"e1tag-style7\">\r\n <fa-icon class=\"btn-icon\" *ngIf=\"item.icon\" [icon]=\"getFontAwesome(item.icon, fontAweSomeService)\"></fa-icon>\r\n <span *ngIf=\"item.text\" [class.btn-label]=\"item.icon\" class=\"ion-text-capitalize\">{{item.text}}</span>\r\n </ion-button>\r\n </div>\r\n </div>\r\n</div>\r\n", styles: [".ripple-parent{position:relative;overflow:hidden}.btn-container{padding:5px 0;display:flex;flex-direction:row;justify-content:space-between}ion-button{font-size:var(--button-font-size);margin-left:10px;--border-radius: var(--button-border-radius);--box-shadow: 1px 2px 4px 0px rgba(0, 0, 0, .25)}ion-button.useCustomClass{--background-hover-opacity: 1;--border-width: 2px;--border-style: solid;--background: #fff;--background-hover: rgba(var(--ion-color-primary-rgb), .05);--color: var(--ion-color-primary);--border-color: var(--ion-color-primary)}ion-button.primary-light{--background: rgba(var(--ion-color-primary-rgb), .05);--background-hover: #fff;--color: var(--ion-color-primary);--border-color: var(--ion-color-primary)}ion-button.primary{--background: var(--ion-color-primary);--background-hover: var(--ion-color-primary-tint);--color: var(--ion-color-primary-contrast);--border-color: var(--ion-color-primary-shade)}ion-button.success{--background: var(--ion-color-success);--background-hover: var(--ion-color-success-tint);--color: var(--ion-color-success-contrast);--border-color: var(--ion-color-success-shade)}ion-button.danger{--background: var(--ion-color-danger);--background-hover: var(--ion-color-danger-tint2);--color: var(--ion-color-danger-contrast);--border-color: var(--ion-color-danger-shade)}ion-button.warning{--background: var(--ion-color-warning);--background-hover: var(--ion-color-warning-tint);--color: #000;--border-color: var(--ion-color-warning-shade)}ion-button.no-shadow{--box-shadow: none}.btn-label{padding-left:8px}\n"] }]
238
244
  }], ctorParameters: function () { return [{ type: i1.ZComponentService }, { type: i2.FontAweSomeService }, { type: i2.WebApiService }, { type: i2.ResourceApiService }, { type: i2.ComponentErrorHandlerService }, { type: i2.WorkflowService }]; } });
239
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiendvcmtmbG93YnV0dG9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96d29ya2Zsb3didXR0b25zL3p3b3JrZmxvd2J1dHRvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvendvcmtmbG93YnV0dG9ucy96d29ya2Zsb3didXR0b25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2xELDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUUxRSxPQUFPLEVBRU8sZ0JBQWdCLEVBQzdCLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQVN6QixNQUFNLE9BQU8seUJBQTBCLFNBQVEsZUFBZTtJQWlCNUQsWUFDUyxnQkFBbUMsRUFDbkMsa0JBQXNDLEVBQ3JDLGFBQTRCLEVBQzVCLGtCQUFzQyxFQUN0Qyw0QkFBMEQsRUFDMUQsZUFBZ0M7UUFFeEMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFQakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQUNuQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3JDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsaUNBQTRCLEdBQTVCLDRCQUE0QixDQUE4QjtRQUMxRCxvQkFBZSxHQUFmLGVBQWUsQ0FBaUI7UUF0QjFDLGVBQWU7UUFDZiwyR0FBMkc7UUFDM0csa0NBQTZCLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLE1BQU0sQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ2hHLDJHQUEyRztRQUMzRywwQ0FBcUMsR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsTUFBTSxDQUFDLHVDQUF1QyxDQUFDLENBQUM7UUFDaEgsOEdBQThHO1FBQzlHLG1DQUE4QixHQUFHLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsZ0NBQWdDLENBQUMsQ0FBQztRQUVsRyx5Q0FBeUM7UUFDekMsb0dBQW9HO1FBQ3BHLDRHQUE0RztRQUM1Ryw4RkFBOEY7UUFDOUYsbUJBQWMsR0FBUSxFQUFFLENBQUM7UUFDekIsY0FBUyxHQUFHLElBQUksQ0FBQztRQUNqQixtQkFBYyxHQUFZLEtBQUssQ0FBQztJQVdoQyxDQUFDO0lBRUQsUUFBUTtRQUNOLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO1lBRW5DLDRDQUE0QztZQUM1QyxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO2dCQUMxQixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUM7YUFDakc7WUFFRCxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDcEIsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsZUFBZTtRQUNiLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxpQ0FBaUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDckUsQ0FBQztJQUVNLFVBQVU7UUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFJLENBQUMsU0FBUyxHQUFHLEVBQUUsQ0FBQztRQUNwQixJQUFJLENBQUMsS0FBSyxHQUFHLEVBQUUsQ0FBQztRQUVoQiw2QkFBNkI7UUFDN0IsSUFBSSxVQUFVLEdBQUcsSUFBSSxDQUFDO1FBQ3RCLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUU7WUFDckIsVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLENBQUM7U0FDbEQ7UUFFRCxvQ0FBb0M7UUFDcEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyx1QkFBdUIsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUVqRixlQUFlO1FBQ2YsSUFBSSxDQUFDLEtBQUssQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUMzQixJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsYUFBYSxLQUFLLENBQUMsRUFBRTtZQUNsQyxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztTQUN2QjtRQUVELElBQUk7WUFFRixFQUFFLENBQUMsSUFBSSxDQUFDO2lCQUNMLElBQUksQ0FDSCxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLCtCQUErQjtnQkFDL0IsT0FBTyxJQUFJLENBQUMsZUFBZSxDQUFDLHVCQUF1QixDQUNqRCxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFDdEIsSUFBSSxDQUFDLDZCQUE2QixFQUNsQyxNQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUM1QixDQUFBO1lBQ0gsQ0FBQyxDQUFDLEVBQ0YsR0FBRyxDQUFDLFVBQVUsQ0FBQyxFQUFFO2dCQUNmLElBQUksVUFBVSxFQUFFO29CQUNkLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFXLEVBQUUsRUFBRTt3QkFDakMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUU7NEJBQ2pCLE1BQU0sQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQzt5QkFDNUI7d0JBQ0QsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQzt3QkFDMUMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7d0JBQ2pELE1BQU0sZ0JBQWdCLEdBQUcsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7d0JBRXpELE1BQU0sR0FBRyxJQUFJLENBQUMsNkJBQTZCLENBQUMsTUFBTSxDQUFDLENBQUM7d0JBQ3BELElBQUksR0FBRyxHQUFHOzRCQUNSLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTs0QkFDakIsSUFBSSxFQUFFLEtBQUs7NEJBQ1gsSUFBSSxFQUFFLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDOzRCQUMvQyxPQUFPLEVBQUUsVUFBVSxDQUFDLE9BQU87NEJBQzNCLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksU0FBUyxDQUFDOzRCQUM5RCxJQUFJLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQzs0QkFDMUQsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLElBQUksU0FBUzs0QkFDbEMsS0FBSyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxLQUFLLGlCQUFpQixDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSzs0QkFDakYsY0FBYyxFQUFFLE1BQU07NEJBQ3RCLFFBQVEsRUFBRSxVQUFVLENBQUMsSUFBSTs0QkFDekIsS0FBSyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUU7Z0NBQ1gsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs0QkFDM0IsQ0FBQzt5QkFDRixDQUFBO3dCQUVELElBQUksVUFBVSxDQUFDLFNBQVMsSUFBSSxVQUFVLENBQUMsU0FBUyxLQUFLLE9BQU8sRUFBRTs0QkFDNUQsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7eUJBQzFCOzZCQUNJOzRCQUNILElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3lCQUN6Qjt3QkFFRCxNQUFNLFVBQVUsR0FBRzs0QkFDakIsTUFBTSxFQUFFLEVBQUU7NEJBQ1YsUUFBUSxFQUFFLEVBQUU7NEJBQ1osY0FBYyxFQUFFLEVBQUU7eUJBQ25CLENBQUM7d0JBQ0YsMEhBQTBIO29CQUM1SCxDQUFDLENBQUMsQ0FBQztvQkFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUM7aUJBQ3REO3FCQUNJO29CQUNILE9BQU8sQ0FBQyxJQUFJLENBQUMsb0RBQW9ELENBQUMsQ0FBQztpQkFDcEU7WUFDSCxDQUFDLENBQUMsRUFDRixTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUNiLE9BQU8sS0FBSyxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNqRCxDQUFDLENBQUMsRUFDRixHQUFHLENBQUMsR0FBRyxFQUFFO2dCQUNQLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLHlCQUF5QixFQUFFO29CQUN4QyxxQkFBcUI7b0JBQ3JCLDJEQUEyRDtvQkFDM0QsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLEVBQUU7d0JBQ3hDLE1BQU0sTUFBTSxHQUFHOzRCQUNiLG9CQUFvQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTt5QkFDN0MsQ0FBQzt3QkFFRixPQUFPLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxxQ0FBcUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQzFGLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTs0QkFDUixJQUFJLEdBQUcsQ0FBQyxJQUFJLEVBQUU7Z0NBQ1osZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO2dDQUM5RSxnQkFBZ0IsQ0FBQyxnQkFBZ0IsQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQ0FDbEYsZ0JBQWdCLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7Z0NBRWxGLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDOzZCQUN6RDt3QkFDSCxDQUFDLENBQUMsQ0FDSCxDQUFBO3FCQUNGO3lCQUFNO3dCQUNMLDhEQUE4RDt3QkFDOUQsTUFBTSxZQUFZLEdBQUc7NEJBQ25CLG9CQUFvQixFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTs0QkFDNUMsWUFBWSxFQUFFLFVBQVU7eUJBQ3pCLENBQUM7d0JBRUYsSUFBSSxDQUFDLGFBQWEsQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLDhCQUE4QixFQUFFLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FDbEYsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFOzRCQUNSLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsR0FBRyxDQUFDLENBQUM7NEJBQ25ELElBQUksR0FBRyxDQUFDLElBQUksRUFBRTtnQ0FDWixJQUFJLENBQUMsZUFBZSxDQUFDLHdCQUF3QixDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQzs2QkFDekQ7d0JBQ0gsQ0FBQyxDQUFDLENBQ0gsQ0FBQTtxQkFDRjtpQkFDRjtZQUNILENBQUMsQ0FBQyxDQUNILENBQUMsU0FBUyxFQUFFLENBQUM7U0FFakI7UUFBQyxPQUFPLEtBQUssRUFBRTtZQUNkLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxFQUFFLEtBQUssQ0FBQyxDQUFDO1NBQ2pDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxNQUFXO1FBQ3JCLHFCQUFxQjtRQUNyQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQWlCLENBQUM7UUFDL0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakQsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUVyRCw2REFBNkQ7UUFDN0Qsa0NBQWtDO1FBQ2xDLDRDQUE0QztRQUM1Qyw0REFBNEQ7UUFDNUQsc0VBQXNFO1FBQ3RFLGFBQWE7UUFDYixLQUFLO1FBRUwsaUNBQWlDO1FBQ2pDLDJEQUEyRDtRQUMzRCx5RkFBeUY7UUFDekYsYUFBYTtRQUNiLEtBQUs7UUFDTCxHQUFHO1FBRUgsd0JBQXdCO1FBQ3hCLG1CQUFtQjtRQUNuQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUMsY0FBYyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7UUFDNUYsUUFBUSxjQUFjLEVBQUU7WUFDdEIsS0FBSyxVQUFVO2dCQUNiLDRCQUE0QjtnQkFDNUIsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFO29CQUMzQixPQUFPO2lCQUNSO2dCQUVELE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7Z0JBRXpCLHdCQUF3QjtnQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFO29CQUN0QyxVQUFVLENBQUM7d0JBQ1QsS0FBSyxDQUFDLGFBQWEsQ0FBQyxHQUFHLEtBQUssQ0FBQztvQkFDL0IsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDO2lCQUNUO2dCQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO2dCQUVoRCx3RUFBd0U7Z0JBQ3hFLElBQUksQ0FBQyxlQUFlLENBQUMsd0JBQXdCLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztnQkFDdEUsTUFBTTtZQUNSLEtBQUssTUFBTTtnQkFDVCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQzFDLG1FQUFtRTtnQkFDbkUsSUFBSSxDQUFDLGVBQWUsQ0FBQyxrQkFBa0IsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFO29CQUN0SCxvQkFBb0I7b0JBQ3BCLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztvQkFFbEIsdUJBQXVCO29CQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsR0FBRyxLQUFLLENBQUM7b0JBRS9CLElBQUksR0FBRyxFQUFFO3dCQUNQLHdCQUF3Qjt3QkFDeEIsSUFBSSxDQUFDLGVBQWUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsU0FBUyxFQUFFLENBQUM7cUJBQy9EO2dCQUNILENBQUMsQ0FBQyxDQUFDO2dCQUNILE1BQU07WUFDUjtnQkFDRSxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDcEQsTUFBTTtTQUNUO0lBQ0gsQ0FBQztJQUVPLDZCQUE2QixDQUFDLE1BQVc7UUFDL0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFFakQsTUFBTSxhQUFhLEdBQUc7WUFDcEIsR0FBRyxVQUFVO1lBQ2IsV0FBVyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSTtZQUMzQixRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7WUFDekIsWUFBWSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsWUFBWTtTQUNyQyxDQUFDO1FBRUYsTUFBTSxTQUFTLEdBQUc7WUFDaEIsR0FBRyxNQUFNO1lBQ1QsVUFBVSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsYUFBYSxDQUFDO1lBQ3pDLGNBQWMsRUFBRSxJQUFJLENBQUMsc0JBQXNCLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUM7U0FDL0QsQ0FBQztRQUVGLE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFTyxzQkFBc0IsQ0FBQyxJQUFZLEVBQUUsTUFBVztRQUN0RCxPQUFPLE1BQU0sQ0FBQyxjQUFjLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN2SSxDQUFDOztzSEFwUVUseUJBQXlCOzBHQUF6Qix5QkFBeUIsbUZDekJ0Qyw4cUZBa0NBOzJGRFRhLHlCQUF5QjtrQkFOckMsU0FBUzsrQkFDRSxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyIvKioqKioqKioqKiBBbmd1bGFyICoqKioqKioqKiovXHJcbmltcG9ydCB7IENvbXBvbmVudCwgT25Jbml0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEZvcm1Hcm91cCB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbi8qKioqKioqKioqIElvbmljICoqKioqKioqKiovXHJcblxyXG4vKioqKioqKioqKiBQbHVnaW4gKioqKioqKioqKi9cclxuaW1wb3J0IHsgb2YgfSBmcm9tICdyeGpzJztcclxuaW1wb3J0IHsgY29uY2F0TWFwLCBtYXAsIHN3aXRjaE1hcCwgdGFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuLyoqKioqKioqKiogQ29tcG9uZW50ICYgU2VydmljZSAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBCdXR0b25GaWVsZEJhc2UgfSBmcm9tICcuLi9jb21wb25lbnRzL2J1dHRvbmZpZWxkYmFzZS5jb21wb25lbnQnO1xyXG5pbXBvcnQgeyBaQ29tcG9uZW50U2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL3pjb21wb25lbnQuc2VydmljZSc7XHJcbmltcG9ydCB7XHJcbiAgV2ViQXBpU2VydmljZSwgUmVzb3VyY2VBcGlTZXJ2aWNlLCBXb3JrZmxvd1NlcnZpY2UsIEZvbnRBd2VTb21lU2VydmljZSwgQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSxcclxuICBaQ29tcG9uZW50LCBaQ29tcG9uZW50SGVscGVyLCBaRmllbGRcclxufSBmcm9tICdtbWhnbG9iYWwtemNvcmUnO1xyXG5cclxuXHJcbkBDb21wb25lbnQoe1xyXG4gIHNlbGVjdG9yOiAnYXBwLXp3b3JrZmxvd2J1dHRvbnMnLFxyXG4gIHRlbXBsYXRlVXJsOiAnLi96d29ya2Zsb3didXR0b25zLmNvbXBvbmVudC5odG1sJyxcclxuICBzdHlsZVVybHM6IFsnLi96d29ya2Zsb3didXR0b25zLmNvbXBvbmVudC5zY3NzJ11cclxufSlcclxuXHJcbmV4cG9ydCBjbGFzcyBad29ya2Zsb3didXR0b25zQ29tcG9uZW50IGV4dGVuZHMgQnV0dG9uRmllbGRCYXNlIGltcGxlbWVudHMgWkNvbXBvbmVudCwgT25Jbml0IHtcclxuICAvLyBVUkwgcmVxdWlyZWRcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uLG5vLXVuZGVyc2NvcmUtZGFuZ2xlLGlkLWJsYWNrbGlzdCxpZC1tYXRjaFxyXG4gIGUxd2ZzX3dmY0dldFdvcmtmbG93QnV0dG9uVVJMID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKFwiZTF3ZnNfd2ZjR2V0V29ya2Zsb3dCdXR0b25VUkxcIik7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbixuby11bmRlcnNjb3JlLWRhbmdsZSxpZC1ibGFja2xpc3QsaWQtbWF0Y2hcclxuICBlMXdmc193ZmNfZ2V0V29ya2Zsb3dJbml0aWFsU3RhdHVzVVJMID0gdGhpcy5yZXNvdXJjZUFwaVNlcnZpY2UuZ2V0VVJMKFwiZTF3ZnNfd2ZjX2dldFdvcmtmbG93SW5pdGlhbFN0YXR1c1VSTFwiKTtcclxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25hbWluZy1jb252ZW50aW9uLCBuby11bmRlcnNjb3JlLWRhbmdsZSwgaWQtYmxhY2tsaXN0LCBpZC1tYXRjaFxyXG4gIGUxd2ZzX3dmY19nZXREb2N1bWVudFN0YXR1c1VSTCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTChcImUxd2ZzX3dmY19nZXREb2N1bWVudFN0YXR1c1VSTFwiKTtcclxuXHJcbiAgLy9kb21haW5VUkwgPSBcImh0dHBzOi8vbG9jYWxob3N0OjQ0MzAwL1wiO1xyXG4gIC8vZTF3ZnNfd2ZjR2V0V29ya2Zsb3dCdXR0b25VUkwgPSB0aGlzLmRvbWFpblVSTCArIFwiL2FwaS9Xb3JrZmxvd0NsaWVudHMvR2V0V29ya2Zsb3dDbGllbnRCdXR0b25zL1wiO1xyXG4gIC8vZTF3ZnNfd2ZjX2dldFdvcmtmbG93SW5pdGlhbFN0YXR1c1VSTCA9IHRoaXMuZG9tYWluVVJMICsgXCIvYXBpL1dvcmtmbG93Q2xpZW50cy9HZXRXb3JrZmxvd0luaXRpYWxTdGF0dXMvXCI7XHJcbiAgLy9lMXdmc193ZmNfZ2V0RG9jdW1lbnRTdGF0dXNVUkwgPSB0aGlzLmRvbWFpblVSTCArIFwiL2FwaS9Xb3JrZmxvd0NsaWVudHMvR2V0RG9jdW1lbnRTdGF0dXMvXCI7XHJcbiAgZGF0YUZvcm1GaWVsZHM6IGFueSA9IHt9O1xyXG4gIGlzTG9hZGluZyA9IHRydWU7XHJcbiAgaXNMb2NhbEhvc3RBUEk6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBwdWJsaWMgY29tcG9uZW50U2VydmljZTogWkNvbXBvbmVudFNlcnZpY2UsXHJcbiAgICBwdWJsaWMgZm9udEF3ZVNvbWVTZXJ2aWNlOiBGb250QXdlU29tZVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHdlYkFwaVNlcnZpY2U6IFdlYkFwaVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIHJlc291cmNlQXBpU2VydmljZTogUmVzb3VyY2VBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSBjb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlOiBDb21wb25lbnRFcnJvckhhbmRsZXJTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3b3JrZmxvd1NlcnZpY2U6IFdvcmtmbG93U2VydmljZVxyXG4gICkge1xyXG4gICAgc3VwZXIoY29tcG9uZW50U2VydmljZSk7XHJcbiAgfVxyXG5cclxuICBuZ09uSW5pdCgpIHtcclxuICAgIHN1cGVyLmluaXRDb21wb25lbnQoKS5zdWJzY3JpYmUoKCkgPT4ge1xyXG5cclxuICAgICAgLy8gQ2hlY2sgcHJvamVjdCByZXNvdXJjZVVSTCBpcyBpdCBsb2NhbGhvc3RcclxuICAgICAgaWYgKHRoaXMuZ3JvdXAucmVzb3VyY2VVUkwpIHtcclxuICAgICAgICB0aGlzLmlzTG9jYWxIb3N0QVBJID0gdGhpcy5ncm91cC5yZXNvdXJjZVVSTC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKFwibG9jYWxob3N0XCIpID8gdHJ1ZSA6IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmxvYWRCdXR0b24oKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgbmdBZnRlclZpZXdJbml0KCkge1xyXG4gICAgdGhpcy5jb21wb25lbnRTZXJ2aWNlLmRlY3JlbWVudENvbXBvbmVudENvdW50ZXJGb3JGaWVsZCh0aGlzLmRhdGEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIGxvYWRCdXR0b24oKSB7XHJcbiAgICB0aGlzLmxlZnRCdG5zID0gW107XHJcbiAgICB0aGlzLnJpZ2h0QnRucyA9IFtdO1xyXG4gICAgdGhpcy5pdGVtcyA9IFtdO1xyXG5cclxuICAgIC8vIEdldCBXRlNfRG9jdW1lbnRJZCBpZiBhbnkuXHJcbiAgICBsZXQgZG9jdW1lbnRJZCA9IG51bGw7XHJcbiAgICBpZiAodGhpcy5ncm91cC56TW9kZWwpIHtcclxuICAgICAgZG9jdW1lbnRJZCA9IHRoaXMuZ3JvdXAuek1vZGVsWydXRlNfRG9jdW1lbnRJZCddO1xyXG4gICAgfVxyXG5cclxuICAgIC8vIFNldCB0aGUgZG9jdW1lbnRJZCB0byB0aGUgc2VydmljZVxyXG4gICAgdGhpcy53b3JrZmxvd1NlcnZpY2UuYXBwZW5kV0ZTX0RvY3VtZW50c0luZm8odGhpcy5kYXRhLldvcmtmbG93Q29kZSwgZG9jdW1lbnRJZCk7XHJcblxyXG4gICAgLy8gYnV0dG9uIGNvdW50XHJcbiAgICB0aGlzLmdyb3VwLnpCdXR0b25zQ291bnQrKztcclxuICAgIGlmICh0aGlzLmdyb3VwLnpCdXR0b25zQ291bnQgPT09IDEpIHtcclxuICAgICAgdGhpcy5GaXJzdFpidG4gPSB0cnVlO1xyXG4gICAgfVxyXG5cclxuICAgIHRyeSB7XHJcblxyXG4gICAgICBvZih0cnVlKVxyXG4gICAgICAgIC5waXBlKFxyXG4gICAgICAgICAgY29uY2F0TWFwKCgpID0+IHtcclxuICAgICAgICAgICAgLy8gcmV0cmlldmUgdGhlIHdvcmtmbG93IGJ1dHRvblxyXG4gICAgICAgICAgICByZXR1cm4gdGhpcy53b3JrZmxvd1NlcnZpY2UuZ2V0V29ya2Zsb3dCdXR0b25zRmllbGQoXHJcbiAgICAgICAgICAgICAgdGhpcy5kYXRhLldvcmtmbG93Q29kZSxcclxuICAgICAgICAgICAgICB0aGlzLmUxd2ZzX3dmY0dldFdvcmtmbG93QnV0dG9uVVJMLFxyXG4gICAgICAgICAgICAgIFN0cmluZyh0aGlzLmlzTG9jYWxIb3N0QVBJKVxyXG4gICAgICAgICAgICApXHJcbiAgICAgICAgICB9KSxcclxuICAgICAgICAgIHRhcChyZXN1bHREYXRhID0+IHtcclxuICAgICAgICAgICAgaWYgKHJlc3VsdERhdGEpIHtcclxuICAgICAgICAgICAgICByZXN1bHREYXRhLmZvckVhY2goKGJ1dHRvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWJ1dHRvbi5MYWJlbCkge1xyXG4gICAgICAgICAgICAgICAgICBidXR0b24uTGFiZWwgPSBidXR0b24uTmFtZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdGhpcy5nZXRCdXR0b25MYWJlbChidXR0b24pO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgYXR0cmlidXRlcyA9IEpTT04ucGFyc2UoYnV0dG9uLkF0dHJpYnV0ZXMpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaXNVc2VDdXN0b21DbGFzcyA9IGF0dHJpYnV0ZXMuQ29sb3IgPyBmYWxzZSA6IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgYnV0dG9uID0gdGhpcy5hcHBlbmRUb0F0dHJpYnV0ZVVzZWZ1bERldGFpbChidXR0b24pO1xyXG4gICAgICAgICAgICAgICAgbGV0IGJ0biA9IHtcclxuICAgICAgICAgICAgICAgICAgbmFtZTogYnV0dG9uLk5hbWUsXHJcbiAgICAgICAgICAgICAgICAgIHRleHQ6IGxhYmVsLFxyXG4gICAgICAgICAgICAgICAgICBpY29uOiBaQ29tcG9uZW50SGVscGVyLmdldEljb24oYXR0cmlidXRlcy5JY29uKSxcclxuICAgICAgICAgICAgICAgICAgdmlzaWJsZTogYXR0cmlidXRlcy5WaXNpYmxlLFxyXG4gICAgICAgICAgICAgICAgICBjb2xvcjogaXNVc2VDdXN0b21DbGFzcyA/ICcnIDogKGF0dHJpYnV0ZXMuQ29sb3IgfHwgJ3ByaW1hcnknKSxcclxuICAgICAgICAgICAgICAgICAgZmlsbDogaXNVc2VDdXN0b21DbGFzcyA/ICcnIDogKGF0dHJpYnV0ZXMuRmlsbCB8fCAnc29saWQnKSxcclxuICAgICAgICAgICAgICAgICAgc2l6ZTogYXR0cmlidXRlcy5TaXplIHx8ICdkZWZhdWx0JyxcclxuICAgICAgICAgICAgICAgICAgY2xhc3M6IGlzVXNlQ3VzdG9tQ2xhc3MgPyBgJHthdHRyaWJ1dGVzLkNsYXNzfSB1c2VDdXN0b21DbGFzc2AgOiBhdHRyaWJ1dGVzLkNsYXNzLFxyXG4gICAgICAgICAgICAgICAgICBmaWVsZEF0dHJpYnV0ZTogYnV0dG9uLFxyXG4gICAgICAgICAgICAgICAgICBpY29uTmFtZTogYXR0cmlidXRlcy5JY29uLFxyXG4gICAgICAgICAgICAgICAgICBjbGljazogKHkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1dHRvbkNsaWNrKGJ1dHRvbik7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICBpZiAoYXR0cmlidXRlcy5Qb3NpdGlvblggJiYgYXR0cmlidXRlcy5Qb3NpdGlvblggPT09IFwicmlnaHRcIikge1xyXG4gICAgICAgICAgICAgICAgICB0aGlzLnJpZ2h0QnRucy5wdXNoKGJ0bik7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sZWZ0QnRucy5wdXNoKGJ0bik7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgY29uc3QgbWFwcGVkSW5mbyA9IHtcclxuICAgICAgICAgICAgICAgICAgJ3JvbGUnOiBbXSxcclxuICAgICAgICAgICAgICAgICAgJ3N0YXR1cyc6IFtdLFxyXG4gICAgICAgICAgICAgICAgICAncGFyZW50U3RhdHVzJzogW11cclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAvL1pDb21wb25lbnRIZWxwZXIuY29sbGVjdFdvcmtmbG93QnV0dG9uKHRoaXMuZ3JvdXAsIHRoaXMuZGF0YS5Xb3JrZmxvd0NvZGUsIGJ1dHRvbkxhYmVsLCBidXR0b24sIGF0dHJpYnV0ZXMsIG1hcHBlZEluZm8pO1xyXG4gICAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLml0ZW1zLnB1c2goLi4udGhpcy5sZWZ0QnRucywgLi4udGhpcy5yaWdodEJ0bnMpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUud2FybigndW5hYmxlIHRvIGdldCB3b3JrZmxvdyBidXR0b24uIGRhdGEgcmV0dXJuZWQgbnVsbC4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBzd2l0Y2hNYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICByZXR1cm4gc3VwZXIudHJhbnNsYXRlQnV0dG9uc0xhYmVsKHRoaXMuaXRlbXMpO1xyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICBtYXAoKCkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuZGF0YS5EaXNhYmxlU3luY1dvcmtmbG93U3RhdHVzKSB7XHJcbiAgICAgICAgICAgICAgLy8gU2V0IGRlZmF1bHQgc3RhdHVzXHJcbiAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9kb3Qtbm90YXRpb25cclxuICAgICAgICAgICAgICBpZiAoIXRoaXMuZ3JvdXAuek1vZGVsW1wiV0ZTX1N0YXR1c05hbWVcIl0pIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBhcmFtcyA9IHtcclxuICAgICAgICAgICAgICAgICAgXCJXb3JrZmxvd01hc3RlckNvZGVcIjogdGhpcy5kYXRhLldvcmtmbG93Q29kZVxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy53ZWJBcGlTZXJ2aWNlLmh0dHBQb3N0JCh0aGlzLmUxd2ZzX3dmY19nZXRXb3JrZmxvd0luaXRpYWxTdGF0dXNVUkwsIHBhcmFtcykucGlwZShcclxuICAgICAgICAgICAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5EYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLnByZXNldE1vZGVsVmFsdWUoXCJXRlNfU3RhdHVzSWRcIiwgcmVzLkRhdGFbXCJJZFwiXSwgdGhpcy5ncm91cCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICBaQ29tcG9uZW50SGVscGVyLnByZXNldE1vZGVsVmFsdWUoXCJXRlNfU3RhdHVzTmFtZVwiLCByZXMuRGF0YVtcIk5hbWVcIl0sIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5wcmVzZXRNb2RlbFZhbHVlKFwiV0ZTX1N0YXR1c0NvZGVcIiwgcmVzLkRhdGFbXCJDb2RlXCJdLCB0aGlzLmdyb3VwKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93U2VydmljZS5zZXRDdXJyZW50RG9jdW1lbnRTdGF0dXMocmVzLkRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gV2hlbiBsb2FkaW5nIGFsc28gdG8gZ2V0IGN1cnJlbnQgU3RhdHVzIEluZm9ybWF0aW9uIGlmIGFueS5cclxuICAgICAgICAgICAgICAgIGNvbnN0IGRvY0luZm9QYXJhbSA9IHtcclxuICAgICAgICAgICAgICAgICAgXCJXb3JrZmxvd01hc3RlckNvZGVcIjogdGhpcy5kYXRhLldvcmtmbG93Q29kZSxcclxuICAgICAgICAgICAgICAgICAgXCJEb2N1bWVudElkXCI6IGRvY3VtZW50SWQsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgICAgICAgIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQodGhpcy5lMXdmc193ZmNfZ2V0RG9jdW1lbnRTdGF0dXNVUkwsIGRvY0luZm9QYXJhbSkucGlwZShcclxuICAgICAgICAgICAgICAgICAgbWFwKHJlcyA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd1NlcnZpY2Uuc2V0Q3VycmVudERvY3VtZW50U3RhdHVzKHJlcyk7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5EYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICB0aGlzLndvcmtmbG93U2VydmljZS5zZXRDdXJyZW50RG9jdW1lbnRTdGF0dXMocmVzLkRhdGEpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pXHJcbiAgICAgICAgKS5zdWJzY3JpYmUoKTtcclxuXHJcbiAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICBjb25zb2xlLmVycm9yKFwiZXJyb3I6IFwiLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBidXR0b25DbGljayhidXR0b246IGFueSkge1xyXG4gICAgLy8gR2V0IHRoZSBmb3JtIGdyb3VwXHJcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmdyb3VwLmZvcm0gYXMgRm9ybUdyb3VwO1xyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IEpTT04ucGFyc2UoYnV0dG9uLkF0dHJpYnV0ZXMpO1xyXG4gICAgY29uc3QgYnV0dG9uVHlwZUNvZGUgPSBidXR0b24uVHlwZUNvZGUudG9VcHBlckNhc2UoKTtcclxuXHJcbiAgICAvLy8vIFNraXAgaWYgdGhlIGJ1dHRvbidzIGNsaWNrIGV2ZW50IGluY2x1ZGVzIGJhY2tuYXZpZ2F0aW9uXHJcbiAgICAvL2lmIChidXR0b25UeXBlQ29kZSA9PT0gJ0dPVE8nKSB7XHJcbiAgICAvLyAgLy8gQ2hlY2sgaWYgdGhlIGZvcm0gaGFzIHVuc2F2ZWQgY2hhbmdlc1xyXG4gICAgLy8gIGlmICghdGhpcy5kYXRhLlNraXBDaGVja0Zvcm1EaXJ0eSAmJiAhZm9ybUdyb3VwLmRpcnR5KSB7XHJcbiAgICAvLyAgICBjb25zb2xlLndhcm4oYFJlY29yZCBub3Qgc2F2ZWQgYmVjYXVzZSB0aGUgZm9ybSBpcyBub3QgZGlydHkuYCk7XHJcbiAgICAvLyAgICByZXR1cm47XHJcbiAgICAvLyAgfVxyXG5cclxuICAgIC8vICAvLyBDaGVjayBpZiB0aGUgZm9ybSBpcyB2YWxpZFxyXG4gICAgLy8gIGlmICh0aGlzLmRhdGEuVXNlRGVmYXVsdFZhbGlkYXRlICYmICFmb3JtR3JvdXAudmFsaWQpIHtcclxuICAgIC8vICAgIHRoaXMuY29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZS5zaG93Rm9ybUdyb3VwRXJyb3JNZXNzYWdlKHRoaXMuZ3JvdXAsIGZvcm1Hcm91cCk7XHJcbiAgICAvLyAgICByZXR1cm47XHJcbiAgICAvLyAgfVxyXG4gICAgLy99XHJcblxyXG4gICAgLy8gVHlwZSAxID09IGZ1bmN0aW9uYWw7XHJcbiAgICAvLyBUeXBlIDIgPT0gR09UTzsgXHJcbiAgICB0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkID0gYnV0dG9uLmRpc2FibGVUcmlnZ2VyICE9IHVuZGVmaW5lZCA/ICFidXR0b24uZGlzYWJsZVRyaWdnZXIgOiB0cnVlO1xyXG4gICAgc3dpdGNoIChidXR0b25UeXBlQ29kZSkge1xyXG4gICAgICBjYXNlIFwiRlVOQ1RJT05cIjpcclxuICAgICAgICAvLyBIYW5kbGUgZnVuY3Rpb25hbCBidXR0b25zXHJcbiAgICAgICAgaWYgKCF0aGlzLmdyb3VwLmlzVHJpZ2dlcmVkKSB7XHJcbiAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zdCBncm91cCA9IHRoaXMuZ3JvdXA7XHJcblxyXG4gICAgICAgIC8vIERpc2FibGUgdHJpZ2dlciB0aW1lclxyXG4gICAgICAgIGlmICghYXR0cmlidXRlc1snRGlzYWJsZVRyaWdnZXJUaW1lciddKSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgZ3JvdXBbJ2lzVHJpZ2dlcmVkJ10gPSBmYWxzZTtcclxuICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBjb25zb2xlLmxvZyhcIkZ1bmN0aW9uYWwgQnV0dG9uOiBcIiwgYnV0dG9uLk5hbWUpO1xyXG5cclxuICAgICAgICAvLyBDYWxsIHRoZSB3b3JrZmxvdyBzZXJ2aWNlIHRvIGhhbmRsZSB0aGUgZnVuY3Rpb25hbCBidXR0b24gY2xpY2sgZXZlbnRcclxuICAgICAgICB0aGlzLndvcmtmbG93U2VydmljZS5mdW5jdGlvbmFsQnV0dG9uX09uQ2xpY2soYXR0cmlidXRlcywgdGhpcy5ncm91cCk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgXCJHT1RPXCI6XHJcbiAgICAgICAgY29uc29sZS5sb2coXCJHT1RPIEJ1dHRvbjogXCIsIGJ1dHRvbi5OYW1lKTtcclxuICAgICAgICAvLyBDYWxsIHRoZSB3b3JrZmxvdyBzZXJ2aWNlIHRvIGhhbmRsZSB0aGUgR09UTyBidXR0b24gY2xpY2sgZXZlbnQgXHJcbiAgICAgICAgdGhpcy53b3JrZmxvd1NlcnZpY2UuZ290b0J1dHRvbl9PbmNsaWNrKGJ1dHRvbiwgdGhpcy5kYXRhLCBhdHRyaWJ1dGVzLCB0aGlzLmdyb3VwLCB0aGlzLmlzTG9jYWxIb3N0QVBJKS5zdWJzY3JpYmUocmVzID0+IHtcclxuICAgICAgICAgIC8vIFJlbG9hZCB0aGUgYnV0dG9uXHJcbiAgICAgICAgICB0aGlzLmxvYWRCdXR0b24oKTtcclxuXHJcbiAgICAgICAgICAvLyBSZXNldCB0cmlnZ2VyIHN0YXR1c1xyXG4gICAgICAgICAgdGhpcy5ncm91cC5pc1RyaWdnZXJlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIGlmIChyZXMpIHtcclxuICAgICAgICAgICAgLy8gVHJpZ2dlciBlbWFpbCBzZW5kaW5nXHJcbiAgICAgICAgICAgIHRoaXMud29ya2Zsb3dTZXJ2aWNlLnRyaWdnZXJTZW5kRW1haWwodGhpcy5ncm91cCkuc3Vic2NyaWJlKCk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgY29uc29sZS53YXJuKGBJbnZhbGlkIEJ1dHRvbiBUeXBlOiAke2J1dHRvbi5OYW1lfWApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBhcHBlbmRUb0F0dHJpYnV0ZVVzZWZ1bERldGFpbChidXR0b246IGFueSkge1xyXG4gICAgY29uc3QgYXR0cmlidXRlcyA9IEpTT04ucGFyc2UoYnV0dG9uLkF0dHJpYnV0ZXMpO1xyXG5cclxuICAgIGNvbnN0IG5ld0F0dHJpYnV0ZXMgPSB7XHJcbiAgICAgIC4uLmF0dHJpYnV0ZXMsXHJcbiAgICAgIHpCdXR0b25OYW1lOiB0aGlzLmRhdGEuTmFtZSxcclxuICAgICAgVHlwZUNvZGU6IGJ1dHRvbi5UeXBlQ29kZSxcclxuICAgICAgV29ya2Zsb3dDb2RlOiB0aGlzLmRhdGEuV29ya2Zsb3dDb2RlLFxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBuZXdCdXR0b24gPSB7XHJcbiAgICAgIC4uLmJ1dHRvbixcclxuICAgICAgQXR0cmlidXRlczogSlNPTi5zdHJpbmdpZnkobmV3QXR0cmlidXRlcyksXHJcbiAgICAgIGRpc2FibGVUcmlnZ2VyOiB0aGlzLmlzQnV0dG9uRGlzYWJsZVRyaWdnZXIodGhpcy5kYXRhLCBidXR0b24pLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gbmV3QnV0dG9uO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBpc0J1dHRvbkRpc2FibGVUcmlnZ2VyKGRhdGE6IFpGaWVsZCwgYnV0dG9uOiBhbnkpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBidXR0b24uRGlzYWJsZVRyaWdnZXIgIT0gdW5kZWZpbmVkID8gYnV0dG9uLkRpc2FibGVUcmlnZ2VyIDogKGRhdGEuRGlzYWJsZVRyaWdnZXIgIT0gdW5kZWZpbmVkID8gZGF0YS5EaXNhYmxlVHJpZ2dlciA6IGZhbHNlKTtcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImUxdGFnLXN0eWxlXCJcclxuICAqbmdJZj1cIiFncm91cC5pc0xvYWRpbmcgJiYgKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpICYmIGl0ZW1zLmxlbmd0aCA+IDBcIlxyXG4gIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImlvbi1tYXJnaW4tdmVydGljYWwgZTF0YWctc3R5bGUxXCIgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpICYmIGl0ZW1zLmxlbmd0aCA+IDEgJiYgRmlyc3RaYnRuID09PSBmYWxzZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiPlxyXG4gICAgPGtlbmRvLWRyb3Bkb3duYnV0dG9uIFtkYXRhXT1cIml0ZW1zXCIgc2l6ZT1cImxhcmdlXCIgW2xvb2tdPVwiJ291dGxpbmUnXCIgY2xhc3M9XCJpb24tYWN0aXZhdGFibGUgcmlwcGxlLXBhcmVudCBlMXRhZy1zdHlsZTJcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTJcIj5cclxuICAgICAgQWN0aW9uc1xyXG4gICAgICA8aW9uLXJpcHBsZS1lZmZlY3Q+PC9pb24tcmlwcGxlLWVmZmVjdD5cclxuICAgIDwva2VuZG8tZHJvcGRvd25idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCIhaXNNb2JpbGVTY3JlZW4oKSB8fCBpdGVtcy5sZW5ndGggPT09IDFcIiBbbmdDbGFzc109XCJkYXRhLkRpdkNsYXNzXCIgY2xhc3M9XCJidG4tY29udGFpbmVyIGUxdGFnLXN0eWxlM1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlM1wiPlxyXG4gICAgPCEtLSA8YnV0dG9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaSA9IGluZGV4XCIgKGNsaWNrKT1cImJ1dHRvbkNsaWNrKGl0ZW0uZmllbGRBdHRyaWJ1dGUpXCJcclxuICAgICAgICAgICAga2VuZG9CdXR0b24gW3RvZ2dsYWJsZV09XCJ0cnVlXCIgW2ljb25dPVwiaXRlbS5pY29uXCIgW2hpZGRlbl09XCIhaXNCdG5WaXNpYmxlKGl0ZW0udmlzaWJsZSlcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiPlxyXG4gICAgICB7e2l0ZW0udGV4dH19XHJcbiAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnRuLWxlZnQgZTF0YWctc3R5bGU0XCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU0XCI+XHJcbiAgICAgIDxpb24tYnV0dG9uIFtmaWxsXT1cIml0ZW0uZmlsbFwiIFtzaXplXT1cIml0ZW0uc2l6ZVwiIFtjb2xvcl09XCJpdGVtLmNvbG9yXCIgc3Ryb25nPVwidHJ1ZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxlZnRCdG5zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICBbbmdDbGFzc109XCJpdGVtLmNsYXNzXCIgKGNsaWNrKT1cImJ1dHRvbkNsaWNrKGl0ZW0uZmllbGRBdHRyaWJ1dGUpXCIgW2hpZGRlbl09XCIhaXNCdG5WaXNpYmxlKGl0ZW0udmlzaWJsZSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJncm91cC5pc1RyaWdnZXJlZFwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiIGNsYXNzPVwiZTF0YWctc3R5bGU1XCI+XHJcbiAgICAgICAgPGZhLWljb24gY2xhc3M9XCJidG4taWNvblwiICpuZ0lmPVwiaXRlbS5pY29uXCIgW2ljb25dPVwiZ2V0Rm9udEF3ZXNvbWUoaXRlbS5pY29uLCBmb250QXdlU29tZVNlcnZpY2UpXCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS50ZXh0XCIgW2NsYXNzLmJ0bi1sYWJlbF09XCJpdGVtLmljb25cIiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj57e2l0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJidG4tcmlnaHQgZTF0YWctc3R5bGU2XCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU2XCI+XHJcbiAgICAgIDxpb24tYnV0dG9uIFtmaWxsXT1cIml0ZW0uZmlsbFwiIFtzaXplXT1cIml0ZW0uc2l6ZVwiIFtjb2xvcl09XCJpdGVtLmNvbG9yXCIgc3Ryb25nPVwidHJ1ZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJpZ2h0QnRuczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jbGFzc1wiIChjbGljayk9XCJidXR0b25DbGljayhpdGVtLmZpZWxkQXR0cmlidXRlKVwiIFtoaWRkZW5dPVwiIWlzQnRuVmlzaWJsZShpdGVtLnZpc2libGUpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZ3JvdXAuaXNUcmlnZ2VyZWRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTdcIiBjbGFzcz1cImUxdGFnLXN0eWxlN1wiPlxyXG4gICAgICAgIDxmYS1pY29uIGNsYXNzPVwiYnRuLWljb25cIiAqbmdJZj1cIml0ZW0uaWNvblwiIFtpY29uXT1cImdldEZvbnRBd2Vzb21lKGl0ZW0uaWNvbiwgZm9udEF3ZVNvbWVTZXJ2aWNlKVwiPjwvZmEtaWNvbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0udGV4dFwiIFtjbGFzcy5idG4tbGFiZWxdPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJpb24tdGV4dC1jYXBpdGFsaXplXCI+e3tpdGVtLnRleHR9fTwvc3Bhbj5cclxuICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=
245
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiendvcmtmbG93YnV0dG9ucy5jb21wb25lbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9tbWhnbG9iYWwtZHluYW1pY2Zvcm0vc3JjL2xpYi96d29ya2Zsb3didXR0b25zL3p3b3JrZmxvd2J1dHRvbnMuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbW1oZ2xvYmFsLWR5bmFtaWNmb3JtL3NyYy9saWIvendvcmtmbG93YnV0dG9ucy96d29ya2Zsb3didXR0b25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLCtCQUErQjtBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFVLE1BQU0sZUFBZSxDQUFDO0FBR2xELDZCQUE2QjtBQUU3Qiw4QkFBOEI7QUFDOUIsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUMxQixPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFaEUsMkNBQTJDO0FBQzNDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx5Q0FBeUMsQ0FBQztBQUUxRSxPQUFPLEVBRU8sZ0JBQWdCLEVBQzdCLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7OztBQVN6QixNQUFNLE9BQU8seUJBQTBCLFNBQVEsZUFBZTtJQWlCNUQsWUFDUyxnQkFBbUMsRUFDbkMsa0JBQXNDLEVBQ3JDLGFBQTRCLEVBQzVCLGtCQUFzQyxFQUN0Qyw0QkFBMEQsRUFDMUQsZUFBZ0M7UUFFeEMsS0FBSyxDQUFDLGdCQUFnQixDQUFDLENBQUM7UUFQakIscUJBQWdCLEdBQWhCLGdCQUFnQixDQUFtQjtRQUNuQyx1QkFBa0IsR0FBbEIsa0JBQWtCLENBQW9CO1FBQ3JDLGtCQUFhLEdBQWIsYUFBYSxDQUFlO1FBQzVCLHVCQUFrQixHQUFsQixrQkFBa0IsQ0FBb0I7UUFDdEMsaUNBQTRCLEdB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KiogQW5ndWxhciAqKioqKioqKioqL1xyXG5pbXBvcnQgeyBDb21wb25lbnQsIE9uSW5pdCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBGb3JtR3JvdXAgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcblxyXG4vKioqKioqKioqKiBJb25pYyAqKioqKioqKioqL1xyXG5cclxuLyoqKioqKioqKiogUGx1Z2luICoqKioqKioqKiovXHJcbmltcG9ydCB7IG9mIH0gZnJvbSAncnhqcyc7XHJcbmltcG9ydCB7IGNvbmNhdE1hcCwgbWFwLCBzd2l0Y2hNYXAsIHRhcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcclxuXHJcbi8qKioqKioqKioqIENvbXBvbmVudCAmIFNlcnZpY2UgKioqKioqKioqKi9cclxuaW1wb3J0IHsgQnV0dG9uRmllbGRCYXNlIH0gZnJvbSAnLi4vY29tcG9uZW50cy9idXR0b25maWVsZGJhc2UuY29tcG9uZW50JztcclxuaW1wb3J0IHsgWkNvbXBvbmVudFNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy96Y29tcG9uZW50LnNlcnZpY2UnO1xyXG5pbXBvcnQge1xyXG4gIFdlYkFwaVNlcnZpY2UsIFJlc291cmNlQXBpU2VydmljZSwgV29ya2Zsb3dTZXJ2aWNlLCBGb250QXdlU29tZVNlcnZpY2UsIENvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2UsXHJcbiAgWkNvbXBvbmVudCwgWkNvbXBvbmVudEhlbHBlciwgWkZpZWxkXHJcbn0gZnJvbSAnbW1oZ2xvYmFsLXpjb3JlJztcclxuXHJcblxyXG5AQ29tcG9uZW50KHtcclxuICBzZWxlY3RvcjogJ2FwcC16d29ya2Zsb3didXR0b25zJyxcclxuICB0ZW1wbGF0ZVVybDogJy4vendvcmtmbG93YnV0dG9ucy5jb21wb25lbnQuaHRtbCcsXHJcbiAgc3R5bGVVcmxzOiBbJy4vendvcmtmbG93YnV0dG9ucy5jb21wb25lbnQuc2NzcyddXHJcbn0pXHJcblxyXG5leHBvcnQgY2xhc3MgWndvcmtmbG93YnV0dG9uc0NvbXBvbmVudCBleHRlbmRzIEJ1dHRvbkZpZWxkQmFzZSBpbXBsZW1lbnRzIFpDb21wb25lbnQsIE9uSW5pdCB7XHJcbiAgLy8gVVJMIHJlcXVpcmVkXHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbixuby11bmRlcnNjb3JlLWRhbmdsZSxpZC1ibGFja2xpc3QsaWQtbWF0Y2hcclxuICBlMXdmc193ZmNHZXRXb3JrZmxvd0J1dHRvblVSTCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTChcImUxd2ZzX3dmY0dldFdvcmtmbG93QnV0dG9uVVJMXCIpO1xyXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbmFtaW5nLWNvbnZlbnRpb24sbm8tdW5kZXJzY29yZS1kYW5nbGUsaWQtYmxhY2tsaXN0LGlkLW1hdGNoXHJcbiAgZTF3ZnNfd2ZjX2dldFdvcmtmbG93SW5pdGlhbFN0YXR1c1VSTCA9IHRoaXMucmVzb3VyY2VBcGlTZXJ2aWNlLmdldFVSTChcImUxd2ZzX3dmY19nZXRXb3JrZmxvd0luaXRpYWxTdGF0dXNVUkxcIik7XHJcbiAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9uYW1pbmctY29udmVudGlvbiwgbm8tdW5kZXJzY29yZS1kYW5nbGUsIGlkLWJsYWNrbGlzdCwgaWQtbWF0Y2hcclxuICBlMXdmc193ZmNfZ2V0RG9jdW1lbnRTdGF0dXNVUkwgPSB0aGlzLnJlc291cmNlQXBpU2VydmljZS5nZXRVUkwoXCJlMXdmc193ZmNfZ2V0RG9jdW1lbnRTdGF0dXNVUkxcIik7XHJcblxyXG4gIC8vZG9tYWluVVJMID0gXCJodHRwczovL2xvY2FsaG9zdDo0NDMwMC9cIjtcclxuICAvL2Uxd2ZzX3dmY0dldFdvcmtmbG93QnV0dG9uVVJMID0gdGhpcy5kb21haW5VUkwgKyBcIi9hcGkvV29ya2Zsb3dDbGllbnRzL0dldFdvcmtmbG93Q2xpZW50QnV0dG9ucy9cIjtcclxuICAvL2Uxd2ZzX3dmY19nZXRXb3JrZmxvd0luaXRpYWxTdGF0dXNVUkwgPSB0aGlzLmRvbWFpblVSTCArIFwiL2FwaS9Xb3JrZmxvd0NsaWVudHMvR2V0V29ya2Zsb3dJbml0aWFsU3RhdHVzL1wiO1xyXG4gIC8vZTF3ZnNfd2ZjX2dldERvY3VtZW50U3RhdHVzVVJMID0gdGhpcy5kb21haW5VUkwgKyBcIi9hcGkvV29ya2Zsb3dDbGllbnRzL0dldERvY3VtZW50U3RhdHVzL1wiO1xyXG4gIGRhdGFGb3JtRmllbGRzOiBhbnkgPSB7fTtcclxuICBpc0xvYWRpbmcgPSB0cnVlO1xyXG4gIGlzTG9jYWxIb3N0QVBJOiBib29sZWFuID0gZmFsc2U7XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHVibGljIGNvbXBvbmVudFNlcnZpY2U6IFpDb21wb25lbnRTZXJ2aWNlLFxyXG4gICAgcHVibGljIGZvbnRBd2VTb21lU2VydmljZTogRm9udEF3ZVNvbWVTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSB3ZWJBcGlTZXJ2aWNlOiBXZWJBcGlTZXJ2aWNlLFxyXG4gICAgcHJpdmF0ZSByZXNvdXJjZUFwaVNlcnZpY2U6IFJlc291cmNlQXBpU2VydmljZSxcclxuICAgIHByaXZhdGUgY29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZTogQ29tcG9uZW50RXJyb3JIYW5kbGVyU2VydmljZSxcclxuICAgIHByaXZhdGUgd29ya2Zsb3dTZXJ2aWNlOiBXb3JrZmxvd1NlcnZpY2VcclxuICApIHtcclxuICAgIHN1cGVyKGNvbXBvbmVudFNlcnZpY2UpO1xyXG4gIH1cclxuXHJcbiAgbmdPbkluaXQoKSB7XHJcbiAgICBzdXBlci5pbml0Q29tcG9uZW50KCkuc3Vic2NyaWJlKCgpID0+IHtcclxuXHJcbiAgICAgIC8vIENoZWNrIHByb2plY3QgcmVzb3VyY2VVUkwgaXMgaXQgbG9jYWxob3N0XHJcbiAgICAgIGlmICh0aGlzLmdyb3VwLnJlc291cmNlVVJMKSB7XHJcbiAgICAgICAgdGhpcy5pc0xvY2FsSG9zdEFQSSA9IHRoaXMuZ3JvdXAucmVzb3VyY2VVUkwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhcImxvY2FsaG9zdFwiKSA/IHRydWUgOiBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5sb2FkQnV0dG9uKCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIG5nQWZ0ZXJWaWV3SW5pdCgpIHtcclxuICAgIHRoaXMuY29tcG9uZW50U2VydmljZS5kZWNyZW1lbnRDb21wb25lbnRDb3VudGVyRm9yRmllbGQodGhpcy5kYXRhKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBsb2FkQnV0dG9uKCkge1xyXG4gICAgdGhpcy5sZWZ0QnRucyA9IFtdO1xyXG4gICAgdGhpcy5yaWdodEJ0bnMgPSBbXTtcclxuICAgIHRoaXMuaXRlbXMgPSBbXTtcclxuXHJcbiAgICAvLyBHZXQgV0ZTX0RvY3VtZW50SWQgaWYgYW55LlxyXG4gICAgbGV0IGRvY3VtZW50SWQgPSBudWxsO1xyXG4gICAgaWYgKHRoaXMuZ3JvdXAuek1vZGVsKSB7XHJcbiAgICAgIGRvY3VtZW50SWQgPSB0aGlzLmdyb3VwLnpNb2RlbFsnV0ZTX0RvY3VtZW50SWQnXTtcclxuICAgIH1cclxuXHJcbiAgICAvLyBTZXQgdGhlIGRvY3VtZW50SWQgdG8gdGhlIHNlcnZpY2VcclxuICAgIHRoaXMud29ya2Zsb3dTZXJ2aWNlLmFwcGVuZFdGU19Eb2N1bWVudHNJbmZvKHRoaXMuZGF0YS5Xb3JrZmxvd0NvZGUsIGRvY3VtZW50SWQpO1xyXG5cclxuICAgIC8vIGJ1dHRvbiBjb3VudFxyXG4gICAgdGhpcy5ncm91cC56QnV0dG9uc0NvdW50Kys7XHJcbiAgICBpZiAodGhpcy5ncm91cC56QnV0dG9uc0NvdW50ID09PSAxKSB7XHJcbiAgICAgIHRoaXMuRmlyc3RaYnRuID0gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICB0cnkge1xyXG5cclxuICAgICAgb2YodHJ1ZSlcclxuICAgICAgICAucGlwZShcclxuICAgICAgICAgIGNvbmNhdE1hcCgoKSA9PiB7XHJcbiAgICAgICAgICAgIC8vIHJldHJpZXZlIHRoZSB3b3JrZmxvdyBidXR0b25cclxuICAgICAgICAgICAgcmV0dXJuIHRoaXMud29ya2Zsb3dTZXJ2aWNlLmdldFdvcmtmbG93QnV0dG9uc0ZpZWxkKFxyXG4gICAgICAgICAgICAgIHRoaXMuZGF0YS5Xb3JrZmxvd0NvZGUsXHJcbiAgICAgICAgICAgICAgdGhpcy5lMXdmc193ZmNHZXRXb3JrZmxvd0J1dHRvblVSTCxcclxuICAgICAgICAgICAgICBTdHJpbmcodGhpcy5pc0xvY2FsSG9zdEFQSSlcclxuICAgICAgICAgICAgKVxyXG4gICAgICAgICAgfSksXHJcbiAgICAgICAgICB0YXAocmVzdWx0RGF0YSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChyZXN1bHREYXRhKSB7XHJcbiAgICAgICAgICAgICAgcmVzdWx0RGF0YS5mb3JFYWNoKChidXR0b246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgaWYgKCFidXR0b24uTGFiZWwpIHtcclxuICAgICAgICAgICAgICAgICAgYnV0dG9uLkxhYmVsID0gYnV0dG9uLk5hbWU7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBjb25zdCBsYWJlbCA9IHRoaXMuZ2V0QnV0dG9uTGFiZWwoYnV0dG9uKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBKU09OLnBhcnNlKGJ1dHRvbi5BdHRyaWJ1dGVzKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGlzVXNlQ3VzdG9tQ2xhc3MgPSBhdHRyaWJ1dGVzLkNvbG9yID8gZmFsc2UgOiB0cnVlO1xyXG5cclxuICAgICAgICAgICAgICAgIGJ1dHRvbiA9IHRoaXMuYXBwZW5kVG9BdHRyaWJ1dGVVc2VmdWxEZXRhaWwoYnV0dG9uKTtcclxuICAgICAgICAgICAgICAgIGxldCBidG4gPSB7XHJcbiAgICAgICAgICAgICAgICAgIG5hbWU6IGJ1dHRvbi5OYW1lLFxyXG4gICAgICAgICAgICAgICAgICB0ZXh0OiBsYWJlbCxcclxuICAgICAgICAgICAgICAgICAgaWNvbjogWkNvbXBvbmVudEhlbHBlci5nZXRJY29uKGF0dHJpYnV0ZXMuSWNvbiksXHJcbiAgICAgICAgICAgICAgICAgIHZpc2libGU6IGF0dHJpYnV0ZXMuVmlzaWJsZSxcclxuICAgICAgICAgICAgICAgICAgY29sb3I6IGlzVXNlQ3VzdG9tQ2xhc3MgPyAnJyA6IChhdHRyaWJ1dGVzLkNvbG9yIHx8ICdwcmltYXJ5JyksXHJcbiAgICAgICAgICAgICAgICAgIGZpbGw6IGlzVXNlQ3VzdG9tQ2xhc3MgPyAnJyA6IChhdHRyaWJ1dGVzLkZpbGwgfHwgJ3NvbGlkJyksXHJcbiAgICAgICAgICAgICAgICAgIHNpemU6IGF0dHJpYnV0ZXMuU2l6ZSB8fCAnZGVmYXVsdCcsXHJcbiAgICAgICAgICAgICAgICAgIGNsYXNzOiBpc1VzZUN1c3RvbUNsYXNzID8gYCR7YXR0cmlidXRlcy5DbGFzc30gdXNlQ3VzdG9tQ2xhc3NgIDogYXR0cmlidXRlcy5DbGFzcyxcclxuICAgICAgICAgICAgICAgICAgZmllbGRBdHRyaWJ1dGU6IGJ1dHRvbixcclxuICAgICAgICAgICAgICAgICAgaWNvbk5hbWU6IGF0dHJpYnV0ZXMuSWNvbixcclxuICAgICAgICAgICAgICAgICAgY2xpY2s6ICh5KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5idXR0b25DbGljayhidXR0b24pO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZXMuUG9zaXRpb25YICYmIGF0dHJpYnV0ZXMuUG9zaXRpb25YID09PSBcInJpZ2h0XCIpIHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yaWdodEJ0bnMucHVzaChidG4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGVmdEJ0bnMucHVzaChidG4pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGNvbnN0IG1hcHBlZEluZm8gPSB7XHJcbiAgICAgICAgICAgICAgICAgICdyb2xlJzogW10sXHJcbiAgICAgICAgICAgICAgICAgICdzdGF0dXMnOiBbXSxcclxuICAgICAgICAgICAgICAgICAgJ3BhcmVudFN0YXR1cyc6IFtdXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgLy9aQ29tcG9uZW50SGVscGVyLmNvbGxlY3RXb3JrZmxvd0J1dHRvbih0aGlzLmdyb3VwLCB0aGlzLmRhdGEuV29ya2Zsb3dDb2RlLCBidXR0b25MYWJlbCwgYnV0dG9uLCBhdHRyaWJ1dGVzLCBtYXBwZWRJbmZvKTtcclxuICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5pdGVtcy5wdXNoKC4uLnRoaXMubGVmdEJ0bnMsIC4uLnRoaXMucmlnaHRCdG5zKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLndhcm4oJ3VuYWJsZSB0byBnZXQgd29ya2Zsb3cgYnV0dG9uLiBkYXRhIHJldHVybmVkIG51bGwuJyk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgc3dpdGNoTWFwKCgpID0+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHN1cGVyLnRyYW5zbGF0ZUJ1dHRvbnNMYWJlbCh0aGlzLml0ZW1zKTtcclxuICAgICAgICAgIH0pLFxyXG4gICAgICAgICAgbWFwKCgpID0+IHtcclxuICAgICAgICAgICAgaWYgKCF0aGlzLmRhdGEuRGlzYWJsZVN5bmNXb3JrZmxvd1N0YXR1cykge1xyXG4gICAgICAgICAgICAgIC8vIFNldCBkZWZhdWx0IHN0YXR1c1xyXG4gICAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvZG90LW5vdGF0aW9uXHJcbiAgICAgICAgICAgICAgaWYgKCF0aGlzLmdyb3VwLnpNb2RlbFtcIldGU19TdGF0dXNOYW1lXCJdKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBwYXJhbXMgPSB7XHJcbiAgICAgICAgICAgICAgICAgIFwiV29ya2Zsb3dNYXN0ZXJDb2RlXCI6IHRoaXMuZGF0YS5Xb3JrZmxvd0NvZGVcclxuICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMud2ViQXBpU2VydmljZS5odHRwUG9zdCQodGhpcy5lMXdmc193ZmNfZ2V0V29ya2Zsb3dJbml0aWFsU3RhdHVzVVJMLCBwYXJhbXMpLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIG1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5wcmVzZXRNb2RlbFZhbHVlKFwiV0ZTX1N0YXR1c0lkXCIsIHJlcy5EYXRhW1wiSWRcIl0sIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgWkNvbXBvbmVudEhlbHBlci5wcmVzZXRNb2RlbFZhbHVlKFwiV0ZTX1N0YXR1c05hbWVcIiwgcmVzLkRhdGFbXCJOYW1lXCJdLCB0aGlzLmdyb3VwKTtcclxuICAgICAgICAgICAgICAgICAgICAgIFpDb21wb25lbnRIZWxwZXIucHJlc2V0TW9kZWxWYWx1ZShcIldGU19TdGF0dXNDb2RlXCIsIHJlcy5EYXRhW1wiQ29kZVwiXSwgdGhpcy5ncm91cCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd1NlcnZpY2Uuc2V0Q3VycmVudERvY3VtZW50U3RhdHVzKHJlcy5EYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIFdoZW4gbG9hZGluZyBhbHNvIHRvIGdldCBjdXJyZW50IFN0YXR1cyBJbmZvcm1hdGlvbiBpZiBhbnkuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBkb2NJbmZvUGFyYW0gPSB7XHJcbiAgICAgICAgICAgICAgICAgIFwiV29ya2Zsb3dNYXN0ZXJDb2RlXCI6IHRoaXMuZGF0YS5Xb3JrZmxvd0NvZGUsXHJcbiAgICAgICAgICAgICAgICAgIFwiRG9jdW1lbnRJZFwiOiBkb2N1bWVudElkLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICB0aGlzLndlYkFwaVNlcnZpY2UuaHR0cFBvc3QkKHRoaXMuZTF3ZnNfd2ZjX2dldERvY3VtZW50U3RhdHVzVVJMLCBkb2NJbmZvUGFyYW0pLnBpcGUoXHJcbiAgICAgICAgICAgICAgICAgIG1hcChyZXMgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIHRoaXMud29ya2Zsb3dTZXJ2aWNlLnNldEN1cnJlbnREb2N1bWVudFN0YXR1cyhyZXMpO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChyZXMuRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgdGhpcy53b3JrZmxvd1NlcnZpY2Uuc2V0Q3VycmVudERvY3VtZW50U3RhdHVzKHJlcy5EYXRhKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9KVxyXG4gICAgICAgICkuc3Vic2NyaWJlKCk7XHJcblxyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5lcnJvcihcImVycm9yOiBcIiwgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYnV0dG9uQ2xpY2soYnV0dG9uOiBhbnkpIHtcclxuICAgIC8vIEdldCB0aGUgZm9ybSBncm91cFxyXG4gICAgY29uc3QgZm9ybUdyb3VwID0gdGhpcy5ncm91cC5mb3JtIGFzIEZvcm1Hcm91cDtcclxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBKU09OLnBhcnNlKGJ1dHRvbi5BdHRyaWJ1dGVzKTtcclxuICAgIGNvbnN0IGJ1dHRvblR5cGVDb2RlID0gYnV0dG9uLlR5cGVDb2RlLnRvVXBwZXJDYXNlKCk7XHJcblxyXG4gICAgLy8vLyBTa2lwIGlmIHRoZSBidXR0b24ncyBjbGljayBldmVudCBpbmNsdWRlcyBiYWNrbmF2aWdhdGlvblxyXG4gICAgLy9pZiAoYnV0dG9uVHlwZUNvZGUgPT09ICdHT1RPJykge1xyXG4gICAgLy8gIC8vIENoZWNrIGlmIHRoZSBmb3JtIGhhcyB1bnNhdmVkIGNoYW5nZXNcclxuICAgIC8vICBpZiAoIXRoaXMuZGF0YS5Ta2lwQ2hlY2tGb3JtRGlydHkgJiYgIWZvcm1Hcm91cC5kaXJ0eSkge1xyXG4gICAgLy8gICAgY29uc29sZS53YXJuKGBSZWNvcmQgbm90IHNhdmVkIGJlY2F1c2UgdGhlIGZvcm0gaXMgbm90IGRpcnR5LmApO1xyXG4gICAgLy8gICAgcmV0dXJuO1xyXG4gICAgLy8gIH1cclxuXHJcbiAgICAvLyAgLy8gQ2hlY2sgaWYgdGhlIGZvcm0gaXMgdmFsaWRcclxuICAgIC8vICBpZiAodGhpcy5kYXRhLlVzZURlZmF1bHRWYWxpZGF0ZSAmJiAhZm9ybUdyb3VwLnZhbGlkKSB7XHJcbiAgICAvLyAgICB0aGlzLmNvbXBvbmVudEVycm9ySGFuZGxlclNlcnZpY2Uuc2hvd0Zvcm1Hcm91cEVycm9yTWVzc2FnZSh0aGlzLmdyb3VwLCBmb3JtR3JvdXApO1xyXG4gICAgLy8gICAgcmV0dXJuO1xyXG4gICAgLy8gIH1cclxuICAgIC8vfVxyXG5cclxuICAgIC8vIFR5cGUgMSA9PSBmdW5jdGlvbmFsO1xyXG4gICAgLy8gVHlwZSAyID09IEdPVE87IFxyXG4gICAgdGhpcy5ncm91cC5pc1RyaWdnZXJlZCA9IGJ1dHRvbi5kaXNhYmxlVHJpZ2dlciAhPSB1bmRlZmluZWQgPyAhYnV0dG9uLmRpc2FibGVUcmlnZ2VyIDogdHJ1ZTtcclxuICAgIHN3aXRjaCAoYnV0dG9uVHlwZUNvZGUpIHtcclxuICAgICAgY2FzZSBcIkZVTkNUSU9OXCI6XHJcbiAgICAgICAgLy8gSGFuZGxlIGZ1bmN0aW9uYWwgYnV0dG9uc1xyXG4gICAgICAgIGlmICghdGhpcy5ncm91cC5pc1RyaWdnZXJlZCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwO1xyXG5cclxuICAgICAgICAvLyBEaXNhYmxlIHRyaWdnZXIgdGltZXJcclxuICAgICAgICBpZiAoIWF0dHJpYnV0ZXNbJ0Rpc2FibGVUcmlnZ2VyVGltZXInXSkge1xyXG4gICAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGdyb3VwWydpc1RyaWdnZXJlZCddID0gZmFsc2U7XHJcbiAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc29sZS5sb2coXCJGdW5jdGlvbmFsIEJ1dHRvbjogXCIsIGJ1dHRvbi5OYW1lKTtcclxuXHJcbiAgICAgICAgLy8gQ2FsbCB0aGUgd29ya2Zsb3cgc2VydmljZSB0byBoYW5kbGUgdGhlIGZ1bmN0aW9uYWwgYnV0dG9uIGNsaWNrIGV2ZW50XHJcbiAgICAgICAgdGhpcy53b3JrZmxvd1NlcnZpY2UuZnVuY3Rpb25hbEJ1dHRvbl9PbkNsaWNrKGF0dHJpYnV0ZXMsIHRoaXMuZ3JvdXApO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIFwiR09UT1wiOlxyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiR09UTyBCdXR0b246IFwiLCBidXR0b24uTmFtZSk7XHJcbiAgICAgICAgLy8gQ2FsbCB0aGUgd29ya2Zsb3cgc2VydmljZSB0byBoYW5kbGUgdGhlIEdPVE8gYnV0dG9uIGNsaWNrIGV2ZW50IFxyXG4gICAgICAgIHRoaXMud29ya2Zsb3dTZXJ2aWNlLmdvdG9CdXR0b25fT25jbGljayhidXR0b24sIHRoaXMuZGF0YSwgYXR0cmlidXRlcywgdGhpcy5ncm91cCwgdGhpcy5pc0xvY2FsSG9zdEFQSSkuc3Vic2NyaWJlKHJlcyA9PiB7XHJcbiAgICAgICAgICAvLyBSZWxvYWQgdGhlIGJ1dHRvblxyXG4gICAgICAgICAgdGhpcy5sb2FkQnV0dG9uKCk7XHJcblxyXG4gICAgICAgICAgLy8gUmVzZXQgdHJpZ2dlciBzdGF0dXNcclxuICAgICAgICAgIHRoaXMuZ3JvdXAuaXNUcmlnZ2VyZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICBpZiAocmVzKSB7XHJcbiAgICAgICAgICAgIC8vIFRyaWdnZXIgZW1haWwgc2VuZGluZ1xyXG4gICAgICAgICAgICB0aGlzLndvcmtmbG93U2VydmljZS50cmlnZ2VyU2VuZEVtYWlsKHRoaXMuZ3JvdXApLnN1YnNjcmliZSgpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OlxyXG4gICAgICAgIGNvbnNvbGUud2FybihgSW52YWxpZCBCdXR0b24gVHlwZTogJHtidXR0b24uTmFtZX1gKTtcclxuICAgICAgICBicmVhaztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgYXBwZW5kVG9BdHRyaWJ1dGVVc2VmdWxEZXRhaWwoYnV0dG9uOiBhbnkpIHtcclxuICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBKU09OLnBhcnNlKGJ1dHRvbi5BdHRyaWJ1dGVzKTtcclxuXHJcbiAgICBjb25zdCBuZXdBdHRyaWJ1dGVzID0ge1xyXG4gICAgICAuLi5hdHRyaWJ1dGVzLFxyXG4gICAgICB6QnV0dG9uTmFtZTogdGhpcy5kYXRhLk5hbWUsXHJcbiAgICAgIFR5cGVDb2RlOiBidXR0b24uVHlwZUNvZGUsXHJcbiAgICAgIFdvcmtmbG93Q29kZTogdGhpcy5kYXRhLldvcmtmbG93Q29kZSxcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgbmV3QnV0dG9uID0ge1xyXG4gICAgICAuLi5idXR0b24sXHJcbiAgICAgIEF0dHJpYnV0ZXM6IEpTT04uc3RyaW5naWZ5KG5ld0F0dHJpYnV0ZXMpLFxyXG4gICAgICBkaXNhYmxlVHJpZ2dlcjogdGhpcy5pc0J1dHRvbkRpc2FibGVUcmlnZ2VyKHRoaXMuZGF0YSwgYnV0dG9uKSxcclxuICAgIH07XHJcblxyXG4gICAgcmV0dXJuIG5ld0J1dHRvbjtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaXNCdXR0b25EaXNhYmxlVHJpZ2dlcihkYXRhOiBaRmllbGQsIGJ1dHRvbjogYW55KTogYm9vbGVhbiB7XHJcbiAgICByZXR1cm4gYnV0dG9uLkRpc2FibGVUcmlnZ2VyICE9IHVuZGVmaW5lZCA/IGJ1dHRvbi5EaXNhYmxlVHJpZ2dlciA6IChkYXRhLkRpc2FibGVUcmlnZ2VyICE9IHVuZGVmaW5lZCA/IGRhdGEuRGlzYWJsZVRyaWdnZXIgOiBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgcmVtb3ZlR290b0J1dHRvbigpIHsgXHJcbiAgICBjb25zdCBpbmRleFRvRGVsZXRlID0gdGhpcy5sZWZ0QnRucy5maW5kSW5kZXgob2JqID0+IG9iai5maWVsZEF0dHJpYnV0ZS5UeXBlQ29kZSA9PT0gXCJHT1RPXCIpO1xyXG4gICAgaWYgKGluZGV4VG9EZWxldGUgIT09IC0xKSB7XHJcbiAgICAgIHRoaXMubGVmdEJ0bnMuc3BsaWNlKGluZGV4VG9EZWxldGUsIDEpO1xyXG4gICAgfSBcclxuICB9XHJcbn1cclxuIiwiPGRpdiBjbGFzcz1cImUxdGFnLXN0eWxlXCJcclxuICAqbmdJZj1cIiFncm91cC5pc0xvYWRpbmcgJiYgKCEhY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGVGaWVsZCA/IGdyb3VwW2NvbXBvbmVudFByb3BlcnRpZXMuaXNWaXNpYmxlRmllbGRdIDogY29tcG9uZW50UHJvcGVydGllcy5pc1Zpc2libGUpICYmIGl0ZW1zLmxlbmd0aCA+IDBcIlxyXG4gIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlXCI+XHJcbiAgPGRpdiBjbGFzcz1cImlvbi1tYXJnaW4tdmVydGljYWwgZTF0YWctc3R5bGUxXCIgKm5nSWY9XCJpc01vYmlsZVNjcmVlbigpICYmIGl0ZW1zLmxlbmd0aCA+IDEgJiYgRmlyc3RaYnRuID09PSBmYWxzZVwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlMVwiPlxyXG4gICAgPGtlbmRvLWRyb3Bkb3duYnV0dG9uIFtkYXRhXT1cIml0ZW1zXCIgc2l6ZT1cImxhcmdlXCIgW2xvb2tdPVwiJ291dGxpbmUnXCIgY2xhc3M9XCJpb24tYWN0aXZhdGFibGUgcmlwcGxlLXBhcmVudCBlMXRhZy1zdHlsZTJcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTJcIj5cclxuICAgICAgQWN0aW9uc1xyXG4gICAgICA8aW9uLXJpcHBsZS1lZmZlY3Q+PC9pb24tcmlwcGxlLWVmZmVjdD5cclxuICAgIDwva2VuZG8tZHJvcGRvd25idXR0b24+XHJcbiAgPC9kaXY+XHJcblxyXG4gIDxkaXYgKm5nSWY9XCIhaXNNb2JpbGVTY3JlZW4oKSB8fCBpdGVtcy5sZW5ndGggPT09IDFcIiBbbmdDbGFzc109XCJkYXRhLkRpdkNsYXNzXCIgY2xhc3M9XCJidG4tY29udGFpbmVyIGUxdGFnLXN0eWxlM1wiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlM1wiPlxyXG4gICAgPCEtLSA8YnV0dG9uICpuZ0Zvcj1cImxldCBpdGVtIG9mIGl0ZW1zOyBsZXQgaSA9IGluZGV4XCIgKGNsaWNrKT1cImJ1dHRvbkNsaWNrKGl0ZW0uZmllbGRBdHRyaWJ1dGUpXCJcclxuICAgICAgICAgICAga2VuZG9CdXR0b24gW3RvZ2dsYWJsZV09XCJ0cnVlXCIgW2ljb25dPVwiaXRlbS5pY29uXCIgW2hpZGRlbl09XCIhaXNCdG5WaXNpYmxlKGl0ZW0udmlzaWJsZSlcIlxyXG4gICAgICAgICAgICBzdHlsZT1cIm1hcmdpbi1yaWdodDogNXB4O1wiPlxyXG4gICAgICB7e2l0ZW0udGV4dH19XHJcbiAgICA8L2J1dHRvbj4gLS0+XHJcbiAgICA8ZGl2IGNsYXNzPVwiYnRuLWxlZnQgZTF0YWctc3R5bGU0XCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU0XCI+XHJcbiAgICAgIDxpb24tYnV0dG9uIFtmaWxsXT1cIml0ZW0uZmlsbFwiIFtzaXplXT1cIml0ZW0uc2l6ZVwiIFtjb2xvcl09XCJpdGVtLmNvbG9yXCIgc3Ryb25nPVwidHJ1ZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxlZnRCdG5zOyBsZXQgaSA9IGluZGV4XCJcclxuICAgICAgICBbbmdDbGFzc109XCJpdGVtLmNsYXNzXCIgKGNsaWNrKT1cImJ1dHRvbkNsaWNrKGl0ZW0uZmllbGRBdHRyaWJ1dGUpXCIgW2hpZGRlbl09XCIhaXNCdG5WaXNpYmxlKGl0ZW0udmlzaWJsZSlcIlxyXG4gICAgICAgIFtkaXNhYmxlZF09XCJncm91cC5pc1RyaWdnZXJlZFwiIFtzdHlsZV09XCJjb21wb25lbnRQcm9wZXJ0aWVzLnN0eWxlLnN0eWxlNVwiIGNsYXNzPVwiZTF0YWctc3R5bGU1XCI+XHJcbiAgICAgICAgPGZhLWljb24gY2xhc3M9XCJidG4taWNvblwiICpuZ0lmPVwiaXRlbS5pY29uXCIgW2ljb25dPVwiZ2V0Rm9udEF3ZXNvbWUoaXRlbS5pY29uLCBmb250QXdlU29tZVNlcnZpY2UpXCI+PC9mYS1pY29uPlxyXG4gICAgICAgIDxzcGFuICpuZ0lmPVwiaXRlbS50ZXh0XCIgW2NsYXNzLmJ0bi1sYWJlbF09XCJpdGVtLmljb25cIiBjbGFzcz1cImlvbi10ZXh0LWNhcGl0YWxpemVcIj57e2l0ZW0udGV4dH19PC9zcGFuPlxyXG4gICAgICA8L2lvbi1idXR0b24+XHJcbiAgICA8L2Rpdj5cclxuICAgIDxkaXYgY2xhc3M9XCJidG4tcmlnaHQgZTF0YWctc3R5bGU2XCIgW3N0eWxlXT1cImNvbXBvbmVudFByb3BlcnRpZXMuc3R5bGUuc3R5bGU2XCI+XHJcbiAgICAgIDxpb24tYnV0dG9uIFtmaWxsXT1cIml0ZW0uZmlsbFwiIFtzaXplXT1cIml0ZW0uc2l6ZVwiIFtjb2xvcl09XCJpdGVtLmNvbG9yXCIgc3Ryb25nPVwidHJ1ZVwiICpuZ0Zvcj1cImxldCBpdGVtIG9mIHJpZ2h0QnRuczsgbGV0IGkgPSBpbmRleFwiXHJcbiAgICAgICAgW25nQ2xhc3NdPVwiaXRlbS5jbGFzc1wiIChjbGljayk9XCJidXR0b25DbGljayhpdGVtLmZpZWxkQXR0cmlidXRlKVwiIFtoaWRkZW5dPVwiIWlzQnRuVmlzaWJsZShpdGVtLnZpc2libGUpXCJcclxuICAgICAgICBbZGlzYWJsZWRdPVwiZ3JvdXAuaXNUcmlnZ2VyZWRcIiBbc3R5bGVdPVwiY29tcG9uZW50UHJvcGVydGllcy5zdHlsZS5zdHlsZTdcIiBjbGFzcz1cImUxdGFnLXN0eWxlN1wiPlxyXG4gICAgICAgIDxmYS1pY29uIGNsYXNzPVwiYnRuLWljb25cIiAqbmdJZj1cIml0ZW0uaWNvblwiIFtpY29uXT1cImdldEZvbnRBd2Vzb21lKGl0ZW0uaWNvbiwgZm9udEF3ZVNvbWVTZXJ2aWNlKVwiPjwvZmEtaWNvbj5cclxuICAgICAgICA8c3BhbiAqbmdJZj1cIml0ZW0udGV4dFwiIFtjbGFzcy5idG4tbGFiZWxdPVwiaXRlbS5pY29uXCIgY2xhc3M9XCJpb24tdGV4dC1jYXBpdGFsaXplXCI+e3tpdGVtLnRleHR9fTwvc3Bhbj5cclxuICAgICAgPC9pb24tYnV0dG9uPlxyXG4gICAgPC9kaXY+XHJcbiAgPC9kaXY+XHJcbjwvZGl2PlxyXG4iXX0=