@smarterplan/ngx-smarterplan-core 1.3.0 → 1.3.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.
@@ -323,10 +323,10 @@ export class MatterportService {
323
323
  if (this.sdk.Tag && this.sdk.Tag.allowAction) {
324
324
  // opening: false désactive le billboard natif
325
325
  // navigating: false désactive le déplacement de la caméra vers le tag
326
- this.sdk.Tag.allowAction(sid, { opening: false, navigating: false, docking: false });
327
- if (isDevMode()) {
328
- console.log(`[MatterportService] Disabled native actions for tag ${sid}`);
329
- }
326
+ this.sdk.Tag.allowAction(sid, { opening: false, navigating: true, docking: false });
327
+ /*if (isDevMode()) {
328
+ console.log(`[MatterportService] Disabled native actions for tag ${sid}`);
329
+ }*/
330
330
  }
331
331
  else if (this.sdk.Mattertag && this.sdk.Mattertag.preventAction) {
332
332
  // Fallback ancienne API
@@ -1666,4 +1666,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "14.3.0", ngImpor
1666
1666
  type: Inject,
1667
1667
  args: ['config']
1668
1668
  }] }, { type: i1.Router }, { type: i1.ActivatedRoute }, { type: i2.BaseVisibilityService }, { type: i0.NgZone }]; } });
1669
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsMkNBQTJDO0FBQzNDLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsZUFBZSxFQUNmLElBQUksR0FDTCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBRUwsV0FBVyxFQUVYLG1CQUFtQixFQUVuQixPQUFPLEVBQ1AsUUFBUSxFQUNSLFNBQVMsRUFDVCxrQkFBa0IsR0FDbkIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBSWpDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUc5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seURBQXlELENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUd6RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7O0FBd0J2RSxNQUFNLE9BQU8saUJBQWlCO0lBb0o1QixZQUNvQixNQUFjLEVBQ3hCLE1BQWMsRUFDZCxXQUEyQixFQUMzQixpQkFBd0MsRUFDeEMsTUFBYztRQUhkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FB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Q0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsQyxJQUFJLENBQUMsWUFBWSxHQUFHLFNBQVMsQ0FBQyxLQUFLLENBQUM7U0FDckM7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNuQixDQUFDO0lBRUQseUJBQXlCO1FBQ3ZCLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLE9BQU8sR0FBRyxLQUFLLENBQUM7UUFDN0QsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdkQsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDO0lBQ3BDLENBQUM7SUFFRCxpQkFBaUI7UUFDZixJQUFJLENBQUMsc0JBQXNCLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztJQUNsRCxDQUFDOzs4R0FsaUVVLGlCQUFpQixrQkFxSmxCLFFBQVE7a0hBckpQLGlCQUFpQixjQUZoQixNQUFNOzJGQUVQLGlCQUFpQjtrQkFIN0IsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQXNKSSxNQUFNOzJCQUFDLFFBQVEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIE5nWm9uZSwgaXNEZXZNb2RlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFjdGl2YXRlZFJvdXRlLCBSb3V0ZXIgfSBmcm9tICdAYW5ndWxhci9yb3V0ZXInO1xyXG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XHJcbi8vaW1wb3J0ICogYXMgc2VyaWFsaWpzZSBmcm9tIFwic2VyaWFsaWpzZVwiO1xyXG5pbXBvcnQge1xyXG4gIGdldERpc3RhbmNlQmV0d2VlblR3b1BvaW50cyxcclxuICBwb2lUeXBlVG9TdHJpbmcsXHJcbiAgd2FpdCxcclxufSBmcm9tICcuLi9oZWxwZXJzLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBNYXR0ZXJ0YWdEYXRhIH0gZnJvbSAnLi4vbWF0dGVydGFnRGF0YSc7XHJcbmltcG9ydCB7XHJcbiAgRGJPYmplY3RUeXBlLFxyXG4gIEZlYXR1cmVUeXBlLFxyXG4gIElPYmplY3QzRCxcclxuICBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLFxyXG4gIFBPSSxcclxuICBQb2lUeXBlLFxyXG4gIFNwTW9kdWxlLFxyXG4gIFRhZ0FjdGlvbixcclxuICBWaWV3ZXJJbnRlcmFjdGlvbnMsXHJcbn0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IE9iamVjdDNEIH0gZnJvbSAndGhyZWUnO1xyXG5pbXBvcnQgeyBCYXNlVGFnU2VydmljZSB9IGZyb20gJy4vdGFnLnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBCYXNlVmlzaWJpbGl0eVNlcnZpY2UgfSBmcm9tICcuL2Jhc2VWaXNpYmlsaXR5LnNlcnZpY2UnO1xyXG5pbXBvcnQgeyBDb25maWcgfSBmcm9tICcuLi9jb25maWcnO1xyXG5pbXBvcnQgeyBDYW1lcmFNb2RlIH0gZnJvbSAnLi4vdHlwZXMuc2VydmljZSc7XHJcbmltcG9ydCB7IElTY2VuZU5vZGUsIENvbXBvbmVudE91dHB1dCB9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvc2NlbmUtY29tcG9uZW50L1NjZW5lQ29tcG9uZW50XCI7XHJcbmltcG9ydCB7IFNlY3VyaXR5Q2FtZXJhIH0gZnJvbSAnLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL3NlY3VyaXR5LWNhbWVyYS9TZWN1cml0eUNhbWVyYSc7XHJcbmltcG9ydCB7IE5lc3RUaGVybW9zdGF0IH0gZnJvbSAnLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL25lc3QtdGhlcm1vc3RhdC9OZXN0VGhlcm1vc3RhdCc7XHJcbmltcG9ydCB7IFBsYW5lUmVuZGVyZXIgfSBmcm9tICcuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvbmVzdC10aGVybW9zdGF0L1BsYW5lUmVuZGVyZXInO1xyXG5pbXBvcnQgeyBDYW52YXNSZW5kZXJlciB9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvbmVzdC10aGVybW9zdGF0L0NhbnZhc1JlbmRlcmVyXCI7XHJcbmltcG9ydCB7IFZpZGVvUmVuZGVyZXIgfSBmcm9tIFwiLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL3ZpZGVvLXJlbmRlcmVyL1ZpZGVvUmVuZGVyZXJcIjtcclxuaW1wb3J0IHsgSGxzTG9hZGVyIH0gZnJvbSBcIi4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9oc2wtbG9hZGVyL0hsc0xvYWRlclwiO1xyXG5pbXBvcnQgeyBUdlBsYXllciB9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvdHYtcGxheWVyL1R2UGxheWVyXCI7XHJcblxyXG4vLyBpbXBvcnQge0NhbnZhc0ltYWdlfSBmcm9tIFwiLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL25lc3QtdGhlcm1vc3RhdC9DYW52YXNJbWFnZVwiO1xyXG5cclxuLyoqXHJcbiAqIEN1c3RvbSBUaHJlZWpzIE9iamVjdCAzRCBpbnRlcmZhY2VcclxuICovXHJcbmludGVyZmFjZSBUaHJlZUpTT2JqZWN0M0Qge1xyXG4gIGlkOiBzdHJpbmc7XHJcbiAgdXVpZD86IHN0cmluZztcclxuICBwb3NpdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9XHJcbiAgcm90YXRpb24/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfVxyXG4gIHNjYWxlPzogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyIH1cclxufVxyXG5cclxuZGVjbGFyZSBnbG9iYWwge1xyXG4gIGludGVyZmFjZSBXaW5kb3cge1xyXG4gICAgTVBfU0RLOiB7IGNvbm5lY3Q6IEZ1bmN0aW9uIH07XHJcbiAgfVxyXG59XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgTWF0dGVycG9ydFNlcnZpY2Uge1xyXG5cclxuICBwcml2YXRlIHNsb3RzOiBhbnlbXSA9IFtdOy8vU2xvdE5vZGVbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIG5vZGVzOiBJU2NlbmVOb2RlW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHNkazogYW55O1xyXG5cclxuICBwcml2YXRlIGNvbnRhaW5lcjogYW55O1xyXG5cclxuICAvLyBQb3NpdGlvbiBjYW1lcmFcclxuICBwcml2YXRlIHBvc2VNYXR0ZXJwb3J0OiBhbnk7XHJcblxyXG4gIHB1YmxpYyBwb3NlQ2FtZXJhOiB7IHJvdGF0aW9uOiBhbnk7IHBvc2l0aW9uOiBhbnk7IHN3ZWVwOiBhbnkgfTtcclxuICBwdWJsaWMgbGFzdENhbWVyYVBvc2l0aW9uOiBhbnkgPSB7IHg6IDAuMCwgeTogMC4wLCB6OiAwLjAgfTtcclxuXHJcbiAgcHJpdmF0ZSBhemltdXRoYWxDcm93bjogYW55O1xyXG4gIC8vIFBvaW50ZXIgdHJpY2tcclxuICBwcml2YXRlIHBvaW50ZXJCdXR0b246IGFueTtcclxuXHJcbiAgLy8gRGlzcGxheSBhbmQgZ2V0IGN1cnJlbnQgcG9zaXRpb24gb2YgY3Vyc29yIChmb3IgQWRtaW5zIG9ubHkpXHJcbiAgcHJpdmF0ZSBnZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbjogYW55O1xyXG4gIHByaXZhdGUgY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQgPSBmYWxzZTtcclxuICBwcml2YXRlIGludGVydmFsQ3Vyc29yUG9pbnRlclBvc2l0aW9uOiBhbnk7XHJcbiAgcHJpdmF0ZSB0ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWw6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBvbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uOiBhbnk7XHJcbiAgLy8gTWVhc3VyZSBtb2RlXHJcbiAgcHJpdmF0ZSBpc01lYXN1cmVNb2RlT24gPSBmYWxzZTtcclxuXHJcbiAgcHJpdmF0ZSBpbnRlcmFjdGlvbk1vZGU6IG51bWJlciA9IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUO1xyXG5cclxuICAvLyBMaXN0IG9mIGNyZWF0ZWQgTWF0dGVydGFnIElEcyBpbiB0aGUgY3VycmVudCB2aWV3ZXIgc2Vzc2lvblxyXG4gIHByaXZhdGUgbWF0dGVydGFnSURzOiBBcnJheTxzdHJpbmc+ID0gW107XHJcblxyXG4gIC8vIERpY3Rpb25uYXJ5IG9mIE1hdHRlcnRhZ0lEIGFuZCBpdHMgZGF0YSAobWF0dGVydGFnRGF0YSlcclxuICBwcml2YXRlIGRpY3Rpb25uYXJ5VGFnczogTWFwPHN0cmluZywgTWF0dGVydGFnRGF0YT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHByaXZhdGUgZGljdGlvbm5hcnlPYmplY3RzM0Q6IE1hcDxzdHJpbmcsIGFueT4gPSBuZXcgTWFwKCk7XHJcblxyXG4gIHByaXZhdGUgZGljdGlvbm5hcnlTY2VuZU9iamVjdHMzRDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHVibGljIHRocmVlSlNTY2VuZTogYW55OyAvLyBnbG9iYWwgcm9vdCBzY2VuZSAobm90IHVzZWQgbm93ISlcclxuXHJcbiAgcHJpdmF0ZSBsYXN0TWVhc3VyZSA9IFtdO1xyXG5cclxuICBwcml2YXRlIGRpc3RhbmNlc0xhc3RNZWFzdXJlOiBudW1iZXJbXSA9IFtdO1xyXG5cclxuICBwcml2YXRlIHJlc29sdXRpb24gPSB7XHJcbiAgICB3aWR0aDogNTAwLFxyXG4gICAgaGVpZ2h0OiA2MDAsXHJcbiAgfTtcclxuXHJcbiAgcHJpdmF0ZSB2aXNpYmlsaXR5ID0ge1xyXG4gICAgbWF0dGVydGFnczogZmFsc2UsXHJcbiAgICBzd2VlcHM6IHRydWUsXHJcbiAgfTtcclxuXHJcbiAgcHVibGljIHRhZ3NBdHRhY2htZW50czogT2JqZWN0ID0ge307XHJcblxyXG4gIHByaXZhdGUgbGFzdFNjcmVlbnNob3RVcmk6IGFueTtcclxuXHJcbiAgcHVibGljIHN3ZWVwczogQXJyYXk8c3RyaW5nPiB8IG51bGw7XHJcblxyXG4gIHB1YmxpYyBjdXJyZW50U3dlZXA6IFN1YmplY3Q8c3RyaW5nPiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIC8vY2FtZXJhIHBvc2l0aW9uIHdpdGggcm90YXRpb25cclxuICBwdWJsaWMgY3VycmVudENhbWVyYVBvc2U6IFN1YmplY3Q8YW55PiA9IG5ldyBTdWJqZWN0KCk7XHJcblxyXG4gIHByaXZhdGUgZmxvb3JzPzogQXJyYXk8eyBpZDogc3RyaW5nOyBuYW1lOiBzdHJpbmc7IHNlcXVlbmNlOiBudW1iZXIgfT4gfCBudWxsO1xyXG5cclxuICBwcml2YXRlIF9jdXJyZW50U3BhY2VJRDogc3RyaW5nO1xyXG5cclxuICBwcml2YXRlIGxhc3RPYmplY3QzRDogYW55OyAvLyBUaHJlZSBKUyBvYmplY3RcclxuXHJcbiAgcHJpdmF0ZSBjdXJyZW50Rmxvb3I7XHJcblxyXG4gIHB1YmxpYyBnZXQgY3VycmVudFNwYWNlSUQoKTogc3RyaW5nIHtcclxuICAgIHJldHVybiB0aGlzLl9jdXJyZW50U3BhY2VJRDtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzZXQgY3VycmVudFNwYWNlSUQodmFsdWU6IHN0cmluZykge1xyXG4gICAgdGhpcy5fY3VycmVudFNwYWNlSUQgPSB2YWx1ZTtcclxuICB9XHJcblxyXG4gIHRpbWVyUG9pbnRlcjogYW55O1xyXG5cclxuICBmb3JiaWRkZW5Td2VlcHM6IHN0cmluZ1tdID0gW107XHJcblxyXG4gIHB1YmxpYyB0YWdBY3Rpb246IFN1YmplY3Q8eyBhY3Rpb246IHN0cmluZzsgZGF0YTogc3RyaW5nIH0+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHVibGljIG1hdHRlcnRhZ1RvRm9sbG93OiBzdHJpbmcgfCBudWxsO1xyXG5cclxuICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZTtcclxuXHJcbiAgY29uZmlnOiBDb25maWc7XHJcblxyXG4gIHB1YmxpYyBpblRyYW5zaXRpb25Nb2RlID0gZmFsc2U7XHJcblxyXG4gIHB1YmxpYyBpblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIG5vTGlnaHRGb3JPYmplY3RzID0gdHJ1ZTtcclxuXHJcbiAgcHVibGljIGN1cnJlbnRDYW1lcmFNb2RlOiBDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5PVVRTSURFO1xyXG5cclxuICBwdWJsaWMgb25DYW1lcmFNb2RlQ2hhbmdlZCA9IG5ldyBTdWJqZWN0PENhbWVyYU1vZGU+KCk7XHJcblxyXG4gIHB1YmxpYyBvbkdvVG9UYWcgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XHJcblxyXG4gIHRhZ01lc3Nlbmdlck9uID0gZmFsc2U7XHJcblxyXG4gIFNQTW9kdWxlOiBTcE1vZHVsZTtcclxuXHJcbiAgcHVibGljIG9iamVjdENvbnRyb2w6IGFueTtcclxuXHJcbiAgcHJpdmF0ZSBzZWN1cml0eUNhbWVyYUFuaW1hdG9yOiBhbnk7XHJcblxyXG4gIC8qKlxyXG4gICAqIEFjdGlvbnMgb24gbGVmdCBjbGljayB3aGVuIHBvc2l0aW9uaW5nIG1hdHRlcnRhZyBpbiB2aXNpdFxyXG4gICAqL1xyXG4gIHBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyID0gKCkgPT4ge1xyXG4gICAgaWYgKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpIHtcclxuICAgICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbih7IC4uLnRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24gfSk7IC8vIGNvcHkhISBub3QgdGhlIHJlZmVyZW5jZVxyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7IC4uLnRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsIH0pOyAvLyBjb3B5ISEgbm90IHRoZSByZWZlcmVuY2VcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3Muc2V0KHRoaXMubWF0dGVydGFnVG9Gb2xsb3csIG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgICB0aGlzLnVwZGF0ZU1hdHRlclRhZ0NvbnRlbnRGb3JUYWdJRCh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgIH1cclxuICAgIHRoaXMub25WYWxpZGF0ZWRNYXR0ZXJ0YWcoKTtcclxuICB9O1xyXG5cclxuICBwb2ludGVyUmlnaHRDbGlja0hhbmRsZXIgPSAoZSkgPT4ge1xyXG4gICAgZS5wcmV2ZW50RGVmYXVsdCgpO1xyXG4gICAgdGhpcy5jYW5jZWxGb2xsb3dpbmdDdXJzb3IoKTtcclxuICAgIGFsZXJ0KCdhY3Rpb24gY2FuY2VsbGVkJyk7XHJcbiAgfTtcclxuXHJcbiAgcG9pbnRlck1pZGRsZUNsaWNrSGFuZGxlciA9IChlKSA9PiB7XHJcbiAgICB0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbC5pbm5lckhUTUwgPSBgcG9zaXRpb246XHJcbiAgICAgICAke3RoaXMucG9pbnRUb1N0cmluZyh0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uKX1cXG5cclxuICAgICAgIG5vcm1hbDpcclxuICAgICAgICR7dGhpcy5wb2ludFRvU3RyaW5nKHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsKX1cXG5cclxuICAgICAgIGZsb29ySWQ6XHJcbiAgICAgICAke3RoaXMucG9zZU1hdHRlcnBvcnQuZmxvb3JJZH1gO1xyXG4gICAgLy8gdGhpcy50ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWwuc3R5bGUuZGlzcGxheSA9ICd2aXNpYmxlJztcclxuICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICB9XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgQEluamVjdCgnY29uZmlnJykgY29uZmlnOiBDb25maWcsXHJcbiAgICBwcml2YXRlIHJvdXRlcjogUm91dGVyLFxyXG4gICAgcHJpdmF0ZSBhY3RpdmVSb3V0ZTogQWN0aXZhdGVkUm91dGUsXHJcbiAgICBwcml2YXRlIHZpc2liaWxpdHlTZXJ2aWNlOiBCYXNlVmlzaWJpbGl0eVNlcnZpY2UsXHJcbiAgICBwcml2YXRlIG5nWm9uZTogTmdab25lXHJcbiAgKSB7XHJcbiAgICB0aGlzLmNvbmZpZyA9IGNvbmZpZztcclxuXHJcbiAgICAvLyBUT0RPOiBvbmx5IGZvciBkZXYhXHJcbiAgICBpZiAoISF0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uICYmXHJcbiAgICAgIChkb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2RldicpICE9PSAtMSB8fCBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2xvY2FsaG9zdCcpICE9PSAtMSkpIHtcclxuICAgICAgdGhpcy5pbnRlcnZhbEN1cnNvclBvaW50ZXJQb3NpdGlvbiA9IHNldEludGVydmFsKCgpID0+IHtcclxuICAgICAgICBpZiAoIXRoaXMucG9zZU1hdHRlcnBvcnQpIHtcclxuICAgICAgICAgIHJldHVybjtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGNvbnN0IG5leHRTaG93ID0gdGhpcy5wb3NlTWF0dGVycG9ydC50aW1lICsgMTAwMDtcclxuICAgICAgICBpZiAobmV3IERhdGUoKS5nZXRUaW1lKCkgPiBuZXh0U2hvdykge1xyXG4gICAgICAgICAgaWYgKHRoaXMuY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQpIHtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgICAgICAgIHc6IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICBoOiB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQsXHJcbiAgICAgICAgICB9O1xyXG4gICAgICAgICAgY29uc3QgY29vcmQgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4odGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbiwgdGhpcy5wb3NlQ2FtZXJhLCBzaXplKTtcclxuICAgICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUubGVmdCA9IGAke2Nvb3JkLnggLSAyNX1weGA7XHJcbiAgICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlLnRvcCA9IGAke2Nvb3JkLnkgLSAyMn1weGA7XHJcbiAgICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgICAgICAgLy8gdGhpcy50ZXh0RGlzcGxheUN1cnNvclBvc2l0aW9uUGFuZWwuc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQgPSB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfSwgNTAwKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluaXRpYWxpemVzIE1hdHRlcnBvcnQgYW5kIGFsbCBsaXN0ZW5lcnMvZGF0YVxyXG4gICAqIEBwYXJhbSB0YWdTZXJ2aWNlIEJhc2VUYWdTZXJ2aWNlICh0byBpbmplY3QgaHRtbClcclxuICAgKiBAcGFyYW0gbW9kdWxlIFNwTW9kdWxlIChNdXNldW0sIEltbW8pIHRvIHN1YnNjcmliZSBvbmx5IHRvIG5lZWRlZCBmdW5jdGlvbm5uYWxpdGllc1xyXG4gICAqIEByZXR1cm5zIGJvb2xlYW5cclxuICAgKi9cclxuICBhc3luYyBpbml0U2RrKFxyXG4gICAgdGFnU2VydmljZTogQmFzZVRhZ1NlcnZpY2UsXHJcbiAgICBtb2R1bGU6IFNwTW9kdWxlID0gU3BNb2R1bGUuSU1NT1xyXG4gICk6IFByb21pc2U8Ym9vbGVhbj4ge1xyXG4gICAgaWYgKHRoaXMuc2RrKSB7XHJcbiAgICAgIC8vIGNsZWFuIGlmIHNkayBpcyBydW5uaW5nIGFscmVhZHlcclxuICAgICAgYXdhaXQgdGhpcy5hY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKCk7XHJcbiAgICB9XHJcbiAgICB0aGlzLnRhZ1NlcnZpY2UgPSB0YWdTZXJ2aWNlO1xyXG4gICAgdGhpcy5TUE1vZHVsZSA9IG1vZHVsZTtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XHJcbiAgICAgIC8vIFJldHJpZXZlIERPTSBlbGVtZW50c1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcjdmlld2VyLXBvaW50ZXItdHJpY2snXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMuY29udGFpbmVyID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3ZpZXdlci1tb2R1bGUnKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgY29uc3QgaWZyYW1lID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAnI3ZpZXdlci1tb2R1bGUnXHJcbiAgICAgICkgYXMgSFRNTElGcmFtZUVsZW1lbnQ7XHJcbiAgICAgIGlmICghaWZyYW1lKSB7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBBZGQgbGlzdGVuZXJzXHJcbiAgICAgIGlmICh0aGlzLnBvaW50ZXJCdXR0b24pIHtcclxuICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICdjbGljaycsXHJcbiAgICAgICAgICB0aGlzLnBvaW50ZXJMZWZ0Q2xpY2tIYW5kbGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgICAvLyBjYW5jZWwgb24gcmlnaHQgY2xpY2tcclxuICAgICAgICB0aGlzLnBvaW50ZXJCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICdjb250ZXh0bWVudScsXHJcbiAgICAgICAgICB0aGlzLnBvaW50ZXJSaWdodENsaWNrSGFuZGxlclxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgICAgLy8gUmV0cmlldmUgRE9NIGVsZW1lbnRzXHJcbiAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24gPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcjYnV0dG9uJ1xyXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICB0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyN0ZXh0J1xyXG4gICAgICApIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBpZiAodGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbikge1xyXG4gICAgICAgIC8vIGdldCBwb3NpdGlvbiBvbiBNYXR0ZXJwb3J0IFwibW9kZWxcIiBvbiBtaWRkbGUgY2xpY2tcclxuICAgICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgICAnY2xpY2snLFxyXG4gICAgICAgICAgdGhpcy5wb2ludGVyTWlkZGxlQ2xpY2tIYW5kbGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gTG9hZCBTREtcclxuICAgICAgY29uc29sZS5sb2coJ0xvYWRpbmcgTWF0dGVycG9ydCBTREsnKTtcclxuICAgICAgY29uc3Qgc2hvd2Nhc2VXaW5kb3cgPSBpZnJhbWUuY29udGVudFdpbmRvdztcclxuICAgICAgaWZyYW1lLmFkZEV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ2xvYWQnLFxyXG4gICAgICAgIGFzeW5jIGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIHRoaXMuc2RrID0gYXdhaXQgc2hvd2Nhc2VXaW5kb3cuTVBfU0RLLmNvbm5lY3QoXHJcbiAgICAgICAgICAgICAgc2hvd2Nhc2VXaW5kb3csXHJcbiAgICAgICAgICAgICAgJ3FuOXdzYXN1eTVoMmZ6cmJybjFuenIwaWQnLFxyXG4gICAgICAgICAgICAgICczLjUnXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBMb2FkIE1hdHRlcnRhZyBpY29ucyBhbmQgY3VzdG9tIHN1YnNjcmlwdGlvbnNcclxuICAgICAgICAgIHN3aXRjaCAobW9kdWxlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgU3BNb2R1bGUuSU1NTzpcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi10aWNrZXQnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fdGlja2V0XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi1lcXVpcG1lbnQnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZXF1aXBtZW50XHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi1tZWFzdXJlJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX21lYXN1cmVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uLWRhdGEnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fZGF0YVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb24tb2JqZWN0M2QnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fb2JqZWN0M2RcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgb25BZGRlZDogZnVuY3Rpb24gKFxyXG4gICAgICAgICAgICAgICAgICBpbmRleDogYW55LFxyXG4gICAgICAgICAgICAgICAgICBpdGVtOiB7IHBvaW50czogYW55IH0sXHJcbiAgICAgICAgICAgICAgICAgIGNvbGxlY3Rpb246IGFueVxyXG4gICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICAgICAgICAgICAvLyAgICAgXCJpdGVtIGFkZGVkIHRvIHRoZSBjb2xsZWN0aW9uXCIsXHJcbiAgICAgICAgICAgICAgICAgIC8vICAgICBpbmRleCxcclxuICAgICAgICAgICAgICAgICAgLy8gICAgIGl0ZW0sXHJcbiAgICAgICAgICAgICAgICAgIC8vICk7XHJcbiAgICAgICAgICAgICAgICAgIC8vIHRoaXMubWVhc3VyZW1lbnRzW2luZGV4XSA9IGl0ZW07XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMubGFzdE1lYXN1cmUgPSBpdGVtLnBvaW50cztcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIChjb2xsZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ3RoZSBlbnRpcmUgdXAtdG8tZGF0ZSBjb2xsZWN0aW9uJywgY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuZ2V0RGlzdGFuY2VGb3JMYXN0TWVhc3VyZW1lbnQoKTtcclxuICAgICAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMubW9kZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiAobWVhc3VyZW1lbnRNb2RlU3RhdGU6IHsgYWN0aXZlOiBhbnkgfSkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBtZWFzdXJlbWVudCBtb2RlIHN0YXRlIGhhcyBjaGFuZ2VkXHJcbiAgICAgICAgICAgICAgICAgIHRoaXMuaXNNZWFzdXJlTW9kZU9uID0gbWVhc3VyZW1lbnRNb2RlU3RhdGUuYWN0aXZlO1xyXG4gICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnSXMgbWVhc3VyZW1lbnQgbW9kZSBjdXJyZW50bHkgYWN0aXZlPyAnLCBtZWFzdXJlbWVudE1vZGVTdGF0ZS5hY3RpdmUpO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTcE1vZHVsZS5NVVNFVU06XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb24tZGF0YScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgY2FzZSBTcE1vZHVsZS5IT1RFTDpcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbl9yb29tX2F2YWlsYWJsZScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX2F2YWlsYWJsZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb25fcm9vbV91bmF2YWlsYWJsZScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX3VuYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbl9yb29tX2Nob3NlbicsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX2Nob3NlblxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb25fcm9vbV92aWV3ZWQnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fcm9vbV92aWV3ZWRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgJ2ljb24tcG9zaXRpb24nLFxyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9wb3NpdGlvblxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvLyBDdXJyZW50IFJvb20gKHVzZWQgZm9yIGdldHRpbmcgYm91bmRpbmcgYm94IGFuZCBldmVudHVhbGx5IGxhenkgbG9hZCBtYXR0ZXJ0YWcgb3Igb2JqZWN0M0QgaW5zaWRlIGN1cnJlbnQgUm9vbSlcclxuICAgICAgICAgIHRoaXMuc2RrLlJvb20uY3VycmVudC5zdWJzY3JpYmUoKGN1cnJlbnRSb29tKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBoZWxsbyBjdXJyZW50IFJvb20gJHtKU09OLnN0cmluZ2lmeShjdXJyZW50Um9vbSl9YCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyAzRCBwb3NpdGlvbidzIHBvaW50ZXJcclxuICAgICAgICAgIHRoaXMuc2RrLlBvaW50ZXIuaW50ZXJzZWN0aW9uLnN1YnNjcmliZShcclxuICAgICAgICAgICAgZnVuY3Rpb24gKGludGVyc2VjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydCA9IGludGVyc2VjdGlvbjtcclxuICAgICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0LnRpbWUgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcclxuICAgICAgICAgICAgICBpZiAoIXRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbikge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uID0ge1xyXG4gICAgICAgICAgICAgICAgICB4OiAwLFxyXG4gICAgICAgICAgICAgICAgICB5OiAwLFxyXG4gICAgICAgICAgICAgICAgICB6OiAwLFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIHRoaXMuaW50ZXJhY3Rpb25Nb2RlICE9PSBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvd1xyXG4gICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgLy8gZm9sbG93IHRoZSBwb2ludGVyIGFuZCBjaGFuZ2VzIHRoZSBwb3NpdGlvbiBvZiB0aGUgbGFzdCB0YWdcclxuICAgICAgICAgICAgICAgIC8vICh3ZSBhcmUgYWJvdXQgdG8gdmFsaWRhdGUsIGJ1dCBpdCBleGlzdHMgaW4gc2RrIGFscmVhZHkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLmVuYWJsZV9mb2xsb3dpbmdfdGFnKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBpZiAoISF0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uICYmICEhdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5zdHlsZSAmJlxyXG4gICAgICAgICAgICAgICAgKGRvY3VtZW50LlVSTC5pbmRleE9mKCdodHRwczovL2Rldi5zbWFydGVycGxhbi5pbycpICE9PSAtMSB8fCBkb2N1bWVudC5sb2NhdGlvbi5ocmVmLmluZGV4T2YoJ2xvY2FsaG9zdCcpICE9PSAtMSkpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcclxuICAgICAgICAgICAgICAgIHRoaXMuY3Vyc29yUG9zaXRpb25CdXR0b25EaXNwbGF5ZWQgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvL0NhbWVyYSBtb2RlXHJcbiAgICAgICAgICB0aGlzLnNkay5Nb2RlLmN1cnJlbnQuc3Vic2NyaWJlKChtb2RlKSA9PiB7XHJcbiAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgc3dpdGNoIChtb2RlKSB7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5kb2xsaG91c2UnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuRE9MTEhPVVNFO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5mbG9vcnBsYW4nOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuRkxPT1JQTEFOO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS5pbnNpZGUnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuSU5TSURFO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgY2FzZSAnbW9kZS50cmFuc2l0aW9uaW5nJzpcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLlRSQU5TSVRJT05JTkc7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuT1VUU0lERTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLm9uQ2FtZXJhTW9kZUNoYW5nZWQubmV4dCh0aGlzLmN1cnJlbnRDYW1lcmFNb2RlKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIENhbWVyYSdzIHZpZXdwb2ludFxyXG4gICAgICAgICAgdGhpcy5zZGsuQ2FtZXJhLnBvc2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdWJzY3IocG9zZTogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5wb3NlQ2FtZXJhID0gcG9zZTtcclxuXHJcbiAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhUG9zZS5uZXh0KHBvc2UpO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdDdXJyZW50IHBvc2l0aW9uIGlzICcsIHBvc2UucG9zaXRpb24pO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdSb3RhdGlvbiBhbmdsZSBpcyAnLCBwb3NlLnJvdGF0aW9uKTtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIlN3ZWVwIFVVSUQgaXNcIiwgcG9zZS5zd2VlcCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAvLyBzdWJzY3JpYmUgdG8gc3dlZXBzXHJcbiAgICAgICAgICB0aGlzLnNkay5Td2VlcC5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHN1YnNjcihjb2xsZWN0aW9uOiB7fSkge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU3dlZXAgY29sbGVjdGlvbiB1cGRhdGVkXCIpO1xyXG4gICAgICAgICAgICAgIHRoaXMuc3dlZXBzID0gT2JqZWN0LmtleXMoY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBjdXJyZW50IHN3ZWVwXHJcbiAgICAgICAgICB0aGlzLnNkay5Td2VlcC5jdXJyZW50LnN1YnNjcmliZShcclxuICAgICAgICAgICAgZnVuY3Rpb24gc3Vic2NyKGN1cnJlbnRTd2VlcDogeyBzaWQ6IHN0cmluZyB9KSB7XHJcbiAgICAgICAgICAgICAgLy8gQ2hhbmdlIHRvIHRoZSBjdXJyZW50IHN3ZWVwIGhhcyBvY2N1cnJlZC5cclxuICAgICAgICAgICAgICBpZiAoY3VycmVudFN3ZWVwLnNpZCA9PT0gJycpIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdOb3QgY3VycmVudGx5IHN0YXRpb25lZCBhdCBhIHN3ZWVwIHBvc2l0aW9uJyk7XHJcbiAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiZW1taXRpbmcgc3dlZXBcIiwgY3VycmVudFN3ZWVwLnNpZCk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRTd2VlcC5uZXh0KGN1cnJlbnRTd2VlcC5zaWQpO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIFN1YnNjcmliZSB0byBGbG9vciBkYXRhXHJcbiAgICAgICAgICB0aGlzLnNkay5GbG9vci5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIHVwZCh0aGlzOiBhbnksIGNvbGxlY3Rpb246IGFueSkge1xyXG4gICAgICAgICAgICAgIHRoaXMuZmxvb3JzID0gT2JqZWN0LnZhbHVlcyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gSGFuZGxlciBnw6luw6lyaXF1ZSBwb3VyIGxlcyBzw6lsZWN0aW9ucyBkZSB0YWdzXHJcbiAgICAgICAgICBjb25zdCBoYW5kbGVUYWdTZWxlY3Rpb24gPSBhc3luYyAoc2lkOiBzdHJpbmcsIHNvdXJjZTogc3RyaW5nLCBldnQ/OiBhbnkpID0+IHtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtNYXR0ZXJwb3J0U2VydmljZV0gaGFuZGxlVGFnU2VsZWN0aW9uIGZyb20gJHtzb3VyY2V9IGZvciBzaWQ6ICR7c2lkfWAsIHsgZXZ0IH0pO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvLyBFeMOpY3V0aW9uIGRlIGwnYWN0aW9uIHBlcnNvbm5hbGlzw6llIChvdXZlcnR1cmUgZHUgcGFubmVhdSBkZSBkw6l0YWlsIHZpYSBuYXZpZ2F0aW9uKVxyXG4gICAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQoc2lkKTtcclxuICAgICAgICAgICAgICBpZiAoIW1hdHRlcnRhZ0RhdGEpIHtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnbm8gbWF0dGVydGFnRGF0YSB0byBkaXNwbGF5Jywgc2lkKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgY29uc3QgdXJsID0gdGFnU2VydmljZS5nZXRVcmxGb3JTZWVEZXRhaWxzKFxyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXRPYmplY3QoKSxcclxuICAgICAgICAgICAgICAgIG1hdHRlcnRhZ0RhdGEuZ2V0VHlwZSgpXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICBpZiAodXJsICE9PSAnJykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbTWF0dGVycG9ydFNlcnZpY2VdIE5hdmlnYXRpbmcgdG8gZGV0YWlsIFVSTDogJHt1cmx9YCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgICAgICAgICAgICAgIHRoaXMubmdab25lLnJ1bigoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFt1cmxdKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3Qgc2hvdyBkZXRhaWxzIGZvciB0YWcnLCBlcnJvcik7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIC8vIEZvbmN0aW9uIHBvdXIgZMOpc2FjdGl2ZXIgbGVzIGFjdGlvbnMgbmF0aXZlcyBzdXIgdW4gdGFnIChTREsgdjMpXHJcbiAgICAgICAgICBjb25zdCBkaXNhYmxlTmF0aXZlQWN0aW9ucyA9IChzaWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoIXRoaXMuc2RrKSByZXR1cm47XHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2RrLlRhZyAmJiB0aGlzLnNkay5UYWcuYWxsb3dBY3Rpb24pIHtcclxuICAgICAgICAgICAgICAgIC8vIG9wZW5pbmc6IGZhbHNlIGTDqXNhY3RpdmUgbGUgYmlsbGJvYXJkIG5hdGlmXHJcbiAgICAgICAgICAgICAgICAvLyBuYXZpZ2F0aW5nOiBmYWxzZSBkw6lzYWN0aXZlIGxlIGTDqXBsYWNlbWVudCBkZSBsYSBjYW3DqXJhIHZlcnMgbGUgdGFnXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5UYWcuYWxsb3dBY3Rpb24oc2lkLCB7IG9wZW5pbmc6IGZhbHNlLCBuYXZpZ2F0aW5nOiBmYWxzZSwgZG9ja2luZzogZmFsc2UgfSk7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtNYXR0ZXJwb3J0U2VydmljZV0gRGlzYWJsZWQgbmF0aXZlIGFjdGlvbnMgZm9yIHRhZyAke3NpZH1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMuc2RrLk1hdHRlcnRhZyAmJiB0aGlzLnNkay5NYXR0ZXJ0YWcucHJldmVudEFjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgLy8gRmFsbGJhY2sgYW5jaWVubmUgQVBJXHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucHJldmVudEFjdGlvbihzaWQsIHsgb3BlbmluZzogdHJ1ZSwgbmF2aWdhdGluZzogdHJ1ZSB9KTtcclxuICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgW01hdHRlcnBvcnRTZXJ2aWNlXSBQcmV2ZW50ZWQgbmF0aXZlIGFjdGlvbnMgKGxlZ2FjeSkgZm9yIHRhZyAke3NpZH1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgW01hdHRlcnBvcnRTZXJ2aWNlXSBFcnJvciBkaXNhYmxpbmcgYWN0aW9ucyBmb3IgJHtzaWR9YCwgZSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICB9O1xyXG5cclxuICAgICAgICAgIC8vIEF0dGVuZHJlIHF1ZSBsJ2FwcGxpY2F0aW9uIHNvaXQgZW4gcGhhc2UgUExBWUlOR1xyXG4gICAgICAgICAgaWYgKHRoaXMuc2RrLkFwcCAmJiB0aGlzLnNkay5BcHAuc3RhdGUpIHtcclxuICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tNYXR0ZXJwb3J0U2VydmljZV0gV2FpdGluZyBmb3IgQXBwLlBoYXNlLlBMQVlJTkcuLi4nKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB0aGlzLnNkay5BcHAuc3RhdGUud2FpdFVudGlsKChzOiBhbnkpID0+IHMucGhhc2UgPT09IHRoaXMuc2RrLkFwcC5QaGFzZS5QTEFZSU5HKS50aGVuKCgpID0+IHtcclxuICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdbTWF0dGVycG9ydFNlcnZpY2VdIEFwcCBpcyBQTEFZSU5HLicpO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy8gMS4gRMOpc2FjdGl2ZXIgbGVzIGFjdGlvbnMgbmF0aXZlcyBwb3VyIHRvdXMgbGVzIHRhZ3MgZXhpc3RhbnRzIGV0IGZ1dHVyc1xyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNkay5UYWcgJiYgdGhpcy5zZGsuVGFnLmRhdGEpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLlRhZy5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICAgIG9uQWRkZWQ6IChzaWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGRpc2FibGVOYXRpdmVBY3Rpb25zKHNpZCk7XHJcbiAgICAgICAgICAgICAgICAgIH0sXHJcbiAgICAgICAgICAgICAgICAgIG9uVXBkYXRlZDogKHNpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZU5hdGl2ZUFjdGlvbnMoc2lkKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogKGNvbGxlY3Rpb246IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pLmZvckVhY2goc2lkID0+IGRpc2FibGVOYXRpdmVBY3Rpb25zKHNpZCkpO1xyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgIC8vIDIuIMOJY291dGVyIGxlcyBzw6lsZWN0aW9ucyB2aWEgbCdvYnNlcnZhYmxlIG9wZW5UYWdzIChNw6l0aG9kZSBtb2Rlcm5lKVxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLnNkay5UYWcgJiYgdGhpcy5zZGsuVGFnLm9wZW5UYWdzKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLnNkay5UYWcub3BlblRhZ3Muc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgb25DaGFuZ2VkOiAobmV3U3RhdGU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChuZXdTdGF0ZS5zZWxlY3RlZCAmJiBuZXdTdGF0ZS5zZWxlY3RlZC5zaXplID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2lkID0gQXJyYXkuZnJvbShuZXdTdGF0ZS5zZWxlY3RlZClbMF0gYXMgc3RyaW5nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgaGFuZGxlVGFnU2VsZWN0aW9uKHNpZCwgJ1RhZy5vcGVuVGFncy5zZWxlY3RlZCcpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAvLyBGYWxsYmFjayBwb3VyIGwnw6l2w6luZW1lbnQgZ2xvYmFsIHRhZy5jbGlja1xyXG4gICAgICAgICAgdGhpcy5zZGsub24oJ3RhZy5jbGljaycsIChzaWQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgW01hdHRlcnBvcnRTZXJ2aWNlXSBzZGsub24oJ3RhZy5jbGljaycpIHJlY2VpdmVkIGZvciBzaWQ6ICR7c2lkfWApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGhhbmRsZVRhZ1NlbGVjdGlvbihzaWQsICdnbG9iYWwudGFnLmNsaWNrJyk7XHJcbiAgICAgICAgICAgIC8vIE9uIHMnYXNzdXJlIHF1J2lsIGVzdCBiaWVuIGTDqXNhY3RpdsOpIG3Dqm1lIHNpIG9uIGEgcmF0w6kgbCfDqXbDqG5lbWVudCBkJ2Fqb3V0XHJcbiAgICAgICAgICAgIGRpc2FibGVOYXRpdmVBY3Rpb25zKHNpZCk7XHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBQb2ludGVyIHRyaWNrXHJcbiAgICAgICAgICAvLyBDcmVhdGUgYSBkaXYgdGhhdCB3aWxsIGFwcGVhciB3aGVuIHRoZSBjdXJzb3IgaXMgc3RpbGxcclxuICAgICAgICAgIC8vIEl0IHdpbGwgaW50ZXJjZXB0IHRoZSBjbGljayBvZiB0aGUgbW91c2UgYmVmb3JlIGl0IHRyaWdlcnJpbmcgdGhlIE1hdHRlcnBvcnQncyB0b3VyIG5hdmlnYXRpb25cclxuICAgICAgICAgIHRoaXMudGltZXJQb2ludGVyID0gc2V0SW50ZXJ2YWwoXHJcbiAgICAgICAgICAgIHRoaXMudXBkYXRlUG9pbnRlclRyaWNrLmJpbmQodGhpcyksXHJcbiAgICAgICAgICAgIDUwXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8qKlxyXG4gICAgICAgICAgICogVHJhbnNpdGlvbnNcclxuICAgICAgICAgICAqL1xyXG4gICAgICAgICAgdGhpcy5zZGsub24oXHJcbiAgICAgICAgICAgICd2aWV3bW9kZS5jaGFuZ2VzdGFydCcsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uICh0bywgZnJvbSkge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdTdGFydGluZyB0byBtb3ZlIHRvICcgKyB0byArICcgZnJvbSAnICsgZnJvbSk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Nb2RlID0gdHJ1ZTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgICAndmlld21vZGUuY2hhbmdlZW5kJyxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKG9sZE1vZGUsIG5ld01vZGUpIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnRW5kZWQgdG8gbW92ZSB0byAnICsgbmV3TW9kZSArICcgZnJvbSAnICsgb2xkTW9kZSk7XHJcbiAgICAgICAgICAgICAgaWYgKG5ld01vZGUgIT09ICdtb2RlLnRyYW5zaXRpb25pbmcnKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICB0aGlzLnNkay5vbihcclxuICAgICAgICAgICAgdGhpcy5zZGsuU3dlZXAuRXZlbnQuRU5URVIsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChvbGRTd2VlcCwgbmV3U3dlZXApIHtcclxuICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygnTGVhdmluZyBzd2VlcCAnICsgb2xkU3dlZXApO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbnRlcmluZyBzd2VlcCAnICsgbmV3U3dlZXApO1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSBmYWxzZTtcclxuICAgICAgICAgICAgICB0aGlzLmRpc3BsYXlBemltdXRhbENyb3duKCk7XHJcbiAgICAgICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgICB0aGlzLnNkay5Td2VlcC5FdmVudC5FWElULFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoZnJvbVN3ZWVwLCB0b1N3ZWVwKSB7XHJcbiAgICAgICAgICAgICAgLy8gICBjb25zb2xlLmxvZygnTGVhdmluZyBzd2VlcCAnICsgZnJvbVN3ZWVwKTtcclxuICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdUcmFuc2l0aW9uaW5nIHRvIHN3ZWVwICcgKyB0b1N3ZWVwKTtcclxuICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gdHJ1ZTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIFRPRE86IGdldCBzY2VuZSB3aXRoIGdldHRlciBpbnN0ZWFkIVxyXG4gICAgICAgICAgY29uc3QgW3NjZW5lT2JqZWN0XSA9IGF3YWl0IHRoaXMuc2RrLlNjZW5lLmNyZWF0ZU9iamVjdHMoMSk7XHJcbiAgICAgICAgICBjb25zdCBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgICAgICAgbm9kZS5zdGFydCgpO1xyXG4gICAgICAgICAgdGhpcy50aHJlZUpTU2NlbmUgPSBub2RlLm9iajNELnBhcmVudDtcclxuXHJcbiAgICAgICAgICAvLyBhd2FpdCB0aGlzLnNkay5TY2VuZS5jb25maWd1cmUoKHJlbmRlcmVyOiBhbnksIHRocmVlOiBhbnkpID0+IHtcclxuICAgICAgICAgIC8vICAgcmVuZGVyZXIucGh5c2ljYWxseUNvcnJlY3RMaWdodHMgPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICByZW5kZXJlci5vdXRwdXRFbmNvZGluZyA9IHRocmVlLnNSR0JFbmNvZGluZztcclxuICAgICAgICAgIC8vICAgcmVuZGVyZXIuc2hhZG93TWFwLmVuYWJsZWQgPSB0cnVlO1xyXG4gICAgICAgICAgLy8gICByZW5kZXJlci5zaGFkb3dNYXAuYmlhcyA9IDAuMDAwMTtcclxuICAgICAgICAgIC8vICAgcmVuZGVyZXIuc2hhZG93TWFwLnR5cGUgPSB0aHJlZS5QQ0ZTb2Z0U2hhZG93TWFwO1xyXG4gICAgICAgICAgLy8gfSk7XHJcblxyXG5cclxuICAgICAgICAgIC8vIFRPRE86IHdhaXQgZm9yIE1QIHRpY2tldCByZXNvbHV0aW9uIGJlZm9yZSBkZWNvbW1lbnQgdGhlc2UhXHJcbiAgICAgICAgICAvLyBXYWl0IHVudGlsIFNob3djYXNlIGlzIGFjdHVhbGx5IHBsYXlpbmcuLi4uXHJcbiAgICAgICAgICAvLyB0aGlzLnNkay5UYWcuZGF0YS5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgLy8gICBvbkFkZGVkOiBhc3luYyBmdW5jdGlvbiAoaW5kZXgsIGl0ZW0sIGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgICAvLyAgICAgbGV0IHRoaXNPcGFjaXR5ID0gMC4yO1xyXG4gICAgICAgICAgLy8gICAgIHRoaXMuc2RrLlRhZy5lZGl0T3BhY2l0eShpbmRleCwgdGhpc09wYWNpdHkpO1xyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vICAgICBsZXQgc291cmNlID0gbnVsbDtcclxuICAgICAgICAgIC8vICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gICAgICAgc291cmNlID0gYXdhaXQgUHJvbWlzZS5hbGwoW1xyXG4gICAgICAgICAgLy8gICAgICAgICB0aGlzLnNkay5TZW5zb3IuY3JlYXRlU291cmNlKHRoaXMuc2RrLlNlbnNvci5Tb3VyY2VUeXBlLlNQSEVSRSwge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIG9yaWdpbjogaXRlbS5hbmNob3JQb3NpdGlvbixcclxuICAgICAgICAgIC8vICAgICAgICAgICByYWRpdXM6IE51bWJlcigzKSxcclxuICAgICAgICAgIC8vICAgICAgICAgICB1c2VyRGF0YToge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgaWQ6IGluZGV4ICsgJy1zcGhlcmUtc291cmNlJyxcclxuICAgICAgICAgIC8vICAgICAgICAgICB9LFxyXG4gICAgICAgICAgLy8gICAgICAgICB9KVxyXG4gICAgICAgICAgLy8gICAgICAgXSk7XHJcbiAgICAgICAgICAvLyAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgLy8gICAgICAgY29uc29sZS5sb2coJ2NvdWxkIG5vdCBjcmVhdGUgU3BoZXJlIHNlbnNvcicpXHJcbiAgICAgICAgICAvLyAgICAgICBjb25zb2xlLmVycm9yKGUpO1xyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vICAgICBpZiAoIXNvdXJjZSkge1xyXG4gICAgICAgICAgLy8gICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgLy8gICAgIH1cclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgICAvLyAgICAgbGV0IHNlbnNvciA9IG51bGw7XHJcbiAgICAgICAgICAvLyAgICAgdHJ5IHtcclxuICAgICAgICAgIC8vICAgICAgIHNlbnNvciA9IGF3YWl0IHRoaXMuc2RrLlNlbnNvci5jcmVhdGVTZW5zb3IodGhpcy5zZGsuU2Vuc29yLlNlbnNvclR5cGUuQ0FNRVJBKTtcclxuICAgICAgICAgIC8vICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGNyZWF0ZSBDYW1lcmEgc2Vuc29yJylcclxuICAgICAgICAgIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICAgIGlmICghc2Vuc29yKSB7XHJcbiAgICAgICAgICAvLyAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vICAgICBzZW5zb3IuYWRkU291cmNlKC4uLnNvdXJjZSk7XHJcbiAgICAgICAgICAvLyAgICAgc2Vuc29yLnJlYWRpbmdzLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAvLyAgICAgICBvblVwZGF0ZWQoc291cmNlLCByZWFkaW5nKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgIGNvbnNvbGUubG9nKHRoaXNPcGFjaXR5KTtcclxuICAgICAgICAgIC8vICAgICAgICAgbGV0IG9sZE9wYWNpdHkgPSB0aGlzT3BhY2l0eTtcclxuICAgICAgICAgIC8vICAgICAgICAgaWYgKHJlYWRpbmcuaW5SYW5nZSkge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXNPcGFjaXR5ID0gMTtcclxuICAgICAgICAgIC8vICAgICAgICAgICBjb25zb2xlLmxvZyhpbmRleCArICcgaXMgaW5SYW5nZScpO1xyXG4gICAgICAgICAgLy8gICAgICAgICB9IGVsc2UgaWYgKHJlYWRpbmcuaW5WaWV3KSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgY29uc29sZS5sb2coaW5kZXggKyAnIGlzIGluVmlldyBidXQgbm90IGluUmFuZ2UnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzT3BhY2l0eSA9IDAuNTtcclxuICAgICAgICAgIC8vICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICB0aGlzT3BhY2l0eSA9IDAuMjtcclxuICAgICAgICAgIC8vICAgICAgICAgICBjb25zb2xlLmxvZyhpbmRleCArICcgaXMgbm90IGluVmlldyBvciBpblJhbmdlJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIH1cclxuICAgICAgICAgIC8vXHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2RrLlRhZy5lZGl0T3BhY2l0eShpbmRleCwgdGhpc09wYWNpdHkpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAvKlxyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgbGV0IGluYyA9IDAuMDE7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBpZiAob2xkT3BhY2l0eSA+IHRoaXNPcGFjaXR5KSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgIGluYyA9IC0wLjAxO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaSA9IG9sZE9wYWNpdHk7IGkgIT0gdGhpc09wYWNpdHk7IGk9aStpbmMpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgICAgIG1wU2RrLlRhZy5lZGl0T3BhY2l0eShpbmRleCwgaSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0RlbGF5JywgaSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgfSwxMCk7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgICAgICovXHJcbiAgICAgICAgICAvLyAgICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgfSk7XHJcbiAgICAgICAgICAvLyAgICAgLy9zZW5zb3Iuc2hvd0RlYnVnKHRydWUpO1xyXG4gICAgICAgICAgLy8gICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICAvLyAgIG9uQ29sbGVjdGlvblVwZGF0ZWQ6IGZ1bmN0aW9uIChjb2xsZWN0aW9uKSB7XHJcbiAgICAgICAgICAvLyAgICAgY29uc29sZS5sb2coJ0NvbGxlY3Rpb24gcmVjZWl2ZWQuIFRoZXJlIGFyZSAnLCBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKS5sZW5ndGgsICcgVGFncyBpbiB0aGUgY29sbGVjdGlvbicsIGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgLy8gICB9XHJcbiAgICAgICAgICAvLyB9KTtcclxuXHJcbiAgICAgICAgICByZXNvbHZlKHRydWUpO1xyXG4gICAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuXHJcbiAgc2V0TGlnaHRpbmdPZmYoKSB7XHJcbiAgICB0aGlzLm5vTGlnaHRGb3JPYmplY3RzID0gdHJ1ZTtcclxuICB9XHJcblxyXG4gIHBvaW50VG9TdHJpbmcocG9pbnQ6IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9KTogc3RyaW5nIHtcclxuICAgIHZhciB4ID0gcG9pbnQueC50b0ZpeGVkKDMpO1xyXG4gICAgdmFyIHkgPSBwb2ludC55LnRvRml4ZWQoMyk7XHJcbiAgICB2YXIgeiA9IHBvaW50LnoudG9GaXhlZCgzKTtcclxuXHJcbiAgICByZXR1cm4gYHsgeDogJHt4fSwgeTogJHt5fSwgejogJHt6fSB9YDtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLSBNZWFzdXJlbWVudHMgcmVsYXRlZCAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvKipcclxuICAgKiBDYWxsYmFjayBhZnRlciBtZWFzdXJlbWVudCBpcyBwZXJmb3JtZWRcclxuICAgKi9cclxuICBnZXREaXN0YW5jZUZvckxhc3RNZWFzdXJlbWVudCgpIHtcclxuICAgIGlmICh0aGlzLmxhc3RNZWFzdXJlLmxlbmd0aCA+IDApIHtcclxuICAgICAgY29uc3QgbnVtYmVyUG9pbnRzID0gdGhpcy5sYXN0TWVhc3VyZS5sZW5ndGg7XHJcbiAgICAgIHRoaXMuZGlzdGFuY2VzTGFzdE1lYXN1cmUgPSBbXTtcclxuICAgICAgZm9yIChsZXQgaW5kZXggPSAxOyBpbmRleCA8IG51bWJlclBvaW50czsgaW5kZXggKz0gMSkge1xyXG4gICAgICAgIGNvbnN0IGRpc3RhbmNlID0gZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzKFxyXG4gICAgICAgICAgdGhpcy5sYXN0TWVhc3VyZVtpbmRleCAtIDFdLFxyXG4gICAgICAgICAgdGhpcy5sYXN0TWVhc3VyZVtpbmRleF1cclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZGlzdGFuY2VzTGFzdE1lYXN1cmUucHVzaChkaXN0YW5jZSk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50YWtlU2NyZWVuU2hvdCgpLnRoZW4oKHJlcykgPT4ge1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfbWVhc3VyZW1lbnRgXSk7XHJcbiAgICAgIH0pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZ2V0TGFzdERpc3RhbmNlcygpIHtcclxuICAgIHJldHVybiB0aGlzLmRpc3RhbmNlc0xhc3RNZWFzdXJlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGFrZXMgc2NyZWVuc2hvdCBhbmQgc2F2ZXMgYmFzZTY0IGluIGxhc3RTY3JlZW5zaG90VXJpXHJcbiAgICogQHJldHVybnMgUHJvbWlzZVxyXG4gICAqL1xyXG4gIHRha2VTY3JlZW5TaG90KCk6IFByb21pc2U8YW55PiB7XHJcbiAgICByZXR1cm4gdGhpcy5zZGsuUmVuZGVyZXIudGFrZVNjcmVlblNob3QoXHJcbiAgICAgIHRoaXMucmVzb2x1dGlvbixcclxuICAgICAgdGhpcy52aXNpYmlsaXR5XHJcbiAgICApLnRoZW4oXHJcbiAgICAgIGZ1bmN0aW9uIChzY3JlZW5TaG90VXJpOiBhbnkpIHtcclxuICAgICAgICAvLyBiYXNlNjQgc3RyaW5nXHJcbiAgICAgICAgdGhpcy5sYXN0U2NyZWVuc2hvdFVyaSA9IHNjcmVlblNob3RVcmk7XHJcbiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG4gICAgICB9LmJpbmQodGhpcylcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICBnZXRTY3JlZW5TaG90VXJpKCkge1xyXG4gICAgcmV0dXJuIHRoaXMubGFzdFNjcmVlbnNob3RVcmk7XHJcbiAgfVxyXG5cclxuICBnZXRMYXN0TWVhc3VyZW1lbnQoKTogT2JqZWN0IHtcclxuICAgIGNvbnN0IGRhdGEgPSB7XHJcbiAgICAgIG1lYXN1cmU6IHRoaXMubGFzdE1lYXN1cmUsXHJcbiAgICAgIHN3ZWVwOiB0aGlzLnBvc2VDYW1lcmEuc3dlZXAsXHJcbiAgICB9O1xyXG4gICAgcmV0dXJuIGRhdGE7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gVXRpbHMgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLyoqXHJcbiAgICogU3R5bGluZyBvZiBwb2ludGVyXHJcbiAgICovXHJcbiAgdXBkYXRlUG9pbnRlclRyaWNrKCkge1xyXG4gICAgaWYgKFxyXG4gICAgICB0aGlzLmludGVyYWN0aW9uTW9kZSAhPT0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQgJiZcclxuICAgICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyAmJlxyXG4gICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0ICYmXHJcbiAgICAgIHRoaXMuZ2V0RGlzdFBvc2l0aW9uKFxyXG4gICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24sXHJcbiAgICAgICAgdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uXHJcbiAgICAgICkgPiAyNVxyXG4gICAgKSB7XHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG5cclxuICAgICAgY29uc3Qgc2l6ZSA9IHtcclxuICAgICAgICB3OiB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCxcclxuICAgICAgICBoOiB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQsXHJcbiAgICAgIH07XHJcbiAgICAgIGNvbnN0IGNvb3JkcyA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgICBzaXplXHJcbiAgICAgICk7XHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7Y29vcmRzLnggKiBNYXRoLnNpZ24oY29vcmRzLngpIC0gMjVcclxuICAgICAgICB9cHhgO1xyXG4gICAgICB0aGlzLnBvaW50ZXJCdXR0b24uc3R5bGUudG9wID0gYCR7Y29vcmRzLnkgKiBNYXRoLnNpZ24oY29vcmRzLngpIC0gMjV9cHhgO1xyXG4gICAgICB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24gPSB7XHJcbiAgICAgICAgLi4udGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgfTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlYWx0aW1lIG1hdHRlcnRhZyBmb2xsb3dpbmcgdGhlIGN1cnNvclxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWcgc3RyaW5nXHJcbiAgICovXHJcbiAgZW5hYmxlX2ZvbGxvd2luZ190YWcobWF0dGVydGFnOiBzdHJpbmcpIHtcclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0UG9zaXRpb24obWF0dGVydGFnLCB7XHJcbiAgICAgIGFuY2hvclBvc2l0aW9uOiB7XHJcbiAgICAgICAgeDogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi54ICogMSxcclxuICAgICAgICB5OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnkgKiAxLFxyXG4gICAgICAgIHo6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueiAqIDEsXHJcbiAgICAgIH0sXHJcbiAgICAgIHN0ZW1WZWN0b3I6IHtcclxuICAgICAgICB4OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC54ICogMC4zLFxyXG4gICAgICAgIHk6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnkgKiAwLjMsXHJcbiAgICAgICAgejogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueiAqIDAuMyxcclxuICAgICAgfSxcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0IHRoZSBkaXN0YW5jZSBiZXR3d2VlbiB0d28gM0QgcG9zaXRpb25zXHJcbiAgICogVXNlZCBpbiBvcmRlciB0byBzZWUgaG93IG11Y2ggdGhlIGN1cnNvciBoYXMgbW92ZWQgZnJvbSB0aGUgcHJldmlvdXMgcG9zaXRpb25cclxuICAgKiBAcGFyYW0gcG9zMVxyXG4gICAqIEBwYXJhbSBwb3MyXHJcbiAgICovXHJcbiAgZ2V0RGlzdFBvc2l0aW9uKHBvczE6IGFueSwgcG9zMjogYW55KSB7XHJcbiAgICBjb25zdCBzaXplID0ge1xyXG4gICAgICB3OiB0aGlzLmNvbnRhaW5lci5jbGllbnRXaWR0aCxcclxuICAgICAgaDogdGhpcy5jb250YWluZXIuY2xpZW50SGVpZ2h0LFxyXG4gICAgfTtcclxuICAgIGNvbnN0IGNvb3JkczEgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4oXHJcbiAgICAgIHBvczEsXHJcbiAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgc2l6ZVxyXG4gICAgKTtcclxuICAgIGNvbnN0IGNvb3JkczIgPSB0aGlzLnNkay5Db252ZXJzaW9uLndvcmxkVG9TY3JlZW4oXHJcbiAgICAgIHBvczIsXHJcbiAgICAgIHRoaXMucG9zZUNhbWVyYSxcclxuICAgICAgc2l6ZVxyXG4gICAgKTtcclxuICAgIHJldHVybiBNYXRoLnNxcnQoXHJcbiAgICAgIChjb29yZHMxLnggLSBjb29yZHMyLngpICoqIDIgKyAoY29vcmRzMS55IC0gY29vcmRzMi55KSAqKiAyXHJcbiAgICApO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tIE1hdHRlcnRhZyByZWxhdGVkIC0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8qKlxyXG4gICAqIENyZWF0ZXMgdGhlIE1hdHRlcnRhZyB0aGF0IHdpbGwgZm9sbG93IHRoZSBjdXJzb3JcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnRGF0YSBNYXR0ZXJ0YWdEYXRhXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkQ3Vyc29yTWF0dGVydGFnKG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEpIHtcclxuICAgIGlmICghdGhpcy5wb3NlTWF0dGVycG9ydCkgcmV0dXJuO1xyXG4gICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyA9IGF3YWl0IHRoaXMuYWRkTWF0dGVydGFnVG9WaWV3ZXIobWF0dGVydGFnRGF0YSk7XHJcbiAgICBjb25zb2xlLmxvZygnZm9sbG93aW5nIHRoZSB0YWcnLCB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KTtcclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbih0aGlzLm1hdHRlcnRhZ1RvRm9sbG93LCAnaWNvbi1wb3NpdGlvbicpO1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRPcGFjaXR5KHRoaXMubWF0dGVydGFnVG9Gb2xsb3csIDEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWRkcyBNYXR0ZXJ0YWcgdG8gdmlld2VyIGZvciBhbiBleGlzdGluZyBvYmplY3Qgd2l0aCBjb29yZGluYXRlcyAoaW4gbWF0dGVydGFnRGF0YS5wb2kpXHJcbiAgICogKHBvc2l0aW9uLCBpbmplY3RlZCBodG1sLCBzZXQgaWNvbilcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnRGF0YVxyXG4gICAqIHJldHVybnMgbWF0dGVydGFnSURcclxuICAgKi9cclxuICBhc3luYyBhZGRNYXR0ZXJ0YWdUb1ZpZXdlcihcclxuICAgIG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGFcclxuICApOiBQcm9taXNlPHN0cmluZyB8IG51bGw+IHtcclxuICAgIGxldCBzaWRMaXN0O1xyXG4gICAgaWYgKCF0aGlzLnNkaykge1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHNpZExpc3QgPSBhd2FpdCB0aGlzLnNkay5UYWcuYWRkKG1hdHRlcnRhZ0RhdGEuZ2V0RGF0YSgpKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICdUYWcgZG9lcyBub3QgYmVsb25nIHRvIHRoZSB2aXNpdCcsXHJcbiAgICAgICAgZXJyb3IsXHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5nZXREYXRhKClcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIGlmIChzaWRMaXN0KSB7XHJcbiAgICAgIGNvbnN0IG1hdHRlcnRhZ0lEID0gc2lkTGlzdFswXTtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCJhZGRlZCB0YWdcIiwgbWF0dGVydGFnRGF0YS5nZXRUeXBlKCksIG1hdHRlcnRhZ0lEKTtcclxuICAgICAgdGhpcy5tYXR0ZXJ0YWdJRHMucHVzaChtYXR0ZXJ0YWdJRCk7XHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLnNldChtYXR0ZXJ0YWdJRCwgbWF0dGVydGFnRGF0YSk7XHJcbiAgICAgIHJldHVybiBtYXR0ZXJ0YWdJRDtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQWN0aW9ucyB3aGVuIHBvc2l0aW9uIG9mIG1hdHRlcnRhZyBpcyB2YWxpZGF0ZWQgYnkgbGVmdCBjbGlja1xyXG4gICAqL1xyXG4gIG9uVmFsaWRhdGVkTWF0dGVydGFnKCkge1xyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQpO1xyXG4gICAgY29uc3QgbGFzdFRhZyA9IHRoaXMuZ2V0TGFzdFRhZygpO1xyXG4gICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgY29uc3QgY2FsbGJhY2tNb2RlID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3NcclxuICAgICAgICAuZ2V0KGxhc3RUYWcpXHJcbiAgICAgICAgLmdldENhbGxiYWNrQWN0aW9uTW9kZSgpO1xyXG4gICAgICB0aGlzLmNhbGxiYWNrQWZ0ZXJNYXR0ZXJ0YWdWYWxpZGF0aW9uKGNhbGxiYWNrTW9kZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBSZWdpc3RlcnMgbmV3IGljb24gKHBhdGggdG8gaW1hZ2UpIGFuZCBzZXQgaXRzIGZvciBNYXR0ZXJ0YWdcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHBhcmFtIGljb25QYXRoIHN0cmluZ1xyXG4gICAqL1xyXG4gIGFzeW5jIGFkZE5ld0ljb25BbmRTZXRGb3JUYWcobWF0dGVydGFnSUQ6IHN0cmluZywgaWNvblBhdGg6IHN0cmluZykge1xyXG4gICAgYXdhaXQgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKGBpY29uXyR7bWF0dGVydGFnSUR9YCwgaWNvblBhdGgpO1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBgaWNvbl8ke21hdHRlcnRhZ0lEfWApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2hhbmdlcyBpY29uIG9mIE1hdHRlcnRhZyAodGhlIGljb25OYW1lIHNob3VsZCBiZSByZWdpc3RlcmVkID0gb25lIG9mIGRlZmF1bHQgb25lcylcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHBhcmFtIGljb25OYW1lIHN0cmluZ1xyXG4gICAqL1xyXG4gIGFzeW5jIHNldFJlZ2lzdHJlZEljb25Gb3JUYWcobWF0dGVydGFnSUQ6IHN0cmluZywgaWNvbk5hbWU6IHN0cmluZykge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZGsuVGFnLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBpY29uTmFtZSk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgICdjb3VsZCBub3QgZWRpdCBJY29uIHdpdGggbmFtZSAnLFxyXG4gICAgICAgIGljb25OYW1lLFxyXG4gICAgICAgICcuIElzIGl0IHJlZ2lzdGVyZWQ/J1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogU2V0cyBkZWZhdWx0IGljb24gZm9yIGEgdGFnIChyZWdpc3RlcmVkIGluIGluaXRTZGspIE9SIHVzZXMgdGFnSWNvbiBmcm9tIFBPSSAoYXZhaWxhYmxlIGZyb20gTWF0dGVydGFnRGF0YSlcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0RhdGEgTWF0dGVydGFnRGF0YVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgc2V0VGFnSWNvbkFuZE9wYWNpdHkoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YVxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuU1BNb2R1bGUgPT09IFNwTW9kdWxlLkhPVEVMKSB7XHJcbiAgICAgIGNvbnN0IHJvb20gPSBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpO1xyXG4gICAgICBsZXQgaWNvbk5hbWUgPSBgaWNvbl9yb29tYDtcclxuICAgICAgaWYgKHJvb20uYXZhaWxhYmxlKSB7XHJcbiAgICAgICAgaWNvbk5hbWUgPSBgJHtpY29uTmFtZX1fYXZhaWxhYmxlYDtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBpY29uTmFtZSA9IGAke2ljb25OYW1lfV91bmF2YWlsYWJsZWA7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy5zZGsuVGFnLmVkaXRJY29uKG1hdHRlcnRhZ0lELCBpY29uTmFtZSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IHN0cmluZ1RhZ1R5cGUgPSBwb2lUeXBlVG9TdHJpbmcobWF0dGVydGFnRGF0YS5nZXRUeXBlKCkpO1xyXG4gICAgbGV0IG9wYWNpdHkgPSB0aGlzLmNvbmZpZy5teV9jb25maWcuREVGQVVMVF9PUEFDSVRZX1RBRztcclxuICAgIGxldCBpY29uTmFtZSA9IGBpY29uLSR7c3RyaW5nVGFnVHlwZX1gO1xyXG4gICAgY29uc3QgcG9pID0gbWF0dGVydGFnRGF0YS5nZXRQb2koKTtcclxuICAgIGlmIChwb2kgJiYgcG9pLnRhZ0ljb24pIHtcclxuICAgICAgY29uc3QgdGFnSWNvbiA9IEpTT04ucGFyc2UocG9pLnRhZ0ljb24pO1xyXG4gICAgICBpZiAobWF0dGVydGFnRGF0YS5nZXRUeXBlKCkgPT09IFBvaVR5cGUuREFUQSkge1xyXG4gICAgICAgIGNvbnN0IGZlYXR1cmUgPSBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpO1xyXG4gICAgICAgIGlmIChmZWF0dXJlLnR5cGUgPT09IEZlYXR1cmVUeXBlLklORElDQVRPUl9URU1QKSB7XHJcbiAgICAgICAgICB0YWdJY29uLnNyYyA9IHRoaXMudGFnU2VydmljZS5nZXRJY29uVGFnSW1hZ2VGb3JGZWF0dXJlKGZlYXR1cmUsIHBvaSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0YWdJY29uLnNyYykge1xyXG4gICAgICAgIGNvbnN0IHBhdGhTaWduZWQgPSBhd2FpdCB0aGlzLnRhZ1NlcnZpY2UuZ2V0U2lnbmVkVGFnSWNvblNvdXJjZShcclxuICAgICAgICAgIHRhZ0ljb24uc3JjXHJcbiAgICAgICAgKTtcclxuICAgICAgICBpZiAocGF0aFNpZ25lZCkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaWNvbk5hbWUgPSBgaWNvbi0ke3N0cmluZ1RhZ1R5cGV9LSR7bWF0dGVydGFnSUR9LSR7bWF0dGVydGFnRGF0YS5jdXN0b21JY29uSW5kZXh9YDtcclxuICAgICAgICAgICAgYXdhaXQgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKGljb25OYW1lLCBwYXRoU2lnbmVkKTtcclxuICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5jdXN0b21JY29uSW5kZXggKz0gMTtcclxuICAgICAgICAgIH0gY2F0Y2gge1xyXG4gICAgICAgICAgICBjb25zb2xlLmxvZygnZXJyb3IgcmVnaXN0ZXJJY29uJyk7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIGlmICh0YWdJY29uLm9wYWNpdHkpIHtcclxuICAgICAgICBvcGFjaXR5ID0gdGFnSWNvbi5vcGFjaXR5O1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgICAgdGhpcy5zZGsuVGFnLmVkaXRPcGFjaXR5KG1hdHRlcnRhZ0lELCBvcGFjaXR5KTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdFcnJvciBlZGl0SWNvbiBvciBvcGFjaXR5JywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTW92ZXMgdmlld2VyIHRvIGxhc3QgdGFnIGNyZWF0ZWRcclxuICAgKi9cclxuICBnb1RvTGFzdFRhZygpIHtcclxuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICAgIHRoaXMuZ29Ub1RhZyhsYXN0VGFnKTtcclxuICAgIH0sIDIwMDApO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogTW92ZXMgdmlld2VyIHRvIE1hdHRlcnRhZyB3aXRoIElEIHByb3ZpZGVkXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgZ29Ub1RhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nKSB7XHJcbiAgICBpZiAobWF0dGVydGFnSUQgPT09ICcnKSByZXR1cm47XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLm9uR29Ub1RhZy5uZXh0KG1hdHRlcnRhZ0lEKTtcclxuICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAuY3VycmVudC53YWl0VW50aWwoXHJcbiAgICAgICAgKGN1cnJlbnRTd2VlcCkgPT4gY3VycmVudFN3ZWVwICE9PSAnJ1xyXG4gICAgICApO1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5NYXR0ZXJ0YWcubmF2aWdhdGVUb1RhZyhcclxuICAgICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuVHJhbnNpdGlvbi5GTFlcclxuICAgICAgKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgbmF2aWdhdGUgdG8gdGFnJywgZXJyb3IpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVXBkYXRlcyBjb250ZW50IG9mIE1hdHRlcnRhZyB3aXRoIG1hdHRlcnRhZ0lEIChiaWxsYm9hcmQsIGluamVjdGVkIGh0bWwsIHRhZyBpY29uKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gb2JqZWN0IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLCBldGNcclxuICAgKiBAcGFyYW0gdGFnVHlwZSBQb2lUeXBlXHJcbiAgICovXHJcbiAgYXN5bmMgdXBkYXRlTWF0dGVyVGFnQ29udGVudEZvclRhZ0lEKFxyXG4gICAgbWF0dGVydGFnSUQ6IHN0cmluZyxcclxuICAgIG9iamVjdDogRGJPYmplY3RUeXBlID0gbnVsbCxcclxuICAgIHRhZ1R5cGU6IFBvaVR5cGUgPSBudWxsXHJcbiAgKSB7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdEJpbGxib2FyZChcclxuICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkuZ2V0RGF0YSgpXHJcbiAgICApO1xyXG4gICAgaWYgKG9iamVjdCAmJiB0YWdUeXBlKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgbWF0dGVydGFnSUQpO1xyXG4gICAgfVxyXG4gICAgYXdhaXQgdGhpcy5zZXRUYWdJY29uQW5kT3BhY2l0eShcclxuICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRClcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGluamVjdGVkIGh0bWwgZm9yIE1hdHRlcnRhZ1xyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gb2JqZWN0IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLCBldGNcclxuICAgKiBAcGFyYW0gdGFnVHlwZSBQb2lUeXBlXHJcbiAgICovXHJcbiAgYXN5bmMgdXBkYXRlSW5qZWN0ZWRIdG1sRm9yVGFnSUQoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBhbnksXHJcbiAgICB0YWdUeXBlOiBQb2lUeXBlXHJcbiAgKSB7XHJcbiAgICBhd2FpdCB0aGlzLmluamVjdEh0bWxJblRhZyh0YWdUeXBlLCBvYmplY3QsIG1hdHRlcnRhZ0lEKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIERlbGV0ZXMgTWF0dGVydGFnIGZyb20gVmlld2VyIGJ5IGl0cyBJRFxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKi9cclxuICBkZWxldGVNYXR0ZXJ0YWdGcm9tSWQobWF0dGVydGFnSUQ6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZGsuVGFnLnJlbW92ZShtYXR0ZXJ0YWdJRCk7XHJcbiAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5kZWxldGUobWF0dGVydGFnSUQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBsYXRlc3QgY3JlYXRlZCBtYXR0ZXJ0YWdcclxuICAgKi9cclxuICBkZWxldGVMYXN0TWF0dGVydGFnKCkge1xyXG4gICAgY29uc3QgbWF0dGVydGFnSUQgPSB0aGlzLm1hdHRlcnRhZ0lEcy5wb3AoKTtcclxuICAgIGlmIChtYXR0ZXJ0YWdJRCkge1xyXG4gICAgICB0aGlzLmRlbGV0ZU1hdHRlcnRhZ0Zyb21JZChtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBMZWdhY3k6IHVzZWQgdG8gYmUgY2FsbGVkIGFjdGlvbl9hZGRfbWF0dGVydGFnX2Zyb21fUE9JXHJcbiAgICogQWRkcyBhbmQgY29uZmlndXJlcyBNYXR0ZXJ0YWcgZm9yIGFuIG9iamVjdCAoVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0YykgdGhhdCBjb3JyZXNwb25kcyB0byBQT0kgKGNvb3JkaW5hdGVzLCB0YWdJY29uKVxyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKiBAcGFyYW0gb2JqZWN0IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLi4uXHJcbiAgICogQHBhcmFtIHBvaSBQT0lcclxuICAgKiBAcmV0dXJuc1xyXG4gICAqL1xyXG4gIGFzeW5jIGNyZWF0ZU1hdHRlcnRhZ0Zyb21QT0koXHJcbiAgICB0YWdUeXBlOiBQb2lUeXBlLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICBwb2k6IFBPSVxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAvLyBjaGVjayBpZiB0YWcgZXhpc3RzIGFscmVhZHlcclxuICAgIGNvbnN0IHsgdGFnLCBzd2VlcCB9ID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKG9iamVjdC5pZCk7XHJcbiAgICBpZiAodGFnKSB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwidGFnIGV4aXN0c1wiLCBvYmplY3QpXHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGE6IE1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YSh0YWdUeXBlKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KG9iamVjdCwgdGFnVHlwZSk7XHJcbiAgICBpZiAocG9pLmNvb3JkaW5hdGUpIHtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb3NpdGlvbihKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKSk7XHJcbiAgICB9XHJcbiAgICBpZiAocG9pLm1ldGFkYXRhKSB7XHJcbiAgICAgIGNvbnN0IHRhZ01ldGFkYXRhID0gSlNPTi5wYXJzZShwb2kubWV0YWRhdGEpO1xyXG4gICAgICBpZiAodGFnTWV0YWRhdGEubm9ybWFsKSB7XHJcbiAgICAgICAgbWF0dGVydGFnRGF0YS5zZXROb3JtYWwodGFnTWV0YWRhdGEubm9ybWFsKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh7IHg6IDAsIHk6IC0wLjE1LCB6OiAwIH0pO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAocG9pLm1hdHRlcnBvcnRTd2VlcElEKSB7XHJcbiAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0U3dlZXBJRChwb2kubWF0dGVycG9ydFN3ZWVwSUQpO1xyXG4gICAgfVxyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRQb2kocG9pKTtcclxuXHJcbiAgICBjb25zdCBjcmVhdGVkVGFnSUQgPSBhd2FpdCB0aGlzLmFkZE1hdHRlcnRhZ1RvVmlld2VyKG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgaWYgKGNyZWF0ZWRUYWdJRCAmJiB0aGlzLnNkaykge1xyXG4gICAgICBhd2FpdCB0aGlzLnNldFRhZ0ljb25BbmRPcGFjaXR5KGNyZWF0ZWRUYWdJRCwgbWF0dGVydGFnRGF0YSk7XHJcbiAgICAgIGF3YWl0IHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgY3JlYXRlZFRhZ0lEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEluamVjdCBjdXN0b20gSFRNTCBhcyBNYXR0ZXJ0YWcgY29udGVudFxyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKiBAcGFyYW0gb2JqZWN0IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdJRCBzdHJpbmdcclxuICAgKi9cclxuICBhc3luYyBpbmplY3RIdG1sSW5UYWcodGFnVHlwZTogUG9pVHlwZSwgb2JqZWN0OiBEYk9iamVjdFR5cGUsIHRhZ0lEOiBzdHJpbmcpIHtcclxuICAgIGxldCBodG1sID0gYXdhaXQgdGhpcy50YWdTZXJ2aWNlLmdldEh0bWxUb0luamVjdCh0YWdUeXBlLCBvYmplY3QpO1xyXG4gICAgaWYgKGh0bWwgIT09ICcnICYmIHRoaXMuc2RrKSB7XHJcbiAgICAgIGNvbnN0IHNjcmlwdFRhZyA9IHRoaXMudGFnU2VydmljZS5nZXRTY3JpcHRGb3JUYWcob2JqZWN0LCB0YWdUeXBlKTtcclxuICAgICAgaHRtbCArPSBgJHtzY3JpcHRUYWd9YDtcclxuICAgICAgLy8gY3JlYXRlIGFuZCByZWdpc3RlciB0aGUgc2FuZGJveFxyXG4gICAgICBjb25zdCBbc2FuZGJveElkLCBtZXNzZW5nZXJdID0gYXdhaXQgdGhpcy5zZGsuVGFnLnJlZ2lzdGVyU2FuZGJveChodG1sKTtcclxuXHJcbiAgICAgIC8vIGRldGFjaCBwcmV2aW91cyBzYW5kYm94IGZyb20gYSB0YWdcclxuICAgICAgbGV0IGF0dGFjaG1lbnRJRCA9IHRoaXMudGFnc0F0dGFjaG1lbnRzW3RhZ0lEXTtcclxuICAgICAgaWYgKGF0dGFjaG1lbnRJRCkge1xyXG4gICAgICAgIHRoaXMuc2RrLlRhZy5kZXRhY2godGFnSUQsIGF0dGFjaG1lbnRJRCk7XHJcbiAgICAgIH1cclxuICAgICAgdGhpcy50YWdzQXR0YWNobWVudHNbdGFnSURdID0gc2FuZGJveElkO1xyXG5cclxuICAgICAgLy8gYXR0YWNoIHRoZSBzYW5kYm94IHRvIGEgdGFnXHJcbiAgICAgIHRoaXMuc2RrLlRhZy5hdHRhY2godGFnSUQsIHNhbmRib3hJZCk7XHJcbiAgICAgIC8vIHJlY2VpdmUgZGF0YSBmcm9tIHRoZSBzYW5kYm94XHJcbiAgICAgIC8vIHRhZ01lc3Nlbmdlck9uIGFsbG93cyB0byBnbyBoZXJlIG9ubHkgb25jZVxyXG4gICAgICBpZiAoIXRoaXMudGFnTWVzc2VuZ2VyT24pIHtcclxuICAgICAgICB0aGlzLnRhZ01lc3Nlbmdlck9uID0gdHJ1ZTtcclxuICAgICAgICBjb25zdCBpbWFnZUNsaWNrID0gKGZlYXR1cmVJRDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcImltYWdlIGNsaWNrIGhhbmRsZXJcIiwgZmVhdHVyZUlEKTtcclxuICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkltYWdlQ2xpY2soZmVhdHVyZUlEKTtcclxuICAgICAgICB9O1xyXG5cclxuICAgICAgICBjb25zdCBhdWRpb0NsaWNrID0gKGF1ZGlvQ29tbWVudElEOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiYXVkaW8gY2xpY2sgaGFuZGxlclwiLCBhdWRpb0NvbW1lbnRJRCk7XHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25BdWRpb0NsaWNrKGF1ZGlvQ29tbWVudElEKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IHZpZGVvQ2xpY2sgPSAodXJsOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvblZpZGVvQ2xpY2sodXJsKTtcclxuICAgICAgICB9O1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgIFRhZ0FjdGlvbi5ERVRBSUxfQ0xJQ0ssXHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25EZXRhaWxDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgIFRhZ0FjdGlvbi5USUNLRVRfQ0xJQ0ssXHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25EZXRhaWxDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihUYWdBY3Rpb24uQVVESU9fQ0xJQ0ssIGF1ZGlvQ2xpY2spO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihUYWdBY3Rpb24uSU1BR0VfQ0xJQ0ssIGltYWdlQ2xpY2spO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihUYWdBY3Rpb24uVklERU9fQ0xJQ0ssIHZpZGVvQ2xpY2spO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgIFRhZ0FjdGlvbi5ET0NfQ0xJQ0ssXHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25Eb2NDbGljay5iaW5kKHRoaXMudGFnU2VydmljZSlcclxuICAgICAgICApO1xyXG4gICAgICAgIG1lc3Nlbmdlci5vbihcclxuICAgICAgICAgIFRhZ0FjdGlvbi5ZT1VUVUJFX0NMSUNLLFxyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uWW91dHViZUNsaWNrLmJpbmQodGhpcy50YWdTZXJ2aWNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIC8vIGlmIGh0bWwgaXMgZW1wdHkgKGNhc2Ugb2YgRU1CRUQgY29udGVudCksIHdlIGVkaXQgYmlsbGJvYXJkIGZvciBGZWF0dXJlIGFuZCBhdHRhY2ggbmV3IGNvbnRlbnRcclxuICAgICAgY29uc3QgeyBjb21tZW50LCB0YWdEZXNjcmlwdGlvbiB9ID1cclxuICAgICAgICB0aGlzLnRhZ1NlcnZpY2UuZ2V0QmlsbGJvYXJkTWVkaWFUb0VtYmVkKG9iamVjdCk7XHJcbiAgICAgIGlmIChjb21tZW50KSB7XHJcbiAgICAgICAgLy8gcmVnaXN0ZXIgdGhlIG1lZGlhXHJcbiAgICAgICAgY29uc3QgW2F0dGFjaG1lbnRJRF0gPSBhd2FpdCB0aGlzLnNkay5UYWcucmVnaXN0ZXJBdHRhY2htZW50KFxyXG4gICAgICAgICAgY29tbWVudC5leHRlcm5hbExpbmtcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGF0dGFjaFxyXG4gICAgICAgIHRoaXMuc2RrLlRhZy5hdHRhY2godGFnSUQsIGF0dGFjaG1lbnRJRCk7XHJcbiAgICAgICAgdGhpcy5zZGsuVGFnLmVkaXRCaWxsYm9hcmQodGFnSUQsIHtcclxuICAgICAgICAgIGxhYmVsOiBvYmplY3QudGl0bGUsXHJcbiAgICAgICAgICBkZXNjcmlwdGlvbjogdGFnRGVzY3JpcHRpb24sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKSB7XHJcbiAgICBhd2FpdCB0aGlzLnNkay5UYWcucmVtb3ZlKC4uLnRoaXMubWF0dGVydGFnSURzKTtcclxuICAgIHRoaXMubWF0dGVydGFnSURzID0gW107XHJcbiAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5jbGVhcigpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBNYXR0ZXJ0YWcgZnJvbSB2aXNpdCBhc3NvY2lhdGVkIHdpdGggb2JqZWN0IElEICh0aWNrZXRJRCwgZXRjKVxyXG4gICAqIEBwYXJhbSBlbGVtZW50SUQgc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgZGVsZXRlTWF0dGVydGFnRm9yT2JqZWN0KGVsZW1lbnRJRDogc3RyaW5nKSB7XHJcbiAgICBjb25zdCBtYXR0ZXJUYWdJRCA9IHRoaXMuZ2V0VGFnRnJvbUVsZW1lbnRJZChlbGVtZW50SUQpLnRhZztcclxuICAgIGlmIChtYXR0ZXJUYWdJRCkge1xyXG4gICAgICB0cnkge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2RrLlRhZy5yZW1vdmUobWF0dGVyVGFnSUQpO1xyXG4gICAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmRlbGV0ZShtYXR0ZXJUYWdJRCk7XHJcbiAgICAgICAgY29uc3QgaW5kZXggPSB0aGlzLm1hdHRlcnRhZ0lEcy5pbmRleE9mKG1hdHRlclRhZ0lEKTtcclxuICAgICAgICB0aGlzLm1hdHRlcnRhZ0lEcy5zcGxpY2UoaW5kZXgsIDEpO1xyXG4gICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgZGVsZXRlIHRhZycsIG1hdHRlclRhZ0lELCBlcnJvcik7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIHV1aWQgZnJvbSB0aHJlZWpzXHJcbiAgICogQHBhcmFtIHV1aWRcclxuICAgKi9cclxuICBhc3luYyBkZWxldGVPYmplY3QzRCh1dWlkOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlPYmplY3RzM0QuZ2V0KHV1aWQpLm9iajNELnZpc2libGUgPSBmYWxzZTtcclxuICB9XHJcblxyXG4gIGdldE9iamVjdDNETW9kZWxOb2RlRnJvbURpY3Rpb25uYXJ5KHV1aWQ6IHN0cmluZyk6IGFueSB7XHJcbiAgICBsZXQgb2JqID0gdGhpcy5kaWN0aW9ubmFyeU9iamVjdHMzRC5nZXQodXVpZCk7XHJcbiAgICBpZiAoIW9iaikge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIndlaXJkIHRoaW5nIGFnYWluXCIpO1xyXG4gICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuICAgIC8vbWlnaHQgYnJlYWsgdGhpbmdzIG9yIGZpeCBldmVyeXRoaW5nIC4uP1xyXG4gICAgaWYgKG9iai5vYmozRC51dWlkICE9IHV1aWQpIHtcclxuICAgICAgY29uc29sZS5sb2coXCJ3ZSBoYXZlIFRIRSBwcm9ibGVtXCIpO1xyXG4gICAgICBvYmoub2JqM0QudXVpZCA9IHV1aWQ7IC8vbm90IGVudWdoIHRvIGZpeCB0aGUgcGJcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gb2JqO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyAgTWF0dGVydGFnRGF0YSBhbmQgc3RhcnQgcmVwb3NpdGlvbmluZyAoY3JlYXRlcyB0ZW1wb3JhcnkgbWF0dGVydGFnIHRoYXQgZm9sbG93cyB0aGUgY3Vyc29yKVxyXG4gICAqIEBwYXJhbSBwb2lUeXBlIFBvaVR5cGVcclxuICAgKiBAcGFyYW0gZWxlbWVudCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgZXRjXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkTWF0dGVydGFnV2hlblJlcG9zaXRpb25pbmcocG9pVHlwZTogUG9pVHlwZSwgZWxlbWVudDogRGJPYmplY3RUeXBlKSB7XHJcbiAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gbmV3IE1hdHRlcnRhZ0RhdGEocG9pVHlwZSk7XHJcbiAgICAvLyBzZXQgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBleGlzdGluZyB0YWdcclxuICAgIGNvbnN0IFtwb2ldID0gZWxlbWVudC5wb2lzLml0ZW1zO1xyXG4gICAgaWYgKHBvaSAmJiBwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpKTtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRQb2kocG9pKTsgLy8gdG8ga2VlcCBjdXN0b20gdGFnSWNvbiBhbmQgb3BhY2l0eVxyXG4gICAgfVxyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRTd2VlcElEKHRoaXMucG9zZUNhbWVyYS5zd2VlcCk7XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldFJvdGF0aW9uKHRoaXMucG9zZUNhbWVyYS5yb3RhdGlvbik7XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldE9iamVjdChlbGVtZW50LCBwb2lUeXBlKTtcclxuICAgIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cgPSBhd2FpdCB0aGlzLmFkZE1hdHRlcnRhZ1RvVmlld2VyKG1hdHRlcnRhZ0RhdGEpO1xyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLlBPU0lUSU9OSU5HKTtcclxuICAgIGF3YWl0IHRoaXMuYWRkQ3Vyc29yTWF0dGVydGFnKG1hdHRlcnRhZ0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyBNYXR0ZXJ0YWdEYXRhIGFuZCBtYXR0ZXJ0YWcgdGhhdCBmb2xsb3dzIHRoZSBjdXJzb3Igd2hlbiBjaG9vc2luZyBwb3NpdGlvbiBmb3IgYSBuZXcgb2JqZWN0XHJcbiAgICogQHBhcmFtIHBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyBhZGRNYXR0ZXJ0YWdXaGVuQWRkaW5nKHBvaVR5cGU6IFBvaVR5cGUpIHtcclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YShwb2lUeXBlKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0U3dlZXBJRCh0aGlzLnBvc2VDYW1lcmEuc3dlZXApO1xyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRSb3RhdGlvbih0aGlzLnBvc2VDYW1lcmEucm90YXRpb24pO1xyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkFERElORyk7XHJcbiAgICBhd2FpdCB0aGlzLmFkZEN1cnNvck1hdHRlcnRhZyhtYXR0ZXJ0YWdEYXRhKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENhbmNlbHMgZm9sbG93aW5nIG9mIGN1cnNvciAobWVhbmluZyBkZWxldGluZyBsYXN0IE1hdHRlcnRhZylcclxuICAgKi9cclxuICBjYW5jZWxGb2xsb3dpbmdDdXJzb3IoKSB7XHJcbiAgICB0aGlzLmRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKTtcclxuICAgIHRoaXMuc2V0SW50ZXJhY3Rpb25Nb2RlKFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUKTtcclxuICB9XHJcblxyXG4gIHNldExhc3RPYmplY3QzRChsYXN0T2JqZWN0M0Q6IFRocmVlSlNPYmplY3QzRCkge1xyXG4gICAgdGhpcy5sYXN0T2JqZWN0M0QgPSBsYXN0T2JqZWN0M0Q7XHJcbiAgfVxyXG5cclxuICBnZXRMYXN0T2JqZWN0M0QoKTogVGhyZWVKU09iamVjdDNEIHtcclxuICAgIHJldHVybiB0aGlzLmxhc3RPYmplY3QzRDtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFBlcmZvcm1zIGNhbGxiYWNrIGFmdGVyIG1hdHRlcnRhZyBwb3NpdGlvbiB3YXMgdmFsaWRhdGVkIChjcmVhdGlvbiBvZiBvYmplY3Qgb3IgcmVwb3NpdGlvbmluZylcclxuICAgKiBAcGFyYW0gbW9kZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlXHJcbiAgICovXHJcbiAgY2FsbGJhY2tBZnRlck1hdHRlcnRhZ1ZhbGlkYXRpb24obW9kZTogTWF0dGVydGFnQWN0aW9uTW9kZSkge1xyXG4gICAgdGhpcy52aXNpYmlsaXR5U2VydmljZS5kZXRhaWxTaG93aW5nLm5leHQodHJ1ZSk7XHJcbiAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9FUVVJUE1FTlQ6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfZXF1aXBgXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfVElDS0VUOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX3RpY2tldGBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9PQkpFQ1QzRDpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9vYmplY3QzZGBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9EQVRBOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICBsZXQgdXJsOiBzdHJpbmc7XHJcbiAgICAgICAgaWYgKHRoaXMucm91dGVyLnVybC5pbmNsdWRlcygnPycpKSB7XHJcbiAgICAgICAgICB1cmwgPSB0aGlzLnJvdXRlci51cmwuc3Vic3RyaW5nKDAsIHRoaXMucm91dGVyLnVybC5pbmRleE9mKCc/JykpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB1cmwgPSB0aGlzLnJvdXRlci51cmw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgJHt1cmx9L2FkZF9mZWF0dXJlYF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX0RFU0s6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfZmVhdHVyZWBdLCB7XHJcbiAgICAgICAgICBxdWVyeVBhcmFtczogeyBpc0Rlc2s6IHRydWUgfSxcclxuICAgICAgICB9KTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9ST09NOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX3Jvb21gXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9PQkpFQ1QzRDpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgLy8gRE8gTm90aGluZyAocm91dGluZyksIGp1c3RcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICBbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vb2JqZWN0M2QvJHt0aGlzLmxhc3RPYmplY3QzRC5pZH1gXSxcclxuICAgICAgICAgICAgeyBxdWVyeVBhcmFtczogeyBwb3NpdGlvbmluZzogdHJ1ZSB9IH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fVElDS0VUOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgIGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2RldGFpbC8ke3RoaXMuZGljdGlvbm5hcnlUYWdzLmdldChsYXN0VGFnKS5lbGVtZW50SURcclxuICAgICAgICAgICAgICB9YCxcclxuICAgICAgICAgICAgXSxcclxuICAgICAgICAgICAgeyBxdWVyeVBhcmFtczogeyBwb3NpdGlvbmluZzogdHJ1ZSB9IH1cclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fRVFVSVBNRU5UOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShcclxuICAgICAgICAgICAgW1xyXG4gICAgICAgICAgICAgIGB2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2VxdWlwLyR7dGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpLmVsZW1lbnRJRFxyXG4gICAgICAgICAgICAgIH1gLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0gfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9EQVRBOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbXSwge1xyXG4gICAgICAgICAgICByZWxhdGl2ZVRvOiB0aGlzLmFjdGl2ZVJvdXRlLFxyXG4gICAgICAgICAgICBxdWVyeVBhcmFtczogeyBwb3NpdGlvbmluZzogdHJ1ZSB9LCBxdWVyeVBhcmFtc0hhbmRsaW5nOiBcIm1lcmdlXCJcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX1JPT006XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZlUm91dGUsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0sIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRnVsbHkgdXBkYXRlcyBleGlzdGluZyBNYXR0ZXJ0YWcgY29udGVudCB3aXRoIGRhdGEgb2Ygb2JqZWN0IChUaWNrZXQsIEVxdWlwbWVudCwgRGVzaylcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHBhcmFtIG9iamVjdCBUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgRGVza1xyXG4gICAqIEBwYXJhbSBwb2lUeXBlIFBvaVR5cGVcclxuICAgKiBAcGFyYW0gcG9pIFBPSVxyXG4gICAqL1xyXG4gIGFzeW5jIHNldE9iamVjdEFuZFBvaUluVGFnKFxyXG4gICAgbWF0dGVydGFnSUQ6IHN0cmluZyxcclxuICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgcG9pVHlwZTogUG9pVHlwZSxcclxuICAgIHBvaTogUE9JIHwgbnVsbCA9IG51bGxcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkuc2V0T2JqZWN0KG9iamVjdCwgcG9pVHlwZSk7XHJcbiAgICBpZiAocG9pKSB7XHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkuc2V0UG9pKHBvaSk7XHJcbiAgICB9XHJcbiAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobWF0dGVydGFnSUQpLmVsZW1lbnRJRCA9IG9iamVjdC5pZDtcclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlTWF0dGVyVGFnQ29udGVudEZvclRhZ0lEKG1hdHRlcnRhZ0lELCBvYmplY3QsIHBvaVR5cGUpO1xyXG4gICAgICAvLyBUT0RPOiBmaXggdGhpc1xyXG4gICAgICBhd2FpdCB0aGlzLnVwZGF0ZU1hdHRlclRhZ1Bvc0luU2RrVmlld2VyKFxyXG4gICAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICAgIG9iamVjdCxcclxuICAgICAgICBwb2lUeXBlLFxyXG4gICAgICAgIHBvaVxyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZyhgZXJyb3IgaW4gc2V0T2JqZWN0QW5kUG9pSW5UYWc6ICR7ZX1gKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIHVwZGF0ZU1hdHRlclRhZ1Bvc0luU2RrVmlld2VyKFxyXG4gICAgbWF0dGVydGFnSUQ6IHN0cmluZyxcclxuICAgIG9iamVjdDogRGJPYmplY3RUeXBlLFxyXG4gICAgcG9pVHlwZTogUG9pVHlwZSxcclxuICAgIHBvaTogUE9JIHwgbnVsbCA9IG51bGxcclxuICApOiBQcm9taXNlPHZvaWQ+IHtcclxuICAgIGNvbnN0IEluZGV4VG9VcGRhdGUgPSBvYmplY3QucG9pcy5pdGVtcy5maW5kSW5kZXgoKHUpID0+IHUuaWQgPT09IHBvaS5pZCk7XHJcbiAgICBvYmplY3QucG9pcy5pdGVtc1tJbmRleFRvVXBkYXRlXSA9IHBvaTtcclxuICAgIGNvbnN0IHsgeCwgeSwgeiB9ID0gSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSk7XHJcbiAgICBjb25zdCBuZXdQb3NpdGlvbiA9IHtcclxuICAgICAgYW5jaG9yUG9zaXRpb246IHtcclxuICAgICAgICB4OiB4LFxyXG4gICAgICAgIHk6IHksXHJcbiAgICAgICAgejogeixcclxuICAgICAgfSxcclxuICAgICAgc3RlbVZlY3Rvcjoge1xyXG4gICAgICAgIC8vIG1ha2UgdGhlIFRhZyBzdGljayBzdHJhaWdodCB1cCBhbmQgbWFrZSBpdCAwLjMwIG1ldGVycyAofjEgZm9vdCkgdGFsbFxyXG4gICAgICAgIHg6IDAsXHJcbiAgICAgICAgeTogMC4zLFxyXG4gICAgICAgIHo6IDAsXHJcbiAgICAgIH0sXHJcbiAgICB9O1xyXG4gICAgdGhpcy5zZGsuTWF0dGVydGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWdJRCwgbmV3UG9zaXRpb24pO1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWdJRCwgbmV3UG9zaXRpb24pO1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3NcclxuICAgICAgLmdldChtYXR0ZXJ0YWdJRClcclxuICAgICAgLnNldFBvc2l0aW9uKG5ld1Bvc2l0aW9uLmFuY2hvclBvc2l0aW9uKTtcclxuXHJcbiAgICBmb3IgKGxldCB0YWdJZCBvZiB0aGlzLm1hdHRlcnRhZ0lEcykge1xyXG4gICAgICBjb25zdCBjdXJyZW50VGFnID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHRhZ0lkKTtcclxuICAgICAgaWYgKCFjdXJyZW50VGFnKSB7XHJcbiAgICAgICAgY29udGludWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGN1cnJlbnRUYWcuZWxlbWVudElEID09PSBvYmplY3QuaWQgJiYgdGFnSWQgIT09IG1hdHRlcnRhZ0lEKSB7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZGVsZXRlKHRhZ0lkKTtcclxuICAgICAgICB0aGlzLnNkay5UYWcucmVtb3ZlKHRhZ0lkKTtcclxuICAgICAgICB0aGlzLnNkay5NYXR0ZXJ0YWcucmVtb3ZlKHRhZ0lkKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogR2V0cyBtYXR0ZXJUYWdJRCBhbmQgaXRzIHN3ZWVwIGZvciBhbiBvYmplY3QgSUQgKHRpY2tldCBJRCwgZXRjKVxyXG4gICAqIEBwYXJhbSBlbGVtZW50SUQgc3RyaW5nXHJcbiAgICogQHJldHVybnMge3RhZzogc3RyaW5nIHwgbnVsbCwgc3dlZXA6IHN0cmluZyB8IG51bGx9XHJcbiAgICovXHJcbiAgcHVibGljIGdldFRhZ0Zyb21FbGVtZW50SWQoZWxlbWVudElEOiBzdHJpbmcpOiB7XHJcbiAgICB0YWc6IHN0cmluZyB8IG51bGw7XHJcbiAgICBzd2VlcDogc3RyaW5nIHwgbnVsbDtcclxuICB9IHtcclxuICAgIGxldCB0YWdJRCA9IG51bGw7XHJcbiAgICBsZXQgc3dlZXBJRCA9IG51bGw7XHJcbiAgICBmb3IgKGxldCBbbWF0dGVydGFnSUQsIG1hdHRlcnRhZ0RhdGFdIG9mIHRoaXMuZGljdGlvbm5hcnlUYWdzKSB7XHJcbiAgICAgIGlmIChtYXR0ZXJ0YWdEYXRhLmVsZW1lbnRJRCA9PT0gZWxlbWVudElEKSB7XHJcbiAgICAgICAgdGFnSUQgPSBtYXR0ZXJ0YWdJRDtcclxuICAgICAgICBjb25zdCBzd2VlcCA9IG1hdHRlcnRhZ0RhdGEuZ2V0U3dlZXBJRCgpO1xyXG4gICAgICAgIGlmIChzd2VlcCAmJiB0aGlzLnN3ZWVwcyAmJiB0aGlzLnN3ZWVwcy5pbmNsdWRlcyhzd2VlcCkpIHtcclxuICAgICAgICAgIHN3ZWVwSUQgPSBzd2VlcDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB7IHRhZzogdGFnSUQsIHN3ZWVwOiBzd2VlcElEIH07XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIGxhdGVzdCB0YWcgY3JlYXRlZCBpbiB0aGUgdmlzaXQgKHdoZW4gZm9sbG93aW5nIHRoZSBjdXJzb3IgdG8gcG9zaXRpb24pXHJcbiAgICogQHJldHVybnMgc3RyaW5nIG1hdHRlcnRhZ0lEXHJcbiAgICovXHJcbiAgZ2V0TGFzdFRhZygpOiBzdHJpbmcgfCBudWxsIHtcclxuICAgIGlmICh0aGlzLm1hdHRlcnRhZ1RvRm9sbG93KSB7XHJcbiAgICAgIHJldHVybiB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIHRoaXMubWF0dGVydGFnSURzLmxlbmd0aCA9PT0gMFxyXG4gICAgICAgID8gbnVsbFxyXG4gICAgICAgIDogdGhpcy5tYXR0ZXJ0YWdJRHNbdGhpcy5tYXR0ZXJ0YWdJRHMubGVuZ3RoIC0gMV07XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIE1hdHRlcnRhZ0RhdGEgZm9yIE1hdHRlcnRhZyAocmVwbGFjZXMgZ2V0VGFnRGF0YUZyb21JZClcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSURcclxuICAgKiBAcmV0dXJucyBNYXR0ZXJ0YWdEYXRhXHJcbiAgICovXHJcbiAgZ2V0TWF0dGVyVGFnRGF0YUZvck1hdHRlcnRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nKTogTWF0dGVydGFnRGF0YSB8IG51bGwge1xyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9IGNhdGNoIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCByZXRyaWV2ZSBtYXR0ZXJ0YWdEYXRhIGZvciB0YWcnLCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLSBWaWV3ZXIgcmVsYXRlZCAoc3dpdGNoIHZpZXdzLCBnbyB0bykgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgYXN5bmMgYWN0aW9uX3Rvb2xib3hfZmxvb3JwbGFuKCkge1xyXG4gICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd2aWV3ZXIgaXMgaW4gdHJhbnNpdGlvbiwgY2Fubm90IGdvIGZsb29ycGxhbicpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5Nb2RlLm1vdmVUbygnbW9kZS5mbG9vcnBsYW4nKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBnbyB0byBmbG9vcnBsYW4nLCBlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X2luc2lkZV92aWV3KCkge1xyXG4gICAgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oJ21vZGUuaW5zaWRlJyk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb25TaG93QWxsRmxvb3JzKCkge1xyXG4gICAgdHJ5IHtcclxuICAgICAgdGhpcy5zZGsuRmxvb3Iuc2hvd0FsbCgpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnY2Fubm90IHNob3cgYWxsIGZsb29ycycsIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX3Rvb2xib3hfZG9sbGhvdXNlKCkge1xyXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIC8vIGNvbnNvbGUubG9nKFwibW9kZTogXCIsIHRoaXMuaW5UcmFuc2l0aW9uTW9kZSwgXCIgc3dlZXA6IFwiLCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKTtcclxuICAgICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ3ZpZXdlciBpcyBpbiB0cmFuc2l0aW9uLCBjYW5ub3QgZ28gZG9sbGhvdXNlJyk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuTW9kZS5tb3ZlVG8oJ21vZGUuZG9sbGhvdXNlJyk7XHJcbiAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICBjb25zb2xlLmxvZygnY2Fubm90IGdvIHRvIGRvbGxob3VzZScsIGUpO1xyXG4gICAgICB9XHJcbiAgICB9LCAxMjAwKTtcclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X21lc3VyZSgpIHtcclxuICAgIGNvbnN0IG5ld1N0YXRlID0gIXRoaXMuaXNNZWFzdXJlTW9kZU9uO1xyXG4gICAgdGhpcy5zZGsuTWVhc3VyZW1lbnRzLnRvZ2dsZU1vZGUobmV3U3RhdGUpLnRoZW4oKCkgPT4ge1xyXG4gICAgICBjb25zb2xlLmxvZyhcclxuICAgICAgICBgTWVhc3VyZW1lbnQgbW9kZSBpcyBub3cgJHtuZXdTdGF0ZSA/ICdlbmFibGVkJyA6ICdkaXNhYmxlZCd9YFxyXG4gICAgICApO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhY3Rpb25fdG9vbGJveF9jYW5jZWxfbWVzdXJlKCkge1xyXG4gICAgaWYgKHRoaXMuaXNNZWFzdXJlTW9kZU9uKSB7XHJcbiAgICAgIHRoaXMuYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fZ29fdG9fZmxvb3IoXHJcbiAgICBmbG9vck5hbWU6IHN0cmluZyxcclxuICAgIG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlOiBudW1iZXIgPSBudWxsXHJcbiAgKSB7XHJcbiAgICBpZiAoIXRoaXMuZmxvb3JzKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdGbG9vciBhcmUgbm90IGxvYWRlZCB5ZXQnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2codGhpcy5mbG9vcnMpO1xyXG4gICAgLy8gbG9vayB1cCBmb3Igc2VxdWVuY2UgbnVtYmVyICh0aGUgc2FmZXN0IG1ldGhvZClcclxuICAgIGxldCBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKFxyXG4gICAgICAoZmxvb3IpID0+IGZsb29yLnNlcXVlbmNlID09PSBtYXR0ZXJwb3J0Rmxvb3JTZXF1ZW5jZVxyXG4gICAgKTtcclxuICAgIGlmICghZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoXHJcbiAgICAgICAgKGZsb29yKSA9PiBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IubmFtZSkgJiYgZmxvb3IubmFtZSAhPSAnJ1xyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZCgoZmxvb3IpID0+XHJcbiAgICAgICAgZmxvb3JOYW1lLmluY2x1ZGVzKGZsb29yLmlkKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coZmxvb3JNYXR0ZXJwb3J0KVxyXG4gICAgaWYgKGZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBsZXQgcmV0cnkgPSB0cnVlO1xyXG4gICAgICB3aGlsZSAocmV0cnkpIHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgY29uc3QgZmxvb3JJbmRleCA9IGF3YWl0IHRoaXMuc2RrLkZsb29yLm1vdmVUbyhcclxuICAgICAgICAgICAgZmxvb3JNYXR0ZXJwb3J0LnNlcXVlbmNlXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJtb3ZlZCB0byBmbG9vckluZGV4XCIsIGZsb29ySW5kZXgpO1xyXG4gICAgICAgICAgcmV0cnkgPSBmYWxzZTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIEZsb29yJywgZXJyb3IpO1xyXG4gICAgICAgICAgYXdhaXQgd2FpdCgxMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc29sZS53YXJuKCdObyBtYXR0ZXJwb3J0IGZsb29yIGZvdW5kIHRvIG1vdmUgdG8nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl9nb190b19zd2VlcChcclxuICAgIHN3ZWVwOiBzdHJpbmcsXHJcbiAgICByb3RhdGlvbjogeyB4OiBudW1iZXI7IHk6IG51bWJlciB9ID0gbnVsbFxyXG4gICkge1xyXG4gICAgaWYgKHRoaXMuZm9yYmlkZGVuU3dlZXBzLmluY2x1ZGVzKHN3ZWVwKSkge1xyXG4gICAgICBjb25zb2xlLmxvZygndXNlciBpcyBub3QgYWxsb3dlZCB0byBnbyB0byB0aGlzIHN3ZWVwJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIC8vIGNvbnNvbGUubG9nKFwiZ29pbmcgdG8gc3dlZXBcIiwgc3dlZXAsIFwid2l0aCByb3RhdGlvbjpcIiwgcm90YXRpb24pO1xyXG4gICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmluVHJhbnNpdGlvbk1vZGUgfHwgdGhpcy5pblRyYW5zaXRpb25Td2VlcCkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgZ28gdG8gc3dlZXAsIGluIHRyYW5zaXRpb24nKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gdHJ1ZTtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5tb3ZlVG8oc3dlZXAsIHtcclxuICAgICAgICAgIHRyYW5zaXRpb246ICd0cmFuc2l0aW9uLmluc3RhbnQnLFxyXG4gICAgICAgICAgdHJhbnNpdGlvblRpbWU6IDE1MDAsXHJcbiAgICAgICAgfSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdDYW5ub3QgbW92ZSB0byBzd2VlcCcsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgICBpZiAocm90YXRpb24pIHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5DYW1lcmEuc2V0Um90YXRpb24ocm90YXRpb24sIHsgc3BlZWQ6IDEwMCB9KTsgLy8gc3BlZWQgaXMgZGVncmVlcyBwZXIgc2Vjb25kXHJcbiAgICAgIH1cclxuICAgIH0sIDEwMDApO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVudFN3ZWVwKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMucG9zZUNhbWVyYSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wb3NlQ2FtZXJhLnN3ZWVwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50Q2FtZXJhUG9zaXRpb24oKToge1xyXG4gICAgcm90YXRpb246IGFueTtcclxuICAgIHBvc2l0aW9uOiBhbnk7XHJcbiAgICBzd2VlcDogYW55O1xyXG4gIH0gfCBudWxsIHtcclxuICAgIGlmICh0aGlzLnBvc2VDYW1lcmEpIHtcclxuICAgICAgcmV0dXJuIHRoaXMucG9zZUNhbWVyYTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgc2V0SW50ZXJhY3Rpb25Nb2RlKGludGVyYWN0aW9uTW9kZTogbnVtYmVyKSB7XHJcbiAgICB0aGlzLmludGVyYWN0aW9uTW9kZSA9IGludGVyYWN0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIGdldEludGVyYWN0aW9uTW9kZSgpIHtcclxuICAgIHJldHVybiB0aGlzLmludGVyYWN0aW9uTW9kZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIENsZWFyIGFsbCB2YXJpYWJsZXMsIGRlbGV0ZXMgYWxsIHRhZ3MgKHdoZW4gdmlld2VyIGlzIHJlbW92ZXIgb3IgbW9kZWwgY2hhbmdlZD1yZWxvYWQgbmVlZGVkKVxyXG4gICAqL1xyXG4gIGFzeW5jIGNsZWFyQWxsKCkge1xyXG4gICAgY29uc29sZS5sb2coJ3JlbW92aW5nIHZpZXdlcicpO1xyXG4gICAgdGhpcy5hY3Rpb25fZGVsZXRlX2FsbF9tYXR0ZXJ0YWdzKCk7XHJcbiAgICB0aGlzLmZsb29ycyA9IG51bGw7XHJcbiAgICB0aGlzLnN3ZWVwcyA9IG51bGw7XHJcbiAgICB0aGlzLnNkayA9IG51bGw7XHJcbiAgICBjbGVhckludGVydmFsKHRoaXMudGltZXJQb2ludGVyKTtcclxuICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gW107XHJcbiAgICB0aGlzLnRhZ01lc3Nlbmdlck9uID0gZmFsc2U7XHJcbiAgICAvLyBjYW5jZWwgc3Vic2NyaXB0aW9uc1xyXG4gICAgdGhpcy5wb2ludGVyQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICdjbGljaycsXHJcbiAgICAgIHRoaXMucG9pbnRlckxlZnRDbGlja0hhbmRsZXJcclxuICAgICk7XHJcbiAgICB0aGlzLnBvaW50ZXJCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcclxuICAgICAgJ2NvbnRleHRtZW51JyxcclxuICAgICAgdGhpcy5wb2ludGVyUmlnaHRDbGlja0hhbmRsZXJcclxuICAgICk7XHJcblxyXG4gICAgLy8gVE9ETzogb25seSBGb3IgQWRtaW5zXHJcbiAgICBpZiAodGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbikge1xyXG4gICAgICB0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnJlbW92ZUV2ZW50TGlzdGVuZXIoXHJcbiAgICAgICAgJ2F1eGNsaWNrJyxcclxuICAgICAgICB0aGlzLnBvaW50ZXJNaWRkbGVDbGlja0hhbmRsZXJcclxuICAgICAgKTtcclxuICAgIH1cclxuICAgIC8vIFRPRE86IG9ubHkgZm9yIGRldiFcclxuICAgIGlmICghIXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24gJiZcclxuICAgICAgKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignZGV2JykgIT09IC0xIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignbG9jYWxob3N0JykgIT09IC0xKSkge1xyXG4gICAgICBjbGVhckludGVydmFsKHRoaXMuaW50ZXJ2YWxDdXJzb3JQb2ludGVyUG9zaXRpb24pO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgcmVtb3ZlRm9yYmlkZGVuU3dlZXBzKGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10pIHtcclxuICAgIHRoaXMuZm9yYmlkZGVuU3dlZXBzID0gWy4uLmZvcmJpZGRlblN3ZWVwc107XHJcbiAgICBsZXQgcmVtb3ZlZCA9IDA7XHJcbiAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgZm9yYmlkZGVuU3dlZXBzLm1hcChhc3luYyAoc3dlZXApID0+IHtcclxuICAgICAgICB0cnkge1xyXG4gICAgICAgICAgYXdhaXQgdGhpcy5zZGsuU3dlZXAuZGlzYWJsZShzd2VlcCk7XHJcbiAgICAgICAgICByZW1vdmVkICs9IDE7XHJcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcclxuICAgICAgICB9XHJcbiAgICAgIH0pXHJcbiAgICApO1xyXG4gICAgY29uc29sZS5sb2coJ3JlbW92ZWQgc3dlZXBzOicsIHJlbW92ZWQpO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tIDNEIG9iamVjdHMgKFNESyBCdW5kbGUgb25seSkgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgYXN5bmMgaW5pdDNET2JqZWN0Vmlld2VyKCk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIHZhciBbc2NlbmVPYmplY3RdID0gYXdhaXQgdGhpcy5zZGsuU2NlbmUuY3JlYXRlT2JqZWN0cygxKTtcclxuXHJcbiAgICAgIHZhciBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG5cclxuICAgICAgLy8gVE9ETyBjaGFuZ2UgdGhpcyDwn6SuXHJcbiAgICAgIG5vZGUuYWRkQ29tcG9uZW50KCdtcC5saWdodHMnKTtcclxuICAgICAgLy9ub2RlLmFkZENvbXBvbmVudCgnbXAubGlnaHRzJyk7XHJcbiAgICAgIC8qbm9kZS5hZGRDb21wb25lbnQoJ21wLmxpZ2h0cycpO1xyXG4gICAgICBub2RlLmFkZENvbXBvbmVudCgnbXAubGlnaHRzJyk7Ki9cclxuICAgICAgbm9kZS5zdGFydCgpO1xyXG5cclxuICAgICAgY29uc3Qgbm9kZUNvbnRyb2wgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcbiAgICAgIHRoaXMub2JqZWN0Q29udHJvbCA9IG5vZGVDb250cm9sLmFkZENvbXBvbmVudCgnbXAudHJhbnNmb3JtQ29udHJvbHMnKTtcclxuICAgICAgbm9kZUNvbnRyb2wuc3RhcnQoKTtcclxuXHJcbiAgICAgIC8vdGhpcy5hZGQzRE9iamVjdCh7fSxudWxsKTtcclxuXHJcbiAgICAgIHJlc29sdmUoKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWRkM0RPYmplY3QoXHJcbiAgICBvYmo6IElPYmplY3QzRCxcclxuICAgIG1vZGU/OiAndHJhbnNsYXRlJyB8ICdyb3RhdGUnXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiBuZXcgUHJvbWlzZShhc3luYyAocmVzb2x2ZSkgPT4ge1xyXG4gICAgICBjb25zdCBbc2NlbmVPYmplY3RdID0gYXdhaXQgdGhpcy5zZGsuU2NlbmUuY3JlYXRlT2JqZWN0cygxKTtcclxuXHJcbiAgICAgIC8vIFRPRE86IGltcHJvdm1lbnQsIHJlZ3JvdXAgYWxsIG9mIHRoZXNlIGluIER5bmFtaWNhbCBPYmplY3RzIExpYlxyXG4gICAgICAvLyBTZWN1cml0eUNhbWVyYVxyXG4gICAgICAvLyBOZXN0VGhlcm1vc3RhdFxyXG4gICAgICAvLyBWaWRlb1xyXG4gICAgICBsZXQgaXNBbmltYXRlZFNlY3VyaXR5Q2FtZXJhID0gZmFsc2U7XHJcbiAgICAgIGxldCBpc05lc3RUaGVybW9zdGF0ID0gZmFsc2U7XHJcbiAgICAgIGxldCBpc1NtYXJ0ZXJwbGFuUHJvbW90aW9uYWxWaWRlbyA9IGZhbHNlO1xyXG4gICAgICBsZXQgaXNBemltdXRoYWxDcm93biA9IGZhbHNlO1xyXG5cclxuICAgICAgLyoqXHJcbiAgICAgICAqIFRPRE86IHJlZmFjdG8gd2l0aCBhbiBlbnVtIG9yIHN3aXRjaC9jYXNlXHJcbiAgICAgICAqL1xyXG4gICAgICBpZiAob2JqLm9iamVjdCA9PT0gXCJzZWN1cml0eV9jYW1lcmFcIikge1xyXG4gICAgICAgIGlzQW5pbWF0ZWRTZWN1cml0eUNhbWVyYSA9IHRydWU7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG9iai5vYmplY3QgPT09IFwibmVzdF90aGVybW9zdGF0XCIpIHtcclxuICAgICAgICBpc05lc3RUaGVybW9zdGF0ID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqLm9iamVjdCA9PT0gJ3ZpZGVvJykge1xyXG4gICAgICAgIGlzU21hcnRlcnBsYW5Qcm9tb3Rpb25hbFZpZGVvID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqLm9iamVjdCA9PT0gJ2F6aW11dGgnKSB7XHJcbiAgICAgICAgaXNBemltdXRoYWxDcm93biA9IHRydWU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGNvbnN0IG1vZGVsTm9kZSA9IHNjZW5lT2JqZWN0LmFkZE5vZGUoKTtcclxuICAgICAgbGV0IGNvbXBvbmVudCA9IG51bGw7XHJcbiAgICAgIGNvbnN0IGluaXRpYWwgPSB7XHJcbiAgICAgICAgdXJsOiBgL2Fzc2V0cy8zRG9iamVjdHMvb2JqZWN0cy8ke29iai5vYmplY3R9JHtvYmouZm9ybWF0LmluZGV4T2YoJy4nKSA9PT0gLTEgPyAnLicgKyBvYmouZm9ybWF0IDogb2JqLmZvcm1hdFxyXG4gICAgICAgICAgfWAsXHJcbiAgICAgICAgLy8gVE9ETy8gc3RvcmUgbG9jYWxQb3NpdGlvbiAmJiBsb2NhbFJvdGF0aW9uIGluIEJERCB0b28gKGluIG9yZGVyIHRvIGhhdmUgcGVydGZlY3QgaW5pdGlhbCBwbGFjZW1lbnQpXHJcbiAgICAgICAgbG9jYWxSb3RhdGlvbjogeyBcInhcIjogMCwgXCJ5XCI6IDAsIFwielwiOiAwIH0sXHJcbiAgICAgICAgLy8gVE9ETy8gc3RvcmUgbG9jYWxQb3NpdGlvbiAmJiBsb2NhbFJvdGF0aW9uIGluIEJERCB0b28gKGluIG9yZGVyIHRvIGhhdmUgcGVydGZlY3QgaW5pdGlhbCBwbGFjZW1lbnQpXHJcbiAgICAgICAgbG9jYWxQb3NpdGlvbjogeyBcInhcIjogMCwgXCJ5XCI6IDAsIFwielwiOiAwIH0sXHJcbiAgICAgICAgdmlzaWJsZTogdHJ1ZSxcclxuICAgICAgICBjb2xsaWRlckVuYWJsZWQ6IHRydWVcclxuICAgICAgfTtcclxuXHJcblxyXG4gICAgICBzd2l0Y2ggKG9iai5mb3JtYXQpIHtcclxuICAgICAgICBjYXNlICcub2JqJzpcclxuICAgICAgICBjYXNlICdvYmonOlxyXG4gICAgICAgICAgY29tcG9uZW50ID0gbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAub2JqTG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZmJ4JzpcclxuICAgICAgICBjYXNlICdmYngnOlxyXG4gICAgICAgICAgY29tcG9uZW50ID0gbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuZmJ4TG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZ2x0Zic6XHJcbiAgICAgICAgY2FzZSAnZ2x0Zic6XHJcbiAgICAgICAgICBjb21wb25lbnQgPSBtb2RlbE5vZGUuYWRkQ29tcG9uZW50KCdtcC5nbHRmTG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZ2xiJzpcclxuICAgICAgICBjYXNlICdnbGInOlxyXG4gICAgICAgICAgY29tcG9uZW50ID0gbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuZ2x0ZkxvYWRlcicsIGluaXRpYWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgY2FzZSAnLmRhZSc6XHJcbiAgICAgICAgY2FzZSAnZGFlJzpcclxuICAgICAgICAgIGNvbXBvbmVudCA9IG1vZGVsTm9kZS5hZGRDb21wb25lbnQoJ21wLmRhZUxvYWRlcicsIGluaXRpYWwpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnRm9ybWF0IG5vdCBzdXBwb3J0ZWQnKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvL2NhY2hlIHN5c3RlbSAoaSdsbCB0cnkgdG8gbWFrZSBpdCB3b3JrIGxhdGVyIC4uLilcclxuICAgICAgLypsZXQgb2JqQ29udGVudHNKU09OID0gSlNPTi5zdHJpbmdpZnkobW9kZWxOb2RlKTtcclxuICAgICAgY29uc29sZS5sb2cobW9kZWxOb2RlKTtcclxuICAgICAgY29uc29sZS5sb2cob2JqQ29udGVudHNKU09OKTtcclxuICAgICAgY29uc29sZS5sb2coSlNPTi5zdHJpbmdpZnkobW9kZWxOb2RlKSk7XHJcbiAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKGB0ZXN0T2JqXyR7b2JqLm9iamVjdH1gLCBvYmpDb250ZW50c0pTT04pO1xyXG4gICAgICBjb25zb2xlLmxvZyhcInN0b3JlZCA/IVwiKTtcclxuICAgICAgY29uc29sZS5sb2codHlwZW9mIG1vZGVsTm9kZSk7Ki9cclxuICAgICAgLy9sZXQgZGF0YVMgPSBzZXJpYWxpanNlLnNlcmlhbGl6ZShtb2RlbE5vZGUpO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKGRhdGFTKTtcclxuXHJcbiAgICAgIC8vIFVzZSAzID8hIEFtYmllbnQgbGlnaHRpbmdzXHJcbiAgICAgIGlmICh0aGlzLm5vTGlnaHRGb3JPYmplY3RzKSB7XHJcbiAgICAgICAgY29uc3QgbGlnaHRzTm9kZSA9IHNjZW5lT2JqZWN0LmFkZE5vZGUoKTtcclxuICAgICAgICBsaWdodHNOb2RlLmFkZENvbXBvbmVudCgnbXAuYW1iaWVudExpZ2h0Jywge1xyXG4gICAgICAgICAgaW50ZW5zaXR5OiAxLFxyXG4gICAgICAgICAgY29sb3I6IHsgcjogMS4wLCBnOiAxLjAsIGI6IDEuMCB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHRoaXMubm9MaWdodEZvck9iamVjdHMgPSBmYWxzZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgbW9kZWxOb2RlLm9iajNELnBvc2l0aW9uLnNldChcclxuICAgICAgICBvYmoucG9zaXRpb24ueCxcclxuICAgICAgICBvYmoucG9zaXRpb24ueSxcclxuICAgICAgICBvYmoucG9zaXRpb24uelxyXG4gICAgICApO1xyXG5cclxuICAgICAgbW9kZWxOb2RlLm9iajNELnJvdGF0aW9uLnNldChcclxuICAgICAgICBvYmoucm90YXRpb24ueCxcclxuICAgICAgICBvYmoucm90YXRpb24ueSxcclxuICAgICAgICBvYmoucm90YXRpb24uelxyXG4gICAgICApO1xyXG4gICAgICBtb2RlbE5vZGUub2JqM0Quc2NhbGUuc2V0KG9iai5zY2FsZS54LCBvYmouc2NhbGUueSwgb2JqLnNjYWxlLnopO1xyXG4gICAgICBpZiAoaXNBemltdXRoYWxDcm93bikge1xyXG4gICAgICAgIC8qaWYobW9kZWxOb2RlLm9iajNELnNjYWxlLnggPj0gMS4wKXtcclxuICAgICAgICAgIG1vZGVsTm9kZS5vYmozRC5zY2FsZS5zZXQob2JqLnNjYWxlLngvNTAwMCwgb2JqLnNjYWxlLnkvNTAwMCwgb2JqLnNjYWxlLnovNTAwMCk7XHJcbiAgICAgICAgfSovXHJcbiAgICAgICAgdGhpcy5hemltdXRoYWxDcm93biA9IG1vZGVsTm9kZTtcclxuICAgICAgICB0aGlzLmRpc3BsYXlBemltdXRhbENyb3duKCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEJ5IGRlZmF1dCwgZHVyaW5nIGNyZWF0aW9uLCBvYmplY3QgaGFzIHRyYW5zbGF0aW9uIGdpem1vXHJcbiAgICAgIC8vID0+IFVzZXIgaGFzIHRvIGNsaWNrIG9uIGxhdGVyYWwgcGFuZWwsIGFuZCBzYXZlIGl0cyBwb3NpdGlvbiBhZnRlciBwbGF5aW5nIHdpdGggaXQhXHJcbiAgICAgIGlmIChtb2RlICYmICFpc05lc3RUaGVybW9zdGF0KSB7XHJcbiAgICAgICAgdGhpcy5hdHRhY2hHaXptb0NvbnRyb2xUbzNET2JqZWN0KFxyXG4gICAgICAgICAgbW9kZWxOb2RlLFxyXG4gICAgICAgICAgc2NlbmVPYmplY3QsXHJcbiAgICAgICAgICBtb2RlLFxyXG4gICAgICAgICAgdHJ1ZSxcclxuICAgICAgICAgIHRydWVcclxuICAgICAgICApLmNhdGNoKChlKSA9PiBjb25zb2xlLmxvZyhlKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmICh0aGlzLmxhc3RPYmplY3QzRCAmJiB0eXBlb2YgdGhpcy5sYXN0T2JqZWN0M0QuaWQgPT09ICdzdHJpbmcnKSB7XHJcbiAgICAgICAgLy8gcHJvbXB0IFRocmVlSlMgVVVJRCB0byBtYXRjaCBvdXIgbGFzdCBnZW5lcmF0ZWQgb2JqZWN0IGlmIG5ldyAobm90IGZyb20gRGIpXHJcbiAgICAgICAgbW9kZWxOb2RlLm9iajNELnV1aWQgPSB0aGlzLmxhc3RPYmplY3QzRC5pZDtcclxuICAgICAgfSBlbHNlIGlmIChvYmouaWQpIHtcclxuICAgICAgICBtb2RlbE5vZGUub2JqM0QudXVpZCA9IG9iai5pZDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RPYmplY3QzRCA9IG1vZGVsTm9kZS5vYmozRDtcclxuXHJcbiAgICAgIC8vIFN0b3JlIHRoaXMgaW4gbWVtb3J5IE1hcCBkaWN0aW9ubmFyeVxyXG4gICAgICAvL2NvbnNvbGUubG9nKFwiQWRkaW5nIG9iamVjdDogXCIpO1xyXG4gICAgICAvL2NvbnNvbGUubG9nKG1vZGVsTm9kZSk7XHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlPYmplY3RzM0Quc2V0KG1vZGVsTm9kZS5vYmozRC51dWlkLCBtb2RlbE5vZGUpO1xyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5U2NlbmVPYmplY3RzM0Quc2V0KG1vZGVsTm9kZS5vYmozRC51dWlkLCBzY2VuZU9iamVjdCk7XHJcblxyXG4gICAgICAvKnRoaXMuc2RrLkNhbWVyYS5wb3NlLnN1YnNjcmliZShcclxuICAgICAgICBmdW5jdGlvbiAocG9zZTogYW55KSB7XHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKFwiaW4gY2FsbGJhY2tcIilcclxuICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5sYXN0Q2FtZXJhUG9zaXRpb24pXHJcbiAgICAgICAgICAvL2NvbnNvbGUubG9nKHBvc2UucG9zaXRpb24pXHJcbiAgICAgICAgICBpZigocG9zZS5wb3NpdGlvbi54ID09IHRoaXMubGFzdENhbWVyYVBvc2l0aW9uLnggJiYgcG9zZS5wb3NpdGlvbi55ID09IHRoaXMubGFzdENhbWVyYVBvc2l0aW9uLnkgJiYgcG9zZS5wb3NpdGlvbi56ID09IHRoaXMubGFzdENhbWVyYVBvc2l0aW9uLnopIHx8IHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKXtcclxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcInJldHVybmluZ1wiKVxyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhcImNhbWVyYSBwb3M6XCIscG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICB0aGlzLmxhc3RDYW1lcmFQb3NpdGlvbiA9IHsuLi5wb3NlLnBvc2l0aW9ufTtcclxuICAgICAgICAgIGlmKHRoaXMubGFzdE9iamVjdDNEKXtcclxuICAgICAgICAgICAgdGhpcy5sYXN0T2JqZWN0M0QucG9zaXRpb24uc2V0KHBvc2UucG9zaXRpb24ueCsuNSxwb3NlLnBvc2l0aW9uLnkrLjUscG9zZS5wb3NpdGlvbi56Ky41KTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9LmJpbmQodGhpcykpOyovXHJcblxyXG4gICAgICBpZiAoaXNBbmltYXRlZFNlY3VyaXR5Q2FtZXJhKSB7XHJcblxyXG4gICAgICAgIGNvbnN0IGFuaW1hdG9yID0gbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuc2VjdXJpdHlDYW1lcmEnLFxyXG4gICAgICAgICAge1xyXG4gICAgICAgICAgICBcIm5lYXJQbGFuZVwiOiAwLjEsXHJcbiAgICAgICAgICAgIFwiZmFyUGxhbmVcIjogMTAsXHJcbiAgICAgICAgICAgIFwiaG9yaXpvbnRhbEZPVlwiOiA1MixcclxuICAgICAgICAgICAgXCJhc3BlY3RcIjogMS43Nzc3Nzc3Nzc3Nzc3Nzc3LFxyXG4gICAgICAgICAgICBcImxvY2FsUG9zaXRpb25cIjoge1xyXG4gICAgICAgICAgICAgIFwieFwiOiAwLjMsXHJcbiAgICAgICAgICAgICAgXCJ5XCI6IDAuMTgsXHJcbiAgICAgICAgICAgICAgXCJ6XCI6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJsb2NhbFJvdGF0aW9uXCI6IHtcclxuICAgICAgICAgICAgICBcInhcIjogLTE1LFxyXG4gICAgICAgICAgICAgIFwieVwiOiAtOTAsXHJcbiAgICAgICAgICAgICAgXCJ6XCI6IDBcclxuICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgXCJjb2xvclwiOiA2NTI4MCxcclxuICAgICAgICAgICAgXCJwYW5QZXJpb2RcIjogNSxcclxuICAgICAgICAgICAgXCJwYW5BbmdsZVwiOiAtNDVcclxuICAgICAgICAgIH0pO1xyXG4gICAgICAgIGNvbnN0IG1vZGVsT3V0cHV0ID0gc2NlbmVPYmplY3QuYWRkUGF0aCh7XHJcbiAgICAgICAgICBpZDogJ2FuaW1hdGVkLW1vZGVsJyxcclxuICAgICAgICAgIHR5cGU6IHRoaXMuc2RrLlNjZW5lLlBhdGhUeXBlLk9VVFBVVCxcclxuICAgICAgICAgIG5vZGU6IG1vZGVsTm9kZSxcclxuICAgICAgICAgIGNvbXBvbmVudDogYW5pbWF0b3IsXHJcbiAgICAgICAgICBwcm9wZXJ0eTogJ29iamVjdFJvb3QnXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIHRoaXMuc2VjdXJpdHlDYW1lcmFBbmltYXRvciA9IGFuaW1hdG9yO1xyXG4gICAgICAgIGlmICghb2JqLnZpZXdGcnVzdHVtKSB7XHJcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgICAgYW5pbWF0b3IudG9nZ2xlVmlld0ZydXN0dW0oKTtcclxuICAgICAgICAgIH0sIDEwMDApO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGlzTmVzdFRoZXJtb3N0YXQpIHtcclxuICAgICAgICAvLyBUT0RPOiB1c2UgYmluZFBhdGggaW5zdGVhZCB1c2luZyBNUCBzZGsgY2xhc3NlcyAoc2VlIFNlY3VyaXR5IENhbWVyYSBleGFtcGxlKVxyXG4gICAgICAgIC8vIGZvciBUViB1c2VzIENhbnZhc0ltYWdlIGJlbG93IVxyXG4gICAgICAgIC8vIGNvbnN0IGNpID0gbmV3IENhbnZhc0ltYWdlKCk7XHJcbiAgICAgICAgLy8gY2kub25Jbml0KCk7XHJcbiAgICAgICAgY29uc3QgY3YgPSBuZXcgQ2FudmFzUmVuZGVyZXIoKTtcclxuICAgICAgICBjdi5vbkluaXQoKTtcclxuICAgICAgICBjb25zdCBwbGFuZSA9IG5ldyBQbGFuZVJlbmRlcmVyKCk7XHJcbiAgICAgICAgcGxhbmUub3V0cHV0cyA9IHtcclxuICAgICAgICAgIG9iamVjdFJvb3Q6IG5ldyBPYmplY3QzRCgpLFxyXG4gICAgICAgICAgY29sbGlkZXI6IG5ldyBPYmplY3QzRCgpXHJcbiAgICAgICAgfTtcclxuICAgICAgICBjb25zdCBpbnB1dFRleHR1cmUgPSBjdi5vdXRwdXRzLnRleHR1cmU7XHJcbiAgICAgICAgcGxhbmUuc2V0Um9vdFNjZW5lKHRoaXMudGhyZWVKU1NjZW5lKTtcclxuICAgICAgICBwbGFuZS5vbkluaXQobW9kZWxOb2RlLCBpbnB1dFRleHR1cmUpO1xyXG4gICAgICAgIGNvbnN0IHNjID0gbmV3IE5lc3RUaGVybW9zdGF0KCk7XHJcbiAgICAgICAgc2Muc2V0Q29tcG9uZW50KGNvbXBvbmVudCwgcGxhbmUsIGN2KTtcclxuICAgICAgICBzYy5zZXRSb290U2NlbmUodGhpcy50aHJlZUpTU2NlbmUpO1xyXG4gICAgICAgIHNjLm9uSW5pdChtb2RlbE5vZGUsIHBsYW5lLCBpbnB1dFRleHR1cmUpO1xyXG4gICAgICAgIGN2LnNldENhbnZhc05lc3RUaGVybW9zdGF0UGFpbnRlcihzYyk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBzYy5pbnB1dHMubG9hZGluZ1N0YXRlID0gXCJMb2FkZWRcIjtcclxuICAgICAgICAgIHNjLm9uSW5wdXRzVXBkYXRlZCgpO1xyXG4gICAgICAgIH0sIDUwMDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNTbWFydGVycGxhblByb21vdGlvbmFsVmlkZW8pIHtcclxuICAgICAgICAvLyBUT0RPOiB1c2UgYmluZFBhdGggaW5zdGVhZCB1c2luZyBNUCBzZGsgY2xhc3NlcyAoc2VlIFNlY3VyaXR5IENhbWVyYSBleGFtcGxlKVxyXG4gICAgICAgIGNvbnN0IHNjID0gbmV3IFR2UGxheWVyKCk7XHJcbiAgICAgICAgc2Muc2V0Q29tcG9uZW50KGNvbXBvbmVudCk7XHJcbiAgICAgICAgc2Mub25Jbml0KG1vZGVsTm9kZSk7XHJcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICBzYy5pbnB1dHMubG9hZGluZ1N0YXRlID0gXCJMb2FkZWRcIjtcclxuICAgICAgICAgIHNjLm9uSW5wdXRzVXBkYXRlZCgpO1xyXG4gICAgICAgIH0sIDUwMDApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBzY2VuZU9iamVjdC5zdGFydCgpO1xyXG4gICAgICByZXNvbHZlKHRoaXMubGFzdE9iamVjdDNEKTtcclxuICAgIH0pO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlT2JqZWN0VmlzaWJpbGl0eShvYmplY3RJZDogYW55KSB7XHJcbiAgICBsZXQgb2JqID0gdGhpcy5kaWN0aW9ubmFyeU9iamVjdHMzRC5nZXQob2JqZWN0SWQpO1xyXG4gICAgb2JqLm9iajNELnZpc2libGUgPSAhb2JqLm9iajNELnZpc2libGU7XHJcbiAgfVxyXG5cclxuICBpc09iamVjdFZpc2libGUob2JqZWN0SWQ6IGFueSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IG9iaiA9IHRoaXMuZGljdGlvbm5hcnlPYmplY3RzM0QuZ2V0KG9iamVjdElkKTtcclxuICAgIHJldHVybiBvYmoub2JqM0QudmlzaWJsZTtcclxuICB9XHJcblxyXG4gIGFzeW5jIHBvaW50Q2FtZXJhVG8zRE9iamVjdChvYmplY3RJZDogYW55KSB7XHJcbiAgICBsZXQgb2JqID0gdGhpcy5kaWN0aW9ubmFyeU9iamVjdHMzRC5nZXQob2JqZWN0SWQpO1xyXG5cclxuICAgIC8vV2UgY3JlYXRlIGEgdGVtcG9yYXJ5IFRhZ1xyXG4gICAgY29uc3QgcG9pT2JqZWN0ID0ge1xyXG4gICAgICBjb29yZGluYXRlOiBKU09OLnN0cmluZ2lmeShvYmoub2JqM0QucG9zaXRpb24pLFxyXG4gICAgICB0eXBlOiBQb2lUeXBlLk9CSkVDVDNELFxyXG4gICAgICBlbGVtZW50SUQ6IG9iamVjdElkLCAvL3RvZG86IGJlIGNhcmVmdWwgd2l0aCB0aGlzXHJcbiAgICB9IGFzIFBPSTtcclxuICAgIGNvbnN0IG9iamVjdERiID0geyBpZDogb2JqZWN0SWQgfSBhcyBEYk9iamVjdFR5cGU7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy5jcmVhdGVNYXR0ZXJ0YWdGcm9tUE9JKFBvaVR5cGUuT0JKRUNUM0QsIG9iamVjdERiLCBwb2lPYmplY3QpO1xyXG4gICAgfSBjYXRjaCAoZXJyOiBhbnkpIHsgfVxyXG5cclxuICAgIC8vTm90IHJlYWxseSBuZWNlc3NhcnkgYW55bW9yZSBzaW5jZSB0aGUgdGFnIHdpbGwgZGlzYXBwZWFyIHF1aWNrXHJcbiAgICAvL3RoaXMuc2RrLlRhZy5lZGl0T3BhY2l0eShtYXR0ZXJ0YWdJRCwgMC4wKTsvL29wYWNpdHkpO1xyXG4gICAgLy90aGlzLnNkay5UYWcuYWxsb3dBY3Rpb24obWF0dGVydGFnSUQsIHt9KTsgLy9kaXNhYmxlcyBldmVyeSBhY3Rpb25cclxuXHJcbiAgICBsZXQgcmVzdWx0ID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKG9iamVjdElkKTtcclxuXHJcbiAgICBhd2FpdCB0aGlzLmdvVG9UYWcocmVzdWx0LnRhZyk7XHJcbiAgICB0aGlzLmRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKTtcclxuICB9XHJcblxyXG4gIGdldFNjZW5lTm9kZUZyb21PYmplY3QzRElkKHV1aWQ6IHN0cmluZyk6IGFueSB7XHJcbiAgICByZXR1cm4gdGhpcy5kaWN0aW9ubmFyeVNjZW5lT2JqZWN0czNELmdldCh1dWlkKTtcclxuICB9XHJcblxyXG4gIGFzeW5jIGRpc3BsYXlBemltdXRhbENyb3duKCkge1xyXG4gICAgaWYgKHRoaXMuYXppbXV0aGFsQ3Jvd24pIHtcclxuICAgICAgdGhpcy5hemltdXRoYWxDcm93bi5vYmozRC5wb3NpdGlvbi5zZXQodGhpcy5wb3NlQ2FtZXJhLnBvc2l0aW9uLngsIHRoaXMucG9zZUNhbWVyYS5wb3NpdGlvbi55LCB0aGlzLnBvc2VDYW1lcmEucG9zaXRpb24ueilcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGF0dGFjaEdpem1vQ29udHJvbFRvM0RPYmplY3QoXHJcbiAgICBtb2RlbE5vZGU6IGFueSxcclxuICAgIHNjZW5lT2JqZWN0OiBhbnksXHJcbiAgICBtb2RlOiAndHJhbnNsYXRlJyB8ICdyb3RhdGUnIHwgJ3NjYWxlJyxcclxuICAgIHZpc2libGU6IGJvb2xlYW4sXHJcbiAgICBpc05ld09iamVjdDogYm9vbGVhblxyXG4gICk6IFByb21pc2U8YW55PiB7XHJcbiAgICAvLyBDcmVhdGUgYSBzY2VuZSBub2RlIHdpdGggYSB0cmFuc2Zvcm0gY29udHJvbCBjb21wb25lbnQuXHJcbiAgICBsZXQgbm9kZSA9IG51bGw7XHJcbiAgICBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgaWYgKCFub2RlKSB7XHJcbiAgICAgIGNvbnN0IFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG4gICAgICBub2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IG15Q29udHJvbCA9IG5vZGUuYWRkQ29tcG9uZW50KCdtcC50cmFuc2Zvcm1Db250cm9scycpO1xyXG4gICAgbm9kZS5zdGFydCgpO1xyXG4gICAgLy9cclxuICAgIC8vIC8vIE1ha2UgdGhlIHRyYW5zZm9ybSBjb250cm9sIHZpc2libGUgc28gdGhhdCB0aGUgdXNlciBjYW4gbWFuaXB1bGF0ZSB0aGUgY29udHJvbCBzZWxlY3Rpb24uXHJcbiAgICBteUNvbnRyb2wudHJhbnNmb3JtQ29udHJvbHMudmlzaWJsZSA9IHZpc2libGU7XHJcbiAgICAvL1xyXG4gICAgLy8gLy8gQXR0YWNoIHRoZSBtb2RlbCB0byB0aGUgdHJhbnNmb3JtIGNvbnRyb2xcclxuICAgIG15Q29udHJvbC5pbnB1dHMuc2VsZWN0aW9uID0gbW9kZWxOb2RlO1xyXG4gICAgLy9cclxuICAgIC8vIC8vIHNldCAndHJhbnNsYXRlJyBtb2RlIHRvIHBvc2l0aW9uIHRoZSBzZWxlY3Rpb24uXHJcbiAgICBteUNvbnRyb2wuaW5wdXRzLm1vZGUgPSBtb2RlO1xyXG4gICAgbW9kZWxOb2RlLm9iajNELmNvbnRyb2xzID0gbXlDb250cm9sOyAvLyBzdG9yZSBnaXptb0N0cmwgaW5zaWRlIG9iamVjdFxyXG4gICAgaWYgKGlzTmV3T2JqZWN0KSB7IC8vaSBrZWVwIHRoZSBjdXJyZW50IHNvbHV0aW9uIGZvciBuZXcgb2JqZWN0c1xyXG4gICAgICBpZiAoIXRoaXMubGFzdE9iamVjdDNEIHx8ICF0aGlzLmxhc3RPYmplY3QzRC5jb250cm9scykge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBtb2RlbE5vZGUub2JqM0QudXVpZCA9IHRoaXMubGFzdE9iamVjdDNELnV1aWQgfHwgdGhpcy5sYXN0T2JqZWN0M0QuaWQ7XHJcbiAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coYGlkIG9iaiBpbiBTY2VuZSB3YXMgbm90IGFzc2lnbmVkIHRvIGlkIGZyb20gREIgc2luY2VgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5sYXN0T2JqZWN0M0QgPSBtb2RlbE5vZGUub2JqM0Q7XHJcbiAgICAgIH1cclxuICAgIH0gZWxzZSB7Ly9vYmplY3RzIGFscmVhZHkgaW4gcGxhY2UgaGF2ZSB0byBiZWNvbWUgdGhlIFwibGFzdE9iamVjdFwiIChpIHRoaW5rPylcclxuICAgICAgY29uc29sZS5sb2coXCJpbiBteSBzb2x1dGlvbiAhXCIpO1xyXG4gICAgICBjb25zb2xlLmxvZyhtb2RlbE5vZGUpO1xyXG4gICAgICBjb25zb2xlLmxvZyhtb2RlbE5vZGUub2JqM0QudXVpZCk7XHJcbiAgICAgIHRoaXMubGFzdE9iamVjdDNEID0gbW9kZWxOb2RlLm9iajNEO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBtb2RlbE5vZGU7XHJcbiAgfVxyXG5cclxuICByZW1vdmVHaXptb0Zyb21MYXN0T2JqZWN0KCk6IHZvaWQge1xyXG4gICAgdGhpcy5sYXN0T2JqZWN0M0QuY29udHJvbHMudHJhbnNmb3JtQ29udHJvbHMudmlzaWJsZSA9IGZhbHNlO1xyXG4gICAgdGhpcy5sYXN0T2JqZWN0M0QuY29udHJvbHMudHJhbnNmb3JtQ29udHJvbHMuZGlzcG9zZSgpO1xyXG4gICAgdGhpcy5sYXN0T2JqZWN0M0QuY29udHJvbHMgPSBudWxsO1xyXG4gIH1cclxuXHJcbiAgdG9nZ2xlVmlld0ZydXN0dW0oKTogdm9pZCB7XHJcbiAgICB0aGlzLnNlY3VyaXR5Q2FtZXJhQW5pbWF0b3IudG9nZ2xlVmlld0ZydXN0dW0oKTtcclxuICB9XHJcblxyXG4gIC8qcHVibGljIHNldDNET2JqZWN0TW9kZShtb2RlbE5vZGU6IGFueSwgbW9kZT86IHN0cmluZykge1xyXG4gICAgaWYgKG1vZGUpIHtcclxuICAgICAgdGhpcy5vYmplY3RDb250cm9sLmlucHV0cy5zZWxlY3Rpb24gPSBtb2RlbE5vZGU7XHJcbiAgICAgIHRoaXMub2JqZWN0Q29udHJvbC5pbnB1dHMudmlzaWJsZSA9IHRydWU7XHJcbiAgICAgIHRoaXMub2JqZWN0Q29udHJvbC5pbnB1dHMubW9kZSA9IG1vZGU7XHJcbiBcclxuICAgICAgc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKG1vZGVsTm9kZSk7XHJcbiAgICAgIH0sIDUwMDApO1xyXG4gXHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLm9iamVjdENvbnRyb2wuaW5wdXRzLnZpc2libGUgPSB0cnVlO1xyXG4gICAgfVxyXG4gIH0qL1xyXG59XHJcbiJdfQ==
1669
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWF0dGVycG9ydC5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNtYXJ0ZXJwbGFuLWNvcmUvc3JjL2xpYi9zZXJ2aWNlcy9tYXR0ZXJwb3J0LnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQVUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXRFLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0IsMkNBQTJDO0FBQzNDLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsZUFBZSxFQUNmLElBQUksR0FDTCxNQUFNLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNqRCxPQUFPLEVBRUwsV0FBVyxFQUVYLG1CQUFtQixFQUVuQixPQUFPLEVBQ1AsUUFBUSxFQUNSLFNBQVMsRUFDVCxrQkFBa0IsR0FDbkIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBSWpDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUc5QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0seURBQXlELENBQUM7QUFDekYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLHdEQUF3RCxDQUFDO0FBQ3ZGLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx5REFBeUQsQ0FBQztBQUd6RixPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkNBQTZDLENBQUM7Ozs7O0FBd0J2RSxNQUFNLE9BQU8saUJBQWlCO0lBb0o1QixZQUNvQixNQUFjLEVBQ3hCLE1BQWMsRUFDZCxXQUEyQixFQUMzQixpQkFBd0MsRUFDeEMsTUFBYztRQUhkLFdBQU0sR0FBTixNQUFNLENBQVE7UUFDZCxnQkFBVyxHQUFYLFdBQVcsQ0FB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QUcsU0FBUyxDQUFDLEtBQUssQ0FBQztTQUNyQztRQUVELE9BQU8sU0FBUyxDQUFDO0lBQ25CLENBQUM7SUFFRCx5QkFBeUI7UUFDdkIsSUFBSSxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsaUJBQWlCLENBQUMsT0FBTyxHQUFHLEtBQUssQ0FBQztRQUM3RCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN2RCxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsR0FBRyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUVELGlCQUFpQjtRQUNmLElBQUksQ0FBQyxzQkFBc0IsQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO0lBQ2xELENBQUM7OzhHQWxpRVUsaUJBQWlCLGtCQXFKbEIsUUFBUTtrSEFySlAsaUJBQWlCLGNBRmhCLE1BQU07MkZBRVAsaUJBQWlCO2tCQUg3QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBc0pJLE1BQU07MkJBQUMsUUFBUSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSwgTmdab25lLCBpc0Rldk1vZGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQWN0aXZhdGVkUm91dGUsIFJvdXRlciB9IGZyb20gJ0Bhbmd1bGFyL3JvdXRlcic7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcclxuLy9pbXBvcnQgKiBhcyBzZXJpYWxpanNlIGZyb20gXCJzZXJpYWxpanNlXCI7XHJcbmltcG9ydCB7XHJcbiAgZ2V0RGlzdGFuY2VCZXR3ZWVuVHdvUG9pbnRzLFxyXG4gIHBvaVR5cGVUb1N0cmluZyxcclxuICB3YWl0LFxyXG59IGZyb20gJy4uL2hlbHBlcnMuc2VydmljZSc7XHJcbmltcG9ydCB7IE1hdHRlcnRhZ0RhdGEgfSBmcm9tICcuLi9tYXR0ZXJ0YWdEYXRhJztcclxuaW1wb3J0IHtcclxuICBEYk9iamVjdFR5cGUsXHJcbiAgRmVhdHVyZVR5cGUsXHJcbiAgSU9iamVjdDNELFxyXG4gIE1hdHRlcnRhZ0FjdGlvbk1vZGUsXHJcbiAgUE9JLFxyXG4gIFBvaVR5cGUsXHJcbiAgU3BNb2R1bGUsXHJcbiAgVGFnQWN0aW9uLFxyXG4gIFZpZXdlckludGVyYWN0aW9ucyxcclxufSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgT2JqZWN0M0QgfSBmcm9tICd0aHJlZSc7XHJcbmltcG9ydCB7IEJhc2VUYWdTZXJ2aWNlIH0gZnJvbSAnLi90YWcuc2VydmljZSc7XHJcbmltcG9ydCB7IEJhc2VWaXNpYmlsaXR5U2VydmljZSB9IGZyb20gJy4vYmFzZVZpc2liaWxpdHkuc2VydmljZSc7XHJcbmltcG9ydCB7IENvbmZpZyB9IGZyb20gJy4uL2NvbmZpZyc7XHJcbmltcG9ydCB7IENhbWVyYU1vZGUgfSBmcm9tICcuLi90eXBlcy5zZXJ2aWNlJztcclxuaW1wb3J0IHsgSVNjZW5lTm9kZSwgQ29tcG9uZW50T3V0cHV0IH0gZnJvbSBcIi4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9zY2VuZS1jb21wb25lbnQvU2NlbmVDb21wb25lbnRcIjtcclxuaW1wb3J0IHsgU2VjdXJpdHlDYW1lcmEgfSBmcm9tICcuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvc2VjdXJpdHktY2FtZXJhL1NlY3VyaXR5Q2FtZXJhJztcclxuaW1wb3J0IHsgTmVzdFRoZXJtb3N0YXQgfSBmcm9tICcuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvbmVzdC10aGVybW9zdGF0L05lc3RUaGVybW9zdGF0JztcclxuaW1wb3J0IHsgUGxhbmVSZW5kZXJlciB9IGZyb20gJy4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9uZXN0LXRoZXJtb3N0YXQvUGxhbmVSZW5kZXJlcic7XHJcbmltcG9ydCB7IENhbnZhc1JlbmRlcmVyIH0gZnJvbSBcIi4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy9uZXN0LXRoZXJtb3N0YXQvQ2FudmFzUmVuZGVyZXJcIjtcclxuaW1wb3J0IHsgVmlkZW9SZW5kZXJlciB9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvdmlkZW8tcmVuZGVyZXIvVmlkZW9SZW5kZXJlclwiO1xyXG5pbXBvcnQgeyBIbHNMb2FkZXIgfSBmcm9tIFwiLi4vbWF0dGVycG9ydC1leHRlbnNpb25zL2hzbC1sb2FkZXIvSGxzTG9hZGVyXCI7XHJcbmltcG9ydCB7IFR2UGxheWVyIH0gZnJvbSBcIi4uL21hdHRlcnBvcnQtZXh0ZW5zaW9ucy90di1wbGF5ZXIvVHZQbGF5ZXJcIjtcclxuXHJcbi8vIGltcG9ydCB7Q2FudmFzSW1hZ2V9IGZyb20gXCIuLi9tYXR0ZXJwb3J0LWV4dGVuc2lvbnMvbmVzdC10aGVybW9zdGF0L0NhbnZhc0ltYWdlXCI7XHJcblxyXG4vKipcclxuICogQ3VzdG9tIFRocmVlanMgT2JqZWN0IDNEIGludGVyZmFjZVxyXG4gKi9cclxuaW50ZXJmYWNlIFRocmVlSlNPYmplY3QzRCB7XHJcbiAgaWQ6IHN0cmluZztcclxuICB1dWlkPzogc3RyaW5nO1xyXG4gIHBvc2l0aW9uPzogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyIH1cclxuICByb3RhdGlvbj86IHsgeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciB9XHJcbiAgc2NhbGU/OiB7IHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIgfVxyXG59XHJcblxyXG5kZWNsYXJlIGdsb2JhbCB7XHJcbiAgaW50ZXJmYWNlIFdpbmRvdyB7XHJcbiAgICBNUF9TREs6IHsgY29ubmVjdDogRnVuY3Rpb24gfTtcclxuICB9XHJcbn1cclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCcsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBNYXR0ZXJwb3J0U2VydmljZSB7XHJcblxyXG4gIHByaXZhdGUgc2xvdHM6IGFueVtdID0gW107Ly9TbG90Tm9kZVtdID0gW107XHJcblxyXG4gIHByaXZhdGUgbm9kZXM6IElTY2VuZU5vZGVbXSA9IFtdO1xyXG5cclxuICBwdWJsaWMgc2RrOiBhbnk7XHJcblxyXG4gIHByaXZhdGUgY29udGFpbmVyOiBhbnk7XHJcblxyXG4gIC8vIFBvc2l0aW9uIGNhbWVyYVxyXG4gIHByaXZhdGUgcG9zZU1hdHRlcnBvcnQ6IGFueTtcclxuXHJcbiAgcHVibGljIHBvc2VDYW1lcmE6IHsgcm90YXRpb246IGFueTsgcG9zaXRpb246IGFueTsgc3dlZXA6IGFueSB9O1xyXG4gIHB1YmxpYyBsYXN0Q2FtZXJhUG9zaXRpb246IGFueSA9IHsgeDogMC4wLCB5OiAwLjAsIHo6IDAuMCB9O1xyXG5cclxuICBwcml2YXRlIGF6aW11dGhhbENyb3duOiBhbnk7XHJcbiAgLy8gUG9pbnRlciB0cmlja1xyXG4gIHByaXZhdGUgcG9pbnRlckJ1dHRvbjogYW55O1xyXG5cclxuICAvLyBEaXNwbGF5IGFuZCBnZXQgY3VycmVudCBwb3NpdGlvbiBvZiBjdXJzb3IgKGZvciBBZG1pbnMgb25seSlcclxuICBwcml2YXRlIGdldEN1cnNvclBvc2l0aW9uQnV0dG9uOiBhbnk7XHJcbiAgcHJpdmF0ZSBjdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCA9IGZhbHNlO1xyXG4gIHByaXZhdGUgaW50ZXJ2YWxDdXJzb3JQb2ludGVyUG9zaXRpb246IGFueTtcclxuICBwcml2YXRlIHRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbDogYW55O1xyXG5cclxuICBwcml2YXRlIG9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb246IGFueTtcclxuICAvLyBNZWFzdXJlIG1vZGVcclxuICBwcml2YXRlIGlzTWVhc3VyZU1vZGVPbiA9IGZhbHNlO1xyXG5cclxuICBwcml2YXRlIGludGVyYWN0aW9uTW9kZTogbnVtYmVyID0gVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQ7XHJcblxyXG4gIC8vIExpc3Qgb2YgY3JlYXRlZCBNYXR0ZXJ0YWcgSURzIGluIHRoZSBjdXJyZW50IHZpZXdlciBzZXNzaW9uXHJcbiAgcHJpdmF0ZSBtYXR0ZXJ0YWdJRHM6IEFycmF5PHN0cmluZz4gPSBbXTtcclxuXHJcbiAgLy8gRGljdGlvbm5hcnkgb2YgTWF0dGVydGFnSUQgYW5kIGl0cyBkYXRhIChtYXR0ZXJ0YWdEYXRhKVxyXG4gIHByaXZhdGUgZGljdGlvbm5hcnlUYWdzOiBNYXA8c3RyaW5nLCBNYXR0ZXJ0YWdEYXRhPiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJpdmF0ZSBkaWN0aW9ubmFyeU9iamVjdHMzRDogTWFwPHN0cmluZywgYW55PiA9IG5ldyBNYXAoKTtcclxuXHJcbiAgcHJpdmF0ZSBkaWN0aW9ubmFyeVNjZW5lT2JqZWN0czNEOiBNYXA8c3RyaW5nLCBhbnk+ID0gbmV3IE1hcCgpO1xyXG5cclxuICBwdWJsaWMgdGhyZWVKU1NjZW5lOiBhbnk7IC8vIGdsb2JhbCByb290IHNjZW5lIChub3QgdXNlZCBub3chKVxyXG5cclxuICBwcml2YXRlIGxhc3RNZWFzdXJlID0gW107XHJcblxyXG4gIHByaXZhdGUgZGlzdGFuY2VzTGFzdE1lYXN1cmU6IG51bWJlcltdID0gW107XHJcblxyXG4gIHByaXZhdGUgcmVzb2x1dGlvbiA9IHtcclxuICAgIHdpZHRoOiA1MDAsXHJcbiAgICBoZWlnaHQ6IDYwMCxcclxuICB9O1xyXG5cclxuICBwcml2YXRlIHZpc2liaWxpdHkgPSB7XHJcbiAgICBtYXR0ZXJ0YWdzOiBmYWxzZSxcclxuICAgIHN3ZWVwczogdHJ1ZSxcclxuICB9O1xyXG5cclxuICBwdWJsaWMgdGFnc0F0dGFjaG1lbnRzOiBPYmplY3QgPSB7fTtcclxuXHJcbiAgcHJpdmF0ZSBsYXN0U2NyZWVuc2hvdFVyaTogYW55O1xyXG5cclxuICBwdWJsaWMgc3dlZXBzOiBBcnJheTxzdHJpbmc+IHwgbnVsbDtcclxuXHJcbiAgcHVibGljIGN1cnJlbnRTd2VlcDogU3ViamVjdDxzdHJpbmc+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgLy9jYW1lcmEgcG9zaXRpb24gd2l0aCByb3RhdGlvblxyXG4gIHB1YmxpYyBjdXJyZW50Q2FtZXJhUG9zZTogU3ViamVjdDxhbnk+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgcHJpdmF0ZSBmbG9vcnM/OiBBcnJheTx7IGlkOiBzdHJpbmc7IG5hbWU6IHN0cmluZzsgc2VxdWVuY2U6IG51bWJlciB9PiB8IG51bGw7XHJcblxyXG4gIHByaXZhdGUgX2N1cnJlbnRTcGFjZUlEOiBzdHJpbmc7XHJcblxyXG4gIHByaXZhdGUgbGFzdE9iamVjdDNEOiBhbnk7IC8vIFRocmVlIEpTIG9iamVjdFxyXG5cclxuICBwcml2YXRlIGN1cnJlbnRGbG9vcjtcclxuXHJcbiAgcHVibGljIGdldCBjdXJyZW50U3BhY2VJRCgpOiBzdHJpbmcge1xyXG4gICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRTcGFjZUlEO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHNldCBjdXJyZW50U3BhY2VJRCh2YWx1ZTogc3RyaW5nKSB7XHJcbiAgICB0aGlzLl9jdXJyZW50U3BhY2VJRCA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgdGltZXJQb2ludGVyOiBhbnk7XHJcblxyXG4gIGZvcmJpZGRlblN3ZWVwczogc3RyaW5nW10gPSBbXTtcclxuXHJcbiAgcHVibGljIHRhZ0FjdGlvbjogU3ViamVjdDx7IGFjdGlvbjogc3RyaW5nOyBkYXRhOiBzdHJpbmcgfT4gPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICBwdWJsaWMgbWF0dGVydGFnVG9Gb2xsb3c6IHN0cmluZyB8IG51bGw7XHJcblxyXG4gIHRhZ1NlcnZpY2U6IEJhc2VUYWdTZXJ2aWNlO1xyXG5cclxuICBjb25maWc6IENvbmZpZztcclxuXHJcbiAgcHVibGljIGluVHJhbnNpdGlvbk1vZGUgPSBmYWxzZTtcclxuXHJcbiAgcHVibGljIGluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcblxyXG4gIHByaXZhdGUgbm9MaWdodEZvck9iamVjdHMgPSB0cnVlO1xyXG5cclxuICBwdWJsaWMgY3VycmVudENhbWVyYU1vZGU6IENhbWVyYU1vZGUgPSBDYW1lcmFNb2RlLk9VVFNJREU7XHJcblxyXG4gIHB1YmxpYyBvbkNhbWVyYU1vZGVDaGFuZ2VkID0gbmV3IFN1YmplY3Q8Q2FtZXJhTW9kZT4oKTtcclxuXHJcbiAgcHVibGljIG9uR29Ub1RhZyA9IG5ldyBTdWJqZWN0PHN0cmluZz4oKTtcclxuXHJcbiAgdGFnTWVzc2VuZ2VyT24gPSBmYWxzZTtcclxuXHJcbiAgU1BNb2R1bGU6IFNwTW9kdWxlO1xyXG5cclxuICBwdWJsaWMgb2JqZWN0Q29udHJvbDogYW55O1xyXG5cclxuICBwcml2YXRlIHNlY3VyaXR5Q2FtZXJhQW5pbWF0b3I6IGFueTtcclxuXHJcbiAgLyoqXHJcbiAgICogQWN0aW9ucyBvbiBsZWZ0IGNsaWNrIHdoZW4gcG9zaXRpb25pbmcgbWF0dGVydGFnIGluIHZpc2l0XHJcbiAgICovXHJcbiAgcG9pbnRlckxlZnRDbGlja0hhbmRsZXIgPSAoKSA9PiB7XHJcbiAgICBpZiAodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdykge1xyXG4gICAgICBjb25zdCBtYXR0ZXJ0YWdEYXRhID0gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKHsgLi4udGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbiB9KTsgLy8gY29weSEhIG5vdCB0aGUgcmVmZXJlbmNlXHJcbiAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0Tm9ybWFsKHsgLi4udGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwgfSk7IC8vIGNvcHkhISBub3QgdGhlIHJlZmVyZW5jZVxyXG4gICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5zZXQodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdywgbWF0dGVydGFnRGF0YSk7XHJcbiAgICAgIHRoaXMudXBkYXRlTWF0dGVyVGFnQ29udGVudEZvclRhZ0lEKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgfVxyXG4gICAgdGhpcy5vblZhbGlkYXRlZE1hdHRlcnRhZygpO1xyXG4gIH07XHJcblxyXG4gIHBvaW50ZXJSaWdodENsaWNrSGFuZGxlciA9IChlKSA9PiB7XHJcbiAgICBlLnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB0aGlzLmNhbmNlbEZvbGxvd2luZ0N1cnNvcigpO1xyXG4gICAgYWxlcnQoJ2FjdGlvbiBjYW5jZWxsZWQnKTtcclxuICB9O1xyXG5cclxuICBwb2ludGVyTWlkZGxlQ2xpY2tIYW5kbGVyID0gKGUpID0+IHtcclxuICAgIHRoaXMudGV4dERpc3BsYXlDdXJzb3JQb3NpdGlvblBhbmVsLmlubmVySFRNTCA9IGBwb3NpdGlvbjpcclxuICAgICAgICR7dGhpcy5wb2ludFRvU3RyaW5nKHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24pfVxcblxyXG4gICAgICAgbm9ybWFsOlxyXG4gICAgICAgJHt0aGlzLnBvaW50VG9TdHJpbmcodGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwpfVxcblxyXG4gICAgICAgZmxvb3JJZDpcclxuICAgICAgICR7dGhpcy5wb3NlTWF0dGVycG9ydC5mbG9vcklkfWA7XHJcbiAgICAvLyB0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ3Zpc2libGUnO1xyXG4gICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gIH1cclxuXHJcbiAgY29uc3RydWN0b3IoXHJcbiAgICBASW5qZWN0KCdjb25maWcnKSBjb25maWc6IENvbmZpZyxcclxuICAgIHByaXZhdGUgcm91dGVyOiBSb3V0ZXIsXHJcbiAgICBwcml2YXRlIGFjdGl2ZVJvdXRlOiBBY3RpdmF0ZWRSb3V0ZSxcclxuICAgIHByaXZhdGUgdmlzaWJpbGl0eVNlcnZpY2U6IEJhc2VWaXNpYmlsaXR5U2VydmljZSxcclxuICAgIHByaXZhdGUgbmdab25lOiBOZ1pvbmVcclxuICApIHtcclxuICAgIHRoaXMuY29uZmlnID0gY29uZmlnO1xyXG5cclxuICAgIC8vIFRPRE86IG9ubHkgZm9yIGRldiFcclxuICAgIGlmICghIXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24gJiZcclxuICAgICAgKGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignZGV2JykgIT09IC0xIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignbG9jYWxob3N0JykgIT09IC0xKSkge1xyXG4gICAgICB0aGlzLmludGVydmFsQ3Vyc29yUG9pbnRlclBvc2l0aW9uID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xyXG4gICAgICAgIGlmICghdGhpcy5wb3NlTWF0dGVycG9ydCkge1xyXG4gICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgbmV4dFNob3cgPSB0aGlzLnBvc2VNYXR0ZXJwb3J0LnRpbWUgKyAxMDAwO1xyXG4gICAgICAgIGlmIChuZXcgRGF0ZSgpLmdldFRpbWUoKSA+IG5leHRTaG93KSB7XHJcbiAgICAgICAgICBpZiAodGhpcy5jdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCkge1xyXG4gICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgY29uc3Qgc2l6ZSA9IHtcclxuICAgICAgICAgICAgdzogdGhpcy5jb250YWluZXIuY2xpZW50V2lkdGgsXHJcbiAgICAgICAgICAgIGg6IHRoaXMuY29udGFpbmVyLmNsaWVudEhlaWdodCxcclxuICAgICAgICAgIH07XHJcbiAgICAgICAgICBjb25zdCBjb29yZCA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbih0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLCB0aGlzLnBvc2VDYW1lcmEsIHNpemUpO1xyXG4gICAgICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5zdHlsZS5sZWZ0ID0gYCR7Y29vcmQueCAtIDI1fXB4YDtcclxuICAgICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUudG9wID0gYCR7Y29vcmQueSAtIDIyfXB4YDtcclxuICAgICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uc3R5bGUuZGlzcGxheSA9ICdibG9jayc7XHJcbiAgICAgICAgICAvLyB0aGlzLnRleHREaXNwbGF5Q3Vyc29yUG9zaXRpb25QYW5lbC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCA9IHRydWU7XHJcbiAgICAgICAgfVxyXG4gICAgICB9LCA1MDApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5pdGlhbGl6ZXMgTWF0dGVycG9ydCBhbmQgYWxsIGxpc3RlbmVycy9kYXRhXHJcbiAgICogQHBhcmFtIHRhZ1NlcnZpY2UgQmFzZVRhZ1NlcnZpY2UgKHRvIGluamVjdCBodG1sKVxyXG4gICAqIEBwYXJhbSBtb2R1bGUgU3BNb2R1bGUgKE11c2V1bSwgSW1tbykgdG8gc3Vic2NyaWJlIG9ubHkgdG8gbmVlZGVkIGZ1bmN0aW9ubm5hbGl0aWVzXHJcbiAgICogQHJldHVybnMgYm9vbGVhblxyXG4gICAqL1xyXG4gIGFzeW5jIGluaXRTZGsoXHJcbiAgICB0YWdTZXJ2aWNlOiBCYXNlVGFnU2VydmljZSxcclxuICAgIG1vZHVsZTogU3BNb2R1bGUgPSBTcE1vZHVsZS5JTU1PXHJcbiAgKTogUHJvbWlzZTxib29sZWFuPiB7XHJcbiAgICBpZiAodGhpcy5zZGspIHtcclxuICAgICAgLy8gY2xlYW4gaWYgc2RrIGlzIHJ1bm5pbmcgYWxyZWFkeVxyXG4gICAgICBhd2FpdCB0aGlzLmFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKTtcclxuICAgIH1cclxuICAgIHRoaXMudGFnU2VydmljZSA9IHRhZ1NlcnZpY2U7XHJcbiAgICB0aGlzLlNQTW9kdWxlID0gbW9kdWxlO1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcclxuICAgICAgLy8gUmV0cmlldmUgRE9NIGVsZW1lbnRzXHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyN2aWV3ZXItcG9pbnRlci10cmljaydcclxuICAgICAgKSBhcyBIVE1MRWxlbWVudDtcclxuICAgICAgdGhpcy5jb250YWluZXIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdmlld2VyLW1vZHVsZScpIGFzIEhUTUxFbGVtZW50O1xyXG4gICAgICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKFxyXG4gICAgICAgICcjdmlld2VyLW1vZHVsZSdcclxuICAgICAgKSBhcyBIVE1MSUZyYW1lRWxlbWVudDtcclxuICAgICAgaWYgKCFpZnJhbWUpIHtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vIEFkZCBsaXN0ZW5lcnNcclxuICAgICAgaWYgKHRoaXMucG9pbnRlckJ1dHRvbikge1xyXG4gICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgJ2NsaWNrJyxcclxuICAgICAgICAgIHRoaXMucG9pbnRlckxlZnRDbGlja0hhbmRsZXJcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGNhbmNlbCBvbiByaWdodCBjbGlja1xyXG4gICAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKFxyXG4gICAgICAgICAgJ2NvbnRleHRtZW51JyxcclxuICAgICAgICAgIHRoaXMucG9pbnRlclJpZ2h0Q2xpY2tIYW5kbGVyXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgICAvLyBSZXRyaWV2ZSBET00gZWxlbWVudHNcclxuICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbiA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoXHJcbiAgICAgICAgJyNidXR0b24nXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIHRoaXMudGV4dERpc3BsYXlDdXJzb3JQb3NpdGlvblBhbmVsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcihcclxuICAgICAgICAnI3RleHQnXHJcbiAgICAgICkgYXMgSFRNTEVsZW1lbnQ7XHJcbiAgICAgIGlmICh0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uKSB7XHJcbiAgICAgICAgLy8gZ2V0IHBvc2l0aW9uIG9uIE1hdHRlcnBvcnQgXCJtb2RlbFwiIG9uIG1pZGRsZSBjbGlja1xyXG4gICAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24uYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAgICdjbGljaycsXHJcbiAgICAgICAgICB0aGlzLnBvaW50ZXJNaWRkbGVDbGlja0hhbmRsZXJcclxuICAgICAgICApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICAvLyBMb2FkIFNES1xyXG4gICAgICBjb25zb2xlLmxvZygnTG9hZGluZyBNYXR0ZXJwb3J0IFNESycpO1xyXG4gICAgICBjb25zdCBzaG93Y2FzZVdpbmRvdyA9IGlmcmFtZS5jb250ZW50V2luZG93O1xyXG4gICAgICBpZnJhbWUuYWRkRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAnbG9hZCcsXHJcbiAgICAgICAgYXN5bmMgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgdGhpcy5zZGsgPSBhd2FpdCBzaG93Y2FzZVdpbmRvdy5NUF9TREsuY29ubmVjdChcclxuICAgICAgICAgICAgICBzaG93Y2FzZVdpbmRvdyxcclxuICAgICAgICAgICAgICAncW45d3Nhc3V5NWgyZnpyYnJuMW56cjBpZCcsXHJcbiAgICAgICAgICAgICAgJzMuNSdcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIExvYWQgTWF0dGVydGFnIGljb25zIGFuZCBjdXN0b20gc3Vic2NyaXB0aW9uc1xyXG4gICAgICAgICAgc3dpdGNoIChtb2R1bGUpIHtcclxuICAgICAgICAgICAgY2FzZSBTcE1vZHVsZS5JTU1POlxyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uLXRpY2tldCcsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl90aWNrZXRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uLWVxdWlwbWVudCcsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9lcXVpcG1lbnRcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uLW1lYXN1cmUnLFxyXG4gICAgICAgICAgICAgICAgdGhpcy5jb25maWcubXlfY29uZmlnLmljb25fbWVhc3VyZVxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAgICAgJ2ljb24tZGF0YScsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9kYXRhXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi1vYmplY3QzZCcsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9vYmplY3QzZFxyXG4gICAgICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLk1lYXN1cmVtZW50cy5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAgICAgICBvbkFkZGVkOiBmdW5jdGlvbiAoXHJcbiAgICAgICAgICAgICAgICAgIGluZGV4OiBhbnksXHJcbiAgICAgICAgICAgICAgICAgIGl0ZW06IHsgcG9pbnRzOiBhbnkgfSxcclxuICAgICAgICAgICAgICAgICAgY29sbGVjdGlvbjogYW55XHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXHJcbiAgICAgICAgICAgICAgICAgIC8vICAgICBcIml0ZW0gYWRkZWQgdG8gdGhlIGNvbGxlY3Rpb25cIixcclxuICAgICAgICAgICAgICAgICAgLy8gICAgIGluZGV4LFxyXG4gICAgICAgICAgICAgICAgICAvLyAgICAgaXRlbSxcclxuICAgICAgICAgICAgICAgICAgLy8gKTtcclxuICAgICAgICAgICAgICAgICAgLy8gdGhpcy5tZWFzdXJlbWVudHNbaW5kZXhdID0gaXRlbTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5sYXN0TWVhc3VyZSA9IGl0ZW0ucG9pbnRzO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gKGNvbGxlY3Rpb246IGFueSkge1xyXG4gICAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZygndGhlIGVudGlyZSB1cC10by1kYXRlIGNvbGxlY3Rpb24nLCBjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5nZXREaXN0YW5jZUZvckxhc3RNZWFzdXJlbWVudCgpO1xyXG4gICAgICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLk1lYXN1cmVtZW50cy5tb2RlLnN1YnNjcmliZShcclxuICAgICAgICAgICAgICAgIGZ1bmN0aW9uIChtZWFzdXJlbWVudE1vZGVTdGF0ZTogeyBhY3RpdmU6IGFueSB9KSB7XHJcbiAgICAgICAgICAgICAgICAgIC8vIG1lYXN1cmVtZW50IG1vZGUgc3RhdGUgaGFzIGNoYW5nZWRcclxuICAgICAgICAgICAgICAgICAgdGhpcy5pc01lYXN1cmVNb2RlT24gPSBtZWFzdXJlbWVudE1vZGVTdGF0ZS5hY3RpdmU7XHJcbiAgICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdJcyBtZWFzdXJlbWVudCBtb2RlIGN1cnJlbnRseSBhY3RpdmU/ICcsIG1lYXN1cmVtZW50TW9kZVN0YXRlLmFjdGl2ZSk7XHJcbiAgICAgICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNwTW9kdWxlLk1VU0VVTTpcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbi1kYXRhJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX2RhdGFcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICBjYXNlIFNwTW9kdWxlLkhPVEVMOlxyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uX3Jvb21fYXZhaWxhYmxlJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fYXZhaWxhYmxlXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbl9yb29tX3VuYXZhaWxhYmxlJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fdW5hdmFpbGFibGVcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIHRoaXMuc2RrLkFzc2V0LnJlZ2lzdGVyVGV4dHVyZShcclxuICAgICAgICAgICAgICAgICdpY29uX3Jvb21fY2hvc2VuJyxcclxuICAgICAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Jvb21fY2hvc2VuXHJcbiAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoXHJcbiAgICAgICAgICAgICAgICAnaWNvbl9yb29tX3ZpZXdlZCcsXHJcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmZpZy5teV9jb25maWcuaWNvbl9yb29tX3ZpZXdlZFxyXG4gICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgdGhpcy5zZGsuQXNzZXQucmVnaXN0ZXJUZXh0dXJlKFxyXG4gICAgICAgICAgICAnaWNvbi1wb3NpdGlvbicsXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlnLm15X2NvbmZpZy5pY29uX3Bvc2l0aW9uXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIEN1cnJlbnQgUm9vbSAodXNlZCBmb3IgZ2V0dGluZyBib3VuZGluZyBib3ggYW5kIGV2ZW50dWFsbHkgbGF6eSBsb2FkIG1hdHRlcnRhZyBvciBvYmplY3QzRCBpbnNpZGUgY3VycmVudCBSb29tKVxyXG4gICAgICAgICAgdGhpcy5zZGsuUm9vbS5jdXJyZW50LnN1YnNjcmliZSgoY3VycmVudFJvb20pID0+IHtcclxuICAgICAgICAgICAgY29uc29sZS5sb2coYGhlbGxvIGN1cnJlbnQgUm9vbSAke0pTT04uc3RyaW5naWZ5KGN1cnJlbnRSb29tKX1gKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIDNEIHBvc2l0aW9uJ3MgcG9pbnRlclxyXG4gICAgICAgICAgdGhpcy5zZGsuUG9pbnRlci5pbnRlcnNlY3Rpb24uc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAoaW50ZXJzZWN0aW9uOiBhbnkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvc2VNYXR0ZXJwb3J0ID0gaW50ZXJzZWN0aW9uO1xyXG4gICAgICAgICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQudGltZSA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xyXG4gICAgICAgICAgICAgIGlmICghdGhpcy5vbGRQb3NlTWF0dGVycG9ydFBvc2l0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb24gPSB7XHJcbiAgICAgICAgICAgICAgICAgIHg6IDAsXHJcbiAgICAgICAgICAgICAgICAgIHk6IDAsXHJcbiAgICAgICAgICAgICAgICAgIHo6IDAsXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgdGhpcy5pbnRlcmFjdGlvbk1vZGUgIT09IFZpZXdlckludGVyYWN0aW9ucy5ERUZBVUxUICYmXHJcbiAgICAgICAgICAgICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93XHJcbiAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBmb2xsb3cgdGhlIHBvaW50ZXIgYW5kIGNoYW5nZXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsYXN0IHRhZ1xyXG4gICAgICAgICAgICAgICAgLy8gKHdlIGFyZSBhYm91dCB0byB2YWxpZGF0ZSwgYnV0IGl0IGV4aXN0cyBpbiBzZGsgYWxyZWFkeSlcclxuICAgICAgICAgICAgICAgIHRoaXMuZW5hYmxlX2ZvbGxvd2luZ190YWcodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIGlmICghIXRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24gJiYgISF0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uLnN0eWxlICYmXHJcbiAgICAgICAgICAgICAgICAoZG9jdW1lbnQuVVJMLmluZGV4T2YoJ2h0dHBzOi8vZGV2LnNtYXJ0ZXJwbGFuLmlvJykgIT09IC0xIHx8IGRvY3VtZW50LmxvY2F0aW9uLmhyZWYuaW5kZXhPZignbG9jYWxob3N0JykgIT09IC0xKSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbi5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJzb3JQb3NpdGlvbkJ1dHRvbkRpc3BsYXllZCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vQ2FtZXJhIG1vZGVcclxuICAgICAgICAgIHRoaXMuc2RrLk1vZGUuY3VycmVudC5zdWJzY3JpYmUoKG1vZGUpID0+IHtcclxuICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICBzd2l0Y2ggKG1vZGUpIHtcclxuICAgICAgICAgICAgICBjYXNlICdtb2RlLmRvbGxob3VzZSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5ET0xMSE9VU0U7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICdtb2RlLmZsb29ycGxhbic6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5GTE9PUlBMQU47XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICdtb2RlLmluc2lkZSc6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5JTlNJREU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICBjYXNlICdtb2RlLnRyYW5zaXRpb25pbmcnOlxyXG4gICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Q2FtZXJhTW9kZSA9IENhbWVyYU1vZGUuVFJBTlNJVElPTklORztcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFNb2RlID0gQ2FtZXJhTW9kZS5PVVRTSURFO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMub25DYW1lcmFNb2RlQ2hhbmdlZC5uZXh0KHRoaXMuY3VycmVudENhbWVyYU1vZGUpO1xyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gQ2FtZXJhJ3Mgdmlld3BvaW50XHJcbiAgICAgICAgICB0aGlzLnNkay5DYW1lcmEucG9zZS5zdWJzY3JpYmUoXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIHN1YnNjcihwb3NlOiBhbnkpIHtcclxuICAgICAgICAgICAgICB0aGlzLnBvc2VDYW1lcmEgPSBwb3NlO1xyXG5cclxuICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRDYW1lcmFQb3NlLm5leHQocG9zZSk7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0N1cnJlbnQgcG9zaXRpb24gaXMgJywgcG9zZS5wb3NpdGlvbik7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1JvdGF0aW9uIGFuZ2xlIGlzICcsIHBvc2Uucm90YXRpb24pO1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiU3dlZXAgVVVJRCBpc1wiLCBwb3NlLnN3ZWVwKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIC8vIHN1YnNjcmliZSB0byBzd2VlcHNcclxuICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gc3Vic2NyKGNvbGxlY3Rpb246IHt9KSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJTd2VlcCBjb2xsZWN0aW9uIHVwZGF0ZWRcIik7XHJcbiAgICAgICAgICAgICAgdGhpcy5zd2VlcHMgPSBPYmplY3Qua2V5cyhjb2xsZWN0aW9uKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpLFxyXG4gICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgLy8gc3Vic2NyaWJlIHRvIGN1cnJlbnQgc3dlZXBcclxuICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLmN1cnJlbnQuc3Vic2NyaWJlKFxyXG4gICAgICAgICAgICBmdW5jdGlvbiBzdWJzY3IoY3VycmVudFN3ZWVwOiB7IHNpZDogc3RyaW5nIH0pIHtcclxuICAgICAgICAgICAgICAvLyBDaGFuZ2UgdG8gdGhlIGN1cnJlbnQgc3dlZXAgaGFzIG9jY3VycmVkLlxyXG4gICAgICAgICAgICAgIGlmIChjdXJyZW50U3dlZXAuc2lkID09PSAnJykge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ05vdCBjdXJyZW50bHkgc3RhdGlvbmVkIGF0IGEgc3dlZXAgcG9zaXRpb24nKTtcclxuICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coXCJlbW1pdGluZyBzd2VlcFwiLCBjdXJyZW50U3dlZXAuc2lkKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudFN3ZWVwLm5leHQoY3VycmVudFN3ZWVwLnNpZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgLy8gU3Vic2NyaWJlIHRvIEZsb29yIGRhdGFcclxuICAgICAgICAgIHRoaXMuc2RrLkZsb29yLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gdXBkKHRoaXM6IGFueSwgY29sbGVjdGlvbjogYW55KSB7XHJcbiAgICAgICAgICAgICAgdGhpcy5mbG9vcnMgPSBPYmplY3QudmFsdWVzKGNvbGxlY3Rpb24pO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcyksXHJcbiAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAvLyBIYW5kbGVyIGfDqW7DqXJpcXVlIHBvdXIgbGVzIHPDqWxlY3Rpb25zIGRlIHRhZ3NcclxuICAgICAgICAgIGNvbnN0IGhhbmRsZVRhZ1NlbGVjdGlvbiA9IGFzeW5jIChzaWQ6IHN0cmluZywgc291cmNlOiBzdHJpbmcsIGV2dD86IGFueSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZyhgW01hdHRlcnBvcnRTZXJ2aWNlXSBoYW5kbGVUYWdTZWxlY3Rpb24gZnJvbSAke3NvdXJjZX0gZm9yIHNpZDogJHtzaWR9YCwgeyBldnQgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8vIEV4w6ljdXRpb24gZGUgbCdhY3Rpb24gcGVyc29ubmFsaXPDqWUgKG91dmVydHVyZSBkdSBwYW5uZWF1IGRlIGTDqXRhaWwgdmlhIG5hdmlnYXRpb24pXHJcbiAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChzaWQpO1xyXG4gICAgICAgICAgICAgIGlmICghbWF0dGVydGFnRGF0YSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCdubyBtYXR0ZXJ0YWdEYXRhIHRvIGRpc3BsYXknLCBzaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBjb25zdCB1cmwgPSB0YWdTZXJ2aWNlLmdldFVybEZvclNlZURldGFpbHMoXHJcbiAgICAgICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldE9iamVjdCgpLFxyXG4gICAgICAgICAgICAgICAgbWF0dGVydGFnRGF0YS5nZXRUeXBlKClcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgIGlmICh1cmwgIT09ICcnKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtNYXR0ZXJwb3J0U2VydmljZV0gTmF2aWdhdGluZyB0byBkZXRhaWwgVVJMOiAke3VybH1gKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eVNlcnZpY2UuZGV0YWlsU2hvd2luZy5uZXh0KHRydWUpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IHtcclxuICAgICAgICAgICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW3VybF0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBzaG93IGRldGFpbHMgZm9yIHRhZycsIGVycm9yKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgLy8gRm9uY3Rpb24gcG91ciBkw6lzYWN0aXZlciBsZXMgYWN0aW9ucyBuYXRpdmVzIHN1ciB1biB0YWcgKFNESyB2MylcclxuICAgICAgICAgIGNvbnN0IGRpc2FibGVOYXRpdmVBY3Rpb25zID0gKHNpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmICghdGhpcy5zZGspIHJldHVybjtcclxuICAgICAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgICBpZiAodGhpcy5zZGsuVGFnICYmIHRoaXMuc2RrLlRhZy5hbGxvd0FjdGlvbikge1xyXG4gICAgICAgICAgICAgICAgLy8gb3BlbmluZzogZmFsc2UgZMOpc2FjdGl2ZSBsZSBiaWxsYm9hcmQgbmF0aWZcclxuICAgICAgICAgICAgICAgIC8vIG5hdmlnYXRpbmc6IGZhbHNlIGTDqXNhY3RpdmUgbGUgZMOpcGxhY2VtZW50IGRlIGxhIGNhbcOpcmEgdmVycyBsZSB0YWdcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLlRhZy5hbGxvd0FjdGlvbihzaWQsIHsgb3BlbmluZzogZmFsc2UsIG5hdmlnYXRpbmc6IHRydWUsIGRvY2tpbmc6IGZhbHNlIH0pO1xyXG4gICAgICAgICAgICAgICAgLyppZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coYFtNYXR0ZXJwb3J0U2VydmljZV0gRGlzYWJsZWQgbmF0aXZlIGFjdGlvbnMgZm9yIHRhZyAke3NpZH1gKTtcclxuICAgICAgICAgICAgICAgIH0qL1xyXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZGsuTWF0dGVydGFnICYmIHRoaXMuc2RrLk1hdHRlcnRhZy5wcmV2ZW50QWN0aW9uKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBGYWxsYmFjayBhbmNpZW5uZSBBUElcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5wcmV2ZW50QWN0aW9uKHNpZCwgeyBvcGVuaW5nOiB0cnVlLCBuYXZpZ2F0aW5nOiB0cnVlIH0pO1xyXG4gICAgICAgICAgICAgICAgaWYgKGlzRGV2TW9kZSgpKSB7XHJcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbTWF0dGVycG9ydFNlcnZpY2VdIFByZXZlbnRlZCBuYXRpdmUgYWN0aW9ucyAobGVnYWN5KSBmb3IgdGFnICR7c2lkfWApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBbTWF0dGVycG9ydFNlcnZpY2VdIEVycm9yIGRpc2FibGluZyBhY3Rpb25zIGZvciAke3NpZH1gLCBlKTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgLy8gQXR0ZW5kcmUgcXVlIGwnYXBwbGljYXRpb24gc29pdCBlbiBwaGFzZSBQTEFZSU5HXHJcbiAgICAgICAgICBpZiAodGhpcy5zZGsuQXBwICYmIHRoaXMuc2RrLkFwcC5zdGF0ZSkge1xyXG4gICAgICAgICAgICBpZiAoaXNEZXZNb2RlKCkpIHtcclxuICAgICAgICAgICAgICBjb25zb2xlLmxvZygnW01hdHRlcnBvcnRTZXJ2aWNlXSBXYWl0aW5nIGZvciBBcHAuUGhhc2UuUExBWUlORy4uLicpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHRoaXMuc2RrLkFwcC5zdGF0ZS53YWl0VW50aWwoKHM6IGFueSkgPT4gcy5waGFzZSA9PT0gdGhpcy5zZGsuQXBwLlBoYXNlLlBMQVlJTkcpLnRoZW4oKCkgPT4ge1xyXG4gICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ1tNYXR0ZXJwb3J0U2VydmljZV0gQXBwIGlzIFBMQVlJTkcuJyk7XHJcbiAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAvLyAxLiBEw6lzYWN0aXZlciBsZXMgYWN0aW9ucyBuYXRpdmVzIHBvdXIgdG91cyBsZXMgdGFncyBleGlzdGFudHMgZXQgZnV0dXJzXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2RrLlRhZyAmJiB0aGlzLnNkay5UYWcuZGF0YSkge1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZGsuVGFnLmRhdGEuc3Vic2NyaWJlKHtcclxuICAgICAgICAgICAgICAgICAgb25BZGRlZDogKHNpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZU5hdGl2ZUFjdGlvbnMoc2lkKTtcclxuICAgICAgICAgICAgICAgICAgfSxcclxuICAgICAgICAgICAgICAgICAgb25VcGRhdGVkOiAoc2lkOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBkaXNhYmxlTmF0aXZlQWN0aW9ucyhzaWQpO1xyXG4gICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICBvbkNvbGxlY3Rpb25VcGRhdGVkOiAoY29sbGVjdGlvbjogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXMoY29sbGVjdGlvbikuZm9yRWFjaChzaWQgPT4gZGlzYWJsZU5hdGl2ZUFjdGlvbnMoc2lkKSk7XHJcbiAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgLy8gMi4gw4ljb3V0ZXIgbGVzIHPDqWxlY3Rpb25zIHZpYSBsJ29ic2VydmFibGUgb3BlblRhZ3MgKE3DqXRob2RlIG1vZGVybmUpXHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuc2RrLlRhZyAmJiB0aGlzLnNkay5UYWcub3BlblRhZ3MpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuc2RrLlRhZy5vcGVuVGFncy5zdWJzY3JpYmUoe1xyXG4gICAgICAgICAgICAgICAgICBvbkNoYW5nZWQ6IChuZXdTdGF0ZTogYW55KSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKG5ld1N0YXRlLnNlbGVjdGVkICYmIG5ld1N0YXRlLnNlbGVjdGVkLnNpemUgPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaWQgPSBBcnJheS5mcm9tKG5ld1N0YXRlLnNlbGVjdGVkKVswXSBhcyBzdHJpbmc7XHJcbiAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVUYWdTZWxlY3Rpb24oc2lkLCAnVGFnLm9wZW5UYWdzLnNlbGVjdGVkJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIC8vIEZhbGxiYWNrIHBvdXIgbCfDqXbDqW5lbWVudCBnbG9iYWwgdGFnLmNsaWNrXHJcbiAgICAgICAgICB0aGlzLnNkay5vbigndGFnLmNsaWNrJywgKHNpZDogc3RyaW5nKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xyXG4gICAgICAgICAgICAgIGNvbnNvbGUubG9nKGBbTWF0dGVycG9ydFNlcnZpY2VdIHNkay5vbigndGFnLmNsaWNrJykgcmVjZWl2ZWQgZm9yIHNpZDogJHtzaWR9YCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaGFuZGxlVGFnU2VsZWN0aW9uKHNpZCwgJ2dsb2JhbC50YWcuY2xpY2snKTtcclxuICAgICAgICAgICAgLy8gT24gcydhc3N1cmUgcXUnaWwgZXN0IGJpZW4gZMOpc2FjdGl2w6kgbcOqbWUgc2kgb24gYSByYXTDqSBsJ8OpdsOobmVtZW50IGQnYWpvdXRcclxuICAgICAgICAgICAgZGlzYWJsZU5hdGl2ZUFjdGlvbnMoc2lkKTtcclxuICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgIC8vIFBvaW50ZXIgdHJpY2tcclxuICAgICAgICAgIC8vIENyZWF0ZSBhIGRpdiB0aGF0IHdpbGwgYXBwZWFyIHdoZW4gdGhlIGN1cnNvciBpcyBzdGlsbFxyXG4gICAgICAgICAgLy8gSXQgd2lsbCBpbnRlcmNlcHQgdGhlIGNsaWNrIG9mIHRoZSBtb3VzZSBiZWZvcmUgaXQgdHJpZ2VycmluZyB0aGUgTWF0dGVycG9ydCdzIHRvdXIgbmF2aWdhdGlvblxyXG4gICAgICAgICAgdGhpcy50aW1lclBvaW50ZXIgPSBzZXRJbnRlcnZhbChcclxuICAgICAgICAgICAgdGhpcy51cGRhdGVQb2ludGVyVHJpY2suYmluZCh0aGlzKSxcclxuICAgICAgICAgICAgNTBcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgLyoqXHJcbiAgICAgICAgICAgKiBUcmFuc2l0aW9uc1xyXG4gICAgICAgICAgICovXHJcbiAgICAgICAgICB0aGlzLnNkay5vbihcclxuICAgICAgICAgICAgJ3ZpZXdtb2RlLmNoYW5nZXN0YXJ0JyxcclxuICAgICAgICAgICAgZnVuY3Rpb24gKHRvLCBmcm9tKSB7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ1N0YXJ0aW5nIHRvIG1vdmUgdG8gJyArIHRvICsgJyBmcm9tICcgKyBmcm9tKTtcclxuICAgICAgICAgICAgICB0aGlzLmluVHJhbnNpdGlvbk1vZGUgPSB0cnVlO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgdGhpcy5zZGsub24oXHJcbiAgICAgICAgICAgICd2aWV3bW9kZS5jaGFuZ2VlbmQnLFxyXG4gICAgICAgICAgICBmdW5jdGlvbiAob2xkTW9kZSwgbmV3TW9kZSkge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdFbmRlZCB0byBtb3ZlIHRvICcgKyBuZXdNb2RlICsgJyBmcm9tICcgKyBvbGRNb2RlKTtcclxuICAgICAgICAgICAgICBpZiAobmV3TW9kZSAhPT0gJ21vZGUudHJhbnNpdGlvbmluZycpIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uTW9kZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG5cclxuICAgICAgICAgIHRoaXMuc2RrLm9uKFxyXG4gICAgICAgICAgICB0aGlzLnNkay5Td2VlcC5FdmVudC5FTlRFUixcclxuICAgICAgICAgICAgZnVuY3Rpb24gKG9sZFN3ZWVwLCBuZXdTd2VlcCkge1xyXG4gICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKCdMZWF2aW5nIHN3ZWVwICcgKyBvbGRTd2VlcCk7XHJcbiAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2coJ0VudGVyaW5nIHN3ZWVwICcgKyBuZXdTd2VlcCk7XHJcbiAgICAgICAgICAgICAgdGhpcy5pblRyYW5zaXRpb25Td2VlcCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgIHRoaXMuZGlzcGxheUF6aW11dGFsQ3Jvd24oKTtcclxuICAgICAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhpcy5zZGsub24oXHJcbiAgICAgICAgICAgIHRoaXMuc2RrLlN3ZWVwLkV2ZW50LkVYSVQsXHJcbiAgICAgICAgICAgIGZ1bmN0aW9uIChmcm9tU3dlZXAsIHRvU3dlZXApIHtcclxuICAgICAgICAgICAgICAvLyAgIGNvbnNvbGUubG9nKCdMZWF2aW5nIHN3ZWVwICcgKyBmcm9tU3dlZXApO1xyXG4gICAgICAgICAgICAgIC8vICAgY29uc29sZS5sb2coJ1RyYW5zaXRpb25pbmcgdG8gc3dlZXAgJyArIHRvU3dlZXApO1xyXG4gICAgICAgICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSB0cnVlO1xyXG4gICAgICAgICAgICB9LmJpbmQodGhpcylcclxuICAgICAgICAgICk7XHJcblxyXG4gICAgICAgICAgLy8gVE9ETzogZ2V0IHNjZW5lIHdpdGggZ2V0dGVyIGluc3RlYWQhXHJcbiAgICAgICAgICBjb25zdCBbc2NlbmVPYmplY3RdID0gYXdhaXQgdGhpcy5zZGsuU2NlbmUuY3JlYXRlT2JqZWN0cygxKTtcclxuICAgICAgICAgIGNvbnN0IG5vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcbiAgICAgICAgICBub2RlLnN0YXJ0KCk7XHJcbiAgICAgICAgICB0aGlzLnRocmVlSlNTY2VuZSA9IG5vZGUub2JqM0QucGFyZW50O1xyXG5cclxuICAgICAgICAgIC8vIGF3YWl0IHRoaXMuc2RrLlNjZW5lLmNvbmZpZ3VyZSgocmVuZGVyZXI6IGFueSwgdGhyZWU6IGFueSkgPT4ge1xyXG4gICAgICAgICAgLy8gICByZW5kZXJlci5waHlzaWNhbGx5Q29ycmVjdExpZ2h0cyA9IHRydWU7XHJcbiAgICAgICAgICAvLyAgIHJlbmRlcmVyLm91dHB1dEVuY29kaW5nID0gdGhyZWUuc1JHQkVuY29kaW5nO1xyXG4gICAgICAgICAgLy8gICByZW5kZXJlci5zaGFkb3dNYXAuZW5hYmxlZCA9IHRydWU7XHJcbiAgICAgICAgICAvLyAgIHJlbmRlcmVyLnNoYWRvd01hcC5iaWFzID0gMC4wMDAxO1xyXG4gICAgICAgICAgLy8gICByZW5kZXJlci5zaGFkb3dNYXAudHlwZSA9IHRocmVlLlBDRlNvZnRTaGFkb3dNYXA7XHJcbiAgICAgICAgICAvLyB9KTtcclxuXHJcblxyXG4gICAgICAgICAgLy8gVE9ETzogd2FpdCBmb3IgTVAgdGlja2V0IHJlc29sdXRpb24gYmVmb3JlIGRlY29tbWVudCB0aGVzZSFcclxuICAgICAgICAgIC8vIFdhaXQgdW50aWwgU2hvd2Nhc2UgaXMgYWN0dWFsbHkgcGxheWluZy4uLi5cclxuICAgICAgICAgIC8vIHRoaXMuc2RrLlRhZy5kYXRhLnN1YnNjcmliZSh7XHJcbiAgICAgICAgICAvLyAgIG9uQWRkZWQ6IGFzeW5jIGZ1bmN0aW9uIChpbmRleCwgaXRlbSwgY29sbGVjdGlvbikge1xyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vICAgICBsZXQgdGhpc09wYWNpdHkgPSAwLjI7XHJcbiAgICAgICAgICAvLyAgICAgdGhpcy5zZGsuVGFnLmVkaXRPcGFjaXR5KGluZGV4LCB0aGlzT3BhY2l0eSk7XHJcbiAgICAgICAgICAvL1xyXG4gICAgICAgICAgLy8gICAgIGxldCBzb3VyY2UgPSBudWxsO1xyXG4gICAgICAgICAgLy8gICAgIHRyeSB7XHJcbiAgICAgICAgICAvLyAgICAgICBzb3VyY2UgPSBhd2FpdCBQcm9taXNlLmFsbChbXHJcbiAgICAgICAgICAvLyAgICAgICAgIHRoaXMuc2RrLlNlbnNvci5jcmVhdGVTb3VyY2UodGhpcy5zZGsuU2Vuc29yLlNvdXJjZVR5cGUuU1BIRVJFLCB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgb3JpZ2luOiBpdGVtLmFuY2hvclBvc2l0aW9uLFxyXG4gICAgICAgICAgLy8gICAgICAgICAgIHJhZGl1czogTnVtYmVyKDMpLFxyXG4gICAgICAgICAgLy8gICAgICAgICAgIHVzZXJEYXRhOiB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICBpZDogaW5kZXggKyAnLXNwaGVyZS1zb3VyY2UnLFxyXG4gICAgICAgICAgLy8gICAgICAgICAgIH0sXHJcbiAgICAgICAgICAvLyAgICAgICAgIH0pXHJcbiAgICAgICAgICAvLyAgICAgICBdKTtcclxuICAgICAgICAgIC8vICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICAvLyAgICAgICBjb25zb2xlLmxvZygnY291bGQgbm90IGNyZWF0ZSBTcGhlcmUgc2Vuc29yJylcclxuICAgICAgICAgIC8vICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy8gICAgIGlmICghc291cmNlKSB7XHJcbiAgICAgICAgICAvLyAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAvLyAgICAgfVxyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vICAgICBsZXQgc2Vuc29yID0gbnVsbDtcclxuICAgICAgICAgIC8vICAgICB0cnkge1xyXG4gICAgICAgICAgLy8gICAgICAgc2Vuc29yID0gYXdhaXQgdGhpcy5zZGsuU2Vuc29yLmNyZWF0ZVNlbnNvcih0aGlzLnNkay5TZW5zb3IuU2Vuc29yVHlwZS5DQU1FUkEpO1xyXG4gICAgICAgICAgLy8gICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgIC8vICAgICAgIGNvbnNvbGUubG9nKCdjb3VsZCBub3QgY3JlYXRlIENhbWVyYSBzZW5zb3InKVxyXG4gICAgICAgICAgLy8gICAgICAgY29uc29sZS5lcnJvcihlKTtcclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvLyAgICAgaWYgKCFzZW5zb3IpIHtcclxuICAgICAgICAgIC8vICAgICAgIHJldHVybjtcclxuICAgICAgICAgIC8vICAgICB9XHJcbiAgICAgICAgICAvL1xyXG4gICAgICAgICAgLy8gICAgIHNlbnNvci5hZGRTb3VyY2UoLi4uc291cmNlKTtcclxuICAgICAgICAgIC8vICAgICBzZW5zb3IucmVhZGluZ3Muc3Vic2NyaWJlKHtcclxuICAgICAgICAgIC8vICAgICAgIG9uVXBkYXRlZChzb3VyY2UsIHJlYWRpbmcpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgY29uc29sZS5sb2codGhpc09wYWNpdHkpO1xyXG4gICAgICAgICAgLy8gICAgICAgICBsZXQgb2xkT3BhY2l0eSA9IHRoaXNPcGFjaXR5O1xyXG4gICAgICAgICAgLy8gICAgICAgICBpZiAocmVhZGluZy5pblJhbmdlKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgdGhpc09wYWNpdHkgPSAxO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIGNvbnNvbGUubG9nKGluZGV4ICsgJyBpcyBpblJhbmdlJyk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAocmVhZGluZy5pblZpZXcpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICBjb25zb2xlLmxvZyhpbmRleCArICcgaXMgaW5WaWV3IGJ1dCBub3QgaW5SYW5nZScpO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXNPcGFjaXR5ID0gMC41O1xyXG4gICAgICAgICAgLy8gICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIHRoaXNPcGFjaXR5ID0gMC4yO1xyXG4gICAgICAgICAgLy8gICAgICAgICAgIGNvbnNvbGUubG9nKGluZGV4ICsgJyBpcyBub3QgaW5WaWV3IG9yIGluUmFuZ2UnKTtcclxuICAgICAgICAgIC8vICAgICAgICAgfVxyXG4gICAgICAgICAgLy9cclxuICAgICAgICAgIC8vICAgICAgICAgdGhpcy5zZGsuVGFnLmVkaXRPcGFjaXR5KGluZGV4LCB0aGlzT3BhY2l0eSk7XHJcbiAgICAgICAgICAvLyAgICAgICAgIC8qXHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICBsZXQgaW5jID0gMC4wMTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIGlmIChvbGRPcGFjaXR5ID4gdGhpc09wYWNpdHkpIHtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgaW5jID0gLTAuMDE7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAvL1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgZm9yKHZhciBpID0gb2xkT3BhY2l0eTsgaSAhPSB0aGlzT3BhY2l0eTsgaT1pK2luYykge1xyXG4gICAgICAgICAgLy8gICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICAgbXBTZGsuVGFnLmVkaXRPcGFjaXR5KGluZGV4LCBpKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRGVsYXknLCBpKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgICAgICB9LDEwKTtcclxuICAgICAgICAgIC8vICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICAgICAgKi9cclxuICAgICAgICAgIC8vICAgICAgIH1cclxuICAgICAgICAgIC8vICAgICB9KTtcclxuICAgICAgICAgIC8vICAgICAvL3NlbnNvci5zaG93RGVidWcodHJ1ZSk7XHJcbiAgICAgICAgICAvLyAgIH0uYmluZCh0aGlzKSxcclxuICAgICAgICAgIC8vICAgb25Db2xsZWN0aW9uVXBkYXRlZDogZnVuY3Rpb24gKGNvbGxlY3Rpb24pIHtcclxuICAgICAgICAgIC8vICAgICBjb25zb2xlLmxvZygnQ29sbGVjdGlvbiByZWNlaXZlZC4gVGhlcmUgYXJlICcsIE9iamVjdC5rZXlzKGNvbGxlY3Rpb24pLmxlbmd0aCwgJyBUYWdzIGluIHRoZSBjb2xsZWN0aW9uJywgY29sbGVjdGlvbik7XHJcbiAgICAgICAgICAvLyAgIH1cclxuICAgICAgICAgIC8vIH0pO1xyXG5cclxuICAgICAgICAgIHJlc29sdmUodHJ1ZSk7XHJcbiAgICAgICAgfS5iaW5kKHRoaXMpXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG5cclxuICBzZXRMaWdodGluZ09mZigpIHtcclxuICAgIHRoaXMubm9MaWdodEZvck9iamVjdHMgPSB0cnVlO1xyXG4gIH1cclxuXHJcbiAgcG9pbnRUb1N0cmluZyhwb2ludDogeyB4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyIH0pOiBzdHJpbmcge1xyXG4gICAgdmFyIHggPSBwb2ludC54LnRvRml4ZWQoMyk7XHJcbiAgICB2YXIgeSA9IHBvaW50LnkudG9GaXhlZCgzKTtcclxuICAgIHZhciB6ID0gcG9pbnQuei50b0ZpeGVkKDMpO1xyXG5cclxuICAgIHJldHVybiBgeyB4OiAke3h9LCB5OiAke3l9LCB6OiAke3p9IH1gO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tIE1lYXN1cmVtZW50cyByZWxhdGVkIC0tLS0tLS0tLS1cclxuICAvL1xyXG4gIC8qKlxyXG4gICAqIENhbGxiYWNrIGFmdGVyIG1lYXN1cmVtZW50IGlzIHBlcmZvcm1lZFxyXG4gICAqL1xyXG4gIGdldERpc3RhbmNlRm9yTGFzdE1lYXN1cmVtZW50KCkge1xyXG4gICAgaWYgKHRoaXMubGFzdE1lYXN1cmUubGVuZ3RoID4gMCkge1xyXG4gICAgICBjb25zdCBudW1iZXJQb2ludHMgPSB0aGlzLmxhc3RNZWFzdXJlLmxlbmd0aDtcclxuICAgICAgdGhpcy5kaXN0YW5jZXNMYXN0TWVhc3VyZSA9IFtdO1xyXG4gICAgICBmb3IgKGxldCBpbmRleCA9IDE7IGluZGV4IDwgbnVtYmVyUG9pbnRzOyBpbmRleCArPSAxKSB7XHJcbiAgICAgICAgY29uc3QgZGlzdGFuY2UgPSBnZXREaXN0YW5jZUJldHdlZW5Ud29Qb2ludHMoXHJcbiAgICAgICAgICB0aGlzLmxhc3RNZWFzdXJlW2luZGV4IC0gMV0sXHJcbiAgICAgICAgICB0aGlzLmxhc3RNZWFzdXJlW2luZGV4XVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5kaXN0YW5jZXNMYXN0TWVhc3VyZS5wdXNoKGRpc3RhbmNlKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRha2VTY3JlZW5TaG90KCkudGhlbigocmVzKSA9PiB7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9tZWFzdXJlbWVudGBdKTtcclxuICAgICAgfSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBnZXRMYXN0RGlzdGFuY2VzKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuZGlzdGFuY2VzTGFzdE1lYXN1cmU7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBUYWtlcyBzY3JlZW5zaG90IGFuZCBzYXZlcyBiYXNlNjQgaW4gbGFzdFNjcmVlbnNob3RVcmlcclxuICAgKiBAcmV0dXJucyBQcm9taXNlXHJcbiAgICovXHJcbiAgdGFrZVNjcmVlblNob3QoKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIHJldHVybiB0aGlzLnNkay5SZW5kZXJlci50YWtlU2NyZWVuU2hvdChcclxuICAgICAgdGhpcy5yZXNvbHV0aW9uLFxyXG4gICAgICB0aGlzLnZpc2liaWxpdHlcclxuICAgICkudGhlbihcclxuICAgICAgZnVuY3Rpb24gKHNjcmVlblNob3RVcmk6IGFueSkge1xyXG4gICAgICAgIC8vIGJhc2U2NCBzdHJpbmdcclxuICAgICAgICB0aGlzLmxhc3RTY3JlZW5zaG90VXJpID0gc2NyZWVuU2hvdFVyaTtcclxuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7XHJcbiAgICAgIH0uYmluZCh0aGlzKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIGdldFNjcmVlblNob3RVcmkoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5sYXN0U2NyZWVuc2hvdFVyaTtcclxuICB9XHJcblxyXG4gIGdldExhc3RNZWFzdXJlbWVudCgpOiBPYmplY3Qge1xyXG4gICAgY29uc3QgZGF0YSA9IHtcclxuICAgICAgbWVhc3VyZTogdGhpcy5sYXN0TWVhc3VyZSxcclxuICAgICAgc3dlZXA6IHRoaXMucG9zZUNhbWVyYS5zd2VlcCxcclxuICAgIH07XHJcbiAgICByZXR1cm4gZGF0YTtcclxuICB9XHJcblxyXG4gIC8vXHJcbiAgLy8gLS0tLS0tLS0tLSBVdGlscyAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICAvKipcclxuICAgKiBTdHlsaW5nIG9mIHBvaW50ZXJcclxuICAgKi9cclxuICB1cGRhdGVQb2ludGVyVHJpY2soKSB7XHJcbiAgICBpZiAoXHJcbiAgICAgIHRoaXMuaW50ZXJhY3Rpb25Nb2RlICE9PSBWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCAmJlxyXG4gICAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ICYmXHJcbiAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQgJiZcclxuICAgICAgdGhpcy5nZXREaXN0UG9zaXRpb24oXHJcbiAgICAgICAgdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbixcclxuICAgICAgICB0aGlzLm9sZFBvc2VNYXR0ZXJwb3J0UG9zaXRpb25cclxuICAgICAgKSA+IDI1XHJcbiAgICApIHtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XHJcblxyXG4gICAgICBjb25zdCBzaXplID0ge1xyXG4gICAgICAgIHc6IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoLFxyXG4gICAgICAgIGg6IHRoaXMuY29udGFpbmVyLmNsaWVudEhlaWdodCxcclxuICAgICAgfTtcclxuICAgICAgY29uc3QgY29vcmRzID0gdGhpcy5zZGsuQ29udmVyc2lvbi53b3JsZFRvU2NyZWVuKFxyXG4gICAgICAgIHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24sXHJcbiAgICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICAgIHNpemVcclxuICAgICAgKTtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmxlZnQgPSBgJHtjb29yZHMueCAqIE1hdGguc2lnbihjb29yZHMueCkgLSAyNVxyXG4gICAgICAgIH1weGA7XHJcbiAgICAgIHRoaXMucG9pbnRlckJ1dHRvbi5zdHlsZS50b3AgPSBgJHtjb29yZHMueSAqIE1hdGguc2lnbihjb29yZHMueCkgLSAyNX1weGA7XHJcbiAgICAgIHRoaXMub2xkUG9zZU1hdHRlcnBvcnRQb3NpdGlvbiA9IHtcclxuICAgICAgICAuLi50aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLFxyXG4gICAgICB9O1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgdGhpcy5wb2ludGVyQnV0dG9uLnN0eWxlLmRpc3BsYXkgPSAnYmxvY2snO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUmVhbHRpbWUgbWF0dGVydGFnIGZvbGxvd2luZyB0aGUgY3Vyc29yXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZyBzdHJpbmdcclxuICAgKi9cclxuICBlbmFibGVfZm9sbG93aW5nX3RhZyhtYXR0ZXJ0YWc6IHN0cmluZykge1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRQb3NpdGlvbihtYXR0ZXJ0YWcsIHtcclxuICAgICAgYW5jaG9yUG9zaXRpb246IHtcclxuICAgICAgICB4OiB0aGlzLnBvc2VNYXR0ZXJwb3J0LnBvc2l0aW9uLnggKiAxLFxyXG4gICAgICAgIHk6IHRoaXMucG9zZU1hdHRlcnBvcnQucG9zaXRpb24ueSAqIDEsXHJcbiAgICAgICAgejogdGhpcy5wb3NlTWF0dGVycG9ydC5wb3NpdGlvbi56ICogMSxcclxuICAgICAgfSxcclxuICAgICAgc3RlbVZlY3Rvcjoge1xyXG4gICAgICAgIHg6IHRoaXMucG9zZU1hdHRlcnBvcnQubm9ybWFsLnggKiAwLjMsXHJcbiAgICAgICAgeTogdGhpcy5wb3NlTWF0dGVycG9ydC5ub3JtYWwueSAqIDAuMyxcclxuICAgICAgICB6OiB0aGlzLnBvc2VNYXR0ZXJwb3J0Lm5vcm1hbC56ICogMC4zLFxyXG4gICAgICB9LFxyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXQgdGhlIGRpc3RhbmNlIGJldHd3ZWVuIHR3byAzRCBwb3NpdGlvbnNcclxuICAgKiBVc2VkIGluIG9yZGVyIHRvIHNlZSBob3cgbXVjaCB0aGUgY3Vyc29yIGhhcyBtb3ZlZCBmcm9tIHRoZSBwcmV2aW91cyBwb3NpdGlvblxyXG4gICAqIEBwYXJhbSBwb3MxXHJcbiAgICogQHBhcmFtIHBvczJcclxuICAgKi9cclxuICBnZXREaXN0UG9zaXRpb24ocG9zMTogYW55LCBwb3MyOiBhbnkpIHtcclxuICAgIGNvbnN0IHNpemUgPSB7XHJcbiAgICAgIHc6IHRoaXMuY29udGFpbmVyLmNsaWVudFdpZHRoLFxyXG4gICAgICBoOiB0aGlzLmNvbnRhaW5lci5jbGllbnRIZWlnaHQsXHJcbiAgICB9O1xyXG4gICAgY29uc3QgY29vcmRzMSA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgcG9zMSxcclxuICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICBzaXplXHJcbiAgICApO1xyXG4gICAgY29uc3QgY29vcmRzMiA9IHRoaXMuc2RrLkNvbnZlcnNpb24ud29ybGRUb1NjcmVlbihcclxuICAgICAgcG9zMixcclxuICAgICAgdGhpcy5wb3NlQ2FtZXJhLFxyXG4gICAgICBzaXplXHJcbiAgICApO1xyXG4gICAgcmV0dXJuIE1hdGguc3FydChcclxuICAgICAgKGNvb3JkczEueCAtIGNvb3JkczIueCkgKiogMiArIChjb29yZHMxLnkgLSBjb29yZHMyLnkpICoqIDJcclxuICAgICk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gTWF0dGVydGFnIHJlbGF0ZWQgLS0tLS0tLS0tLVxyXG4gIC8vXHJcbiAgLyoqXHJcbiAgICogQ3JlYXRlcyB0aGUgTWF0dGVydGFnIHRoYXQgd2lsbCBmb2xsb3cgdGhlIGN1cnNvclxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhIE1hdHRlcnRhZ0RhdGFcclxuICAgKi9cclxuICBhc3luYyBhZGRDdXJzb3JNYXR0ZXJ0YWcobWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSkge1xyXG4gICAgaWYgKCF0aGlzLnBvc2VNYXR0ZXJwb3J0KSByZXR1cm47XHJcbiAgICB0aGlzLm1hdHRlcnRhZ1RvRm9sbG93ID0gYXdhaXQgdGhpcy5hZGRNYXR0ZXJ0YWdUb1ZpZXdlcihtYXR0ZXJ0YWdEYXRhKTtcclxuICAgIGNvbnNvbGUubG9nKCdmb2xsb3dpbmcgdGhlIHRhZycsIHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpO1xyXG4gICAgdGhpcy5zZGsuVGFnLmVkaXRJY29uKHRoaXMubWF0dGVydGFnVG9Gb2xsb3csICdpY29uLXBvc2l0aW9uJyk7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkodGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdywgMSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBZGRzIE1hdHRlcnRhZyB0byB2aWV3ZXIgZm9yIGFuIGV4aXN0aW5nIG9iamVjdCB3aXRoIGNvb3JkaW5hdGVzIChpbiBtYXR0ZXJ0YWdEYXRhLnBvaSlcclxuICAgKiAocG9zaXRpb24sIGluamVjdGVkIGh0bWwsIHNldCBpY29uKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdEYXRhXHJcbiAgICogcmV0dXJucyBtYXR0ZXJ0YWdJRFxyXG4gICAqL1xyXG4gIGFzeW5jIGFkZE1hdHRlcnRhZ1RvVmlld2VyKFxyXG4gICAgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YVxyXG4gICk6IFByb21pc2U8c3RyaW5nIHwgbnVsbD4ge1xyXG4gICAgbGV0IHNpZExpc3Q7XHJcbiAgICBpZiAoIXRoaXMuc2RrKSB7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgdHJ5IHtcclxuICAgICAgc2lkTGlzdCA9IGF3YWl0IHRoaXMuc2RrLlRhZy5hZGQobWF0dGVydGFnRGF0YS5nZXREYXRhKCkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgJ1RhZyBkb2VzIG5vdCBiZWxvbmcgdG8gdGhlIHZpc2l0JyxcclxuICAgICAgICBlcnJvcixcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLmdldERhdGEoKVxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgaWYgKHNpZExpc3QpIHtcclxuICAgICAgY29uc3QgbWF0dGVydGFnSUQgPSBzaWRMaXN0WzBdO1xyXG4gICAgICAvLyBjb25zb2xlLmxvZyhcImFkZGVkIHRhZ1wiLCBtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSwgbWF0dGVydGFnSUQpO1xyXG4gICAgICB0aGlzLm1hdHRlcnRhZ0lEcy5wdXNoKG1hdHRlcnRhZ0lEKTtcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3Muc2V0KG1hdHRlcnRhZ0lELCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgcmV0dXJuIG1hdHRlcnRhZ0lEO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBBY3Rpb25zIHdoZW4gcG9zaXRpb24gb2YgbWF0dGVydGFnIGlzIHZhbGlkYXRlZCBieSBsZWZ0IGNsaWNrXHJcbiAgICovXHJcbiAgb25WYWxpZGF0ZWRNYXR0ZXJ0YWcoKSB7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuREVGQVVMVCk7XHJcbiAgICBjb25zdCBsYXN0VGFnID0gdGhpcy5nZXRMYXN0VGFnKCk7XHJcbiAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICBjb25zdCBjYWxsYmFja01vZGUgPSB0aGlzLmRpY3Rpb25uYXJ5VGFnc1xyXG4gICAgICAgIC5nZXQobGFzdFRhZylcclxuICAgICAgICAuZ2V0Q2FsbGJhY2tBY3Rpb25Nb2RlKCk7XHJcbiAgICAgIHRoaXMuY2FsbGJhY2tBZnRlck1hdHRlcnRhZ1ZhbGlkYXRpb24oY2FsbGJhY2tNb2RlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFJlZ2lzdGVycyBuZXcgaWNvbiAocGF0aCB0byBpbWFnZSkgYW5kIHNldCBpdHMgZm9yIE1hdHRlcnRhZ1xyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gaWNvblBhdGggc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgYWRkTmV3SWNvbkFuZFNldEZvclRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBpY29uUGF0aDogc3RyaW5nKSB7XHJcbiAgICBhd2FpdCB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoYGljb25fJHttYXR0ZXJ0YWdJRH1gLCBpY29uUGF0aCk7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGBpY29uXyR7bWF0dGVydGFnSUR9YCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDaGFuZ2VzIGljb24gb2YgTWF0dGVydGFnICh0aGUgaWNvbk5hbWUgc2hvdWxkIGJlIHJlZ2lzdGVyZWQgPSBvbmUgb2YgZGVmYXVsdCBvbmVzKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gaWNvbk5hbWUgc3RyaW5nXHJcbiAgICovXHJcbiAgYXN5bmMgc2V0UmVnaXN0cmVkSWNvbkZvclRhZyhtYXR0ZXJ0YWdJRDogc3RyaW5nLCBpY29uTmFtZTogc3RyaW5nKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgY29uc29sZS5sb2coXHJcbiAgICAgICAgJ2NvdWxkIG5vdCBlZGl0IEljb24gd2l0aCBuYW1lICcsXHJcbiAgICAgICAgaWNvbk5hbWUsXHJcbiAgICAgICAgJy4gSXMgaXQgcmVnaXN0ZXJlZD8nXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBTZXRzIGRlZmF1bHQgaWNvbiBmb3IgYSB0YWcgKHJlZ2lzdGVyZWQgaW4gaW5pdFNkaykgT1IgdXNlcyB0YWdJY29uIGZyb20gUE9JIChhdmFpbGFibGUgZnJvbSBNYXR0ZXJ0YWdEYXRhKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnRGF0YSBNYXR0ZXJ0YWdEYXRhXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBzZXRUYWdJY29uQW5kT3BhY2l0eShcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBtYXR0ZXJ0YWdEYXRhOiBNYXR0ZXJ0YWdEYXRhXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5TUE1vZHVsZSA9PT0gU3BNb2R1bGUuSE9URUwpIHtcclxuICAgICAgY29uc3Qgcm9vbSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgIGxldCBpY29uTmFtZSA9IGBpY29uX3Jvb21gO1xyXG4gICAgICBpZiAocm9vbS5hdmFpbGFibGUpIHtcclxuICAgICAgICBpY29uTmFtZSA9IGAke2ljb25OYW1lfV9hdmFpbGFibGVgO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGljb25OYW1lID0gYCR7aWNvbk5hbWV9X3VuYXZhaWxhYmxlYDtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdEljb24obWF0dGVydGFnSUQsIGljb25OYW1lKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3Qgc3RyaW5nVGFnVHlwZSA9IHBvaVR5cGVUb1N0cmluZyhtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSk7XHJcbiAgICBsZXQgb3BhY2l0eSA9IHRoaXMuY29uZmlnLm15X2NvbmZpZy5ERUZBVUxUX09QQUNJVFlfVEFHO1xyXG4gICAgbGV0IGljb25OYW1lID0gYGljb24tJHtzdHJpbmdUYWdUeXBlfWA7XHJcbiAgICBjb25zdCBwb2kgPSBtYXR0ZXJ0YWdEYXRhLmdldFBvaSgpO1xyXG4gICAgaWYgKHBvaSAmJiBwb2kudGFnSWNvbikge1xyXG4gICAgICBjb25zdCB0YWdJY29uID0gSlNPTi5wYXJzZShwb2kudGFnSWNvbik7XHJcbiAgICAgIGlmIChtYXR0ZXJ0YWdEYXRhLmdldFR5cGUoKSA9PT0gUG9pVHlwZS5EQVRBKSB7XHJcbiAgICAgICAgY29uc3QgZmVhdHVyZSA9IG1hdHRlcnRhZ0RhdGEuZ2V0T2JqZWN0KCk7XHJcbiAgICAgICAgaWYgKGZlYXR1cmUudHlwZSA9PT0gRmVhdHVyZVR5cGUuSU5ESUNBVE9SX1RFTVApIHtcclxuICAgICAgICAgIHRhZ0ljb24uc3JjID0gdGhpcy50YWdTZXJ2aWNlLmdldEljb25UYWdJbWFnZUZvckZlYXR1cmUoZmVhdHVyZSwgcG9pKTtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhZ0ljb24uc3JjKSB7XHJcbiAgICAgICAgY29uc3QgcGF0aFNpZ25lZCA9IGF3YWl0IHRoaXMudGFnU2VydmljZS5nZXRTaWduZWRUYWdJY29uU291cmNlKFxyXG4gICAgICAgICAgdGFnSWNvbi5zcmNcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChwYXRoU2lnbmVkKSB7XHJcbiAgICAgICAgICB0cnkge1xyXG4gICAgICAgICAgICBpY29uTmFtZSA9IGBpY29uLSR7c3RyaW5nVGFnVHlwZX0tJHttYXR0ZXJ0YWdJRH0tJHttYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleH1gO1xyXG4gICAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Bc3NldC5yZWdpc3RlclRleHR1cmUoaWNvbk5hbWUsIHBhdGhTaWduZWQpO1xyXG4gICAgICAgICAgICBtYXR0ZXJ0YWdEYXRhLmN1c3RvbUljb25JbmRleCArPSAxO1xyXG4gICAgICAgICAgfSBjYXRjaCB7XHJcbiAgICAgICAgICAgIGNvbnNvbGUubG9nKCdlcnJvciByZWdpc3Rlckljb24nKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKHRhZ0ljb24ub3BhY2l0eSkge1xyXG4gICAgICAgIG9wYWNpdHkgPSB0YWdJY29uLm9wYWNpdHk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMuc2RrLlRhZy5lZGl0SWNvbihtYXR0ZXJ0YWdJRCwgaWNvbk5hbWUpO1xyXG4gICAgICB0aGlzLnNkay5UYWcuZWRpdE9wYWNpdHkobWF0dGVydGFnSUQsIG9wYWNpdHkpO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Vycm9yIGVkaXRJY29uIG9yIG9wYWNpdHknLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlcyB2aWV3ZXIgdG8gbGFzdCB0YWcgY3JlYXRlZFxyXG4gICAqL1xyXG4gIGdvVG9MYXN0VGFnKCkge1xyXG4gICAgc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgICAgdGhpcy5nb1RvVGFnKGxhc3RUYWcpO1xyXG4gICAgfSwgMjAwMCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBNb3ZlcyB2aWV3ZXIgdG8gTWF0dGVydGFnIHdpdGggSUQgcHJvdmlkZWRcclxuICAgKiBAcGFyYW0gbWF0dGVydGFnSUQgc3RyaW5nXHJcbiAgICogQHJldHVybnNcclxuICAgKi9cclxuICBhc3luYyBnb1RvVGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcpIHtcclxuICAgIGlmIChtYXR0ZXJ0YWdJRCA9PT0gJycpIHJldHVybjtcclxuICAgIHRyeSB7XHJcbiAgICAgIHRoaXMub25Hb1RvVGFnLm5leHQobWF0dGVydGFnSUQpO1xyXG4gICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5jdXJyZW50LndhaXRVbnRpbChcclxuICAgICAgICAoY3VycmVudFN3ZWVwKSA9PiBjdXJyZW50U3dlZXAgIT09ICcnXHJcbiAgICAgICk7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2RrLk1hdHRlcnRhZy5uYXZpZ2F0ZVRvVGFnKFxyXG4gICAgICAgIG1hdHRlcnRhZ0lELFxyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5UcmFuc2l0aW9uLkZMWVxyXG4gICAgICApO1xyXG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgY29uc29sZS5sb2coJ2Nhbm5vdCBuYXZpZ2F0ZSB0byB0YWcnLCBlcnJvcik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBVcGRhdGVzIGNvbnRlbnQgb2YgTWF0dGVydGFnIHdpdGggbWF0dGVydGFnSUQgKGJpbGxib2FyZCwgaW5qZWN0ZWQgaHRtbCwgdGFnIGljb24pXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyB1cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUgPSBudWxsLFxyXG4gICAgdGFnVHlwZTogUG9pVHlwZSA9IG51bGxcclxuICApIHtcclxuICAgIHRoaXMuc2RrLlRhZy5lZGl0QmlsbGJvYXJkKFxyXG4gICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5nZXREYXRhKClcclxuICAgICk7XHJcbiAgICBpZiAob2JqZWN0ICYmIHRhZ1R5cGUpIHtcclxuICAgICAgYXdhaXQgdGhpcy5pbmplY3RIdG1sSW5UYWcodGFnVHlwZSwgb2JqZWN0LCBtYXR0ZXJ0YWdJRCk7XHJcbiAgICB9XHJcbiAgICBhd2FpdCB0aGlzLnNldFRhZ0ljb25BbmRPcGFjaXR5KFxyXG4gICAgICBtYXR0ZXJ0YWdJRCxcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKVxyXG4gICAgKTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFVwZGF0ZXMgaW5qZWN0ZWQgaHRtbCBmb3IgTWF0dGVydGFnXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUsIGV0Y1xyXG4gICAqIEBwYXJhbSB0YWdUeXBlIFBvaVR5cGVcclxuICAgKi9cclxuICBhc3luYyB1cGRhdGVJbmplY3RlZEh0bWxGb3JUYWdJRChcclxuICAgIG1hdHRlcnRhZ0lEOiBzdHJpbmcsXHJcbiAgICBvYmplY3Q6IGFueSxcclxuICAgIHRhZ1R5cGU6IFBvaVR5cGVcclxuICApIHtcclxuICAgIGF3YWl0IHRoaXMuaW5qZWN0SHRtbEluVGFnKHRhZ1R5cGUsIG9iamVjdCwgbWF0dGVydGFnSUQpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogRGVsZXRlcyBNYXR0ZXJ0YWcgZnJvbSBWaWV3ZXIgYnkgaXRzIElEXHJcbiAgICogQHBhcmFtIG1hdHRlcnRhZ0lEIHN0cmluZ1xyXG4gICAqL1xyXG4gIGRlbGV0ZU1hdHRlcnRhZ0Zyb21JZChtYXR0ZXJ0YWdJRDogc3RyaW5nKSB7XHJcbiAgICB0aGlzLnNkay5UYWcucmVtb3ZlKG1hdHRlcnRhZ0lEKTtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmRlbGV0ZShtYXR0ZXJ0YWdJRCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIGxhdGVzdCBjcmVhdGVkIG1hdHRlcnRhZ1xyXG4gICAqL1xyXG4gIGRlbGV0ZUxhc3RNYXR0ZXJ0YWcoKSB7XHJcbiAgICBjb25zdCBtYXR0ZXJ0YWdJRCA9IHRoaXMubWF0dGVydGFnSURzLnBvcCgpO1xyXG4gICAgaWYgKG1hdHRlcnRhZ0lEKSB7XHJcbiAgICAgIHRoaXMuZGVsZXRlTWF0dGVydGFnRnJvbUlkKG1hdHRlcnRhZ0lEKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIExlZ2FjeTogdXNlZCB0byBiZSBjYWxsZWQgYWN0aW9uX2FkZF9tYXR0ZXJ0YWdfZnJvbV9QT0lcclxuICAgKiBBZGRzIGFuZCBjb25maWd1cmVzIE1hdHRlcnRhZyBmb3IgYW4gb2JqZWN0IChUaWNrZXQsIEVxdWlwbWVudCwgRmVhdHVyZSwgZXRjKSB0aGF0IGNvcnJlc3BvbmRzIHRvIFBPSSAoY29vcmRpbmF0ZXMsIHRhZ0ljb24pXHJcbiAgICogQHBhcmFtIHRhZ1R5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUuLi5cclxuICAgKiBAcGFyYW0gcG9pIFBPSVxyXG4gICAqIEByZXR1cm5zXHJcbiAgICovXHJcbiAgYXN5bmMgY3JlYXRlTWF0dGVydGFnRnJvbVBPSShcclxuICAgIHRhZ1R5cGU6IFBvaVR5cGUsXHJcbiAgICBvYmplY3Q6IERiT2JqZWN0VHlwZSxcclxuICAgIHBvaTogUE9JXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIGNoZWNrIGlmIHRhZyBleGlzdHMgYWxyZWFkeVxyXG4gICAgY29uc3QgeyB0YWcsIHN3ZWVwIH0gPSB0aGlzLmdldFRhZ0Zyb21FbGVtZW50SWQob2JqZWN0LmlkKTtcclxuICAgIGlmICh0YWcpIHtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCJ0YWcgZXhpc3RzXCIsIG9iamVjdClcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgY29uc3QgbWF0dGVydGFnRGF0YTogTWF0dGVydGFnRGF0YSA9IG5ldyBNYXR0ZXJ0YWdEYXRhKHRhZ1R5cGUpO1xyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRPYmplY3Qob2JqZWN0LCB0YWdUeXBlKTtcclxuICAgIGlmIChwb2kuY29vcmRpbmF0ZSkge1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvc2l0aW9uKEpTT04ucGFyc2UocG9pLmNvb3JkaW5hdGUpKTtcclxuICAgIH1cclxuICAgIGlmIChwb2kubWV0YWRhdGEpIHtcclxuICAgICAgY29uc3QgdGFnTWV0YWRhdGEgPSBKU09OLnBhcnNlKHBvaS5tZXRhZGF0YSk7XHJcbiAgICAgIGlmICh0YWdNZXRhZGF0YS5ub3JtYWwpIHtcclxuICAgICAgICBtYXR0ZXJ0YWdEYXRhLnNldE5vcm1hbCh0YWdNZXRhZGF0YS5ub3JtYWwpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0Tm9ybWFsKHsgeDogMCwgeTogLTAuMTUsIHo6IDAgfSk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChwb2kubWF0dGVycG9ydFN3ZWVwSUQpIHtcclxuICAgICAgbWF0dGVydGFnRGF0YS5zZXRTd2VlcElEKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCk7XHJcbiAgICB9XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvaShwb2kpO1xyXG5cclxuICAgIGNvbnN0IGNyZWF0ZWRUYWdJRCA9IGF3YWl0IHRoaXMuYWRkTWF0dGVydGFnVG9WaWV3ZXIobWF0dGVydGFnRGF0YSk7XHJcbiAgICBpZiAoY3JlYXRlZFRhZ0lEICYmIHRoaXMuc2RrKSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2V0VGFnSWNvbkFuZE9wYWNpdHkoY3JlYXRlZFRhZ0lELCBtYXR0ZXJ0YWdEYXRhKTtcclxuICAgICAgYXdhaXQgdGhpcy5pbmplY3RIdG1sSW5UYWcodGFnVHlwZSwgb2JqZWN0LCBjcmVhdGVkVGFnSUQpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogSW5qZWN0IGN1c3RvbSBIVE1MIGFzIE1hdHRlcnRhZyBjb250ZW50XHJcbiAgICogQHBhcmFtIHRhZ1R5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBvYmplY3QgVGlja2V0LCBFcXVpcG1lbnQsIEZlYXR1cmUgZXRjXHJcbiAgICogQHBhcmFtIHRhZ0lEIHN0cmluZ1xyXG4gICAqL1xyXG4gIGFzeW5jIGluamVjdEh0bWxJblRhZyh0YWdUeXBlOiBQb2lUeXBlLCBvYmplY3Q6IERiT2JqZWN0VHlwZSwgdGFnSUQ6IHN0cmluZykge1xyXG4gICAgbGV0IGh0bWwgPSBhd2FpdCB0aGlzLnRhZ1NlcnZpY2UuZ2V0SHRtbFRvSW5qZWN0KHRhZ1R5cGUsIG9iamVjdCk7XHJcbiAgICBpZiAoaHRtbCAhPT0gJycgJiYgdGhpcy5zZGspIHtcclxuICAgICAgY29uc3Qgc2NyaXB0VGFnID0gdGhpcy50YWdTZXJ2aWNlLmdldFNjcmlwdEZvclRhZyhvYmplY3QsIHRhZ1R5cGUpO1xyXG4gICAgICBodG1sICs9IGAke3NjcmlwdFRhZ31gO1xyXG4gICAgICAvLyBjcmVhdGUgYW5kIHJlZ2lzdGVyIHRoZSBzYW5kYm94XHJcbiAgICAgIGNvbnN0IFtzYW5kYm94SWQsIG1lc3Nlbmdlcl0gPSBhd2FpdCB0aGlzLnNkay5UYWcucmVnaXN0ZXJTYW5kYm94KGh0bWwpO1xyXG5cclxuICAgICAgLy8gZGV0YWNoIHByZXZpb3VzIHNhbmRib3ggZnJvbSBhIHRhZ1xyXG4gICAgICBsZXQgYXR0YWNobWVudElEID0gdGhpcy50YWdzQXR0YWNobWVudHNbdGFnSURdO1xyXG4gICAgICBpZiAoYXR0YWNobWVudElEKSB7XHJcbiAgICAgICAgdGhpcy5zZGsuVGFnLmRldGFjaCh0YWdJRCwgYXR0YWNobWVudElEKTtcclxuICAgICAgfVxyXG4gICAgICB0aGlzLnRhZ3NBdHRhY2htZW50c1t0YWdJRF0gPSBzYW5kYm94SWQ7XHJcblxyXG4gICAgICAvLyBhdHRhY2ggdGhlIHNhbmRib3ggdG8gYSB0YWdcclxuICAgICAgdGhpcy5zZGsuVGFnLmF0dGFjaCh0YWdJRCwgc2FuZGJveElkKTtcclxuICAgICAgLy8gcmVjZWl2ZSBkYXRhIGZyb20gdGhlIHNhbmRib3hcclxuICAgICAgLy8gdGFnTWVzc2VuZ2VyT24gYWxsb3dzIHRvIGdvIGhlcmUgb25seSBvbmNlXHJcbiAgICAgIGlmICghdGhpcy50YWdNZXNzZW5nZXJPbikge1xyXG4gICAgICAgIHRoaXMudGFnTWVzc2VuZ2VyT24gPSB0cnVlO1xyXG4gICAgICAgIGNvbnN0IGltYWdlQ2xpY2sgPSAoZmVhdHVyZUlEOiBzdHJpbmcpID0+IHtcclxuICAgICAgICAgIC8vIGNvbnNvbGUubG9nKFwiaW1hZ2UgY2xpY2sgaGFuZGxlclwiLCBmZWF0dXJlSUQpO1xyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uSW1hZ2VDbGljayhmZWF0dXJlSUQpO1xyXG4gICAgICAgIH07XHJcblxyXG4gICAgICAgIGNvbnN0IGF1ZGlvQ2xpY2sgPSAoYXVkaW9Db21tZW50SUQ6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgLy8gY29uc29sZS5sb2coXCJhdWRpbyBjbGljayBoYW5kbGVyXCIsIGF1ZGlvQ29tbWVudElEKTtcclxuICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkF1ZGlvQ2xpY2soYXVkaW9Db21tZW50SUQpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgY29uc3QgdmlkZW9DbGljayA9ICh1cmw6IHN0cmluZykgPT4ge1xyXG4gICAgICAgICAgdGhpcy50YWdTZXJ2aWNlLm9uQWN0aW9uVmlkZW9DbGljayh1cmwpO1xyXG4gICAgICAgIH07XHJcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgVGFnQWN0aW9uLkRFVEFJTF9DTElDSyxcclxuICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkRldGFpbENsaWNrLmJpbmQodGhpcy50YWdTZXJ2aWNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgVGFnQWN0aW9uLlRJQ0tFVF9DTElDSyxcclxuICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkRldGFpbENsaWNrLmJpbmQodGhpcy50YWdTZXJ2aWNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFRhZ0FjdGlvbi5BVURJT19DTElDSywgYXVkaW9DbGljayk7XHJcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFRhZ0FjdGlvbi5JTUFHRV9DTElDSywgaW1hZ2VDbGljayk7XHJcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFRhZ0FjdGlvbi5WSURFT19DTElDSywgdmlkZW9DbGljayk7XHJcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgVGFnQWN0aW9uLkRPQ19DTElDSyxcclxuICAgICAgICAgIHRoaXMudGFnU2VydmljZS5vbkFjdGlvbkRvY0NsaWNrLmJpbmQodGhpcy50YWdTZXJ2aWNlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgbWVzc2VuZ2VyLm9uKFxyXG4gICAgICAgICAgVGFnQWN0aW9uLllPVVRVQkVfQ0xJQ0ssXHJcbiAgICAgICAgICB0aGlzLnRhZ1NlcnZpY2Uub25BY3Rpb25Zb3V0dWJlQ2xpY2suYmluZCh0aGlzLnRhZ1NlcnZpY2UpXHJcbiAgICAgICAgKTtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHtcclxuICAgICAgLy8gaWYgaHRtbCBpcyBlbXB0eSAoY2FzZSBvZiBFTUJFRCBjb250ZW50KSwgd2UgZWRpdCBiaWxsYm9hcmQgZm9yIEZlYXR1cmUgYW5kIGF0dGFjaCBuZXcgY29udGVudFxyXG4gICAgICBjb25zdCB7IGNvbW1lbnQsIHRhZ0Rlc2NyaXB0aW9uIH0gPVxyXG4gICAgICAgIHRoaXMudGFnU2VydmljZS5nZXRCaWxsYm9hcmRNZWRpYVRvRW1iZWQob2JqZWN0KTtcclxuICAgICAgaWYgKGNvbW1lbnQpIHtcclxuICAgICAgICAvLyByZWdpc3RlciB0aGUgbWVkaWFcclxuICAgICAgICBjb25zdCBbYXR0YWNobWVudElEXSA9IGF3YWl0IHRoaXMuc2RrLlRhZy5yZWdpc3RlckF0dGFjaG1lbnQoXHJcbiAgICAgICAgICBjb21tZW50LmV4dGVybmFsTGlua1xyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYXR0YWNoXHJcbiAgICAgICAgdGhpcy5zZGsuVGFnLmF0dGFjaCh0YWdJRCwgYXR0YWNobWVudElEKTtcclxuICAgICAgICB0aGlzLnNkay5UYWcuZWRpdEJpbGxib2FyZCh0YWdJRCwge1xyXG4gICAgICAgICAgbGFiZWw6IG9iamVjdC50aXRsZSxcclxuICAgICAgICAgIGRlc2NyaXB0aW9uOiB0YWdEZXNjcmlwdGlvbixcclxuICAgICAgICB9KTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2RlbGV0ZV9hbGxfbWF0dGVydGFncygpIHtcclxuICAgIGF3YWl0IHRoaXMuc2RrLlRhZy5yZW1vdmUoLi4udGhpcy5tYXR0ZXJ0YWdJRHMpO1xyXG4gICAgdGhpcy5tYXR0ZXJ0YWdJRHMgPSBbXTtcclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmNsZWFyKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBEZWxldGVzIE1hdHRlcnRhZyBmcm9tIHZpc2l0IGFzc29jaWF0ZWQgd2l0aCBvYmplY3QgSUQgKHRpY2tldElELCBldGMpXHJcbiAgICogQHBhcmFtIGVsZW1lbnRJRCBzdHJpbmdcclxuICAgKi9cclxuICBhc3luYyBkZWxldGVNYXR0ZXJ0YWdGb3JPYmplY3QoZWxlbWVudElEOiBzdHJpbmcpIHtcclxuICAgIGNvbnN0IG1hdHRlclRhZ0lEID0gdGhpcy5nZXRUYWdGcm9tRWxlbWVudElkKGVsZW1lbnRJRCkudGFnO1xyXG4gICAgaWYgKG1hdHRlclRhZ0lEKSB7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgYXdhaXQgdGhpcy5zZGsuVGFnLnJlbW92ZShtYXR0ZXJUYWdJRCk7XHJcbiAgICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZGVsZXRlKG1hdHRlclRhZ0lEKTtcclxuICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMubWF0dGVydGFnSURzLmluZGV4T2YobWF0dGVyVGFnSUQpO1xyXG4gICAgICAgIHRoaXMubWF0dGVydGFnSURzLnNwbGljZShpbmRleCwgMSk7XHJcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBkZWxldGUgdGFnJywgbWF0dGVyVGFnSUQsIGVycm9yKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogdXVpZCBmcm9tIHRocmVlanNcclxuICAgKiBAcGFyYW0gdXVpZFxyXG4gICAqL1xyXG4gIGFzeW5jIGRlbGV0ZU9iamVjdDNEKHV1aWQ6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeU9iamVjdHMzRC5nZXQodXVpZCkub2JqM0QudmlzaWJsZSA9IGZhbHNlO1xyXG4gIH1cclxuXHJcbiAgZ2V0T2JqZWN0M0RNb2RlbE5vZGVGcm9tRGljdGlvbm5hcnkodXVpZDogc3RyaW5nKTogYW55IHtcclxuICAgIGxldCBvYmogPSB0aGlzLmRpY3Rpb25uYXJ5T2JqZWN0czNELmdldCh1dWlkKTtcclxuICAgIGlmICghb2JqKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwid2VpcmQgdGhpbmcgYWdhaW5cIik7XHJcbiAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG4gICAgLy9taWdodCBicmVhayB0aGluZ3Mgb3IgZml4IGV2ZXJ5dGhpbmcgLi4/XHJcbiAgICBpZiAob2JqLm9iajNELnV1aWQgIT0gdXVpZCkge1xyXG4gICAgICBjb25zb2xlLmxvZyhcIndlIGhhdmUgVEhFIHByb2JsZW1cIik7XHJcbiAgICAgIG9iai5vYmozRC51dWlkID0gdXVpZDsgLy9ub3QgZW51Z2ggdG8gZml4IHRoZSBwYlxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBvYmo7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzICBNYXR0ZXJ0YWdEYXRhIGFuZCBzdGFydCByZXBvc2l0aW9uaW5nIChjcmVhdGVzIHRlbXBvcmFyeSBtYXR0ZXJ0YWcgdGhhdCBmb2xsb3dzIHRoZSBjdXJzb3IpXHJcbiAgICogQHBhcmFtIHBvaVR5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBlbGVtZW50IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLCBldGNcclxuICAgKi9cclxuICBhc3luYyBhZGRNYXR0ZXJ0YWdXaGVuUmVwb3NpdGlvbmluZyhwb2lUeXBlOiBQb2lUeXBlLCBlbGVtZW50OiBEYk9iamVjdFR5cGUpIHtcclxuICAgIGNvbnN0IG1hdHRlcnRhZ0RhdGEgPSBuZXcgTWF0dGVydGFnRGF0YShwb2lUeXBlKTtcclxuICAgIC8vIHNldCB0aGUgY29vcmRpbmF0ZXMgb2YgdGhlIGV4aXN0aW5nIHRhZ1xyXG4gICAgY29uc3QgW3BvaV0gPSBlbGVtZW50LnBvaXMuaXRlbXM7XHJcbiAgICBpZiAocG9pICYmIHBvaS5jb29yZGluYXRlKSB7XHJcbiAgICAgIG1hdHRlcnRhZ0RhdGEuc2V0UG9zaXRpb24oSlNPTi5wYXJzZShwb2kuY29vcmRpbmF0ZSkpO1xyXG4gICAgICBtYXR0ZXJ0YWdEYXRhLnNldFBvaShwb2kpOyAvLyB0byBrZWVwIGN1c3RvbSB0YWdJY29uIGFuZCBvcGFjaXR5XHJcbiAgICB9XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldFN3ZWVwSUQodGhpcy5wb3NlQ2FtZXJhLnN3ZWVwKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0Um90YXRpb24odGhpcy5wb3NlQ2FtZXJhLnJvdGF0aW9uKTtcclxuICAgIG1hdHRlcnRhZ0RhdGEuc2V0T2JqZWN0KGVsZW1lbnQsIHBvaVR5cGUpO1xyXG4gICAgdGhpcy5tYXR0ZXJ0YWdUb0ZvbGxvdyA9IGF3YWl0IHRoaXMuYWRkTWF0dGVydGFnVG9WaWV3ZXIobWF0dGVydGFnRGF0YSk7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuUE9TSVRJT05JTkcpO1xyXG4gICAgYXdhaXQgdGhpcy5hZGRDdXJzb3JNYXR0ZXJ0YWcobWF0dGVydGFnRGF0YSk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBDcmVhdGVzIE1hdHRlcnRhZ0RhdGEgYW5kIG1hdHRlcnRhZyB0aGF0IGZvbGxvd3MgdGhlIGN1cnNvciB3aGVuIGNob29zaW5nIHBvc2l0aW9uIGZvciBhIG5ldyBvYmplY3RcclxuICAgKiBAcGFyYW0gcG9pVHlwZVxyXG4gICAqL1xyXG4gIGFzeW5jIGFkZE1hdHRlcnRhZ1doZW5BZGRpbmcocG9pVHlwZTogUG9pVHlwZSkge1xyXG4gICAgY29uc3QgbWF0dGVydGFnRGF0YSA9IG5ldyBNYXR0ZXJ0YWdEYXRhKHBvaVR5cGUpO1xyXG4gICAgbWF0dGVydGFnRGF0YS5zZXRTd2VlcElEKHRoaXMucG9zZUNhbWVyYS5zd2VlcCk7XHJcbiAgICBtYXR0ZXJ0YWdEYXRhLnNldFJvdGF0aW9uKHRoaXMucG9zZUNhbWVyYS5yb3RhdGlvbik7XHJcbiAgICB0aGlzLnNldEludGVyYWN0aW9uTW9kZShWaWV3ZXJJbnRlcmFjdGlvbnMuQURESU5HKTtcclxuICAgIGF3YWl0IHRoaXMuYWRkQ3Vyc29yTWF0dGVydGFnKG1hdHRlcnRhZ0RhdGEpO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2FuY2VscyBmb2xsb3dpbmcgb2YgY3Vyc29yIChtZWFuaW5nIGRlbGV0aW5nIGxhc3QgTWF0dGVydGFnKVxyXG4gICAqL1xyXG4gIGNhbmNlbEZvbGxvd2luZ0N1cnNvcigpIHtcclxuICAgIHRoaXMuZGVsZXRlTGFzdE1hdHRlcnRhZygpO1xyXG4gICAgdGhpcy5zZXRJbnRlcmFjdGlvbk1vZGUoVmlld2VySW50ZXJhY3Rpb25zLkRFRkFVTFQpO1xyXG4gIH1cclxuXHJcbiAgc2V0TGFzdE9iamVjdDNEKGxhc3RPYmplY3QzRDogVGhyZWVKU09iamVjdDNEKSB7XHJcbiAgICB0aGlzLmxhc3RPYmplY3QzRCA9IGxhc3RPYmplY3QzRDtcclxuICB9XHJcblxyXG4gIGdldExhc3RPYmplY3QzRCgpOiBUaHJlZUpTT2JqZWN0M0Qge1xyXG4gICAgcmV0dXJuIHRoaXMubGFzdE9iamVjdDNEO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogUGVyZm9ybXMgY2FsbGJhY2sgYWZ0ZXIgbWF0dGVydGFnIHBvc2l0aW9uIHdhcyB2YWxpZGF0ZWQgKGNyZWF0aW9uIG9mIG9iamVjdCBvciByZXBvc2l0aW9uaW5nKVxyXG4gICAqIEBwYXJhbSBtb2RlIE1hdHRlcnRhZ0FjdGlvbk1vZGVcclxuICAgKi9cclxuICBjYWxsYmFja0FmdGVyTWF0dGVydGFnVmFsaWRhdGlvbihtb2RlOiBNYXR0ZXJ0YWdBY3Rpb25Nb2RlKSB7XHJcbiAgICB0aGlzLnZpc2liaWxpdHlTZXJ2aWNlLmRldGFpbFNob3dpbmcubmV4dCh0cnVlKTtcclxuICAgIGNvbnN0IGxhc3RUYWcgPSB0aGlzLmdldExhc3RUYWcoKTtcclxuICAgIHN3aXRjaCAobW9kZSkge1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX0VRVUlQTUVOVDpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9lcXVpcGBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLkFERF9USUNLRVQ6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfdGlja2V0YF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX09CSkVDVDNEOlxyXG4gICAgICAgIHRoaXMuZ29Ub0xhc3RUYWcoKTtcclxuICAgICAgICB0aGlzLnJvdXRlci5uYXZpZ2F0ZShbYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vYWRkX29iamVjdDNkYF0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX0RBVEE6XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIGxldCB1cmw6IHN0cmluZztcclxuICAgICAgICBpZiAodGhpcy5yb3V0ZXIudXJsLmluY2x1ZGVzKCc/JykpIHtcclxuICAgICAgICAgIHVybCA9IHRoaXMucm91dGVyLnVybC5zdWJzdHJpbmcoMCwgdGhpcy5yb3V0ZXIudXJsLmluZGV4T2YoJz8nKSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHVybCA9IHRoaXMucm91dGVyLnVybDtcclxuICAgICAgICB9XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2Ake3VybH0vYWRkX2ZlYXR1cmVgXSk7XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5BRERfREVTSzpcclxuICAgICAgICB0aGlzLmdvVG9MYXN0VGFnKCk7XHJcbiAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW2B2aXNpdC8ke3RoaXMuY3VycmVudFNwYWNlSUR9L2FkZF9mZWF0dXJlYF0sIHtcclxuICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IGlzRGVzazogdHJ1ZSB9LFxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuQUREX1JPT006XHJcbiAgICAgICAgdGhpcy5nb1RvTGFzdFRhZygpO1xyXG4gICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9hZGRfcm9vbWBdKTtcclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX09CSkVDVDNEOlxyXG4gICAgICAgIGlmIChsYXN0VGFnKSB7XHJcbiAgICAgICAgICAvLyBETyBOb3RoaW5nIChyb3V0aW5nKSwganVzdFxyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoXHJcbiAgICAgICAgICAgIFtgdmlzaXQvJHt0aGlzLmN1cnJlbnRTcGFjZUlEfS9vYmplY3QzZC8ke3RoaXMubGFzdE9iamVjdDNELmlkfWBdLFxyXG4gICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0gfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9USUNLRVQ6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vZGV0YWlsLyR7dGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KGxhc3RUYWcpLmVsZW1lbnRJRFxyXG4gICAgICAgICAgICAgIH1gLFxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICB7IHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0gfVxyXG4gICAgICAgICAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICAgIGNhc2UgTWF0dGVydGFnQWN0aW9uTW9kZS5QT1NJVElPTl9FUVVJUE1FTlQ6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFxyXG4gICAgICAgICAgICBbXHJcbiAgICAgICAgICAgICAgYHZpc2l0LyR7dGhpcy5jdXJyZW50U3BhY2VJRH0vZXF1aXAvJHt0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQobGFzdFRhZykuZWxlbWVudElEXHJcbiAgICAgICAgICAgICAgfWAsXHJcbiAgICAgICAgICAgIF0sXHJcbiAgICAgICAgICAgIHsgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSB9XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBicmVhaztcclxuICAgICAgY2FzZSBNYXR0ZXJ0YWdBY3Rpb25Nb2RlLlBPU0lUSU9OX0RBVEE6XHJcbiAgICAgICAgaWYgKGxhc3RUYWcpIHtcclxuICAgICAgICAgIHRoaXMucm91dGVyLm5hdmlnYXRlKFtdLCB7XHJcbiAgICAgICAgICAgIHJlbGF0aXZlVG86IHRoaXMuYWN0aXZlUm91dGUsXHJcbiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB7IHBvc2l0aW9uaW5nOiB0cnVlIH0sIHF1ZXJ5UGFyYW1zSGFuZGxpbmc6IFwibWVyZ2VcIlxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICBjYXNlIE1hdHRlcnRhZ0FjdGlvbk1vZGUuUE9TSVRJT05fUk9PTTpcclxuICAgICAgICBpZiAobGFzdFRhZykge1xyXG4gICAgICAgICAgdGhpcy5yb3V0ZXIubmF2aWdhdGUoW10sIHtcclxuICAgICAgICAgICAgcmVsYXRpdmVUbzogdGhpcy5hY3RpdmVSb3V0ZSxcclxuICAgICAgICAgICAgcXVlcnlQYXJhbXM6IHsgcG9zaXRpb25pbmc6IHRydWUgfSwgcXVlcnlQYXJhbXNIYW5kbGluZzogXCJtZXJnZVwiXHJcbiAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgYnJlYWs7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBGdWxseSB1cGRhdGVzIGV4aXN0aW5nIE1hdHRlcnRhZyBjb250ZW50IHdpdGggZGF0YSBvZiBvYmplY3QgKFRpY2tldCwgRXF1aXBtZW50LCBEZXNrKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRCBzdHJpbmdcclxuICAgKiBAcGFyYW0gb2JqZWN0IFRpY2tldCwgRXF1aXBtZW50LCBGZWF0dXJlLCBEZXNrXHJcbiAgICogQHBhcmFtIHBvaVR5cGUgUG9pVHlwZVxyXG4gICAqIEBwYXJhbSBwb2kgUE9JXHJcbiAgICovXHJcbiAgYXN5bmMgc2V0T2JqZWN0QW5kUG9pSW5UYWcoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICBwb2lUeXBlOiBQb2lUeXBlLFxyXG4gICAgcG9pOiBQT0kgfCBudWxsID0gbnVsbFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5zZXRPYmplY3Qob2JqZWN0LCBwb2lUeXBlKTtcclxuICAgIGlmIChwb2kpIHtcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKS5zZXRQb2kocG9pKTtcclxuICAgIH1cclxuICAgIHRoaXMuZGljdGlvbm5hcnlUYWdzLmdldChtYXR0ZXJ0YWdJRCkuZWxlbWVudElEID0gb2JqZWN0LmlkO1xyXG4gICAgdHJ5IHtcclxuICAgICAgYXdhaXQgdGhpcy51cGRhdGVNYXR0ZXJUYWdDb250ZW50Rm9yVGFnSUQobWF0dGVydGFnSUQsIG9iamVjdCwgcG9pVHlwZSk7XHJcbiAgICAgIC8vIFRPRE86IGZpeCB0aGlzXHJcbiAgICAgIGF3YWl0IHRoaXMudXBkYXRlTWF0dGVyVGFnUG9zSW5TZGtWaWV3ZXIoXHJcbiAgICAgICAgbWF0dGVydGFnSUQsXHJcbiAgICAgICAgb2JqZWN0LFxyXG4gICAgICAgIHBvaVR5cGUsXHJcbiAgICAgICAgcG9pXHJcbiAgICAgICk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKGBlcnJvciBpbiBzZXRPYmplY3RBbmRQb2lJblRhZzogJHtlfWApO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgdXBkYXRlTWF0dGVyVGFnUG9zSW5TZGtWaWV3ZXIoXHJcbiAgICBtYXR0ZXJ0YWdJRDogc3RyaW5nLFxyXG4gICAgb2JqZWN0OiBEYk9iamVjdFR5cGUsXHJcbiAgICBwb2lUeXBlOiBQb2lUeXBlLFxyXG4gICAgcG9pOiBQT0kgfCBudWxsID0gbnVsbFxyXG4gICk6IFByb21pc2U8dm9pZD4ge1xyXG4gICAgY29uc3QgSW5kZXhUb1VwZGF0ZSA9IG9iamVjdC5wb2lzLml0ZW1zLmZpbmRJbmRleCgodSkgPT4gdS5pZCA9PT0gcG9pLmlkKTtcclxuICAgIG9iamVjdC5wb2lzLml0ZW1zW0luZGV4VG9VcGRhdGVdID0gcG9pO1xyXG4gICAgY29uc3QgeyB4LCB5LCB6IH0gPSBKU09OLnBhcnNlKHBvaS5jb29yZGluYXRlKTtcclxuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0ge1xyXG4gICAgICBhbmNob3JQb3NpdGlvbjoge1xyXG4gICAgICAgIHg6IHgsXHJcbiAgICAgICAgeTogeSxcclxuICAgICAgICB6OiB6LFxyXG4gICAgICB9LFxyXG4gICAgICBzdGVtVmVjdG9yOiB7XHJcbiAgICAgICAgLy8gbWFrZSB0aGUgVGFnIHN0aWNrIHN0cmFpZ2h0IHVwIGFuZCBtYWtlIGl0IDAuMzAgbWV0ZXJzICh+MSBmb290KSB0YWxsXHJcbiAgICAgICAgeDogMCxcclxuICAgICAgICB5OiAwLjMsXHJcbiAgICAgICAgejogMCxcclxuICAgICAgfSxcclxuICAgIH07XHJcbiAgICB0aGlzLnNkay5NYXR0ZXJ0YWcuZWRpdFBvc2l0aW9uKG1hdHRlcnRhZ0lELCBuZXdQb3NpdGlvbik7XHJcbiAgICB0aGlzLnNkay5UYWcuZWRpdFBvc2l0aW9uKG1hdHRlcnRhZ0lELCBuZXdQb3NpdGlvbik7XHJcbiAgICB0aGlzLmRpY3Rpb25uYXJ5VGFnc1xyXG4gICAgICAuZ2V0KG1hdHRlcnRhZ0lEKVxyXG4gICAgICAuc2V0UG9zaXRpb24obmV3UG9zaXRpb24uYW5jaG9yUG9zaXRpb24pO1xyXG5cclxuICAgIGZvciAobGV0IHRhZ0lkIG9mIHRoaXMubWF0dGVydGFnSURzKSB7XHJcbiAgICAgIGNvbnN0IGN1cnJlbnRUYWcgPSB0aGlzLmRpY3Rpb25uYXJ5VGFncy5nZXQodGFnSWQpO1xyXG4gICAgICBpZiAoIWN1cnJlbnRUYWcpIHtcclxuICAgICAgICBjb250aW51ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoY3VycmVudFRhZy5lbGVtZW50SUQgPT09IG9iamVjdC5pZCAmJiB0YWdJZCAhPT0gbWF0dGVydGFnSUQpIHtcclxuICAgICAgICB0aGlzLmRpY3Rpb25uYXJ5VGFncy5kZWxldGUodGFnSWQpO1xyXG4gICAgICAgIHRoaXMuc2RrLlRhZy5yZW1vdmUodGFnSWQpO1xyXG4gICAgICAgIHRoaXMuc2RrLk1hdHRlcnRhZy5yZW1vdmUodGFnSWQpO1xyXG4gICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAgKiBHZXRzIG1hdHRlclRhZ0lEIGFuZCBpdHMgc3dlZXAgZm9yIGFuIG9iamVjdCBJRCAodGlja2V0IElELCBldGMpXHJcbiAgICogQHBhcmFtIGVsZW1lbnRJRCBzdHJpbmdcclxuICAgKiBAcmV0dXJucyB7dGFnOiBzdHJpbmcgfCBudWxsLCBzd2VlcDogc3RyaW5nIHwgbnVsbH1cclxuICAgKi9cclxuICBwdWJsaWMgZ2V0VGFnRnJvbUVsZW1lbnRJZChlbGVtZW50SUQ6IHN0cmluZyk6IHtcclxuICAgIHRhZzogc3RyaW5nIHwgbnVsbDtcclxuICAgIHN3ZWVwOiBzdHJpbmcgfCBudWxsO1xyXG4gIH0ge1xyXG4gICAgbGV0IHRhZ0lEID0gbnVsbDtcclxuICAgIGxldCBzd2VlcElEID0gbnVsbDtcclxuICAgIGZvciAobGV0IFttYXR0ZXJ0YWdJRCwgbWF0dGVydGFnRGF0YV0gb2YgdGhpcy5kaWN0aW9ubmFyeVRhZ3MpIHtcclxuICAgICAgaWYgKG1hdHRlcnRhZ0RhdGEuZWxlbWVudElEID09PSBlbGVtZW50SUQpIHtcclxuICAgICAgICB0YWdJRCA9IG1hdHRlcnRhZ0lEO1xyXG4gICAgICAgIGNvbnN0IHN3ZWVwID0gbWF0dGVydGFnRGF0YS5nZXRTd2VlcElEKCk7XHJcbiAgICAgICAgaWYgKHN3ZWVwICYmIHRoaXMuc3dlZXBzICYmIHRoaXMuc3dlZXBzLmluY2x1ZGVzKHN3ZWVwKSkge1xyXG4gICAgICAgICAgc3dlZXBJRCA9IHN3ZWVwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIHsgdGFnOiB0YWdJRCwgc3dlZXA6IHN3ZWVwSUQgfTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgbGF0ZXN0IHRhZyBjcmVhdGVkIGluIHRoZSB2aXNpdCAod2hlbiBmb2xsb3dpbmcgdGhlIGN1cnNvciB0byBwb3NpdGlvbilcclxuICAgKiBAcmV0dXJucyBzdHJpbmcgbWF0dGVydGFnSURcclxuICAgKi9cclxuICBnZXRMYXN0VGFnKCk6IHN0cmluZyB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMubWF0dGVydGFnVG9Gb2xsb3cpIHtcclxuICAgICAgcmV0dXJuIHRoaXMubWF0dGVydGFnVG9Gb2xsb3c7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICByZXR1cm4gdGhpcy5tYXR0ZXJ0YWdJRHMubGVuZ3RoID09PSAwXHJcbiAgICAgICAgPyBudWxsXHJcbiAgICAgICAgOiB0aGlzLm1hdHRlcnRhZ0lEc1t0aGlzLm1hdHRlcnRhZ0lEcy5sZW5ndGggLSAxXTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIEdldHMgTWF0dGVydGFnRGF0YSBmb3IgTWF0dGVydGFnIChyZXBsYWNlcyBnZXRUYWdEYXRhRnJvbUlkKVxyXG4gICAqIEBwYXJhbSBtYXR0ZXJ0YWdJRFxyXG4gICAqIEByZXR1cm5zIE1hdHRlcnRhZ0RhdGFcclxuICAgKi9cclxuICBnZXRNYXR0ZXJUYWdEYXRhRm9yTWF0dGVydGFnKG1hdHRlcnRhZ0lEOiBzdHJpbmcpOiBNYXR0ZXJ0YWdEYXRhIHwgbnVsbCB7XHJcbiAgICB0cnkge1xyXG4gICAgICByZXR1cm4gdGhpcy5kaWN0aW9ubmFyeVRhZ3MuZ2V0KG1hdHRlcnRhZ0lEKTtcclxuICAgIH0gY2F0Y2gge1xyXG4gICAgICBjb25zb2xlLmxvZygnY2Fubm90IHJldHJpZXZlIG1hdHRlcnRhZ0RhdGEgZm9yIHRhZycsIG1hdHRlcnRhZ0lEKTtcclxuICAgIH1cclxuICAgIHJldHVybiBudWxsO1xyXG4gIH1cclxuXHJcbiAgLy9cclxuICAvLyAtLS0tLS0tLS0tIFZpZXdlciByZWxhdGVkIChzd2l0Y2ggdmlld3MsIGdvIHRvKSAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICBhc3luYyBhY3Rpb25fdG9vbGJveF9mbG9vcnBsYW4oKSB7XHJcbiAgICBpZiAodGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApIHtcclxuICAgICAgY29uc29sZS5sb2coJ3ZpZXdlciBpcyBpbiB0cmFuc2l0aW9uLCBjYW5ub3QgZ28gZmxvb3JwbGFuJyk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRyeSB7XHJcbiAgICAgIGF3YWl0IHRoaXMuc2RrLk1vZGUubW92ZVRvKCdtb2RlLmZsb29ycGxhbicpO1xyXG4gICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICBjb25zb2xlLmxvZygnY2Fubm90IGdvIHRvIGZsb29ycGxhbicsIGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYWN0aW9uX3Rvb2xib3hfaW5zaWRlX3ZpZXcoKSB7XHJcbiAgICB0aGlzLnNkay5Nb2RlLm1vdmVUbygnbW9kZS5pbnNpZGUnKTtcclxuICB9XHJcblxyXG4gIGFjdGlvblNob3dBbGxGbG9vcnMoKSB7XHJcbiAgICB0cnkge1xyXG4gICAgICB0aGlzLnNkay5GbG9vci5zaG93QWxsKCk7XHJcbiAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3Qgc2hvdyBhbGwgZmxvb3JzJywgZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyBhY3Rpb25fdG9vbGJveF9kb2xsaG91c2UoKSB7XHJcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgLy8gY29uc29sZS5sb2coXCJtb2RlOiBcIiwgdGhpcy5pblRyYW5zaXRpb25Nb2RlLCBcIiBzd2VlcDogXCIsIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApO1xyXG4gICAgICBpZiAodGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApIHtcclxuICAgICAgICBjb25zb2xlLmxvZygndmlld2VyIGlzIGluIHRyYW5zaXRpb24sIGNhbm5vdCBnbyBkb2xsaG91c2UnKTtcclxuICAgICAgICByZXR1cm47XHJcbiAgICAgIH1cclxuICAgICAgdHJ5IHtcclxuICAgICAgICBhd2FpdCB0aGlzLnNkay5Nb2RlLm1vdmVUbygnbW9kZS5kb2xsaG91c2UnKTtcclxuICAgICAgfSBjYXRjaCAoZSkge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKCdjYW5ub3QgZ28gdG8gZG9sbGhvdXNlJywgZSk7XHJcbiAgICAgIH1cclxuICAgIH0sIDEyMDApO1xyXG4gIH1cclxuXHJcbiAgYWN0aW9uX3Rvb2xib3hfbWVzdXJlKCkge1xyXG4gICAgY29uc3QgbmV3U3RhdGUgPSAhdGhpcy5pc01lYXN1cmVNb2RlT247XHJcbiAgICB0aGlzLnNkay5NZWFzdXJlbWVudHMudG9nZ2xlTW9kZShuZXdTdGF0ZSkudGhlbigoKSA9PiB7XHJcbiAgICAgIGNvbnNvbGUubG9nKFxyXG4gICAgICAgIGBNZWFzdXJlbWVudCBtb2RlIGlzIG5vdyAke25ld1N0YXRlID8gJ2VuYWJsZWQnIDogJ2Rpc2FibGVkJ31gXHJcbiAgICAgICk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGFjdGlvbl90b29sYm94X2NhbmNlbF9tZXN1cmUoKSB7XHJcbiAgICBpZiAodGhpcy5pc01lYXN1cmVNb2RlT24pIHtcclxuICAgICAgdGhpcy5hY3Rpb25fdG9vbGJveF9tZXN1cmUoKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGFzeW5jIGFjdGlvbl9nb190b19mbG9vcihcclxuICAgIGZsb29yTmFtZTogc3RyaW5nLFxyXG4gICAgbWF0dGVycG9ydEZsb29yU2VxdWVuY2U6IG51bWJlciA9IG51bGxcclxuICApIHtcclxuICAgIGlmICghdGhpcy5mbG9vcnMpIHtcclxuICAgICAgY29uc29sZS5sb2coJ0Zsb29yIGFyZSBub3QgbG9hZGVkIHlldCcpO1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyh0aGlzLmZsb29ycyk7XHJcbiAgICAvLyBsb29rIHVwIGZvciBzZXF1ZW5jZSBudW1iZXIgKHRoZSBzYWZlc3QgbWV0aG9kKVxyXG4gICAgbGV0IGZsb29yTWF0dGVycG9ydCA9IHRoaXMuZmxvb3JzLmZpbmQoXHJcbiAgICAgIChmbG9vcikgPT4gZmxvb3Iuc2VxdWVuY2UgPT09IG1hdHRlcnBvcnRGbG9vclNlcXVlbmNlXHJcbiAgICApO1xyXG4gICAgaWYgKCFmbG9vck1hdHRlcnBvcnQpIHtcclxuICAgICAgZmxvb3JNYXR0ZXJwb3J0ID0gdGhpcy5mbG9vcnMuZmluZChcclxuICAgICAgICAoZmxvb3IpID0+IGZsb29yTmFtZS5pbmNsdWRlcyhmbG9vci5uYW1lKSAmJiBmbG9vci5uYW1lICE9ICcnXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICBpZiAoIWZsb29yTWF0dGVycG9ydCkge1xyXG4gICAgICBmbG9vck1hdHRlcnBvcnQgPSB0aGlzLmZsb29ycy5maW5kKChmbG9vcikgPT5cclxuICAgICAgICBmbG9vck5hbWUuaW5jbHVkZXMoZmxvb3IuaWQpXHJcbiAgICAgICk7XHJcbiAgICB9XHJcbiAgICAvLyBjb25zb2xlLmxvZyhmbG9vck1hdHRlcnBvcnQpXHJcbiAgICBpZiAoZmxvb3JNYXR0ZXJwb3J0KSB7XHJcbiAgICAgIGxldCByZXRyeSA9IHRydWU7XHJcbiAgICAgIHdoaWxlIChyZXRyeSkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBjb25zdCBmbG9vckluZGV4ID0gYXdhaXQgdGhpcy5zZGsuRmxvb3IubW92ZVRvKFxyXG4gICAgICAgICAgICBmbG9vck1hdHRlcnBvcnQuc2VxdWVuY2VcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIm1vdmVkIHRvIGZsb29ySW5kZXhcIiwgZmxvb3JJbmRleCk7XHJcbiAgICAgICAgICByZXRyeSA9IGZhbHNlO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZygnQ2Fubm90IG1vdmUgdG8gRmxvb3InLCBlcnJvcik7XHJcbiAgICAgICAgICBhd2FpdCB3YWl0KDEwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICBjb25zb2xlLndhcm4oJ05vIG1hdHRlcnBvcnQgZmxvb3IgZm91bmQgdG8gbW92ZSB0bycpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYWN0aW9uX2dvX3RvX3N3ZWVwKFxyXG4gICAgc3dlZXA6IHN0cmluZyxcclxuICAgIHJvdGF0aW9uOiB7IHg6IG51bWJlcjsgeTogbnVtYmVyIH0gPSBudWxsXHJcbiAgKSB7XHJcbiAgICBpZiAodGhpcy5mb3JiaWRkZW5Td2VlcHMuaW5jbHVkZXMoc3dlZXApKSB7XHJcbiAgICAgIGNvbnNvbGUubG9nKCd1c2VyIGlzIG5vdCBhbGxvd2VkIHRvIGdvIHRvIHRoaXMgc3dlZXAnKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgLy8gY29uc29sZS5sb2coXCJnb2luZyB0byBzd2VlcFwiLCBzd2VlcCwgXCJ3aXRoIHJvdGF0aW9uOlwiLCByb3RhdGlvbik7XHJcbiAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuaW5UcmFuc2l0aW9uTW9kZSB8fCB0aGlzLmluVHJhbnNpdGlvblN3ZWVwKSB7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBnbyB0byBzd2VlcCwgaW4gdHJhbnNpdGlvbicpO1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG4gICAgICB0cnkge1xyXG4gICAgICAgIHRoaXMuaW5UcmFuc2l0aW9uU3dlZXAgPSB0cnVlO1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2RrLlN3ZWVwLm1vdmVUbyhzd2VlcCwge1xyXG4gICAgICAgICAgdHJhbnNpdGlvbjogJ3RyYW5zaXRpb24uaW5zdGFudCcsXHJcbiAgICAgICAgICB0cmFuc2l0aW9uVGltZTogMTUwMCxcclxuICAgICAgICB9KTtcclxuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgICB0aGlzLmluVHJhbnNpdGlvblN3ZWVwID0gZmFsc2U7XHJcbiAgICAgICAgY29uc29sZS5sb2coJ0Nhbm5vdCBtb3ZlIHRvIHN3ZWVwJywgZXJyb3IpO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChyb3RhdGlvbikge1xyXG4gICAgICAgIGF3YWl0IHRoaXMuc2RrLkNhbWVyYS5zZXRSb3RhdGlvbihyb3RhdGlvbiwgeyBzcGVlZDogMTAwIH0pOyAvLyBzcGVlZCBpcyBkZWdyZWVzIHBlciBzZWNvbmRcclxuICAgICAgfVxyXG4gICAgfSwgMTAwMCk7XHJcbiAgfVxyXG5cclxuICBnZXRDdXJyZW50U3dlZXAoKTogc3RyaW5nIHwgbnVsbCB7XHJcbiAgICBpZiAodGhpcy5wb3NlQ2FtZXJhKSB7XHJcbiAgICAgIHJldHVybiB0aGlzLnBvc2VDYW1lcmEuc3dlZXA7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbnVsbDtcclxuICB9XHJcblxyXG4gIGdldEN1cnJlbnRDYW1lcmFQb3NpdGlvbigpOiB7XHJcbiAgICByb3RhdGlvbjogYW55O1xyXG4gICAgcG9zaXRpb246IGFueTtcclxuICAgIHN3ZWVwOiBhbnk7XHJcbiAgfSB8IG51bGwge1xyXG4gICAgaWYgKHRoaXMucG9zZUNhbWVyYSkge1xyXG4gICAgICByZXR1cm4gdGhpcy5wb3NlQ2FtZXJhO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG51bGw7XHJcbiAgfVxyXG5cclxuICBzZXRJbnRlcmFjdGlvbk1vZGUoaW50ZXJhY3Rpb25Nb2RlOiBudW1iZXIpIHtcclxuICAgIHRoaXMuaW50ZXJhY3Rpb25Nb2RlID0gaW50ZXJhY3Rpb25Nb2RlO1xyXG4gIH1cclxuXHJcbiAgZ2V0SW50ZXJhY3Rpb25Nb2RlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaW50ZXJhY3Rpb25Nb2RlO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogQ2xlYXIgYWxsIHZhcmlhYmxlcywgZGVsZXRlcyBhbGwgdGFncyAod2hlbiB2aWV3ZXIgaXMgcmVtb3ZlciBvciBtb2RlbCBjaGFuZ2VkPXJlbG9hZCBuZWVkZWQpXHJcbiAgICovXHJcbiAgYXN5bmMgY2xlYXJBbGwoKSB7XHJcbiAgICBjb25zb2xlLmxvZygncmVtb3Zpbmcgdmlld2VyJyk7XHJcbiAgICB0aGlzLmFjdGlvbl9kZWxldGVfYWxsX21hdHRlcnRhZ3MoKTtcclxuICAgIHRoaXMuZmxvb3JzID0gbnVsbDtcclxuICAgIHRoaXMuc3dlZXBzID0gbnVsbDtcclxuICAgIHRoaXMuc2RrID0gbnVsbDtcclxuICAgIGNsZWFySW50ZXJ2YWwodGhpcy50aW1lclBvaW50ZXIpO1xyXG4gICAgdGhpcy5mb3JiaWRkZW5Td2VlcHMgPSBbXTtcclxuICAgIHRoaXMudGFnTWVzc2VuZ2VyT24gPSBmYWxzZTtcclxuICAgIC8vIGNhbmNlbCBzdWJzY3JpcHRpb25zXHJcbiAgICB0aGlzLnBvaW50ZXJCdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcclxuICAgICAgJ2NsaWNrJyxcclxuICAgICAgdGhpcy5wb2ludGVyTGVmdENsaWNrSGFuZGxlclxyXG4gICAgKTtcclxuICAgIHRoaXMucG9pbnRlckJ1dHRvbi5yZW1vdmVFdmVudExpc3RlbmVyKFxyXG4gICAgICAnY29udGV4dG1lbnUnLFxyXG4gICAgICB0aGlzLnBvaW50ZXJSaWdodENsaWNrSGFuZGxlclxyXG4gICAgKTtcclxuXHJcbiAgICAvLyBUT0RPOiBvbmx5IEZvciBBZG1pbnNcclxuICAgIGlmICh0aGlzLmdldEN1cnNvclBvc2l0aW9uQnV0dG9uKSB7XHJcbiAgICAgIHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb25CdXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcihcclxuICAgICAgICAnYXV4Y2xpY2snLFxyXG4gICAgICAgIHRoaXMucG9pbnRlck1pZGRsZUNsaWNrSGFuZGxlclxyXG4gICAgICApO1xyXG4gICAgfVxyXG4gICAgLy8gVE9ETzogb25seSBmb3IgZGV2IVxyXG4gICAgaWYgKCEhdGhpcy5nZXRDdXJzb3JQb3NpdGlvbkJ1dHRvbiAmJlxyXG4gICAgICAoZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCdkZXYnKSAhPT0gLTEgfHwgZG9jdW1lbnQubG9jYXRpb24uaHJlZi5pbmRleE9mKCdsb2NhbGhvc3QnKSAhPT0gLTEpKSB7XHJcbiAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5pbnRlcnZhbEN1cnNvclBvaW50ZXJQb3NpdGlvbik7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBhc3luYyByZW1vdmVGb3JiaWRkZW5Td2VlcHMoZm9yYmlkZGVuU3dlZXBzOiBzdHJpbmdbXSkge1xyXG4gICAgdGhpcy5mb3JiaWRkZW5Td2VlcHMgPSBbLi4uZm9yYmlkZGVuU3dlZXBzXTtcclxuICAgIGxldCByZW1vdmVkID0gMDtcclxuICAgIGF3YWl0IFByb21pc2UuYWxsKFxyXG4gICAgICBmb3JiaWRkZW5Td2VlcHMubWFwKGFzeW5jIChzd2VlcCkgPT4ge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICBhd2FpdCB0aGlzLnNkay5Td2VlcC5kaXNhYmxlKHN3ZWVwKTtcclxuICAgICAgICAgIHJlbW92ZWQgKz0gMTtcclxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xyXG4gICAgICAgIH1cclxuICAgICAgfSlcclxuICAgICk7XHJcbiAgICBjb25zb2xlLmxvZygncmVtb3ZlZCBzd2VlcHM6JywgcmVtb3ZlZCk7XHJcbiAgfVxyXG5cclxuICAvL1xyXG4gIC8vIC0tLS0tLS0tLS0gM0Qgb2JqZWN0cyAoU0RLIEJ1bmRsZSBvbmx5KSAtLS0tLS0tLS0tXHJcbiAgLy9cclxuICBhc3luYyBpbml0M0RPYmplY3RWaWV3ZXIoKTogUHJvbWlzZTx2b2lkPiB7XHJcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUpID0+IHtcclxuICAgICAgdmFyIFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG5cclxuICAgICAgdmFyIG5vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcblxyXG4gICAgICAvLyBUT0RPIGNoYW5nZSB0aGlzIPCfpK5cclxuICAgICAgbm9kZS5hZGRDb21wb25lbnQoJ21wLmxpZ2h0cycpO1xyXG4gICAgICAvL25vZGUuYWRkQ29tcG9uZW50KCdtcC5saWdodHMnKTtcclxuICAgICAgLypub2RlLmFkZENvbXBvbmVudCgnbXAubGlnaHRzJyk7XHJcbiAgICAgIG5vZGUuYWRkQ29tcG9uZW50KCdtcC5saWdodHMnKTsqL1xyXG4gICAgICBub2RlLnN0YXJ0KCk7XHJcblxyXG4gICAgICBjb25zdCBub2RlQ29udHJvbCA9IHNjZW5lT2JqZWN0LmFkZE5vZGUoKTtcclxuICAgICAgdGhpcy5vYmplY3RDb250cm9sID0gbm9kZUNvbnRyb2wuYWRkQ29tcG9uZW50KCdtcC50cmFuc2Zvcm1Db250cm9scycpO1xyXG4gICAgICBub2RlQ29udHJvbC5zdGFydCgpO1xyXG5cclxuICAgICAgLy90aGlzLmFkZDNET2JqZWN0KHt9LG51bGwpO1xyXG5cclxuICAgICAgcmVzb2x2ZSgpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICBhc3luYyBhZGQzRE9iamVjdChcclxuICAgIG9iajogSU9iamVjdDNELFxyXG4gICAgbW9kZT86ICd0cmFuc2xhdGUnIHwgJ3JvdGF0ZSdcclxuICApOiBQcm9taXNlPGFueT4ge1xyXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlKSA9PiB7XHJcbiAgICAgIGNvbnN0IFtzY2VuZU9iamVjdF0gPSBhd2FpdCB0aGlzLnNkay5TY2VuZS5jcmVhdGVPYmplY3RzKDEpO1xyXG5cclxuICAgICAgLy8gVE9ETzogaW1wcm92bWVudCwgcmVncm91cCBhbGwgb2YgdGhlc2UgaW4gRHluYW1pY2FsIE9iamVjdHMgTGliXHJcbiAgICAgIC8vIFNlY3VyaXR5Q2FtZXJhXHJcbiAgICAgIC8vIE5lc3RUaGVybW9zdGF0XHJcbiAgICAgIC8vIFZpZGVvXHJcbiAgICAgIGxldCBpc0FuaW1hdGVkU2VjdXJpdHlDYW1lcmEgPSBmYWxzZTtcclxuICAgICAgbGV0IGlzTmVzdFRoZXJtb3N0YXQgPSBmYWxzZTtcclxuICAgICAgbGV0IGlzU21hcnRlcnBsYW5Qcm9tb3Rpb25hbFZpZGVvID0gZmFsc2U7XHJcbiAgICAgIGxldCBpc0F6aW11dGhhbENyb3duID0gZmFsc2U7XHJcblxyXG4gICAgICAvKipcclxuICAgICAgICogVE9ETzogcmVmYWN0byB3aXRoIGFuIGVudW0gb3Igc3dpdGNoL2Nhc2VcclxuICAgICAgICovXHJcbiAgICAgIGlmIChvYmoub2JqZWN0ID09PSBcInNlY3VyaXR5X2NhbWVyYVwiKSB7XHJcbiAgICAgICAgaXNBbmltYXRlZFNlY3VyaXR5Q2FtZXJhID0gdHJ1ZTtcclxuICAgICAgfVxyXG4gICAgICBpZiAob2JqLm9iamVjdCA9PT0gXCJuZXN0X3RoZXJtb3N0YXRcIikge1xyXG4gICAgICAgIGlzTmVzdFRoZXJtb3N0YXQgPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvYmoub2JqZWN0ID09PSAndmlkZW8nKSB7XHJcbiAgICAgICAgaXNTbWFydGVycGxhblByb21vdGlvbmFsVmlkZW8gPSB0cnVlO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChvYmoub2JqZWN0ID09PSAnYXppbXV0aCcpIHtcclxuICAgICAgICBpc0F6aW11dGhhbENyb3duID0gdHJ1ZTtcclxuICAgICAgfVxyXG5cclxuICAgICAgY29uc3QgbW9kZWxOb2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgICBsZXQgY29tcG9uZW50ID0gbnVsbDtcclxuICAgICAgY29uc3QgaW5pdGlhbCA9IHtcclxuICAgICAgICB1cmw6IGAvYXNzZXRzLzNEb2JqZWN0cy9vYmplY3RzLyR7b2JqLm9iamVjdH0ke29iai5mb3JtYXQuaW5kZXhPZignLicpID09PSAtMSA/ICcuJyArIG9iai5mb3JtYXQgOiBvYmouZm9ybWF0XHJcbiAgICAgICAgICB9YCxcclxuICAgICAgICAvLyBUT0RPLyBzdG9yZSBsb2NhbFBvc2l0aW9uICYmIGxvY2FsUm90YXRpb24gaW4gQkREIHRvbyAoaW4gb3JkZXIgdG8gaGF2ZSBwZXJ0ZmVjdCBpbml0aWFsIHBsYWNlbWVudClcclxuICAgICAgICBsb2NhbFJvdGF0aW9uOiB7IFwieFwiOiAwLCBcInlcIjogMCwgXCJ6XCI6IDAgfSxcclxuICAgICAgICAvLyBUT0RPLyBzdG9yZSBsb2NhbFBvc2l0aW9uICYmIGxvY2FsUm90YXRpb24gaW4gQkREIHRvbyAoaW4gb3JkZXIgdG8gaGF2ZSBwZXJ0ZmVjdCBpbml0aWFsIHBsYWNlbWVudClcclxuICAgICAgICBsb2NhbFBvc2l0aW9uOiB7IFwieFwiOiAwLCBcInlcIjogMCwgXCJ6XCI6IDAgfSxcclxuICAgICAgICB2aXNpYmxlOiB0cnVlLFxyXG4gICAgICAgIGNvbGxpZGVyRW5hYmxlZDogdHJ1ZVxyXG4gICAgICB9O1xyXG5cclxuXHJcbiAgICAgIHN3aXRjaCAob2JqLmZvcm1hdCkge1xyXG4gICAgICAgIGNhc2UgJy5vYmonOlxyXG4gICAgICAgIGNhc2UgJ29iaic6XHJcbiAgICAgICAgICBjb21wb25lbnQgPSBtb2RlbE5vZGUuYWRkQ29tcG9uZW50KCdtcC5vYmpMb2FkZXInLCBpbml0aWFsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJy5mYngnOlxyXG4gICAgICAgIGNhc2UgJ2ZieCc6XHJcbiAgICAgICAgICBjb21wb25lbnQgPSBtb2RlbE5vZGUuYWRkQ29tcG9uZW50KCdtcC5mYnhMb2FkZXInLCBpbml0aWFsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJy5nbHRmJzpcclxuICAgICAgICBjYXNlICdnbHRmJzpcclxuICAgICAgICAgIGNvbXBvbmVudCA9IG1vZGVsTm9kZS5hZGRDb21wb25lbnQoJ21wLmdsdGZMb2FkZXInLCBpbml0aWFsKTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIGNhc2UgJy5nbGInOlxyXG4gICAgICAgIGNhc2UgJ2dsYic6XHJcbiAgICAgICAgICBjb21wb25lbnQgPSBtb2RlbE5vZGUuYWRkQ29tcG9uZW50KCdtcC5nbHRmTG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgICBjYXNlICcuZGFlJzpcclxuICAgICAgICBjYXNlICdkYWUnOlxyXG4gICAgICAgICAgY29tcG9uZW50ID0gbW9kZWxOb2RlLmFkZENvbXBvbmVudCgnbXAuZGFlTG9hZGVyJywgaW5pdGlhbCk7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIGNvbnNvbGUubG9nKCdGb3JtYXQgbm90IHN1cHBvcnRlZCcpO1xyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vY2FjaGUgc3lzdGVtIChpJ2xsIHRyeSB0byBtYWtlIGl0IHdvcmsgbGF0ZXIgLi4uKVxyXG4gICAgICAvKmxldCBvYmpDb250ZW50c0pTT04gPSBKU09OLnN0cmluZ2lmeShtb2RlbE5vZGUpO1xyXG4gICAgICBjb25zb2xlLmxvZyhtb2RlbE5vZGUpO1xyXG4gICAgICBjb25zb2xlLmxvZyhvYmpDb250ZW50c0pTT04pO1xyXG4gICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShtb2RlbE5vZGUpKTtcclxuICAgICAgbG9jYWxTdG9yYWdlLnNldEl0ZW0oYHRlc3RPYmpfJHtvYmoub2JqZWN0fWAsIG9iakNvbnRlbnRzSlNPTik7XHJcbiAgICAgIGNvbnNvbGUubG9nKFwic3RvcmVkID8hXCIpO1xyXG4gICAgICBjb25zb2xlLmxvZyh0eXBlb2YgbW9kZWxOb2RlKTsqL1xyXG4gICAgICAvL2xldCBkYXRhUyA9IHNlcmlhbGlqc2Uuc2VyaWFsaXplKG1vZGVsTm9kZSk7XHJcbiAgICAgIC8vY29uc29sZS5sb2coZGF0YVMpO1xyXG5cclxuICAgICAgLy8gVXNlIDMgPyEgQW1iaWVudCBsaWdodGluZ3NcclxuICAgICAgaWYgKHRoaXMubm9MaWdodEZvck9iamVjdHMpIHtcclxuICAgICAgICBjb25zdCBsaWdodHNOb2RlID0gc2NlbmVPYmplY3QuYWRkTm9kZSgpO1xyXG4gICAgICAgIGxpZ2h0c05vZGUuYWRkQ29tcG9uZW50KCdtcC5hbWJpZW50TGlnaHQnLCB7XHJcbiAgICAgICAgICBpbnRlbnNpdHk6IDEsXHJcbiAgICAgICAgICBjb2xvcjogeyByOiAxLjAsIGc6IDEuMCwgYjogMS4wIH0sXHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgdGhpcy5ub0xpZ2h0Rm9yT2JqZWN0cyA9IGZhbHNlO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBtb2RlbE5vZGUub2JqM0QucG9zaXRpb24uc2V0KFxyXG4gICAgICAgIG9iai5wb3NpdGlvbi54LFxyXG4gICAgICAgIG9iai5wb3NpdGlvbi55LFxyXG4gICAgICAgIG9iai5wb3NpdGlvbi56XHJcbiAgICAgICk7XHJcblxyXG4gICAgICBtb2RlbE5vZGUub2JqM0Qucm90YXRpb24uc2V0KFxyXG4gICAgICAgIG9iai5yb3RhdGlvbi54LFxyXG4gICAgICAgIG9iai5yb3RhdGlvbi55LFxyXG4gICAgICAgIG9iai5yb3RhdGlvbi56XHJcbiAgICAgICk7XHJcbiAgICAgIG1vZGVsTm9kZS5vYmozRC5zY2FsZS5zZXQob2JqLnNjYWxlLngsIG9iai5zY2FsZS55LCBvYmouc2NhbGUueik7XHJcbiAgICAgIGlmIChpc0F6aW11dGhhbENyb3duKSB7XHJcbiAgICAgICAgLyppZihtb2RlbE5vZGUub2JqM0Quc2NhbGUueCA+PSAxLjApe1xyXG4gICAgICAgICAgbW9kZWxOb2RlLm9iajNELnNjYWxlLnNldChvYmouc2NhbGUueC81MDAwLCBvYmouc2NhbGUueS81MDAwLCBvYmouc2NhbGUuei81MDAwKTtcclxuICAgICAgICB9Ki9cclxuICAgICAgICB0aGlzLmF6aW11dGhhbENyb3duID0gbW9kZWxOb2RlO1xyXG4gICAgICAgIHRoaXMuZGlzcGxheUF6aW11dGFsQ3Jvd24oKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy8gQnkgZGVmYXV0LCBkdXJpbmcgY3JlYXRpb24sIG9iamVjdCBoYXMgdHJhbnNsYXRpb24gZ2l6bW9cclxuICAgICAgLy8gPT4gVXNlciBoYXMgdG8gY2xpY2sgb24gbGF0ZXJhbCBwYW5lbCwgYW5kIHNhdmUgaXRzIHBvc2l0aW9uIGFmdGVyIHBsYXlpbmcgd2l0aCBpdCFcclxuICAgICAgaWYgKG1vZGUgJiYgIWlzTmVzdFRoZXJtb3N0YXQpIHtcclxuICAgICAgICB0aGlzLmF0dGFjaEdpem1vQ29udHJvbFRvM0RPYmplY3QoXHJcbiAgICAgICAgICBtb2RlbE5vZGUsXHJcbiAgICAgICAgICBzY2VuZU9iamVjdCxcclxuICAgICAgICAgIG1vZGUsXHJcbiAgICAgICAgICB0cnVlLFxyXG4gICAgICAgICAgdHJ1ZVxyXG4gICAgICAgICkuY2F0Y2goKGUpID0+IGNvbnNvbGUubG9nKGUpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHRoaXMubGFzdE9iamVjdDNEICYmIHR5cGVvZiB0aGlzLmxhc3RPYmplY3QzRC5pZCA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAvLyBwcm9tcHQgVGhyZWVKUyBVVUlEIHRvIG1hdGNoIG91ciBsYXN0IGdlbmVyYXRlZCBvYmplY3QgaWYgbmV3IChub3QgZnJvbSBEYilcclxuICAgICAgICBtb2RlbE5vZGUub2JqM0QudXVpZCA9IHRoaXMubGFzdE9iamVjdDNELmlkO1xyXG4gICAgICB9IGVsc2UgaWYgKG9iai5pZCkge1xyXG4gICAgICAgIG1vZGVsTm9kZS5vYmozRC51dWlkID0gb2JqLmlkO1xyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFzdE9iamVjdDNEID0gbW9kZWxOb2RlLm9iajNEO1xyXG5cclxuICAgICAgLy8gU3RvcmUgdGhpcyBpbiBtZW1vcnkgTWFwIGRpY3Rpb25uYXJ5XHJcbiAgICAgIC8vY29uc29sZS5sb2coXCJBZGRpbmcgb2JqZWN0OiBcIik7XHJcbiAgICAgIC8vY29uc29sZS5sb2cobW9kZWxOb2RlKTtcclxuICAgICAgdGhpcy5kaWN0aW9ubmFyeU9iamVjdHMzRC5zZXQobW9kZWxOb2RlLm9iajNELnV1aWQsIG1vZGVsTm9kZSk7XHJcbiAgICAgIHRoaXMuZGljdGlvbm5hcnlTY2VuZU9iamVjdHMzRC5zZXQobW9kZWxOb2RlLm9iajNELnV1aWQsIHNjZW5lT2JqZWN0KTtcclxuXHJcbiAgICAgIC8qdGhpcy5zZGsuQ2FtZXJhLnBvc2Uuc3Vic2NyaWJlKFxyXG4gICAgICAgIGZ1bmN0aW9uIChwb3NlOiBhbnkpIHtcclxuICAgICAgICAgIC8vY29uc29sZS5sb2coXCJpbiBjYWxsYmFja1wiKVxyXG4gICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLmxhc3RDYW1lcmFQb3NpdGlvbilcclxuICAgICAgICAgIC8vY29uc29sZS5sb2cocG9zZS5wb3NpdGlvbilcclxuICAgICAgICAgIGlmKChwb3NlLnBvc2l0aW9uLnggPT0gdGhpcy5sYXN0Q2FtZXJhUG9zaXRpb24ueCAmJiBwb3NlLnBvc2l0aW9uLnkgPT0gdGhpcy5sYXN0Q2FtZXJhUG9zaXRpb24ueSAmJiBwb3NlLnBvc2l0aW9uLnogPT0gdGhpcy5sYXN0Q2FtZXJhUG9zaXRpb24ueikgfHwgdGhpcy5pblRyYW5zaXRpb25Nb2RlIHx8IHRoaXMuaW5UcmFuc2l0aW9uU3dlZXApe1xyXG4gICAgICAgICAgICAvL2NvbnNvbGUubG9nKFwicmV0dXJuaW5nXCIpXHJcbiAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgIH1cclxuICAgICAgICAgIGNvbnNvbGUubG9nKFwiY2FtZXJhIHBvczpcIixwb3NlLnBvc2l0aW9uKTtcclxuICAgICAgICAgIHRoaXMubGFzdENhbWVyYVBvc2l0aW9uID0gey4uLnBvc2UucG9zaXRpb259O1xyXG4gICAgICAgICAgaWYodGhpcy5sYXN0T2JqZWN0M0Qpe1xyXG4gICAgICAgICAgICB0aGlzLmxhc3RPYmplY3QzRC5wb3NpdGlvbi5zZXQocG9zZS5wb3NpdGlvbi54Ky41LHBvc2UucG9zaXRpb24ueSsuNSxwb3NlLnBvc2l0aW9uLnorLjUpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH0uYmluZCh0aGlzKSk7Ki9cclxuXHJcbiAgICAgIGlmIChpc0FuaW1hdGVkU2VjdXJpdHlDYW1lcmEpIHtcclxuXHJcbiAgICAgICAgY29uc3QgYW5pbWF0b3IgPSBtb2RlbE5vZGUuYWRkQ29tcG9uZW50KCdtcC5zZWN1cml0eUNhbWVyYScsXHJcbiAgICAgICAgICB7XHJcbiAgICAgICAgICAgIFwibmVhclBsYW5lXCI6IDAuMSxcclxuICAgICAgICAgICAgXCJmYXJQbGFuZVwiOiAxMCxcclxuICAgICAgICAgICAgXCJob3Jpem9udGFsRk9WXCI6IDUyLFxyXG4gICAgICAgICAgICBcImFzcGVjdFwiOiAxLjc3Nzc3Nzc3Nzc3Nzc3NzcsXHJcbiAgICAgICAgICAgIFwibG9jYWxQb3NpdGlvblwiOiB7XHJcbiAgICAgICAgICAgICAgXCJ4XCI6IDAuMyxcclxuICAgICAgICAgICAgICBcInlcIjogMC4xOCxcclxuICAgICAgICAgICAgICBcInpcIjogMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImxvY2FsUm90YXRpb25cIjoge1xyXG4gICAgICAgICAgICAgIFwieFwiOiAtMTUsXHJcbiAgICAgICAgICAgICAgXCJ5XCI6IC05MCxcclxuICAgICAgICAgICAgICBcInpcIjogMFxyXG4gICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICBcImNvbG9yXCI6IDY1MjgwLFxyXG4gICAgICAgICAgICBcInBhblBlcmlvZFwiOiA1LFxyXG4gICAgICAgICAgICBcInBhbkFuZ2xlXCI6IC00NVxyXG4gICAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgbW9kZWxPdXRwdXQgPSBzY2VuZU9iamVjdC5hZGRQYXRoKHtcclxuICAgICAgICAgIGlkOiAnYW5pbWF0ZWQtbW9kZWwnLFxyXG4gICAgICAgICAgdHlwZTogdGhpcy5zZGsuU2NlbmUuUGF0aFR5cGUuT1VUUFVULFxyXG4gICAgICAgICAgbm9kZTogbW9kZWxOb2RlLFxyXG4gICAgICAgICAgY29tcG9uZW50OiBhbmltYXRvcixcclxuICAgICAgICAgIHByb3BlcnR5OiAnb2JqZWN0Um9vdCdcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdGhpcy5zZWN1cml0eUNhbWVyYUFuaW1hdG9yID0gYW5pbWF0b3I7XHJcbiAgICAgICAgaWYgKCFvYmoudmlld0ZydXN0dW0pIHtcclxuICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICBhbmltYXRvci50b2dnbGVWaWV3RnJ1c3R1bSgpO1xyXG4gICAgICAgICAgfSwgMTAwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoaXNOZXN0VGhlcm1vc3RhdCkge1xyXG4gICAgICAgIC8vIFRPRE86IHVzZSBiaW5kUGF0aCBpbnN0ZWFkIHVzaW5nIE1QIHNkayBjbGFzc2VzIChzZWUgU2VjdXJpdHkgQ2FtZXJhIGV4YW1wbGUpXHJcbiAgICAgICAgLy8gZm9yIFRWIHVzZXMgQ2FudmFzSW1hZ2UgYmVsb3chXHJcbiAgICAgICAgLy8gY29uc3QgY2kgPSBuZXcgQ2FudmFzSW1hZ2UoKTtcclxuICAgICAgICAvLyBjaS5vbkluaXQoKTtcclxuICAgICAgICBjb25zdCBjdiA9IG5ldyBDYW52YXNSZW5kZXJlcigpO1xyXG4gICAgICAgIGN2Lm9uSW5pdCgpO1xyXG4gICAgICAgIGNvbnN0IHBsYW5lID0gbmV3IFBsYW5lUmVuZGVyZXIoKTtcclxuICAgICAgICBwbGFuZS5vdXRwdXRzID0ge1xyXG4gICAgICAgICAgb2JqZWN0Um9vdDogbmV3IE9iamVjdDNEKCksXHJcbiAgICAgICAgICBjb2xsaWRlcjogbmV3IE9iamVjdDNEKClcclxuICAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IGlucHV0VGV4dHVyZSA9IGN2Lm91dHB1dHMudGV4dHVyZTtcclxuICAgICAgICBwbGFuZS5zZXRSb290U2NlbmUodGhpcy50aHJlZUpTU2NlbmUpO1xyXG4gICAgICAgIHBsYW5lLm9uSW5pdChtb2RlbE5vZGUsIGlucHV0VGV4dHVyZSk7XHJcbiAgICAgICAgY29uc3Qgc2MgPSBuZXcgTmVzdFRoZXJtb3N0YXQoKTtcclxuICAgICAgICBzYy5zZXRDb21wb25lbnQoY29tcG9uZW50LCBwbGFuZSwgY3YpO1xyXG4gICAgICAgIHNjLnNldFJvb3RTY2VuZSh0aGlzLnRocmVlSlNTY2VuZSk7XHJcbiAgICAgICAgc2Mub25Jbml0KG1vZGVsTm9kZSwgcGxhbmUsIGlucHV0VGV4dHVyZSk7XHJcbiAgICAgICAgY3Yuc2V0Q2FudmFzTmVzdFRoZXJtb3N0YXRQYWludGVyKHNjKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHNjLmlucHV0cy5sb2FkaW5nU3RhdGUgPSBcIkxvYWRlZFwiO1xyXG4gICAgICAgICAgc2Mub25JbnB1dHNVcGRhdGVkKCk7XHJcbiAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChpc1NtYXJ0ZXJwbGFuUHJvbW90aW9uYWxWaWRlbykge1xyXG4gICAgICAgIC8vIFRPRE86IHVzZSBiaW5kUGF0aCBpbnN0ZWFkIHVzaW5nIE1QIHNkayBjbGFzc2VzIChzZWUgU2VjdXJpdHkgQ2FtZXJhIGV4YW1wbGUpXHJcbiAgICAgICAgY29uc3Qgc2MgPSBuZXcgVHZQbGF5ZXIoKTtcclxuICAgICAgICBzYy5zZXRDb21wb25lbnQoY29tcG9uZW50KTtcclxuICAgICAgICBzYy5vbkluaXQobW9kZWxOb2RlKTtcclxuICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcclxuICAgICAgICAgIHNjLmlucHV0cy5sb2FkaW5nU3RhdGUgPSBcIkxvYWRlZFwiO1xyXG4gICAgICAgICAgc2Mub25JbnB1dHNVcGRhdGVkKCk7XHJcbiAgICAgICAgfSwgNTAwMCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHNjZW5lT2JqZWN0LnN0YXJ0KCk7XHJcbiAgICAgIHJlc29sdmUodGhpcy5sYXN0T2JqZWN0M0QpO1xyXG4gICAgfSk7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVPYmplY3RWaXNpYmlsaXR5KG9iamVjdElkOiBhbnkpIHtcclxuICAgIGxldCBvYmogPSB0aGlzLmRpY3Rpb25uYXJ5T2JqZWN0czNELmdldChvYmplY3RJZCk7XHJcbiAgICBvYmoub2JqM0QudmlzaWJsZSA9ICFvYmoub2JqM0QudmlzaWJsZTtcclxuICB9XHJcblxyXG4gIGlzT2JqZWN0VmlzaWJsZShvYmplY3RJZDogYW55KTogYm9vbGVhbiB7XHJcbiAgICBsZXQgb2JqID0gdGhpcy5kaWN0aW9ubmFyeU9iamVjdHMzRC5nZXQob2JqZWN0SWQpO1xyXG4gICAgcmV0dXJuIG9iai5vYmozRC52aXNpYmxlO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgcG9pbnRDYW1lcmFUbzNET2JqZWN0KG9iamVjdElkOiBhbnkpIHtcclxuICAgIGxldCBvYmogPSB0aGlzLmRpY3Rpb25uYXJ5T2JqZWN0czNELmdldChvYmplY3RJZCk7XHJcblxyXG4gICAgLy9XZSBjcmVhdGUgYSB0ZW1wb3JhcnkgVGFnXHJcbiAgICBjb25zdCBwb2lPYmplY3QgPSB7XHJcbiAgICAgIGNvb3JkaW5hdGU6IEpTT04uc3RyaW5naWZ5KG9iai5vYmozRC5wb3NpdGlvbiksXHJcbiAgICAgIHR5cGU6IFBvaVR5cGUuT0JKRUNUM0QsXHJcbiAgICAgIGVsZW1lbnRJRDogb2JqZWN0SWQsIC8vdG9kbzogYmUgY2FyZWZ1bCB3aXRoIHRoaXNcclxuICAgIH0gYXMgUE9JO1xyXG4gICAgY29uc3Qgb2JqZWN0RGIgPSB7IGlkOiBvYmplY3RJZCB9IGFzIERiT2JqZWN0VHlwZTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBhd2FpdCB0aGlzLmNyZWF0ZU1hdHRlcnRhZ0Zyb21QT0koUG9pVHlwZS5PQkpFQ1QzRCwgb2JqZWN0RGIsIHBvaU9iamVjdCk7XHJcbiAgICB9IGNhdGNoIChlcnI6IGFueSkgeyB9XHJcblxyXG4gICAgLy9Ob3QgcmVhbGx5IG5lY2Vzc2FyeSBhbnltb3JlIHNpbmNlIHRoZSB0YWcgd2lsbCBkaXNhcHBlYXIgcXVpY2tcclxuICAgIC8vdGhpcy5zZGsuVGFnLmVkaXRPcGFjaXR5KG1hdHRlcnRhZ0lELCAwLjApOy8vb3BhY2l0eSk7XHJcbiAgICAvL3RoaXMuc2RrLlRhZy5hbGxvd0FjdGlvbihtYXR0ZXJ0YWdJRCwge30pOyAvL2Rpc2FibGVzIGV2ZXJ5IGFjdGlvblxyXG5cclxuICAgIGxldCByZXN1bHQgPSB0aGlzLmdldFRhZ0Zyb21FbGVtZW50SWQob2JqZWN0SWQpO1xyXG5cclxuICAgIGF3YWl0IHRoaXMuZ29Ub1RhZyhyZXN1bHQudGFnKTtcclxuICAgIHRoaXMuZGVsZXRlTGFzdE1hdHRlcnRhZygpO1xyXG4gIH1cclxuXHJcbiAgZ2V0U2NlbmVOb2RlRnJvbU9iamVjdDNESWQodXVpZDogc3RyaW5nKTogYW55IHtcclxuICAgIHJldHVybiB0aGlzLmRpY3Rpb25uYXJ5U2NlbmVPYmplY3RzM0QuZ2V0KHV1aWQpO1xyXG4gIH1cclxuXHJcbiAgYXN5bmMgZGlzcGxheUF6aW11dGFsQ3Jvd24oKSB7XHJcbiAgICBpZiAodGhpcy5hemltdXRoYWxDcm93bikge1xyXG4gICAgICB0aGlzLmF6aW11dGhhbENyb3duLm9iajNELnBvc2l0aW9uLnNldCh0aGlzLnBvc2VDYW1lcmEucG9zaXRpb24ueCwgdGhpcy5wb3NlQ2FtZXJhLnBvc2l0aW9uLnksIHRoaXMucG9zZUNhbWVyYS5wb3NpdGlvbi56KVxyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgYXN5bmMgYXR0YWNoR2l6bW9Db250cm9sVG8zRE9iamVjdChcclxuICAgIG1vZGVsTm9kZTogYW55LFxyXG4gICAgc2NlbmVPYmplY3Q6IGFueSxcclxuICAgIG1vZGU6ICd0cmFuc2xhdGUnIHwgJ3JvdGF0ZScgfCAnc2NhbGUnLFxyXG4gICAgdmlzaWJsZTogYm9vbGVhbixcclxuICAgIGlzTmV3T2JqZWN0OiBib29sZWFuXHJcbiAgKTogUHJvbWlzZTxhbnk+IHtcclxuICAgIC8vIENyZWF0ZSBhIHNjZW5lIG5vZGUgd2l0aCBhIHRyYW5zZm9ybSBjb250cm9sIGNvbXBvbmVudC5cclxuICAgIGxldCBub2RlID0gbnVsbDtcclxuICAgIG5vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcbiAgICBpZiAoIW5vZGUpIHtcclxuICAgICAgY29uc3QgW3NjZW5lT2JqZWN0XSA9IGF3YWl0IHRoaXMuc2RrLlNjZW5lLmNyZWF0ZU9iamVjdHMoMSk7XHJcbiAgICAgIG5vZGUgPSBzY2VuZU9iamVjdC5hZGROb2RlKCk7XHJcbiAgICB9XHJcblxyXG4gICAgY29uc3QgbXlDb250cm9sID0gbm9kZS5hZGRDb21wb25lbnQoJ21wLnRyYW5zZm9ybUNvbnRyb2xzJyk7XHJcbiAgICBub2RlLnN0YXJ0KCk7XHJcbiAgICAvL1xyXG4gICAgLy8gLy8gTWFrZSB0aGUgdHJhbnNmb3JtIGNvbnRyb2wgdmlzaWJsZSBzbyB0aGF0IHRoZSB1c2VyIGNhbiBtYW5pcHVsYXRlIHRoZSBjb250cm9sIHNlbGVjdGlvbi5cclxuICAgIG15Q29udHJvbC50cmFuc2Zvcm1Db250cm9scy52aXNpYmxlID0gdmlzaWJsZTtcclxuICAgIC8vXHJcbiAgICAvLyAvLyBBdHRhY2ggdGhlIG1vZGVsIHRvIHRoZSB0cmFuc2Zvcm0gY29udHJvbFxyXG4gICAgbXlDb250cm9sLmlucHV0cy5zZWxlY3Rpb24gPSBtb2RlbE5vZGU7XHJcbiAgICAvL1xyXG4gICAgLy8gLy8gc2V0ICd0cmFuc2xhdGUnIG1vZGUgdG8gcG9zaXRpb24gdGhlIHNlbGVjdGlvbi5cclxuICAgIG15Q29udHJvbC5pbnB1dHMubW9kZSA9IG1vZGU7XHJcbiAgICBtb2RlbE5vZGUub2JqM0QuY29udHJvbHMgPSBteUNvbnRyb2w7IC8vIHN0b3JlIGdpem1vQ3RybCBpbnNpZGUgb2JqZWN0XHJcbiAgICBpZiAoaXNOZXdPYmplY3QpIHsgLy9pIGtlZXAgdGhlIGN1cnJlbnQgc29sdXRpb24gZm9yIG5ldyBvYmplY3RzXHJcbiAgICAgIGlmICghdGhpcy5sYXN0T2JqZWN0M0QgfHwgIXRoaXMubGFzdE9iamVjdDNELmNvbnRyb2xzKSB7XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgIG1vZGVsTm9kZS5vYmozRC51dWlkID0gdGhpcy5sYXN0T2JqZWN0M0QudXVpZCB8fCB0aGlzLmxhc3RPYmplY3QzRC5pZDtcclxuICAgICAgICB9IGNhdGNoIChlKSB7XHJcbiAgICAgICAgICBjb25zb2xlLmxvZyhgaWQgb2JqIGluIFNjZW5lIHdhcyBub3QgYXNzaWduZWQgdG8gaWQgZnJvbSBEQiBzaW5jZWApO1xyXG4gICAgICAgIH1cclxuICAgICAgICB0aGlzLmxhc3RPYmplY3QzRCA9IG1vZGVsTm9kZS5vYmozRDtcclxuICAgICAgfVxyXG4gICAgfSBlbHNlIHsvL29iamVjdHMgYWxyZWFkeSBpbiBwbGFjZSBoYXZlIHRvIGJlY29tZSB0aGUgXCJsYXN0T2JqZWN0XCIgKGkgdGhpbms/KVxyXG4gICAgICBjb25zb2xlLmxvZyhcImluIG15IHNvbHV0aW9uICFcIik7XHJcbiAgICAgIGNvbnNvbGUubG9nKG1vZGVsTm9kZSk7XHJcbiAgICAgIGNvbnNvbGUubG9nKG1vZGVsTm9kZS5vYmozRC51dWlkKTtcclxuICAgICAgdGhpcy5sYXN0T2JqZWN0M0QgPSBtb2RlbE5vZGUub2JqM0Q7XHJcbiAgICB9XHJcblxyXG4gICAgcmV0dXJuIG1vZGVsTm9kZTtcclxuICB9XHJcblxyXG4gIHJlbW92ZUdpem1vRnJvbUxhc3RPYmplY3QoKTogdm9pZCB7XHJcbiAgICB0aGlzLmxhc3RPYmplY3QzRC5jb250cm9scy50cmFuc2Zvcm1Db250cm9scy52aXNpYmxlID0gZmFsc2U7XHJcbiAgICB0aGlzLmxhc3RPYmplY3QzRC5jb250cm9scy50cmFuc2Zvcm1Db250cm9scy5kaXNwb3NlKCk7XHJcbiAgICB0aGlzLmxhc3RPYmplY3QzRC5jb250cm9scyA9IG51bGw7XHJcbiAgfVxyXG5cclxuICB0b2dnbGVWaWV3RnJ1c3R1bSgpOiB2b2lkIHtcclxuICAgIHRoaXMuc2VjdXJpdHlDYW1lcmFBbmltYXRvci50b2dnbGVWaWV3RnJ1c3R1bSgpO1xyXG4gIH1cclxuXHJcbiAgLypwdWJsaWMgc2V0M0RPYmplY3RNb2RlKG1vZGVsTm9kZTogYW55LCBtb2RlPzogc3RyaW5nKSB7XHJcbiAgICBpZiAobW9kZSkge1xyXG4gICAgICB0aGlzLm9iamVjdENvbnRyb2wuaW5wdXRzLnNlbGVjdGlvbiA9IG1vZGVsTm9kZTtcclxuICAgICAgdGhpcy5vYmplY3RDb250cm9sLmlucHV0cy52aXNpYmxlID0gdHJ1ZTtcclxuICAgICAgdGhpcy5vYmplY3RDb250cm9sLmlucHV0cy5tb2RlID0gbW9kZTtcclxuIFxyXG4gICAgICBzZXRJbnRlcnZhbCgoKSA9PiB7XHJcbiAgICAgICAgY29uc29sZS5sb2cobW9kZWxOb2RlKTtcclxuICAgICAgfSwgNTAwMCk7XHJcbiBcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMub2JqZWN0Q29udHJvbC5pbnB1dHMudmlzaWJsZSA9IHRydWU7XHJcbiAgICB9XHJcbiAgfSovXHJcbn1cclxuIl19