@cqa-lib/cqa-ui 1.1.200 → 1.1.201

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.
@@ -40,6 +40,7 @@ export class TestCaseDetailsRendererComponent {
40
40
  this.maxIterationsChange = new EventEmitter();
41
41
  this.eventTypeChange = new EventEmitter();
42
42
  this.parameterChange = new EventEmitter();
43
+ /** Emits with step so parent (e.g. step-list) gets correct step when click is from nested step (e.g. inside loop). */
43
44
  this.clickAction = new EventEmitter();
44
45
  /** Emitted when a step is dropped in a nested dropzone (step-group, loop, condition). Payload: { event, targetList }. */
45
46
  this.dndDropInZone = new EventEmitter();
@@ -242,7 +243,20 @@ export class TestCaseDetailsRendererComponent {
242
243
  wire('maxIterationsChange', this.maxIterationsChange);
243
244
  wire('eventTypeChange', this.eventTypeChange);
244
245
  wire('parameterChange', this.parameterChange);
245
- wire('clickAction', this.clickAction);
246
+ // clickAction: emit with step so parent gets correct step (e.g. nested normal-step inside loop).
247
+ // Child may emit MouseEvent (e.g. normal-step) or { event, step } (e.g. loop-step forwarding).
248
+ if (instance.clickAction && typeof instance.clickAction.subscribe === 'function') {
249
+ const existingSub = subscriptions.get('clickAction');
250
+ if (existingSub)
251
+ existingSub.unsubscribe();
252
+ const sub = instance.clickAction.subscribe((v) => {
253
+ const payload = v != null && typeof v === 'object' && 'event' in v && 'step' in v
254
+ ? v
255
+ : { event: v, step: this.step };
256
+ this.clickAction.emit(payload);
257
+ });
258
+ subscriptions.set('clickAction', sub);
259
+ }
246
260
  wire('dndDropInZone', this.dndDropInZone);
247
261
  wire('loadMoreDataProfiles', this.loadMoreDataProfiles);
248
262
  wire('searchDataProfiles', this.searchDataProfiles);
@@ -379,4 +393,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.4.0", ngImpor
379
393
  }], addStepBetweenClick: [{
380
394
  type: Output
381
395
  }] } });
382
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULGdCQUFnQixFQUdoQixNQUFNLEdBS1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDRCQUE0QixFQUE0QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVHLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIsc0JBQXNCLEdBRXZCLE1BQU0sMEJBQTBCLENBQUM7OztBQU9sQyxNQUFNLE9BQU8sZ0NBQWdDO0lBaUUzQyxZQUNnRCxZQUFzQyxFQUM1RSxHQUFzQjtRQURnQixpQkFBWSxHQUFaLFlBQVksQ0FBMEI7UUFDNUUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUE5RHZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHdkMsaUdBQWlHO1FBQ3hGLGNBQVMsR0FBWSxLQUFL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O2dCQUNHLGNBQWM7c0JBQXZCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxJQUFJO3NCQUFiLE1BQU07Z0JBQ0csSUFBSTtzQkFBYixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBQ0csTUFBTTtzQkFBZixNQUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGdCQUFnQjtzQkFBekIsTUFBTTtnQkFDRyxnQkFBZ0I7c0JBQXpCLE1BQU07Z0JBQ0csb0JBQW9CO3NCQUE3QixNQUFNO2dCQUNHLFNBQVM7c0JBQWxCLE1BQU07Z0JBRUcsT0FBTztzQkFBaEIsTUFBTTtnQkFDRyxZQUFZO3NCQUFyQixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUUsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUcseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUVHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFFSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBJbmplY3QsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uRGVzdHJveSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBURVNUX0NBU0VfU1RFUF9DT01QT05FTlRfTUFQLCBUZXN0Q2FzZVN0ZXBDb21wb25lbnRNYXAgfSBmcm9tICcuLi90ZXN0LWNhc2Utc3RlcC1jb21wb25lbnRzLnRva2VuJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlU3RlcENvbmZpZyxcbiAgaXNTdGVwR3JvdXBDb25maWcsXG4gIGlzQ29uZGl0aW9uU3RlcENvbmZpZyxcbiAgaXNMb29wU3RlcENvbmZpZyxcbiAgaXNOb3JtYWxTdGVwQ29uZmlnLFxuICBpc0FwaVN0ZXBDb25maWcsXG4gIGlzRGF0YWJhc2VTdGVwQ29uZmlnLFxuICBpc0FpQWdlbnRTdGVwQ29uZmlnLFxuICBpc0FpVmVyaWZ5U3RlcENvbmZpZyxcbiAgaXNVcGxvYWRTdGVwQ29uZmlnLFxuICBpc1NjcmVlbnNob3RTdGVwQ29uZmlnLFxuICBpc1Njcm9sbFN0ZXBDb25maWcsXG4gIGlzVmVyaWZ5VXJsU3RlcENvbmZpZyxcbiAgaXNSZXN0b3JlU2Vzc2lvblN0ZXBDb25maWcsXG4gIGlzQ3VzdG9tQ29kZVN0ZXBDb25maWcsXG4gIENvbmRpdGlvbkJyYW5jaCxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXRlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnc3RlcEhvc3QnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgc3RlcEhvc3QhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIEBJbnB1dCgpIHN0ZXAhOiBUZXN0Q2FzZVN0ZXBDb25maWc7XG4gIEBJbnB1dCgpIGluZGV4ITogbnVtYmVyO1xuICBASW5wdXQoKSBpc05lc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0luc2lkZUxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFdoZW4gcmVuZGVyaW5nIGEgc3RlcCBpbnNpZGUgYSBjb25kaXRpb24gYnJhbmNoLCB0aGUgYnJhbmNoIGNvbnRleHQgKGZvciBhZGRTdGVwRm9yQnJhbmNoIC8gZGVsZXRlU3RlcFdpdGhCcmFuY2gpLiAqL1xuICBASW5wdXQoKSBicmFuY2g/OiBDb25kaXRpb25CcmFuY2g7XG4gIC8qKiBXaGVuIHRydWUsIGVuYWJsZXMgZHJhZy1hbmQtZHJvcCByZW9yZGVyaW5nIGFuZCBzaG93cyBkcmFnIGhhbmRsZSBpY29uIGluc3RlYWQgb2YgY2hlY2tib3ggKi9cbiAgQElucHV0KCkgaXNSZW9yZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFkZFN0ZXBCZXR3ZWVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFjdGlvbj86IHN0cmluZztcblxuICBAT3V0cHV0KCkgbmVzdGVkU3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWc7IGluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZFN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVTdGVwID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSB0b2dnbGVFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbiB8IHtjb25maWc6IFRlc3RDYXNlU3RlcENvbmZpZywgZXhwYW5kZWQ6IGJvb2xlYW59PigpO1xuICBAT3V0cHV0KCkgZ3JvdXBOYW1lQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBkZXNjcmlwdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmV1c2FibGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvcGVuRXh0ZXJuYWwgPSBuZXcgRXZlbnRFbWl0dGVyPHtzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWd9PigpO1xuICBAT3V0cHV0KCkgZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8e3N0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZywgaW5kZXg6IG51bWJlcn0+KCk7XG4gIEBPdXRwdXQoKSBsaW5rID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZHVwbGljYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyB9IHwgdm9pZD4oKTtcbiAgQE91dHB1dCgpIHZpZXdEZXRhaWxzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgY29uZGl0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBicmFuY2hTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoOyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWc7IHN0ZXBJbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBhZGRTdGVwRm9yQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVTdGVwV2l0aEJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBicmFuY2g6IENvbmRpdGlvbkJyYW5jaDsgc3RlcEluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZEJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBcIkFkZCBFbHNlXCIgaW4gYSBjb25kaXRpb24gc3RlcDsgcGFyZW50IHNob3VsZCBjYWxsIFBPU1QgdGVzdF9zdGVwcyB3aXRoIGNvbmRpdGlvblR5cGUgQ09ORElUSU9OX0VMU0UgKi9cbiAgQE91dHB1dCgpIGFkZEVsc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29uZGl0aW9uU3RlcENvbmZpZzogVGVzdENhc2VTdGVwQ29uZmlnIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVCcmFuY2ggPSBuZXcgRXZlbnRFbWl0dGVyPENvbmRpdGlvbkJyYW5jaD4oKTtcbiAgQE91dHB1dCgpIHRlc3REYXRhUHJvZmlsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgc3RhcnRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBlbmRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBtYXhJdGVyYXRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBldmVudFR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHBhcmFtZXRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICBAT3V0cHV0KCkgY2xpY2tBY3Rpb24gPSBuZXcgRXZlbnRFbWl0dGVyPE1vdXNlRXZlbnQ+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBzdGVwIGlzIGRyb3BwZWQgaW4gYSBuZXN0ZWQgZHJvcHpvbmUgKHN0ZXAtZ3JvdXAsIGxvb3AsIGNvbmRpdGlvbikuIFBheWxvYWQ6IHsgZXZlbnQsIHRhcmdldExpc3QgfS4gKi9cbiAgQE91dHB1dCgpIGRuZERyb3BJblpvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IGFueTsgdGFyZ2V0TGlzdDogVGVzdENhc2VTdGVwQ29uZmlnW10gfT4oKTtcbiAgLyoqIERhdGEgcHJvZmlsZSBvcHRpb25zIGZvciBsb29wIHN0ZXBzICovXG4gIEBJbnB1dCgpIGRhdGFQcm9maWxlT3B0aW9uczogYW55W10gPSBbXTtcbiAgLyoqIEluZGljYXRlcyBpZiBtb3JlIGRhdGEgcHJvZmlsZXMgYXJlIGF2YWlsYWJsZSBmb3IgbG9hZGluZyAqL1xuICBASW5wdXQoKSBoYXNNb3JlRGF0YVByb2ZpbGVzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBkYXRhIHByb2ZpbGVzICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ0RhdGFQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogTmF0dXJhbCB0ZXh0IGFjdGlvbnMgb3B0aW9ucyBmb3Igd2hpbGUgbG9vcCBjb25kaXRpb24gKi9cbiAgQElucHV0KCkgbmF0dXJhbFRleHRBY3Rpb25zT3B0aW9uczogYW55W10gPSBbXTtcbiAgLyoqIEZ1bmN0aW9uIHRvIHByb2Nlc3MgdGVtcGxhdGUgdmFyaWFibGVzIGZvciBjb25kaXRpb24gc3RlcHMgKi9cbiAgQElucHV0KCkgc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXM6ICh0ZW1wbGF0ZTogYW55KSA9PiBhbnlbXSA9ICgpID0+IFtdO1xuICAvKiogRW1pdCB3aGVuIG1vcmUgZGF0YSBwcm9maWxlcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVEYXRhUHJvZmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXQgd2hlbiBkYXRhIHByb2ZpbGUgc2VhcmNoIHF1ZXJ5IGNoYW5nZXMgKi9cbiAgQE91dHB1dCgpIHNlYXJjaERhdGFQcm9maWxlcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdCB3aGVuIGEgc3RlcCBpcyB1cGRhdGVkIChlLmcuLCBBcHBseSBidXR0b24gY2xpY2tlZCBpbiBsb29wLXN0ZXAgZWRpdCBtb2RlKSAqL1xuICBAT3V0cHV0KCkgc3RlcFVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VTdGVwQ29uZmlnPigpO1xuICBAT3V0cHV0KCkgYWRkU3RlcEJldHdlZW5DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8e3N0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZywgaW5kZXg6IG51bWJlcn0+KCk7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChURVNUX0NBU0VfU1RFUF9DT01QT05FTlRfTUFQKSBwcml2YXRlIGNvbXBvbmVudE1hcDogVGVzdENhc2VTdGVwQ29tcG9uZW50TWFwLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyU3RlcCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydzdGVwJ10gfHwgY2hhbmdlc1snaW5kZXgnXSB8fCBjaGFuZ2VzWydpc05lc3RlZCddIHx8IGNoYW5nZXNbJ2lzSW5zaWRlTG9vcCddIHx8IGNoYW5nZXNbJ2lzUmVvcmRlciddIHx8IFxuICAgICAgICBjaGFuZ2VzWydkYXRhUHJvZmlsZU9wdGlvbnMnXSB8fCBjaGFuZ2VzWydhY3Rpb24nXSB8fCBjaGFuZ2VzWydoYXNNb3JlRGF0YVByb2ZpbGVzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nRGF0YVByb2ZpbGVzJ10gfHxcbiAgICAgICAgY2hhbmdlc1snbmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyddIHx8IGNoYW5nZXNbJ3NldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzJ10pIHtcbiAgICAgIHRoaXMucmVuZGVyU3RlcCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcG9uZW50VHlwZShzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBhbnkge1xuICAgIGlmIChpc1N0ZXBHcm91cENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnN0ZXBHcm91cDtcbiAgICBpZiAoaXNDb25kaXRpb25TdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuY29uZGl0aW9uU3RlcDtcbiAgICBpZiAoaXNMb29wU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmxvb3BTdGVwO1xuICAgIGlmIChpc0FwaVN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5hcGlTdGVwO1xuICAgIGlmIChpc0RhdGFiYXNlU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmRhdGFiYXNlU3RlcDtcbiAgICBpZiAoaXNBaUFnZW50U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmFpQWdlbnRTdGVwO1xuICAgIGlmIChpc0FpVmVyaWZ5U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmFpVmVyaWZ5U3RlcDtcbiAgICBpZiAoaXNVcGxvYWRTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAudXBsb2FkU3RlcDtcbiAgICBpZiAoaXNTY3JlZW5zaG90U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnNjcmVlbnNob3RTdGVwO1xuICAgIGlmIChpc1Njcm9sbFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5zY3JvbGxTdGVwO1xuICAgIGlmIChpc1ZlcmlmeVVybFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC52ZXJpZnlVcmxTdGVwO1xuICAgIGlmIChpc1Jlc3RvcmVTZXNzaW9uU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnJlc3RvcmVTZXNzaW9uU3RlcDtcbiAgICBpZiAoaXNDdXN0b21Db2RlU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmN1c3RvbUNvZGVTdGVwO1xuICAgIGlmIChpc05vcm1hbFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5ub3JtYWxTdGVwO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTdGVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGVwSG9zdCB8fCAhdGhpcy5zdGVwKSByZXR1cm47XG5cbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5nZXRDb21wb25lbnRUeXBlKHRoaXMuc3RlcCk7XG4gICAgaWYgKCFjb21wb25lbnRUeXBlKSByZXR1cm47XG5cbiAgICB0aGlzLnN0ZXBIb3N0LmNsZWFyKCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLnN0ZXBIb3N0LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG4gICAgaW5zdGFuY2UuY29uZmlnID0gdGhpcy5zdGVwO1xuICAgIGluc3RhbmNlLnN0ZXBOdW1iZXIgPSAodGhpcy5zdGVwIGFzIGFueSkuc3RlcE51bWJlcjtcbiAgICBpbnN0YW5jZS5pc05lc3RlZCA9IHRoaXMuaXNOZXN0ZWQ7XG4gICAgaW5zdGFuY2UuaXNJbnNpZGVMb29wID0gdGhpcy5pc0luc2lkZUxvb3A7XG4gICAgaW5zdGFuY2UuaXNSZW9yZGVyID0gdGhpcy5pc1Jlb3JkZXI7XG4gICAgLy8gU2V0IGFjdGlvbiBpZiBwcm92aWRlZCBhcyBpbnB1dCwgb3RoZXJ3aXNlIHVzZSBmcm9tIHN0ZXBcbiAgICBpZiAodGhpcy5hY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5zdGFuY2UuYWN0aW9uID0gdGhpcy5hY3Rpb247XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RlcCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoa2V5ICE9PSAnc3RlcFR5cGUnICYmIGtleSAhPT0gJ25lc3RlZFN0ZXBzJyAmJiBrZXkgIT09ICdicmFuY2hlcycpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSlba2V5XSA9ICh0aGlzLnN0ZXAgYXMgYW55KVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICgodGhpcy5zdGVwIGFzIGFueSkubmVzdGVkU3RlcHMpIChpbnN0YW5jZSBhcyBhbnkpLm5lc3RlZFN0ZXBzID0gKHRoaXMuc3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzO1xuICAgIGlmICgodGhpcy5zdGVwIGFzIGFueSkuYnJhbmNoZXMpIChpbnN0YW5jZSBhcyBhbnkpLmJyYW5jaGVzID0gKHRoaXMuc3RlcCBhcyBhbnkpLmJyYW5jaGVzO1xuXG4gICAgLy8gUGFzcyBkYXRhIHByb2ZpbGUgaW5wdXRzIHRvIHN0ZXAgaW5zdGFuY2VzIHRoYXQgY2FuIGNvbnRhaW4gbmVzdGVkIGxvb3Agc3RlcHNcbiAgICBpZiAoaXNMb29wU3RlcENvbmZpZyh0aGlzLnN0ZXApIHx8IGlzQ29uZGl0aW9uU3RlcENvbmZpZyh0aGlzLnN0ZXApIHx8IGlzU3RlcEdyb3VwQ29uZmlnKHRoaXMuc3RlcCkpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmRhdGFQcm9maWxlT3B0aW9ucyA9IHRoaXMuZGF0YVByb2ZpbGVPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuaGFzTW9yZURhdGFQcm9maWxlcyA9IHRoaXMuaGFzTW9yZURhdGFQcm9maWxlcztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmlzTG9hZGluZ0RhdGFQcm9maWxlcyA9IHRoaXMuaXNMb2FkaW5nRGF0YVByb2ZpbGVzO1xuICAgICAgLy8gQWxzbyBwYXNzIG5hdHVyYWwgdGV4dCBhY3Rpb25zIG9wdGlvbnMgKGZvciBuZXN0ZWQgbG9vcCBzdGVwcyB3aXRoIHdoaWxlIGxvb3AgYW5kIGNvbmRpdGlvbiBzdGVwcylcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgPSB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM7XG4gICAgfVxuICAgIFxuICAgIC8vIFBhc3MgbmF0dXJhbCB0ZXh0IGFjdGlvbnMgb3B0aW9ucyB0byBsb29wIHN0ZXBzIChmb3Igd2hpbGUgbG9vcCBjb25kaXRpb24pXG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcodGhpcy5zdGVwKSkge1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucztcbiAgICB9XG4gICAgXG4gICAgLy8gUGFzcyBuYXR1cmFsIHRleHQgYWN0aW9ucyBvcHRpb25zIGFuZCB0ZW1wbGF0ZSB2YXJpYWJsZXMgZnVuY3Rpb24gdG8gY29uZGl0aW9uIHN0ZXBzXG4gICAgaWYgKGlzQ29uZGl0aW9uU3RlcENvbmZpZyh0aGlzLnN0ZXApKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzO1xuICAgIH1cblxuICAgIHRoaXMud2lyZU91dHB1dHMoaW5zdGFuY2UpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2lyZU91dHB1dHMoaW5zdGFuY2U6IGFueSk6IHZvaWQge1xuICAgIC8vIFN0b3JlIHN1YnNjcmlwdGlvbnMgb24gdGhlIGluc3RhbmNlIHRvIHByZXZlbnQgZHVwbGljYXRlc1xuICAgIGlmICghKGluc3RhbmNlIGFzIGFueSkuX2NxYVN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLl9jcWFTdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICB9XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IChpbnN0YW5jZSBhcyBhbnkpLl9jcWFTdWJzY3JpcHRpb25zO1xuICAgIFxuICAgIGNvbnN0IHdpcmUgPSAoa2V5OiBzdHJpbmcsIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+KSA9PiB7XG4gICAgICBpZiAoaW5zdGFuY2Vba2V5XSAmJiB0eXBlb2YgaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBwcmV2aW91cyBzdWJzY3JpcHRpb24gaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU3ViID0gc3Vic2NyaXB0aW9ucy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nU3ViKSB7XG4gICAgICAgICAgZXhpc3RpbmdTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBzdWJzY3JpcHRpb25cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUoKHY6IGFueSkgPT4ge1xuICAgICAgICAgIGVtaXR0ZXIuZW1pdCh2KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMuc2V0KGtleSwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpcmUoJ25lc3RlZFN0ZXBDaGFuZ2UnLCB0aGlzLm5lc3RlZFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwJywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnYnJhbmNoJyBpbiB2KSB0aGlzLmFkZFN0ZXBGb3JCcmFuY2guZW1pdCh2KTtcbiAgICAgICAgZWxzZSB0aGlzLmFkZFN0ZXAuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZVN0ZXAnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICdicmFuY2gnIGluIHYgJiYgJ3N0ZXBJbmRleCcgaW4gdikgdGhpcy5kZWxldGVTdGVwV2l0aEJyYW5jaC5lbWl0KHYpO1xuICAgICAgICBlbHNlIHRoaXMuZGVsZXRlU3RlcC5lbWl0KHYpO1xuICAgICAgfSxcbiAgICB9IGFzIGFueSk7XG4gICAgd2lyZSgndG9nZ2xlRXhwYW5kZWQnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGJvb2xlYW4gYW5kIG9iamVjdCBmb3JtYXRzXG4gICAgICAgIC8vIElmIGl0J3MgYW4gb2JqZWN0IHdpdGggY29uZmlnIGFuZCBleHBhbmRlZCwgZW1pdCBpdCBhcy1pc1xuICAgICAgICAvLyBJZiBpdCdzIGp1c3QgYSBib29sZWFuLCBlbWl0IGl0IGFzLWlzXG4gICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kZWQuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ2dyb3VwTmFtZUNoYW5nZScsIHRoaXMuZ3JvdXBOYW1lQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnZGVzY3JpcHRpb25DaGFuZ2UnLCB0aGlzLmRlc2NyaXB0aW9uQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgncmV1c2FibGVDaGFuZ2UnLCB0aGlzLnJldXNhYmxlQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnb3BlbkV4dGVybmFsJywgdGhpcy5vcGVuRXh0ZXJuYWwgYXMgYW55KTtcbiAgICB3aXJlKCdlZGl0Jywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICAvLyBJZiBjaGlsZCBjb21wb25lbnQgZW1pdHMgdm9pZCBvciBub3RoaW5nLCB1c2UgY3VycmVudCBzdGVwIGFuZCBpbmRleFxuICAgICAgICAvLyBJZiBjaGlsZCBjb21wb25lbnQgYWxyZWFkeSBlbWl0cyBhbiBvYmplY3QsIG1lcmdlIGl0IHdpdGggc3RlcCBhbmQgaW5kZXhcbiAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgJ3N0ZXAnIGluIHYgJiYgJ2luZGV4JyBpbiB2KSB7XG4gICAgICAgICAgLy8gQWxyZWFkeSBoYXMgc3RlcCBhbmQgaW5kZXgsIGVtaXQgYXMtaXNcbiAgICAgICAgICB0aGlzLmVkaXQuZW1pdCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFbWl0IHdpdGggY3VycmVudCBzdGVwIGFuZCBpbmRleFxuICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHsgc3RlcDogdGhpcy5zdGVwLCBpbmRleDogdGhpcy5pbmRleCB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9IGFzIGFueSk7XG4gICAgd2lyZSgnbGluaycsIHRoaXMubGluayBhcyBhbnkpO1xuICAgIHdpcmUoJ2R1cGxpY2F0ZScsIHRoaXMuZHVwbGljYXRlIGFzIGFueSk7XG4gICAgLy8gV2lyZSBkZWxldGUgZXZlbnQgLSBpbnRlcmNlcHQgYW5kIGVtaXQgd2l0aCBzdGVwIGRhdGFcbiAgICBpZiAoaW5zdGFuY2UuZGVsZXRlICYmIHR5cGVvZiBpbnN0YW5jZS5kZWxldGUuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1N1YiA9IHN1YnNjcmlwdGlvbnMuZ2V0KCdkZWxldGUnKTtcbiAgICAgIGlmIChleGlzdGluZ1N1Yikge1xuICAgICAgICBleGlzdGluZ1N1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsZXRlU3ViID0gaW5zdGFuY2UuZGVsZXRlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIEVtaXQgZGVsZXRlIHdpdGggdGhlIGN1cnJlbnQgc3RlcCBkYXRhIHNvIHBhcmVudCBrbm93cyB3aGljaCBzdGVwIGlzIGJlaW5nIGRlbGV0ZWRcbiAgICAgICAgdGhpcy5kZWxldGUuZW1pdCh7IHN0ZXA6IHRoaXMuc3RlcCB9KTtcbiAgICAgIH0pO1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQoJ2RlbGV0ZScsIGRlbGV0ZVN1Yik7XG4gICAgfVxuICAgIHdpcmUoJ3ZpZXdEZXRhaWxzJywgdGhpcy52aWV3RGV0YWlscyBhcyBhbnkpO1xuICAgIHdpcmUoJ3NlbGVjdGlvbkNoYW5nZScsIHRoaXMuc2VsZWN0aW9uQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnY29uZGl0aW9uQ2hhbmdlJywgdGhpcy5jb25kaXRpb25DaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdicmFuY2hTdGVwQ2hhbmdlJywgdGhpcy5icmFuY2hTdGVwQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkU3RlcEZvckJyYW5jaCcsIHRoaXMuYWRkU3RlcEZvckJyYW5jaCBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZVN0ZXBXaXRoQnJhbmNoJywgdGhpcy5kZWxldGVTdGVwV2l0aEJyYW5jaCBhcyBhbnkpO1xuICAgIHdpcmUoJ2FkZEJyYW5jaCcsIHRoaXMuYWRkQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkRWxzZScsIHRoaXMuYWRkRWxzZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZUJyYW5jaCcsIHRoaXMuZGVsZXRlQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgndGVzdERhdGFQcm9maWxlQ2hhbmdlJywgdGhpcy50ZXN0RGF0YVByb2ZpbGVDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdzdGFydFN0ZXBDaGFuZ2UnLCB0aGlzLnN0YXJ0U3RlcENoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2VuZFN0ZXBDaGFuZ2UnLCB0aGlzLmVuZFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdtYXhJdGVyYXRpb25zQ2hhbmdlJywgdGhpcy5tYXhJdGVyYXRpb25zQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnZXZlbnRUeXBlQ2hhbmdlJywgdGhpcy5ldmVudFR5cGVDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdwYXJhbWV0ZXJDaGFuZ2UnLCB0aGlzLnBhcmFtZXRlckNoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2NsaWNrQWN0aW9uJywgdGhpcy5jbGlja0FjdGlvbiBhcyBhbnkpO1xuICAgIHdpcmUoJ2RuZERyb3BJblpvbmUnLCB0aGlzLmRuZERyb3BJblpvbmUgYXMgYW55KTtcbiAgICB3aXJlKCdsb2FkTW9yZURhdGFQcm9maWxlcycsIHRoaXMubG9hZE1vcmVEYXRhUHJvZmlsZXMgYXMgYW55KTtcbiAgICB3aXJlKCdzZWFyY2hEYXRhUHJvZmlsZXMnLCB0aGlzLnNlYXJjaERhdGFQcm9maWxlcyBhcyBhbnkpO1xuICAgIHdpcmUoJ2FkZFN0ZXBCZXR3ZWVuQ2xpY2snLCB0aGlzLmFkZFN0ZXBCZXR3ZWVuQ2xpY2sgYXMgYW55KTtcbiAgICAvLyBXaXJlIHN0ZXBVcGRhdGUgLSBjaGVjayBpZiBpdCBleGlzdHMgb24gaW5zdGFuY2VcbiAgICBpZiAoaW5zdGFuY2Uuc3RlcFVwZGF0ZSkge1xuICAgICAgY29uc29sZS5sb2coJ1JlbmRlcmVyOiBGb3VuZCBzdGVwVXBkYXRlIEV2ZW50RW1pdHRlciwgd2lyaW5nIGl0Jyk7XG4gICAgICB3aXJlKCdzdGVwVXBkYXRlJywgdGhpcy5zdGVwVXBkYXRlIGFzIGFueSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnNvbGUud2FybignUmVuZGVyZXI6IHN0ZXBVcGRhdGUgRXZlbnRFbWl0dGVyIG5vdCBmb3VuZCBvbiBpbnN0YW5jZSBkdXJpbmcgd2lyZU91dHB1dHMnLCB7XG4gICAgICAgIHN0ZXBJZDogdGhpcy5zdGVwPy5pZCxcbiAgICAgICAgc3RlcFR5cGU6IHRoaXMuc3RlcD8uc3RlcFR5cGUsXG4gICAgICAgIGluc3RhbmNlS2V5czogT2JqZWN0LmtleXMoaW5zdGFuY2UpXG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBuZ09uRGVzdHJveSgpOiB2b2lkIHtcbiAgICAvLyBDbGVhbiB1cCBzdWJzY3JpcHRpb25zIHdoZW4gY29tcG9uZW50IGlzIGRlc3Ryb3llZFxuICAgIGlmICh0aGlzLmNvbXBvbmVudFJlZj8uaW5zdGFuY2UpIHtcbiAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbnMgPSAodGhpcy5jb21wb25lbnRSZWYuaW5zdGFuY2UgYXMgYW55KS5fY3FhU3Vic2NyaXB0aW9ucztcbiAgICAgIGlmIChzdWJzY3JpcHRpb25zKSB7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMuZm9yRWFjaCgoc3ViOiBhbnkpID0+IHtcbiAgICAgICAgICBpZiAoc3ViICYmIHR5cGVvZiBzdWIudW5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIHN1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMuY2xlYXIoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cblxuIiwiPGRpdiBjbGFzcz1cImNxYS1yZWxhdGl2ZVwiPlxuICAgIDxidXR0b24gKm5nSWY9XCJhZGRTdGVwQmV0d2VlblwiIGNsYXNzPVwiY3FhLWFic29sdXRlIGNxYS10b3AtW2NhbGMoMTAwJS0xMnB4KV0gY3FhLWxlZnQtWzUwJV0gY3FhLXRyYW5zbGF0ZS14LVstNTAlXSBjcWEtcC0wIGNxYS16LVsxXVwiIChjbGljayk9XCJhZGRTdGVwQmV0d2VlbkNsaWNrLmVtaXQoe3N0ZXA6IHN0ZXAsIGluZGV4OiBpbmRleH0pXCI+XG4gICAgICAgIDxzdmcgd2lkdGg9XCIyNFwiIGhlaWdodD1cIjI0XCIgdmlld0JveD1cIjAgMCAyNCAyNFwiIGZpbGw9XCJub25lXCIgeG1sbnM9XCJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2Z1wiPjxyZWN0IHg9XCIxXCIgeT1cIjFcIiB3aWR0aD1cIjIxLjE4MjJcIiBoZWlnaHQ9XCIyMlwiIHJ4PVwiMTAuNTkxMVwiIGZpbGw9XCJ3aGl0ZVwiLz48cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyMS4xODIyXCIgaGVpZ2h0PVwiMjJcIiByeD1cIjEwLjU5MTFcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLXdpZHRoPVwiMlwiLz48cGF0aCBkPVwiTTguNSAxMkgxNS41XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48cGF0aCBkPVwiTTEyIDguNVYxNS41XCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS1saW5lY2FwPVwicm91bmRcIiBzdHJva2UtbGluZWpvaW49XCJyb3VuZFwiLz48L3N2Zz5cbiAgICA8L2J1dHRvbj5cbiAgICA8bmctY29udGFpbmVyICNzdGVwSG9zdD48L25nLWNvbnRhaW5lcj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiYWRkU3RlcEJldHdlZW5cIiBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtdG9wLVtjYWxjKDEwMCUtMTJweCldIGNxYS1sZWZ0LVs1MCVdIGNxYS10cmFuc2xhdGUteC1bLTUwJV0gY3FhLXAtMCBjcWEtei1bMV1cIiAoY2xpY2spPVwiYWRkU3RlcEJldHdlZW5DbGljay5lbWl0KHtzdGVwOiBzdGVwLCBpbmRleDogaW5kZXh9KVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyMS4xODIyXCIgaGVpZ2h0PVwiMjJcIiByeD1cIjEwLjU5MTFcIiBmaWxsPVwid2hpdGVcIi8+PHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjEuMTgyMlwiIGhlaWdodD1cIjIyXCIgcng9XCIxMC41OTExXCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS13aWR0aD1cIjJcIi8+PHBhdGggZD1cIk04LjUgMTJIMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0xMiA4LjVWMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgPC9idXR0b24+XG48L2Rpdj4iXX0=
396
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1jYXNlLWRldGFpbHMtcmVuZGVyZXIuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi90ZXN0LWNhc2UtZGV0YWlscy90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci90ZXN0LWNhc2UtZGV0YWlscy1yZW5kZXJlci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL3Rlc3QtY2FzZS1kZXRhaWxzL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsS0FBSyxFQUNMLE1BQU0sRUFDTixZQUFZLEVBQ1osU0FBUyxFQUNULGdCQUFnQixFQUdoQixNQUFNLEdBS1AsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLDRCQUE0QixFQUE0QixNQUFNLG9DQUFvQyxDQUFDO0FBQzVHLE9BQU8sRUFFTCxpQkFBaUIsRUFDakIscUJBQXFCLEVBQ3JCLGdCQUFnQixFQUNoQixrQkFBa0IsRUFDbEIsZUFBZSxFQUNmLG9CQUFvQixFQUNwQixtQkFBbUIsRUFDbkIsb0JBQW9CLEVBQ3BCLGtCQUFrQixFQUNsQixzQkFBc0IsRUFDdEIsa0JBQWtCLEVBQ2xCLHFCQUFxQixFQUNyQiwwQkFBMEIsRUFDMUIsc0JBQXNCLEdBRXZCLE1BQU0sMEJBQTBCLENBQUM7OztBQU9sQyxNQUFNLE9BQU8sZ0NBQWdDO0lBa0UzQyxZQUNnRCxZQUFzQyxFQUM1RSxHQUFzQjtRQURnQixpQkFBWSxHQUFaLFlBQVksQ0FBMEI7UUFDNUUsUUFBRyxHQUFILEdBQUcsQ0FBbUI7UUEvRHZCLGFBQVEsR0FBWSxLQUFLLENBQUM7UUFDMUIsaUJBQVksR0FBWSxLQUFLLENBQUM7UUFHdkMsaUdBQWlHO1FBQ3hGLGNBQVMsR0FBWSxLQUFL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QUFZO3NCQUFyQixNQUFNO2dCQUNHLHFCQUFxQjtzQkFBOUIsTUFBTTtnQkFDRyxlQUFlO3NCQUF4QixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNO2dCQUNHLGVBQWU7c0JBQXhCLE1BQU07Z0JBQ0csZUFBZTtzQkFBeEIsTUFBTTtnQkFFRyxXQUFXO3NCQUFwQixNQUFNO2dCQUVHLGFBQWE7c0JBQXRCLE1BQU07Z0JBRUUsa0JBQWtCO3NCQUExQixLQUFLO2dCQUVHLG1CQUFtQjtzQkFBM0IsS0FBSztnQkFFRyxxQkFBcUI7c0JBQTdCLEtBQUs7Z0JBRUcseUJBQXlCO3NCQUFqQyxLQUFLO2dCQUVHLDZCQUE2QjtzQkFBckMsS0FBSztnQkFFSSxvQkFBb0I7c0JBQTdCLE1BQU07Z0JBRUcsa0JBQWtCO3NCQUEzQixNQUFNO2dCQUVHLFVBQVU7c0JBQW5CLE1BQU07Z0JBQ0csbUJBQW1CO3NCQUE1QixNQUFNIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ29tcG9uZW50LFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBFdmVudEVtaXR0ZXIsXG4gIFZpZXdDaGlsZCxcbiAgVmlld0NvbnRhaW5lclJlZixcbiAgT25DaGFuZ2VzLFxuICBTaW1wbGVDaGFuZ2VzLFxuICBJbmplY3QsXG4gIEFmdGVyVmlld0luaXQsXG4gIE9uRGVzdHJveSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudFJlZixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBURVNUX0NBU0VfU1RFUF9DT01QT05FTlRfTUFQLCBUZXN0Q2FzZVN0ZXBDb21wb25lbnRNYXAgfSBmcm9tICcuLi90ZXN0LWNhc2Utc3RlcC1jb21wb25lbnRzLnRva2VuJztcbmltcG9ydCB7XG4gIFRlc3RDYXNlU3RlcENvbmZpZyxcbiAgaXNTdGVwR3JvdXBDb25maWcsXG4gIGlzQ29uZGl0aW9uU3RlcENvbmZpZyxcbiAgaXNMb29wU3RlcENvbmZpZyxcbiAgaXNOb3JtYWxTdGVwQ29uZmlnLFxuICBpc0FwaVN0ZXBDb25maWcsXG4gIGlzRGF0YWJhc2VTdGVwQ29uZmlnLFxuICBpc0FpQWdlbnRTdGVwQ29uZmlnLFxuICBpc0FpVmVyaWZ5U3RlcENvbmZpZyxcbiAgaXNVcGxvYWRTdGVwQ29uZmlnLFxuICBpc1NjcmVlbnNob3RTdGVwQ29uZmlnLFxuICBpc1Njcm9sbFN0ZXBDb25maWcsXG4gIGlzVmVyaWZ5VXJsU3RlcENvbmZpZyxcbiAgaXNSZXN0b3JlU2Vzc2lvblN0ZXBDb25maWcsXG4gIGlzQ3VzdG9tQ29kZVN0ZXBDb25maWcsXG4gIENvbmRpdGlvbkJyYW5jaCxcbn0gZnJvbSAnLi4vdGVzdC1jYXNlLXN0ZXAubW9kZWxzJztcblxuQENvbXBvbmVudCh7XG4gIHNlbGVjdG9yOiAnY3FhLXRlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyJyxcbiAgdGVtcGxhdGVVcmw6ICcuL3Rlc3QtY2FzZS1kZXRhaWxzLXJlbmRlcmVyLmNvbXBvbmVudC5odG1sJyxcbiAgaG9zdDogeyBjbGFzczogJ2NxYS11aS1yb290JyB9LFxufSlcbmV4cG9ydCBjbGFzcyBUZXN0Q2FzZURldGFpbHNSZW5kZXJlckNvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgQFZpZXdDaGlsZCgnc3RlcEhvc3QnLCB7IHJlYWQ6IFZpZXdDb250YWluZXJSZWYgfSkgc3RlcEhvc3QhOiBWaWV3Q29udGFpbmVyUmVmO1xuXG4gIEBJbnB1dCgpIHN0ZXAhOiBUZXN0Q2FzZVN0ZXBDb25maWc7XG4gIEBJbnB1dCgpIGluZGV4ITogbnVtYmVyO1xuICBASW5wdXQoKSBpc05lc3RlZDogYm9vbGVhbiA9IGZhbHNlO1xuICBASW5wdXQoKSBpc0luc2lkZUxvb3A6IGJvb2xlYW4gPSBmYWxzZTtcbiAgLyoqIFdoZW4gcmVuZGVyaW5nIGEgc3RlcCBpbnNpZGUgYSBjb25kaXRpb24gYnJhbmNoLCB0aGUgYnJhbmNoIGNvbnRleHQgKGZvciBhZGRTdGVwRm9yQnJhbmNoIC8gZGVsZXRlU3RlcFdpdGhCcmFuY2gpLiAqL1xuICBASW5wdXQoKSBicmFuY2g/OiBDb25kaXRpb25CcmFuY2g7XG4gIC8qKiBXaGVuIHRydWUsIGVuYWJsZXMgZHJhZy1hbmQtZHJvcCByZW9yZGVyaW5nIGFuZCBzaG93cyBkcmFnIGhhbmRsZSBpY29uIGluc3RlYWQgb2YgY2hlY2tib3ggKi9cbiAgQElucHV0KCkgaXNSZW9yZGVyOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFkZFN0ZXBCZXR3ZWVuOiBib29sZWFuID0gZmFsc2U7XG4gIEBJbnB1dCgpIGFjdGlvbj86IHN0cmluZztcblxuICBAT3V0cHV0KCkgbmVzdGVkU3RlcENoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8eyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWc7IGluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZFN0ZXAgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVTdGVwID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSB0b2dnbGVFeHBhbmRlZCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbiB8IHtjb25maWc6IFRlc3RDYXNlU3RlcENvbmZpZywgZXhwYW5kZWQ6IGJvb2xlYW59PigpO1xuICBAT3V0cHV0KCkgZ3JvdXBOYW1lQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBkZXNjcmlwdGlvbkNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgcmV1c2FibGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBvcGVuRXh0ZXJuYWwgPSBuZXcgRXZlbnRFbWl0dGVyPHtzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWd9PigpO1xuICBAT3V0cHV0KCkgZWRpdCA9IG5ldyBFdmVudEVtaXR0ZXI8e3N0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZywgaW5kZXg6IG51bWJlcn0+KCk7XG4gIEBPdXRwdXQoKSBsaW5rID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZHVwbGljYXRlID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgZGVsZXRlID0gbmV3IEV2ZW50RW1pdHRlcjx7IHN0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZyB9IHwgdm9pZD4oKTtcbiAgQE91dHB1dCgpIHZpZXdEZXRhaWxzID0gbmV3IEV2ZW50RW1pdHRlcjx2b2lkPigpO1xuICBAT3V0cHV0KCkgc2VsZWN0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxib29sZWFuPigpO1xuICBAT3V0cHV0KCkgY29uZGl0aW9uQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBicmFuY2hTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoOyBzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWc7IHN0ZXBJbmRleDogbnVtYmVyIH0+KCk7XG4gIEBPdXRwdXQoKSBhZGRTdGVwRm9yQnJhbmNoID0gbmV3IEV2ZW50RW1pdHRlcjx7IGJyYW5jaDogQ29uZGl0aW9uQnJhbmNoIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVTdGVwV2l0aEJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8eyBicmFuY2g6IENvbmRpdGlvbkJyYW5jaDsgc3RlcEluZGV4OiBudW1iZXIgfT4oKTtcbiAgQE91dHB1dCgpIGFkZEJyYW5jaCA9IG5ldyBFdmVudEVtaXR0ZXI8dm9pZD4oKTtcbiAgLyoqIEVtaXR0ZWQgd2hlbiB1c2VyIGNsaWNrcyBcIkFkZCBFbHNlXCIgaW4gYSBjb25kaXRpb24gc3RlcDsgcGFyZW50IHNob3VsZCBjYWxsIFBPU1QgdGVzdF9zdGVwcyB3aXRoIGNvbmRpdGlvblR5cGUgQ09ORElUSU9OX0VMU0UgKi9cbiAgQE91dHB1dCgpIGFkZEVsc2UgPSBuZXcgRXZlbnRFbWl0dGVyPHsgY29uZGl0aW9uU3RlcENvbmZpZzogVGVzdENhc2VTdGVwQ29uZmlnIH0+KCk7XG4gIEBPdXRwdXQoKSBkZWxldGVCcmFuY2ggPSBuZXcgRXZlbnRFbWl0dGVyPENvbmRpdGlvbkJyYW5jaD4oKTtcbiAgQE91dHB1dCgpIHRlc3REYXRhUHJvZmlsZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICBAT3V0cHV0KCkgc3RhcnRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBlbmRTdGVwQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBtYXhJdGVyYXRpb25zQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxudW1iZXI+KCk7XG4gIEBPdXRwdXQoKSBldmVudFR5cGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPGFueT4oKTtcbiAgQE91dHB1dCgpIHBhcmFtZXRlckNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8YW55PigpO1xuICAvKiogRW1pdHMgd2l0aCBzdGVwIHNvIHBhcmVudCAoZS5nLiBzdGVwLWxpc3QpIGdldHMgY29ycmVjdCBzdGVwIHdoZW4gY2xpY2sgaXMgZnJvbSBuZXN0ZWQgc3RlcCAoZS5nLiBpbnNpZGUgbG9vcCkuICovXG4gIEBPdXRwdXQoKSBjbGlja0FjdGlvbiA9IG5ldyBFdmVudEVtaXR0ZXI8eyBldmVudDogTW91c2VFdmVudDsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnIH0+KCk7XG4gIC8qKiBFbWl0dGVkIHdoZW4gYSBzdGVwIGlzIGRyb3BwZWQgaW4gYSBuZXN0ZWQgZHJvcHpvbmUgKHN0ZXAtZ3JvdXAsIGxvb3AsIGNvbmRpdGlvbikuIFBheWxvYWQ6IHsgZXZlbnQsIHRhcmdldExpc3QgfS4gKi9cbiAgQE91dHB1dCgpIGRuZERyb3BJblpvbmUgPSBuZXcgRXZlbnRFbWl0dGVyPHsgZXZlbnQ6IGFueTsgdGFyZ2V0TGlzdDogVGVzdENhc2VTdGVwQ29uZmlnW10gfT4oKTtcbiAgLyoqIERhdGEgcHJvZmlsZSBvcHRpb25zIGZvciBsb29wIHN0ZXBzICovXG4gIEBJbnB1dCgpIGRhdGFQcm9maWxlT3B0aW9uczogYW55W10gPSBbXTtcbiAgLyoqIEluZGljYXRlcyBpZiBtb3JlIGRhdGEgcHJvZmlsZXMgYXJlIGF2YWlsYWJsZSBmb3IgbG9hZGluZyAqL1xuICBASW5wdXQoKSBoYXNNb3JlRGF0YVByb2ZpbGVzOiBib29sZWFuID0gZmFsc2U7XG4gIC8qKiBMb2FkaW5nIHN0YXRlIGZvciBkYXRhIHByb2ZpbGVzICovXG4gIEBJbnB1dCgpIGlzTG9hZGluZ0RhdGFQcm9maWxlczogYm9vbGVhbiA9IGZhbHNlO1xuICAvKiogTmF0dXJhbCB0ZXh0IGFjdGlvbnMgb3B0aW9ucyBmb3Igd2hpbGUgbG9vcCBjb25kaXRpb24gKi9cbiAgQElucHV0KCkgbmF0dXJhbFRleHRBY3Rpb25zT3B0aW9uczogYW55W10gPSBbXTtcbiAgLyoqIEZ1bmN0aW9uIHRvIHByb2Nlc3MgdGVtcGxhdGUgdmFyaWFibGVzIGZvciBjb25kaXRpb24gc3RlcHMgKi9cbiAgQElucHV0KCkgc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXM6ICh0ZW1wbGF0ZTogYW55KSA9PiBhbnlbXSA9ICgpID0+IFtdO1xuICAvKiogRW1pdCB3aGVuIG1vcmUgZGF0YSBwcm9maWxlcyBuZWVkIHRvIGJlIGxvYWRlZCAqL1xuICBAT3V0cHV0KCkgbG9hZE1vcmVEYXRhUHJvZmlsZXMgPSBuZXcgRXZlbnRFbWl0dGVyPHN0cmluZz4oKTtcbiAgLyoqIEVtaXQgd2hlbiBkYXRhIHByb2ZpbGUgc2VhcmNoIHF1ZXJ5IGNoYW5nZXMgKi9cbiAgQE91dHB1dCgpIHNlYXJjaERhdGFQcm9maWxlcyA9IG5ldyBFdmVudEVtaXR0ZXI8c3RyaW5nPigpO1xuICAvKiogRW1pdCB3aGVuIGEgc3RlcCBpcyB1cGRhdGVkIChlLmcuLCBBcHBseSBidXR0b24gY2xpY2tlZCBpbiBsb29wLXN0ZXAgZWRpdCBtb2RlKSAqL1xuICBAT3V0cHV0KCkgc3RlcFVwZGF0ZSA9IG5ldyBFdmVudEVtaXR0ZXI8VGVzdENhc2VTdGVwQ29uZmlnPigpO1xuICBAT3V0cHV0KCkgYWRkU3RlcEJldHdlZW5DbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8e3N0ZXA6IFRlc3RDYXNlU3RlcENvbmZpZywgaW5kZXg6IG51bWJlcn0+KCk7XG5cbiAgcHJpdmF0ZSBjb21wb25lbnRSZWY6IENvbXBvbmVudFJlZjxhbnk+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChURVNUX0NBU0VfU1RFUF9DT01QT05FTlRfTUFQKSBwcml2YXRlIGNvbXBvbmVudE1hcDogVGVzdENhc2VTdGVwQ29tcG9uZW50TWFwLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHt9XG5cbiAgbmdBZnRlclZpZXdJbml0KCk6IHZvaWQge1xuICAgIHRoaXMucmVuZGVyU3RlcCgpO1xuICB9XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzWydzdGVwJ10gfHwgY2hhbmdlc1snaW5kZXgnXSB8fCBjaGFuZ2VzWydpc05lc3RlZCddIHx8IGNoYW5nZXNbJ2lzSW5zaWRlTG9vcCddIHx8IGNoYW5nZXNbJ2lzUmVvcmRlciddIHx8IFxuICAgICAgICBjaGFuZ2VzWydkYXRhUHJvZmlsZU9wdGlvbnMnXSB8fCBjaGFuZ2VzWydhY3Rpb24nXSB8fCBjaGFuZ2VzWydoYXNNb3JlRGF0YVByb2ZpbGVzJ10gfHwgY2hhbmdlc1snaXNMb2FkaW5nRGF0YVByb2ZpbGVzJ10gfHxcbiAgICAgICAgY2hhbmdlc1snbmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyddIHx8IGNoYW5nZXNbJ3NldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzJ10pIHtcbiAgICAgIHRoaXMucmVuZGVyU3RlcCgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZ2V0Q29tcG9uZW50VHlwZShzdGVwOiBUZXN0Q2FzZVN0ZXBDb25maWcpOiBhbnkge1xuICAgIGlmIChpc1N0ZXBHcm91cENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnN0ZXBHcm91cDtcbiAgICBpZiAoaXNDb25kaXRpb25TdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAuY29uZGl0aW9uU3RlcDtcbiAgICBpZiAoaXNMb29wU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmxvb3BTdGVwO1xuICAgIGlmIChpc0FwaVN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5hcGlTdGVwO1xuICAgIGlmIChpc0RhdGFiYXNlU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmRhdGFiYXNlU3RlcDtcbiAgICBpZiAoaXNBaUFnZW50U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmFpQWdlbnRTdGVwO1xuICAgIGlmIChpc0FpVmVyaWZ5U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmFpVmVyaWZ5U3RlcDtcbiAgICBpZiAoaXNVcGxvYWRTdGVwQ29uZmlnKHN0ZXApKSByZXR1cm4gdGhpcy5jb21wb25lbnRNYXAudXBsb2FkU3RlcDtcbiAgICBpZiAoaXNTY3JlZW5zaG90U3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnNjcmVlbnNob3RTdGVwO1xuICAgIGlmIChpc1Njcm9sbFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5zY3JvbGxTdGVwO1xuICAgIGlmIChpc1ZlcmlmeVVybFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC52ZXJpZnlVcmxTdGVwO1xuICAgIGlmIChpc1Jlc3RvcmVTZXNzaW9uU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLnJlc3RvcmVTZXNzaW9uU3RlcDtcbiAgICBpZiAoaXNDdXN0b21Db2RlU3RlcENvbmZpZyhzdGVwKSkgcmV0dXJuIHRoaXMuY29tcG9uZW50TWFwLmN1c3RvbUNvZGVTdGVwO1xuICAgIGlmIChpc05vcm1hbFN0ZXBDb25maWcoc3RlcCkpIHJldHVybiB0aGlzLmNvbXBvbmVudE1hcC5ub3JtYWxTdGVwO1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgcHJpdmF0ZSByZW5kZXJTdGVwKCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5zdGVwSG9zdCB8fCAhdGhpcy5zdGVwKSByZXR1cm47XG5cbiAgICBjb25zdCBjb21wb25lbnRUeXBlID0gdGhpcy5nZXRDb21wb25lbnRUeXBlKHRoaXMuc3RlcCk7XG4gICAgaWYgKCFjb21wb25lbnRUeXBlKSByZXR1cm47XG5cbiAgICB0aGlzLnN0ZXBIb3N0LmNsZWFyKCk7XG4gICAgdGhpcy5jb21wb25lbnRSZWYgPSB0aGlzLnN0ZXBIb3N0LmNyZWF0ZUNvbXBvbmVudChjb21wb25lbnRUeXBlKTtcbiAgICBjb25zdCBpbnN0YW5jZSA9IHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlO1xuXG4gICAgaW5zdGFuY2UuY29uZmlnID0gdGhpcy5zdGVwO1xuICAgIGluc3RhbmNlLnN0ZXBOdW1iZXIgPSAodGhpcy5zdGVwIGFzIGFueSkuc3RlcE51bWJlcjtcbiAgICBpbnN0YW5jZS5pc05lc3RlZCA9IHRoaXMuaXNOZXN0ZWQ7XG4gICAgaW5zdGFuY2UuaXNJbnNpZGVMb29wID0gdGhpcy5pc0luc2lkZUxvb3A7XG4gICAgaW5zdGFuY2UuaXNSZW9yZGVyID0gdGhpcy5pc1Jlb3JkZXI7XG4gICAgLy8gU2V0IGFjdGlvbiBpZiBwcm92aWRlZCBhcyBpbnB1dCwgb3RoZXJ3aXNlIHVzZSBmcm9tIHN0ZXBcbiAgICBpZiAodGhpcy5hY3Rpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgaW5zdGFuY2UuYWN0aW9uID0gdGhpcy5hY3Rpb247XG4gICAgfVxuICAgIE9iamVjdC5rZXlzKHRoaXMuc3RlcCkuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICBpZiAoa2V5ICE9PSAnc3RlcFR5cGUnICYmIGtleSAhPT0gJ25lc3RlZFN0ZXBzJyAmJiBrZXkgIT09ICdicmFuY2hlcycpIHtcbiAgICAgICAgKGluc3RhbmNlIGFzIGFueSlba2V5XSA9ICh0aGlzLnN0ZXAgYXMgYW55KVtrZXldO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGlmICgodGhpcy5zdGVwIGFzIGFueSkubmVzdGVkU3RlcHMpIChpbnN0YW5jZSBhcyBhbnkpLm5lc3RlZFN0ZXBzID0gKHRoaXMuc3RlcCBhcyBhbnkpLm5lc3RlZFN0ZXBzO1xuICAgIGlmICgodGhpcy5zdGVwIGFzIGFueSkuYnJhbmNoZXMpIChpbnN0YW5jZSBhcyBhbnkpLmJyYW5jaGVzID0gKHRoaXMuc3RlcCBhcyBhbnkpLmJyYW5jaGVzO1xuXG4gICAgLy8gUGFzcyBkYXRhIHByb2ZpbGUgaW5wdXRzIHRvIHN0ZXAgaW5zdGFuY2VzIHRoYXQgY2FuIGNvbnRhaW4gbmVzdGVkIGxvb3Agc3RlcHNcbiAgICBpZiAoaXNMb29wU3RlcENvbmZpZyh0aGlzLnN0ZXApIHx8IGlzQ29uZGl0aW9uU3RlcENvbmZpZyh0aGlzLnN0ZXApIHx8IGlzU3RlcEdyb3VwQ29uZmlnKHRoaXMuc3RlcCkpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmRhdGFQcm9maWxlT3B0aW9ucyA9IHRoaXMuZGF0YVByb2ZpbGVPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuaGFzTW9yZURhdGFQcm9maWxlcyA9IHRoaXMuaGFzTW9yZURhdGFQcm9maWxlcztcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLmlzTG9hZGluZ0RhdGFQcm9maWxlcyA9IHRoaXMuaXNMb2FkaW5nRGF0YVByb2ZpbGVzO1xuICAgICAgLy8gQWxzbyBwYXNzIG5hdHVyYWwgdGV4dCBhY3Rpb25zIG9wdGlvbnMgKGZvciBuZXN0ZWQgbG9vcCBzdGVwcyB3aXRoIHdoaWxlIGxvb3AgYW5kIGNvbmRpdGlvbiBzdGVwcylcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnMgPSB0aGlzLm5hdHVyYWxUZXh0QWN0aW9uc09wdGlvbnM7XG4gICAgfVxuICAgIFxuICAgIC8vIFBhc3MgbmF0dXJhbCB0ZXh0IGFjdGlvbnMgb3B0aW9ucyB0byBsb29wIHN0ZXBzIChmb3Igd2hpbGUgbG9vcCBjb25kaXRpb24pXG4gICAgaWYgKGlzTG9vcFN0ZXBDb25maWcodGhpcy5zdGVwKSkge1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucyA9IHRoaXMubmF0dXJhbFRleHRBY3Rpb25zT3B0aW9ucztcbiAgICB9XG4gICAgXG4gICAgLy8gUGFzcyBuYXR1cmFsIHRleHQgYWN0aW9ucyBvcHRpb25zIGFuZCB0ZW1wbGF0ZSB2YXJpYWJsZXMgZnVuY3Rpb24gdG8gY29uZGl0aW9uIHN0ZXBzXG4gICAgaWYgKGlzQ29uZGl0aW9uU3RlcENvbmZpZyh0aGlzLnN0ZXApKSB7XG4gICAgICAoaW5zdGFuY2UgYXMgYW55KS5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zID0gdGhpcy5uYXR1cmFsVGV4dEFjdGlvbnNPcHRpb25zO1xuICAgICAgKGluc3RhbmNlIGFzIGFueSkuc2V0Q29uZGl0aW9uVGVtcGxhdGVWYXJpYWJsZXMgPSB0aGlzLnNldENvbmRpdGlvblRlbXBsYXRlVmFyaWFibGVzO1xuICAgIH1cblxuICAgIHRoaXMud2lyZU91dHB1dHMoaW5zdGFuY2UpO1xuICAgIHRoaXMuY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgfVxuXG4gIHByaXZhdGUgd2lyZU91dHB1dHMoaW5zdGFuY2U6IGFueSk6IHZvaWQge1xuICAgIC8vIFN0b3JlIHN1YnNjcmlwdGlvbnMgb24gdGhlIGluc3RhbmNlIHRvIHByZXZlbnQgZHVwbGljYXRlc1xuICAgIGlmICghKGluc3RhbmNlIGFzIGFueSkuX2NxYVN1YnNjcmlwdGlvbnMpIHtcbiAgICAgIChpbnN0YW5jZSBhcyBhbnkpLl9jcWFTdWJzY3JpcHRpb25zID0gbmV3IE1hcDxzdHJpbmcsIGFueT4oKTtcbiAgICB9XG4gICAgY29uc3Qgc3Vic2NyaXB0aW9ucyA9IChpbnN0YW5jZSBhcyBhbnkpLl9jcWFTdWJzY3JpcHRpb25zO1xuICAgIFxuICAgIGNvbnN0IHdpcmUgPSAoa2V5OiBzdHJpbmcsIGVtaXR0ZXI6IEV2ZW50RW1pdHRlcjxhbnk+KSA9PiB7XG4gICAgICBpZiAoaW5zdGFuY2Vba2V5XSAmJiB0eXBlb2YgaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVW5zdWJzY3JpYmUgZnJvbSBwcmV2aW91cyBzdWJzY3JpcHRpb24gaWYgZXhpc3RzXG4gICAgICAgIGNvbnN0IGV4aXN0aW5nU3ViID0gc3Vic2NyaXB0aW9ucy5nZXQoa2V5KTtcbiAgICAgICAgaWYgKGV4aXN0aW5nU3ViKSB7XG4gICAgICAgICAgZXhpc3RpbmdTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gQ3JlYXRlIG5ldyBzdWJzY3JpcHRpb25cbiAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gaW5zdGFuY2Vba2V5XS5zdWJzY3JpYmUoKHY6IGFueSkgPT4ge1xuICAgICAgICAgIGVtaXR0ZXIuZW1pdCh2KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHN1YnNjcmlwdGlvbnMuc2V0KGtleSwgc3Vic2NyaXB0aW9uKTtcbiAgICAgIH1cbiAgICB9O1xuICAgIHdpcmUoJ25lc3RlZFN0ZXBDaGFuZ2UnLCB0aGlzLm5lc3RlZFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwJywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICBpZiAodiAhPSBudWxsICYmIHR5cGVvZiB2ID09PSAnb2JqZWN0JyAmJiAnYnJhbmNoJyBpbiB2KSB0aGlzLmFkZFN0ZXBGb3JCcmFuY2guZW1pdCh2KTtcbiAgICAgICAgZWxzZSB0aGlzLmFkZFN0ZXAuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZVN0ZXAnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIGlmICh2ICE9IG51bGwgJiYgdHlwZW9mIHYgPT09ICdvYmplY3QnICYmICdicmFuY2gnIGluIHYgJiYgJ3N0ZXBJbmRleCcgaW4gdikgdGhpcy5kZWxldGVTdGVwV2l0aEJyYW5jaC5lbWl0KHYpO1xuICAgICAgICBlbHNlIHRoaXMuZGVsZXRlU3RlcC5lbWl0KHYpO1xuICAgICAgfSxcbiAgICB9IGFzIGFueSk7XG4gICAgd2lyZSgndG9nZ2xlRXhwYW5kZWQnLCB7XG4gICAgICBlbWl0OiAodjogYW55KSA9PiB7XG4gICAgICAgIC8vIEhhbmRsZSBib3RoIGJvb2xlYW4gYW5kIG9iamVjdCBmb3JtYXRzXG4gICAgICAgIC8vIElmIGl0J3MgYW4gb2JqZWN0IHdpdGggY29uZmlnIGFuZCBleHBhbmRlZCwgZW1pdCBpdCBhcy1pc1xuICAgICAgICAvLyBJZiBpdCdzIGp1c3QgYSBib29sZWFuLCBlbWl0IGl0IGFzLWlzXG4gICAgICAgIHRoaXMudG9nZ2xlRXhwYW5kZWQuZW1pdCh2KTtcbiAgICAgIH0sXG4gICAgfSBhcyBhbnkpO1xuICAgIHdpcmUoJ2dyb3VwTmFtZUNoYW5nZScsIHRoaXMuZ3JvdXBOYW1lQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnZGVzY3JpcHRpb25DaGFuZ2UnLCB0aGlzLmRlc2NyaXB0aW9uQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgncmV1c2FibGVDaGFuZ2UnLCB0aGlzLnJldXNhYmxlQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnb3BlbkV4dGVybmFsJywgdGhpcy5vcGVuRXh0ZXJuYWwgYXMgYW55KTtcbiAgICB3aXJlKCdlZGl0Jywge1xuICAgICAgZW1pdDogKHY6IGFueSkgPT4ge1xuICAgICAgICAvLyBJZiBjaGlsZCBjb21wb25lbnQgZW1pdHMgdm9pZCBvciBub3RoaW5nLCB1c2UgY3VycmVudCBzdGVwIGFuZCBpbmRleFxuICAgICAgICAvLyBJZiBjaGlsZCBjb21wb25lbnQgYWxyZWFkeSBlbWl0cyBhbiBvYmplY3QsIG1lcmdlIGl0IHdpdGggc3RlcCBhbmQgaW5kZXhcbiAgICAgICAgaWYgKHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgJ3N0ZXAnIGluIHYgJiYgJ2luZGV4JyBpbiB2KSB7XG4gICAgICAgICAgLy8gQWxyZWFkeSBoYXMgc3RlcCBhbmQgaW5kZXgsIGVtaXQgYXMtaXNcbiAgICAgICAgICB0aGlzLmVkaXQuZW1pdCh2KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBFbWl0IHdpdGggY3VycmVudCBzdGVwIGFuZCBpbmRleFxuICAgICAgICAgIHRoaXMuZWRpdC5lbWl0KHsgc3RlcDogdGhpcy5zdGVwLCBpbmRleDogdGhpcy5pbmRleCB9KTtcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICB9IGFzIGFueSk7XG4gICAgd2lyZSgnbGluaycsIHRoaXMubGluayBhcyBhbnkpO1xuICAgIHdpcmUoJ2R1cGxpY2F0ZScsIHRoaXMuZHVwbGljYXRlIGFzIGFueSk7XG4gICAgLy8gV2lyZSBkZWxldGUgZXZlbnQgLSBpbnRlcmNlcHQgYW5kIGVtaXQgd2l0aCBzdGVwIGRhdGFcbiAgICBpZiAoaW5zdGFuY2UuZGVsZXRlICYmIHR5cGVvZiBpbnN0YW5jZS5kZWxldGUuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1N1YiA9IHN1YnNjcmlwdGlvbnMuZ2V0KCdkZWxldGUnKTtcbiAgICAgIGlmIChleGlzdGluZ1N1Yikge1xuICAgICAgICBleGlzdGluZ1N1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgfVxuICAgICAgY29uc3QgZGVsZXRlU3ViID0gaW5zdGFuY2UuZGVsZXRlLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgIC8vIEVtaXQgZGVsZXRlIHdpdGggdGhlIGN1cnJlbnQgc3RlcCBkYXRhIHNvIHBhcmVudCBrbm93cyB3aGljaCBzdGVwIGlzIGJlaW5nIGRlbGV0ZWRcbiAgICAgICAgdGhpcy5kZWxldGUuZW1pdCh7IHN0ZXA6IHRoaXMuc3RlcCB9KTtcbiAgICAgIH0pO1xuICAgICAgc3Vic2NyaXB0aW9ucy5zZXQoJ2RlbGV0ZScsIGRlbGV0ZVN1Yik7XG4gICAgfVxuICAgIHdpcmUoJ3ZpZXdEZXRhaWxzJywgdGhpcy52aWV3RGV0YWlscyBhcyBhbnkpO1xuICAgIHdpcmUoJ3NlbGVjdGlvbkNoYW5nZScsIHRoaXMuc2VsZWN0aW9uQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnY29uZGl0aW9uQ2hhbmdlJywgdGhpcy5jb25kaXRpb25DaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdicmFuY2hTdGVwQ2hhbmdlJywgdGhpcy5icmFuY2hTdGVwQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkU3RlcEZvckJyYW5jaCcsIHRoaXMuYWRkU3RlcEZvckJyYW5jaCBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZVN0ZXBXaXRoQnJhbmNoJywgdGhpcy5kZWxldGVTdGVwV2l0aEJyYW5jaCBhcyBhbnkpO1xuICAgIHdpcmUoJ2FkZEJyYW5jaCcsIHRoaXMuYWRkQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgnYWRkRWxzZScsIHRoaXMuYWRkRWxzZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2RlbGV0ZUJyYW5jaCcsIHRoaXMuZGVsZXRlQnJhbmNoIGFzIGFueSk7XG4gICAgd2lyZSgndGVzdERhdGFQcm9maWxlQ2hhbmdlJywgdGhpcy50ZXN0RGF0YVByb2ZpbGVDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdzdGFydFN0ZXBDaGFuZ2UnLCB0aGlzLnN0YXJ0U3RlcENoYW5nZSBhcyBhbnkpO1xuICAgIHdpcmUoJ2VuZFN0ZXBDaGFuZ2UnLCB0aGlzLmVuZFN0ZXBDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdtYXhJdGVyYXRpb25zQ2hhbmdlJywgdGhpcy5tYXhJdGVyYXRpb25zQ2hhbmdlIGFzIGFueSk7XG4gICAgd2lyZSgnZXZlbnRUeXBlQ2hhbmdlJywgdGhpcy5ldmVudFR5cGVDaGFuZ2UgYXMgYW55KTtcbiAgICB3aXJlKCdwYXJhbWV0ZXJDaGFuZ2UnLCB0aGlzLnBhcmFtZXRlckNoYW5nZSBhcyBhbnkpO1xuICAgIC8vIGNsaWNrQWN0aW9uOiBlbWl0IHdpdGggc3RlcCBzbyBwYXJlbnQgZ2V0cyBjb3JyZWN0IHN0ZXAgKGUuZy4gbmVzdGVkIG5vcm1hbC1zdGVwIGluc2lkZSBsb29wKS5cbiAgICAvLyBDaGlsZCBtYXkgZW1pdCBNb3VzZUV2ZW50IChlLmcuIG5vcm1hbC1zdGVwKSBvciB7IGV2ZW50LCBzdGVwIH0gKGUuZy4gbG9vcC1zdGVwIGZvcndhcmRpbmcpLlxuICAgIGlmIChpbnN0YW5jZS5jbGlja0FjdGlvbiAmJiB0eXBlb2YgaW5zdGFuY2UuY2xpY2tBY3Rpb24uc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBjb25zdCBleGlzdGluZ1N1YiA9IHN1YnNjcmlwdGlvbnMuZ2V0KCdjbGlja0FjdGlvbicpO1xuICAgICAgaWYgKGV4aXN0aW5nU3ViKSBleGlzdGluZ1N1Yi51bnN1YnNjcmliZSgpO1xuICAgICAgY29uc3Qgc3ViID0gaW5zdGFuY2UuY2xpY2tBY3Rpb24uc3Vic2NyaWJlKCh2OiBNb3VzZUV2ZW50IHwgeyBldmVudDogTW91c2VFdmVudDsgc3RlcDogVGVzdENhc2VTdGVwQ29uZmlnIH0pID0+IHtcbiAgICAgICAgY29uc3QgcGF5bG9hZCA9IHYgIT0gbnVsbCAmJiB0eXBlb2YgdiA9PT0gJ29iamVjdCcgJiYgJ2V2ZW50JyBpbiB2ICYmICdzdGVwJyBpbiB2XG4gICAgICAgICAgPyB2XG4gICAgICAgICAgOiB7IGV2ZW50OiB2IGFzIE1vdXNlRXZlbnQsIHN0ZXA6IHRoaXMuc3RlcCEgfTtcbiAgICAgICAgdGhpcy5jbGlja0FjdGlvbi5lbWl0KHBheWxvYWQpO1xuICAgICAgfSk7XG4gICAgICBzdWJzY3JpcHRpb25zLnNldCgnY2xpY2tBY3Rpb24nLCBzdWIpO1xuICAgIH1cbiAgICB3aXJlKCdkbmREcm9wSW5ab25lJywgdGhpcy5kbmREcm9wSW5ab25lIGFzIGFueSk7XG4gICAgd2lyZSgnbG9hZE1vcmVEYXRhUHJvZmlsZXMnLCB0aGlzLmxvYWRNb3JlRGF0YVByb2ZpbGVzIGFzIGFueSk7XG4gICAgd2lyZSgnc2VhcmNoRGF0YVByb2ZpbGVzJywgdGhpcy5zZWFyY2hEYXRhUHJvZmlsZXMgYXMgYW55KTtcbiAgICB3aXJlKCdhZGRTdGVwQmV0d2VlbkNsaWNrJywgdGhpcy5hZGRTdGVwQmV0d2VlbkNsaWNrIGFzIGFueSk7XG4gICAgLy8gV2lyZSBzdGVwVXBkYXRlIC0gY2hlY2sgaWYgaXQgZXhpc3RzIG9uIGluc3RhbmNlXG4gICAgaWYgKGluc3RhbmNlLnN0ZXBVcGRhdGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKCdSZW5kZXJlcjogRm91bmQgc3RlcFVwZGF0ZSBFdmVudEVtaXR0ZXIsIHdpcmluZyBpdCcpO1xuICAgICAgd2lyZSgnc3RlcFVwZGF0ZScsIHRoaXMuc3RlcFVwZGF0ZSBhcyBhbnkpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjb25zb2xlLndhcm4oJ1JlbmRlcmVyOiBzdGVwVXBkYXRlIEV2ZW50RW1pdHRlciBub3QgZm91bmQgb24gaW5zdGFuY2UgZHVyaW5nIHdpcmVPdXRwdXRzJywge1xuICAgICAgICBzdGVwSWQ6IHRoaXMuc3RlcD8uaWQsXG4gICAgICAgIHN0ZXBUeXBlOiB0aGlzLnN0ZXA/LnN0ZXBUeXBlLFxuICAgICAgICBpbnN0YW5jZUtleXM6IE9iamVjdC5rZXlzKGluc3RhbmNlKVxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgLy8gQ2xlYW4gdXAgc3Vic2NyaXB0aW9ucyB3aGVuIGNvbXBvbmVudCBpcyBkZXN0cm95ZWRcbiAgICBpZiAodGhpcy5jb21wb25lbnRSZWY/Lmluc3RhbmNlKSB7XG4gICAgICBjb25zdCBzdWJzY3JpcHRpb25zID0gKHRoaXMuY29tcG9uZW50UmVmLmluc3RhbmNlIGFzIGFueSkuX2NxYVN1YnNjcmlwdGlvbnM7XG4gICAgICBpZiAoc3Vic2NyaXB0aW9ucykge1xuICAgICAgICBzdWJzY3JpcHRpb25zLmZvckVhY2goKHN1YjogYW55KSA9PiB7XG4gICAgICAgICAgaWYgKHN1YiAmJiB0eXBlb2Ygc3ViLnVuc3Vic2NyaWJlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBzdWJzY3JpcHRpb25zLmNsZWFyKCk7XG4gICAgICB9XG4gICAgfVxuICB9XG59XG5cbiIsIjxkaXYgY2xhc3M9XCJjcWEtcmVsYXRpdmVcIj5cbiAgICA8YnV0dG9uICpuZ0lmPVwiYWRkU3RlcEJldHdlZW5cIiBjbGFzcz1cImNxYS1hYnNvbHV0ZSBjcWEtdG9wLVtjYWxjKDEwMCUtMTJweCldIGNxYS1sZWZ0LVs1MCVdIGNxYS10cmFuc2xhdGUteC1bLTUwJV0gY3FhLXAtMCBjcWEtei1bMV1cIiAoY2xpY2spPVwiYWRkU3RlcEJldHdlZW5DbGljay5lbWl0KHtzdGVwOiBzdGVwLCBpbmRleDogaW5kZXh9KVwiPlxuICAgICAgICA8c3ZnIHdpZHRoPVwiMjRcIiBoZWlnaHQ9XCIyNFwiIHZpZXdCb3g9XCIwIDAgMjQgMjRcIiBmaWxsPVwibm9uZVwiIHhtbG5zPVwiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmdcIj48cmVjdCB4PVwiMVwiIHk9XCIxXCIgd2lkdGg9XCIyMS4xODIyXCIgaGVpZ2h0PVwiMjJcIiByeD1cIjEwLjU5MTFcIiBmaWxsPVwid2hpdGVcIi8+PHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjEuMTgyMlwiIGhlaWdodD1cIjIyXCIgcng9XCIxMC41OTExXCIgc3Ryb2tlPVwiIzNGNDNFRVwiIHN0cm9rZS13aWR0aD1cIjJcIi8+PHBhdGggZD1cIk04LjUgMTJIMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PHBhdGggZD1cIk0xMiA4LjVWMTUuNVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2UtbGluZWNhcD1cInJvdW5kXCIgc3Ryb2tlLWxpbmVqb2luPVwicm91bmRcIi8+PC9zdmc+XG4gICAgPC9idXR0b24+XG4gICAgPG5nLWNvbnRhaW5lciAjc3RlcEhvc3Q+PC9uZy1jb250YWluZXI+XG4gICAgPGJ1dHRvbiAqbmdJZj1cImFkZFN0ZXBCZXR3ZWVuXCIgY2xhc3M9XCJjcWEtYWJzb2x1dGUgY3FhLXRvcC1bY2FsYygxMDAlLTEycHgpXSBjcWEtbGVmdC1bNTAlXSBjcWEtdHJhbnNsYXRlLXgtWy01MCVdIGNxYS1wLTAgY3FhLXotWzFdXCIgKGNsaWNrKT1cImFkZFN0ZXBCZXR3ZWVuQ2xpY2suZW1pdCh7c3RlcDogc3RlcCwgaW5kZXg6IGluZGV4fSlcIj5cbiAgICAgICAgPHN2ZyB3aWR0aD1cIjI0XCIgaGVpZ2h0PVwiMjRcIiB2aWV3Qm94PVwiMCAwIDI0IDI0XCIgZmlsbD1cIm5vbmVcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnXCI+PHJlY3QgeD1cIjFcIiB5PVwiMVwiIHdpZHRoPVwiMjEuMTgyMlwiIGhlaWdodD1cIjIyXCIgcng9XCIxMC41OTExXCIgZmlsbD1cIndoaXRlXCIvPjxyZWN0IHg9XCIxXCIgeT1cIjFcIiB3aWR0aD1cIjIxLjE4MjJcIiBoZWlnaHQ9XCIyMlwiIHJ4PVwiMTAuNTkxMVwiIHN0cm9rZT1cIiMzRjQzRUVcIiBzdHJva2Utd2lkdGg9XCIyXCIvPjxwYXRoIGQ9XCJNOC41IDEySDE1LjVcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjxwYXRoIGQ9XCJNMTIgOC41VjE1LjVcIiBzdHJva2U9XCIjM0Y0M0VFXCIgc3Ryb2tlLWxpbmVjYXA9XCJyb3VuZFwiIHN0cm9rZS1saW5lam9pbj1cInJvdW5kXCIvPjwvc3ZnPlxuICAgIDwvYnV0dG9uPlxuPC9kaXY+Il19