@smarterplan/ngx-smarterplan-core 1.3.2 → 1.3.4
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.
- package/esm2020/lib/components/csv-export/csv-export.component.mjs +4 -4
- package/esm2020/lib/components/loader/loader.component.mjs +4 -4
- package/esm2020/lib/components/menu-bar/avatar/avatar.component.mjs +4 -4
- package/esm2020/lib/components/menu-bar/menu-bar.component.mjs +5 -5
- package/esm2020/lib/components/menu-bar/navigation-bar/navigation-bar.component.mjs +5 -6
- package/esm2020/lib/components/modal-switch-visit/modal-switch-visit.component.mjs +4 -4
- package/esm2020/lib/components/search-bar/search-bar.component.mjs +4 -4
- package/esm2020/lib/components/support-modal/support-modal.component.mjs +4 -4
- package/esm2020/lib/ngx-smarterplan-core.module.mjs +5 -5
- package/esm2020/lib/ngx-smarterplan-core.service.mjs +4 -4
- package/esm2020/lib/pipes/duration-to-string.pipe.mjs +7 -7
- package/esm2020/lib/pipes/format-date-number-to-digits.pipe.mjs +4 -4
- package/esm2020/lib/pipes/hashtag-from-id.pipe.mjs +4 -4
- package/esm2020/lib/pipes/safe-url.pipe.mjs +4 -4
- package/esm2020/lib/pipes/time-date-to-local-string.pipe.mjs +7 -7
- package/esm2020/lib/pipes/username-from-id.pipe.mjs +4 -4
- package/esm2020/lib/services/amplify-cache.service.mjs +4 -4
- package/esm2020/lib/services/base-tab.service.mjs +4 -4
- package/esm2020/lib/services/baseVisibility.service.mjs +4 -4
- package/esm2020/lib/services/content.service.mjs +4 -4
- package/esm2020/lib/services/filter.service.mjs +4 -4
- package/esm2020/lib/services/intervention.service.mjs +4 -4
- package/esm2020/lib/services/locale.service.mjs +4 -4
- package/esm2020/lib/services/matterport-import.service.mjs +16 -16
- package/esm2020/lib/services/matterport.service.mjs +10 -10
- package/esm2020/lib/services/models/affectation.service.mjs +4 -4
- package/esm2020/lib/services/models/base-object.service.mjs +4 -4
- package/esm2020/lib/services/models/capture.service.mjs +4 -4
- package/esm2020/lib/services/models/comment.service.mjs +4 -4
- package/esm2020/lib/services/models/domain.service.mjs +4 -4
- package/esm2020/lib/services/models/equipment.service.mjs +4 -4
- package/esm2020/lib/services/models/event.service.mjs +4 -4
- package/esm2020/lib/services/models/feature.service.mjs +4 -4
- package/esm2020/lib/services/models/hashtag.service.mjs +4 -4
- package/esm2020/lib/services/models/layer.service.mjs +4 -4
- package/esm2020/lib/services/models/measurement.service.mjs +4 -4
- package/esm2020/lib/services/models/mission.service.mjs +4 -4
- package/esm2020/lib/services/models/navigation.service.mjs +4 -4
- package/esm2020/lib/services/models/node.service.mjs +4 -4
- package/esm2020/lib/services/models/object3D.service.mjs +4 -4
- package/esm2020/lib/services/models/operation.service.mjs +4 -4
- package/esm2020/lib/services/models/organisation.service.mjs +4 -4
- package/esm2020/lib/services/models/plan.service.mjs +4 -4
- package/esm2020/lib/services/models/poi.service.mjs +4 -4
- package/esm2020/lib/services/models/profile.service.mjs +4 -4
- package/esm2020/lib/services/models/property.service.mjs +4 -4
- package/esm2020/lib/services/models/space.service.mjs +4 -4
- package/esm2020/lib/services/models/template.service.mjs +4 -4
- package/esm2020/lib/services/models/ticket.service.mjs +4 -4
- package/esm2020/lib/services/models/visit.service.mjs +4 -4
- package/esm2020/lib/services/models/zone.service.mjs +4 -4
- package/esm2020/lib/services/navigator.service.mjs +4 -4
- package/esm2020/lib/services/search.service.mjs +4 -4
- package/esm2020/lib/services/support.service.mjs +4 -4
- package/esm2020/lib/services/tag.service.mjs +4 -4
- package/esm2020/lib/services/user.service.mjs +4 -4
- package/esm2020/lib/services/validators.service.mjs +4 -4
- package/esm2020/lib/services/viewer.service.mjs +4 -4
- package/esm2020/lib/services/zoneChange.service.mjs +4 -4
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs +203 -203
- package/fesm2015/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs +216 -203
- package/fesm2020/smarterplan-ngx-smarterplan-core.mjs.map +1 -1
- package/lib/components/csv-export/csv-export.component.d.ts +1 -1
- package/lib/components/loader/loader.component.d.ts +1 -1
- package/lib/components/menu-bar/avatar/avatar.component.d.ts +1 -1
- package/lib/components/menu-bar/menu-bar.component.d.ts +1 -1
- package/lib/components/menu-bar/navigation-bar/navigation-bar.component.d.ts +1 -1
- package/lib/components/modal-switch-visit/modal-switch-visit.component.d.ts +1 -1
- package/lib/components/search-bar/search-bar.component.d.ts +1 -1
- package/lib/components/support-modal/support-modal.component.d.ts +1 -1
- package/lib/matterport-extensions/hsl-loader/HlsLoader.d.ts +2 -2
- package/lib/matterport-extensions/nest-thermostat/CanvasImage.d.ts +2 -2
- package/lib/matterport-extensions/nest-thermostat/CanvasRenderer.d.ts +3 -3
- package/lib/matterport-extensions/nest-thermostat/NestThermostat.d.ts +2 -2
- package/lib/matterport-extensions/nest-thermostat/PlaneRenderer.d.ts +2 -2
- package/lib/matterport-extensions/scene-component/SceneComponent.d.ts +3 -3
- package/lib/matterport-extensions/tv-player/TvPlayer.d.ts +1 -1
- package/lib/matterport-extensions/video-renderer/VideoRenderer.d.ts +2 -2
- package/lib/types.service.d.ts +36 -36
- package/package.json +4 -4
|
@@ -592,12 +592,12 @@ export class FilterService {
|
|
|
592
592
|
return finalFeatures;
|
|
593
593
|
}
|
|
594
594
|
}
|
|
595
|
-
FilterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
596
|
-
FilterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
597
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
595
|
+
FilterService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterService, deps: [{ token: i1.BaseUserService }, { token: i2.ZoneService }, { token: i3.PoiService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
596
|
+
FilterService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterService, providedIn: "root" });
|
|
597
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: FilterService, decorators: [{
|
|
598
598
|
type: Injectable,
|
|
599
599
|
args: [{
|
|
600
600
|
providedIn: "root",
|
|
601
601
|
}]
|
|
602
602
|
}], ctorParameters: function () { return [{ type: i1.BaseUserService }, { type: i2.ZoneService }, { type: i3.PoiService }]; } });
|
|
603
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsSSxPQUFPLEVBT0gsT0FBTyxFQUNQLGFBQWEsRUFDYixVQUFVLEVBT2IsTUFBTSxrQkFBa0IsQ0FBQztBQVkxQixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFSekMsSUFBSyxVQU9KO0FBUEQsV0FBSyxVQUFVO0lBQ1gsK0JBQWlCLENBQUE7SUFDakIsNkJBQWUsQ0FBQTtJQUNmLDJCQUFhLENBQUE7SUFDYiwyQkFBYSxDQUFBO0lBQ2IsNkJBQWUsQ0FBQTtJQUNmLGlDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFQSSxVQUFVLEtBQVYsVUFBVSxRQU9kO0FBS0QsTUFBTSxPQUFPLGFBQWE7SUFLdEIsWUFDWSxXQUE0QixFQUM1QixXQUF3QixFQUN4QixVQUFzQjtRQUZ0QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVAxQixxQkFBZ0IsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQVF0RCxDQUFDO0lBRUwscUJBQXFCLENBQUMsZUFBeUIsRUFBRSxNQUFjO1FBQzNELE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsZUFBc0IsRUFBRSxLQUFrQjtRQUMzRCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQzVDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUNwQyxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELHVCQUF1QixDQUNuQixlQUF5QixFQUN6QixPQUFnQjtRQUVoQixNQUFNLFlBQVksR0FBaUI7WUFDL0IsVUFBVSxDQUFDLE9BQU87WUFDbEIsVUFBVSxDQUFDLEtBQUs7WUFDaEIsVUFBVSxDQUFDLEtBQUs7U0FDbkIsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDckMsa0RBQWtEO2dCQUNsRCxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksZUFBZSxFQUFFO29CQUM3QixJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzlCLEtBQUssTUFBTSxVQUFVLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUU7NEJBQ3hDLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsRUFBRSxFQUFFO2dDQUNyQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUMzQjt5QkFDSjtxQkFDSjtpQkFDSjtnQkFDRCxPQUFPLGVBQWUsQ0FBQzthQUMxQjtZQUNELDhEQUE4RDtZQUM5RCxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDckMsT0FBTyxNQUFNLENBQUMsY0FBYyxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFnQjtRQUM5QixRQUFRLElBQUksRUFBRTtZQUNWLEtBQUssVUFBVSxDQUFDLEtBQUs7Z0JBQ2pCLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsS0FBSyxVQUFVLENBQUMsT0FBTztnQkFDbkIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLEtBQUssVUFBVSxDQUFDLEtBQUs7Z0JBQ2pCLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxLQUFLLFVBQVUsQ0FBQyxPQUFPO2dCQUNuQixPQUFPO29CQUNILFVBQVUsQ0FBQyxJQUFJO29CQUNmLFVBQVUsQ0FBQyxLQUFLO29CQUNoQixVQUFVLENBQUMsTUFBTTtvQkFDakIsVUFBVSxDQUFDLElBQUksRUFBRSxpQ0FBaUM7aUJBQ3JELENBQUM7WUFDTixLQUFLLFVBQVUsQ0FBQyxRQUFRO2dCQUNwQixPQUFPO29CQUNILFVBQVUsQ0FBQyxJQUFJO29CQUNmLFVBQVUsQ0FBQyxNQUFNO29CQUNqQixVQUFVLENBQUMsSUFBSTtvQkFDZixVQUFVLENBQUMsS0FBSztvQkFDaEIsVUFBVSxDQUFDLE9BQU87aUJBQ3JCLENBQUM7WUFDTixLQUFLLFVBQVUsQ0FBQyxPQUFPO2dCQUNuQixPQUFPO29CQUNILFVBQVUsQ0FBQyxJQUFJO29CQUNmLFVBQVUsQ0FBQyxLQUFLO29CQUNoQixVQUFVLENBQUMsTUFBTTtvQkFDakIsVUFBVSxDQUFDLElBQUk7b0JBQ2YsVUFBVSxDQUFDLE9BQU87aUJBQ3JCLENBQUM7WUFDTixLQUFLLFVBQVUsQ0FBQyxjQUFjO2dCQUMxQixPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRSxLQUFLLFVBQVUsQ0FBQyxZQUFZO2dCQUN4QixPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCO2dCQUNJLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGtDQUFrQyxDQUNwQyxPQUFtQixFQUNuQixPQUFlO1FBRWYsTUFBTSxjQUFjLEdBQWUsRUFBRSxDQUFDO1FBQ3RDLElBQUksV0FBVyxHQUFlLE9BQU8sQ0FBQztRQUN0QyxJQUFJLGFBQWEsR0FBZSxPQUFPLENBQUM7UUFDeEMsSUFBSSxZQUFZLEdBQWUsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO1FBQ2xELElBQUksUUFBUSxFQUFFO1lBQ1YsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQy9CLENBQUM7WUFDRixJQUFJLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFO29CQUM3QixJQUNJLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO3dCQUN6QixZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUM1Qjt3QkFDRSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUM1QjtpQkFDSjthQUNKO1NBQ0o7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLGtDQUFrQyxDQUNwQyxPQUFpQixFQUNqQixPQUFlO1FBRWYsTUFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLElBQUksV0FBVyxHQUFhLE9BQU8sQ0FBQztRQUNwQyxJQUFJLFlBQVksR0FBYSxPQUFPLENBQUM7UUFDckMsSUFBSSxhQUFhLEdBQWEsT0FBTyxDQUFDO1FBQ3RDLElBQUksWUFBWSxHQUFhLE9BQU8sQ0FBQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUNsRCxJQUFJLFFBQVEsRUFBRTtZQUNWLE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUMvQixDQUFDO1lBQ0YsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLFlBQVksR0FDZCwwQkFBMEIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLFdBQVcsR0FDYix5QkFBeUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNwRCxnRkFBZ0Y7Z0JBRWhGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7b0JBQzFCLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUU7d0JBQzlCLElBQUksT0FBTyxHQUFhLEVBQUUsQ0FBQzt3QkFDM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxvQkFBb0IsRUFBRTs0QkFDbEMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO2dDQUNYLE9BQU8sR0FBRyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzZCQUN4Qzt5QkFDSjt3QkFDRCxJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQzt3QkFDNUIsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUU7NEJBQ3JCLE1BQU0sa0JBQWtCLEdBQ3BCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQzNDLGtCQUFrQixHQUFHO2dDQUNqQixHQUFHLGtCQUFrQjtnQ0FDckIsR0FBRyxrQkFBa0I7NkJBQ3hCLENBQUM7eUJBQ0w7d0JBQ0QsV0FBVyxHQUFHLGtCQUFrQixDQUFDO3FCQUNwQztvQkFDRCxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsSUFBSSxFQUFFO3dCQUM1QixNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FDaEQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUNoQyxDQUFDO3dCQUNGLFlBQVksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQ3ZDLE9BQU8sRUFDUCxrQkFBa0IsQ0FDckIsQ0FBQztxQkFDTDtvQkFFRCxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsS0FBSyxFQUFFO3dCQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUNyQyxPQUFPLEVBQ1AsWUFBWSxDQUNmLENBQUM7cUJBQ0w7b0JBRUQsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRTt3QkFDNUIsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUNoRCxvQkFBb0IsRUFDcEIsT0FBTyxDQUNWLENBQUM7cUJBQ0w7aUJBQ0o7Z0JBQ0QsbURBQW1EO2dCQUNuRCw0QkFBNEI7Z0JBQzVCLDZCQUE2QjtnQkFDN0IsOEJBQThCO2dCQUM5Qiw2QkFBNkI7Z0JBQzdCLEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFO29CQUM3QixJQUNJLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO3dCQUN6QixZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQzt3QkFDMUIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFDNUI7d0JBQ0UsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDMUI7aUJBQ0o7YUFDSjtTQUNKO1FBQ0QsNkJBQTZCO1FBQzdCLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCwyQkFBMkIsQ0FDdkIsSUFBMkIsRUFDM0IsS0FBNEIsRUFDNUIsUUFBcUI7UUFFckIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQXdCO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQseUJBQXlCLENBQUMsT0FBYyxFQUFFLFNBQWlCO1FBQ3ZELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzdCLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqRCxPQUFPLENBQ0gsYUFBYSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxhQUFhLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUNqRSxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsOEJBQThCLENBQzFCLFlBQTJCLEVBQzNCLFNBQWlCO1FBRWpCLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUUzRSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksSUFBSSxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdELE9BQU8sWUFBWSxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRCxPQUFPLENBQ0gsYUFBYSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxhQUFhLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUNqRSxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUN0QixPQUFjLEVBQUUsMEJBQTBCO0lBQzFDLFNBQWlCLElBQUksRUFDckIsT0FBYSxJQUFJO1FBRWpCLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2hDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDYixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7b0JBQ2hFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7d0JBQ2hGLGdDQUFnQzt3QkFDaEMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDaEM7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUNwQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNoQztpQkFDSjthQUNKO1lBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFO2dCQUN4QixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQ2xELE1BQU0sQ0FDVCxDQUFDO2dCQUNGLElBQ0ksS0FBSztvQkFDTCxLQUFLLENBQUMsSUFBSSxDQUNOLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDTixLQUFLLENBQUMsRUFBRSxLQUFLLE1BQU07d0JBQ25CLEtBQUssQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUNoQyxFQUNIO29CQUNFLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ2hDO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ0YsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUVELDRCQUE0QixDQUN4QixVQUF1QixFQUN2QixZQUFzQjtRQUV0QixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDakQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQ3hDLENBQUM7UUFDRixRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDOUMsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUM1QyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ04sS0FBSyxDQUFDLE1BQU07WUFDWixLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFDckIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUNuRCxDQUFDO1FBQ0YsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUdELHVCQUF1QjtJQUN2QiwrQkFBK0I7SUFDL0IsMkJBQTJCO0lBQzNCLDRCQUE0QjtJQUM1QixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLHlEQUF5RDtJQUN6RCw2Q0FBNkM7SUFDN0MsT0FBTztJQUNQLG1EQUFtRDtJQUNuRCxxREFBcUQ7SUFDckQsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QiwrQkFBK0I7SUFDL0Isb0RBQW9EO0lBQ3BELE9BQU87SUFDUCx5REFBeUQ7SUFDekQsNENBQTRDO0lBQzVDLElBQUk7SUFFSix1QkFBdUIsQ0FBQyxNQUFtQixFQUFFLElBQVk7UUFDckQsaUJBQWlCO1FBQ2pCLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNoQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDaEQsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0RDtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3hDLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDakMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzdELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDaEQsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0RDtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztRQUM1QyxjQUFjO1FBQ2QsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLEtBQUssTUFBTSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJO2lCQUNoQixXQUFXLEVBQUU7aUJBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQztpQkFDVixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ25CLEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxFQUFFO2dCQUN2QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtvQkFDdEIsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbkIsTUFBTTtxQkFDVDtpQkFDSjthQUNKO1lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbkI7U0FDSjtRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUN0QyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdkMsQ0FBQztRQUNGLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDdEMsbUJBQW1CO1FBQ25CLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ2hDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUNwRSxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO1FBQzNELE9BQU8scUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELG9CQUFvQixDQUFDLE9BQWlCLEVBQUUsSUFBWTtRQUNoRCx1Q0FBdUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxlQUFlO1FBQ2YsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNQLE1BQU0sQ0FBQyxVQUFVO1lBQ2pCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU07Z0JBQzVELENBQUMsQ0FDUixDQUFDO1FBQ0YsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsU0FBa0IsRUFBRSxJQUFZO1FBQ25ELFVBQVU7UUFDVixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDcEMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQ3hDLENBQUM7UUFDRixhQUFhO1FBQ2IsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ3ZDLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUM3QyxDQUFDO1FBQ0YsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsMEJBQTBCLENBQ3RCLElBQW9CLEVBQ3BCLElBQVk7UUFFWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEQsT0FBTyxDQUNILEtBQUssQ0FBQyxJQUFJLENBQ04sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUM1RCxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUM3QyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBc0IsRUFBRSxJQUFZO1FBQ25ELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4RCxPQUFPLENBQ0gsS0FBSyxDQUFDLElBQUksQ0FDTixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQzVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQ3JELENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLLENBQUMsbUNBQW1DLENBQ3JDLFFBQW1CLEVBQ25CLE9BQWU7UUFFZixNQUFNLGFBQWEsR0FBYyxFQUFFLENBQUM7UUFDcEMsSUFBSSxhQUFhLEdBQWMsUUFBUSxDQUFDO1FBQ3hDLElBQUksWUFBWSxHQUFjLFFBQVEsQ0FBQztRQUN2QyxJQUFJLGVBQWUsR0FBYyxRQUFRLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUM7UUFDbEQsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FDL0IsQ0FBQztZQUNGLElBQUksb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDakMsTUFBTSxZQUFZLEdBQ2QsMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDckQsTUFBTSxXQUFXLEdBQ2IseUJBQXlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFFcEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtvQkFDMUIsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLEtBQUssRUFBRTt3QkFDN0IsYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDckMsUUFBUSxFQUNSLFlBQVksQ0FDZixDQUFDO3FCQUNMO29CQUNELElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7d0JBQzVCLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FDaEQsb0JBQW9CLEVBQ3BCLFFBQVEsQ0FDWCxDQUFDO3FCQUNMO29CQUNELElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUU7d0JBQy9CLGVBQWU7NEJBQ1gsSUFBSSxDQUFDLGlDQUFpQyxDQUNsQyxvQkFBb0IsRUFDcEIsUUFBUSxDQUNYLENBQUM7cUJBQ1Q7aUJBQ0o7Z0JBQ0QsS0FBSyxNQUFNLE9BQU8sSUFBSSxhQUFhLEVBQUU7b0JBQ2pDLElBQ0ksZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7d0JBQ2pDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ2hDO3dCQUNFLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQy9CO2lCQUNKO2FBQ0o7U0FDSjtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFtQixFQUFFLElBQVk7UUFDbkQsdUJBQXVCO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUQsY0FBYztRQUNkLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQzdCLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDUixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTTtZQUM5RCxDQUFDLENBQ1IsQ0FBQztRQUNGLE9BQU8scUJBQXFCLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxvQkFBb0IsQ0FBQyxPQUFjLEVBQUUsSUFBWTtRQUM3Qyx1QkFBdUI7UUFDdkIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sQ0FDSCxLQUFLLENBQUMsSUFBSSxDQUNOLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDNUQsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDbEQsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0gsOEJBQThCO1FBQzlCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQ2hDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDUixPQUFPLENBQUMsV0FBVztZQUNuQixPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdkQsQ0FBQztRQUNGLE9BQU8scUJBQXFCLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELHdDQUF3QyxDQUNwQyxRQUFlLEVBQ2YsU0FBaUI7UUFFakIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sQ0FDSCxhQUFhLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQ2pFLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsMEJBQTBCLENBQzVCLG9CQUErQixFQUMvQixPQUFjO1FBRWQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLEtBQUssTUFBTSxPQUFPLElBQUksb0JBQW9CLEVBQUU7WUFDeEMsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUNoQixZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyQztTQUNKO1FBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLG9CQUFvQixDQUFDLE1BQU0sRUFBRTtZQUNyRCxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDekIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUM5QixNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUN2RCxPQUFPLEVBQ1AsTUFBTSxDQUNULENBQUM7Z0JBQ0YsZUFBZSxHQUFHO29CQUNkLEdBQUcsZUFBZTtvQkFDbEIsR0FBRyxtQkFBbUI7aUJBQ3pCLENBQUM7WUFDTixDQUFDLENBQUMsQ0FDTCxDQUFDO1lBQ0YsT0FBTyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMscUNBQXFDLENBQ3ZDLE9BQWUsRUFDZixNQUFtQjtRQUVuQixNQUFNLFdBQVcsR0FBZ0IsRUFBRSxDQUFDO1FBQ3BDLElBQUksV0FBVyxHQUFnQixNQUFNLENBQUM7UUFDdEMsTUFBTSxZQUFZLEdBQWdCLE1BQU0sQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBZ0IsTUFBTSxDQUFDO1FBQzFDLElBQUksWUFBWSxHQUFnQixNQUFNLENBQUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUM7UUFDbEQsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FDL0IsQ0FBQztZQUNGLElBQUksb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDakMsTUFBTSxZQUFZLEdBQ2QsMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDckQsTUFBTSxXQUFXLEdBQ2IseUJBQXlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDcEQsZ0ZBQWdGO2dCQUVoRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3BELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO29CQUMxQixJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsTUFBTSxFQUFFO3dCQUM5QixJQUFJLE9BQU8sR0FBYSxFQUFFLENBQUM7d0JBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksb0JBQW9CLEVBQUU7NEJBQ2xDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQ0FDWCxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzs2QkFDeEM7eUJBQ0o7d0JBRUQsSUFBSSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7d0JBRTVCLE1BQU0sa0JBQWtCLEdBQ3BCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ3ZELGtCQUFrQixHQUFHOzRCQUNqQixHQUFHLGtCQUFrQjs0QkFDckIsR0FBRyxrQkFBa0I7eUJBQ3hCLENBQUM7d0JBQ0YsV0FBVyxHQUFHLGtCQUFrQixDQUFDO3FCQUNwQztvQkFDRCxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsSUFBSSxFQUFFO3dCQUM1Qix3REFBd0Q7d0JBQ3hELHFDQUFxQzt3QkFDckMsS0FBSzt3QkFDTCxPQUFPO3FCQUNWO29CQUVELElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxLQUFLLEVBQUU7d0JBQzdCLHNDQUFzQztxQkFDekM7b0JBRUQsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRTt3QkFDNUIsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUNoRCxvQkFBb0IsRUFDcEIsTUFBTSxDQUNULENBQUM7cUJBQ0w7aUJBQ0o7Z0JBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUU7b0JBQzdCLElBQ0ksV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7d0JBQ3pCLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO3dCQUMxQixZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUM1Qjt3QkFDRSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN6QjtpQkFDSjthQUNKO1NBQ0o7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLHVDQUF1QyxDQUN6QyxPQUFlLEVBQ2YsUUFBbUI7UUFFbkIsSUFBSSxpQkFBaUIsR0FBYyxFQUFFLENBQUM7UUFDdEMsSUFBSSxZQUFZLEdBQWMsUUFBUSxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO1FBQ2xELElBQUksUUFBUSxFQUFFO1lBQ1YsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQy9CLENBQUM7WUFDRixJQUFJLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLE1BQU0sV0FBVyxHQUNiLHlCQUF5QixDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBRXBELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7b0JBQzFCLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7d0JBQzVCLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FDaEQsb0JBQW9CLEVBQ3BCLFFBQVEsQ0FDWCxDQUFDO3FCQUNMO2lCQUNKO2dCQUNELGlCQUFpQixHQUFHLFlBQVksQ0FBQzthQUNwQztTQUNKO1FBQ0QsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxDQUFDLDZCQUE2QixDQUMvQixNQUFjLEVBQ2QsT0FBZTtRQUVmLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7WUFDMUIsSUFDSSxNQUFNLEtBQUssVUFBVSxDQUFDLEtBQUs7Z0JBQzNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQ3ZEO2dCQUNFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDM0MsQ0FBQyxNQUFNLENBQUMsRUFDUixPQUFPLENBQUMsS0FBSyxDQUNoQixDQUFDO2dCQUNGLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQzVCLE9BQU8sS0FBSyxDQUFDO2lCQUNoQjthQUNKO1lBQ0QsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRTtnQkFDNUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQ3RELENBQUMsT0FBTyxDQUFDLEVBQ1QsQ0FBQyxNQUFNLENBQUMsQ0FDWCxDQUFDO2dCQUNGLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQzNCLE9BQU8sS0FBSyxDQUFDO2lCQUNoQjthQUNKO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsUUFBbUIsRUFBRSxJQUFZO1FBQ3BELDhCQUE4QjtRQUM5QixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUNqQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ0osR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdEUsQ0FBQztRQUNGLG1EQUFtRDtRQUNuRCx3RUFBd0U7UUFDeEUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQzFCLENBQUM7UUFDRixPQUFPLHFCQUFxQixDQUFDLENBQUMsR0FBRyxhQUFhLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQ3ZCLE9BQWMsRUFDZCxVQUFtQixFQUNuQixLQUFhO1FBRWIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLFFBQVEsVUFBVSxFQUFFO1lBQ2hCLEtBQUssT0FBTyxDQUFDLFNBQVM7Z0JBQ2xCLE1BQU0sSUFBSSxHQUNOLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FDaEQsS0FBSyxFQUNMLFVBQVUsQ0FDYixDQUFDO2dCQUNOLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0QsTUFBTTtZQUNWO2dCQUNJLE1BQU07U0FDYjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxpQ0FBaUMsQ0FDN0Isb0JBQStCLEVBQy9CLFFBQW1CO1FBRW5CLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztRQUM5QyxtQkFBbUI7UUFDbkIsSUFBSSxjQUFjLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUN2QixjQUFjLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDNUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNSLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsTUFBTSxDQUNqRSxDQUFDO1NBQ0w7UUFDRCxxQkFBcUI7UUFDckIsSUFBSSxjQUFjLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvRCxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUM5QixLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUNwRCxxREFBcUQ7b0JBQ3JELGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDcEM7cUJBQU0sSUFDSCxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUNyQyxFQUNIO29CQUNFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDcEM7YUFDSjtZQUNELE9BQU8sa0JBQWtCLENBQUM7U0FDN0I7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDO0lBRUQsbUNBQW1DLENBQy9CLFFBQW1CLEVBQ25CLE9BQWdCO1FBRWhCLE1BQU0sYUFBYSxHQUFjLEVBQUUsQ0FBQztRQUNwQyxJQUFJLGFBQWEsR0FBYyxRQUFRLENBQUM7UUFDeEMsSUFBSSxZQUFZLEdBQWMsUUFBUSxDQUFDO1FBQ3ZDLElBQUksZUFBZSxHQUFjLFFBQVEsQ0FBQztRQUUxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzFCLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxLQUFLLEVBQUU7Z0JBQzdCLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQ3JDLFFBQVEsRUFDUixPQUFPLENBQUMsS0FBSyxDQUNoQixDQUFDO2FBQ0w7WUFDRCxvQ0FBb0M7WUFDcEMsNERBQTREO1lBQzVELGdDQUFnQztZQUNoQyxvQkFBb0I7WUFDcEIsU0FBUztZQUNULElBQUk7WUFDSixJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUMvQixlQUFlO29CQUNYLElBQUksQ0FBQyxpQ0FBaUMsQ0FDbEMsQ0FBQyxPQUFPLENBQUMsRUFDVCxRQUFRLENBQ1gsQ0FBQzthQUNUO1NBQ0o7UUFDRCxLQUFLLE1BQU0sT0FBTyxJQUFJLGFBQWEsRUFBRTtZQUNqQyxJQUNJLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUNoQztnQkFDRSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDOzswR0EzeUJRLGFBQWE7OEdBQWIsYUFBYSxjQUZWLE1BQU07MkZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXHJcbi8qIGVzbGludC1kaXNhYmxlIGd1YXJkLWZvci1pbiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBnZXRMZXZlbHNCZWxvdywgZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnMsIGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnMsIGZpbHRlclVuaXF1ZUFycmF5QnlJRCB9IGZyb20gXCIuLi9oZWxwZXJzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuICAgIFpvbmUsXHJcbiAgICBFcXVpcG1lbnQsXHJcbiAgICBMZXZlbFN0YXR1cyxcclxuICAgIE1lYXN1cmVtZW50LFxyXG4gICAgTWlzc2lvbixcclxuICAgIE9yZ2FuaXNhdGlvbixcclxuICAgIFBvaVR5cGUsXHJcbiAgICBQcm9maWxlRW50aXR5LFxyXG4gICAgUm9sZVN0YXR1cyxcclxuICAgIFNwYWNlLFxyXG4gICAgVGlja2V0LFxyXG4gICAgRGJPYmplY3RUeXBlLFxyXG4gICAgRmVhdHVyZSxcclxuICAgIENvbW1lbnQsXHJcbiAgICBWaXNpdFRlbXBsYXRlLCBPYmplY3QzRFxyXG59IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBvaVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvcG9pLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuL3VzZXIuc2VydmljZVwiO1xyXG5lbnVtIEZpbHRlclR5cGUge1xyXG4gICAgRE9NQUlOID0gXCJET01BSU5cIixcclxuICAgIExFVkVMID0gXCJMRVZFTFwiLFxyXG4gICAgUk9MRSA9IFwiUk9MRVwiLFxyXG4gICAgWk9ORSA9IFwiWk9ORVwiLFxyXG4gICAgU1BBQ0UgPSBcIlNQQUNFXCIsXHJcbiAgICBIQVNIVEFHID0gXCJIQVNIVEFHXCIsXHJcbn1cclxuaW1wb3J0IGxldmVuc2h0ZWluIGZyb20gJ2pzLWxldmVuc2h0ZWluJztcclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgdXBkYXRlRGF0ZUZpbHRlcjogU3ViamVjdDxEYXRlW10+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudERhdGVGaWx0ZXI6IERhdGVbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzQnlEb21haW4odGlja2V0c1RvRmlsdGVyOiBUaWNrZXRbXSwgZG9tYWluOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGlja2V0c1RvRmlsdGVyLmZpbHRlcigodGljKSA9PiB0aWMuZG9tYWluSUQgPT09IGRvbWFpbik7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyT2JqZWN0c0J5TGV2ZWwob2JqZWN0c1RvRmlsdGVyOiBhbnlbXSwgbGV2ZWw6IExldmVsU3RhdHVzKTogYW55W10ge1xyXG4gICAgICAgIGNvbnN0IHZpc2libGVMZXZlbHMgPSBnZXRMZXZlbHNCZWxvdyhsZXZlbCk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBvYmplY3RzVG9GaWx0ZXIuZmlsdGVyKCh0aWMpID0+XHJcbiAgICAgICAgICAgIHZpc2libGVMZXZlbHMuaW5jbHVkZXModGljLmxldmVsKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzRm9yTWlzc2lvbihcclxuICAgICAgICB0aWNrZXRzVG9GaWx0ZXI6IFRpY2tldFtdLFxyXG4gICAgICAgIG1pc3Npb246IE1pc3Npb24sXHJcbiAgICApOiBUaWNrZXRbXSB7XHJcbiAgICAgICAgY29uc3QgbWFuYWdlclJvbGVzOiBSb2xlU3RhdHVzW10gPSBbXHJcbiAgICAgICAgICAgIFJvbGVTdGF0dXMuTUFOQUdFUixcclxuICAgICAgICAgICAgUm9sZVN0YXR1cy5BRE1JTixcclxuICAgICAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcclxuICAgICAgICBdO1xyXG4gICAgICAgIGlmICghbWFuYWdlclJvbGVzLmluY2x1ZGVzKG1pc3Npb24ucm9sZSkpIHtcclxuICAgICAgICAgICAgaWYgKG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTRVJWSUNFIGNhbiBzZWUgdGlja2V0cyB0byB3aGljaCBoZSBpcyBhc3NpZ25lZFxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGlja2V0c0Fzc2lnbmVkID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGlja2V0c1RvRmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQuYXNzaWduZWVzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhc3NpZ25tZW50IG9mIHQuYXNzaWduZWVzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzaWdubWVudC5taXNzaW9uSUQgPT09IG1pc3Npb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRzQXNzaWduZWQucHVzaCh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aWNrZXRzQXNzaWduZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gT0NDVVBBTlQgYW5kIFZJU0lUT1IgY2FuIHNlZSBvbmx5IHRpY2tldHMgdGhhdCB0aGV5IGNyZWF0ZWRcclxuICAgICAgICAgICAgcmV0dXJuIHRpY2tldHNUb0ZpbHRlci5maWx0ZXIoKHRpY2tldCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpY2tldC5vd25lck1pc3Npb25JRCA9PT0gbWlzc2lvbi5pZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aWNrZXRzVG9GaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyc0ZvclJvbGUocm9sZTogUm9sZVN0YXR1cyk6IEZpbHRlclR5cGVbXSB7XHJcbiAgICAgICAgc3dpdGNoIChyb2xlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5BRE1JTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5NQU5BR0VSOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLlpPTkUsIEZpbHRlclR5cGUuTEVWRUxdO1xyXG4gICAgICAgICAgICBjYXNlIFJvbGVTdGF0dXMuT1dORVI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5TRVJWSUNFOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5MRVZFTCxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkRPTUFJTixcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlJPTEUsIC8vIHRoYXQgaXMgdGhlIG1vc3Qgc2V2ZXJlIGZpbHRlclxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk9DQ1VQQU5UOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ET01BSU4sXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuTEVWRUwsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5IQVNIVEFHLFxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLlZJU0lUT1I6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuWk9ORSxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkxFVkVMLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuRE9NQUlOLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuUk9MRSxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkhBU0hUQUcsXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBjYXNlIFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTCwgRmlsdGVyVHlwZS5IQVNIVEFHXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLkdVSURFX01VU0VVTTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuTEVWRUxdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICAgIG9iamVjdHM6IE9iamVjdDNEW10sXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxPYmplY3QzRFtdPiB7XHJcbiAgICAgICAgY29uc3QgZmluYWxPYmplY3QzRHM6IE9iamVjdDNEW10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IE9iamVjdDNEW10gPSBvYmplY3RzO1xyXG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcclxuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xyXG4gICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyhvYmopICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZC5pbmNsdWRlcyhvYmopXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsT2JqZWN0M0RzLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsT2JqZWN0M0RzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbHRlclRpY2tldHNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgdGlja2V0czogVGlja2V0W10sXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxUaWNrZXRbXT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmFsVGlja2V0czogVGlja2V0W10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcclxuICAgICAgICBsZXQgcm9sZUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XHJcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcclxuICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ET01BSU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0uZG9tYWlucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgLi4ubS5kb21haW5zXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxsRG9tYWluc0ZpbHRlcmVkID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZCBvZiBkb21haW5zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RG9tRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGlja2V0c0J5RG9tYWluKHRpY2tldHMsIGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsRG9tYWluc0ZpbHRlcmVkID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFsbERvbWFpbnNGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50RG9tRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkID0gYWxsRG9tYWluc0ZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlJPTEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGVNaXNzaW9uID0gY3VycmVudFNwYWNlTWlzc2lvbnMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtKSA9PiBtLnJvbGUgPT09IGhpZ2hlc3RSb2xlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQgPSB0aGlzLmZpbHRlclRpY2tldHNGb3JNaXNzaW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RSb2xlTWlzc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdExlbGVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8ga2VlcCBvbmx5IHRpY2tldHMgcHJlc2VudCBpbiBhbGwgZmlsdGVyZWQgYXJyYXlzXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhkb21GaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyb2xlRmlsdGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGV2ZWxGaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh6b25lRmlsdGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQuaW5jbHVkZXModGljKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFRpY2tldHMucHVzaCh0aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaW5hbFRpY2tldHMpO1xyXG4gICAgICAgIHJldHVybiBmaW5hbFRpY2tldHM7XHJcbiAgICB9XHJcblxyXG4gICAgc3Vic2NyaWJlVG9EYXRhRmlsdGVyVXBkYXRlKFxyXG4gICAgICAgIG5leHQ/OiAodmFsdWU6IGFueSkgPT4gdm9pZCxcclxuICAgICAgICBlcnJvcj86IChlcnJvcjogYW55KSA9PiB2b2lkLFxyXG4gICAgICAgIGNvbXBsZXRlPzogKCkgPT4gdm9pZCxcclxuICAgICk6IFN1YnNjcmlwdGlvbiB7XHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMudXBkYXRlRGF0ZUZpbHRlci5zdWJzY3JpYmUobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcclxuICAgICAgICByZXR1cm4gcztcclxuICAgIH1cclxuXHJcbiAgICBkYXRlRmlsdGVyVXBkYXRlZChkYXRlUmFuZ2U6IERhdGVbXSB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlRmlsdGVyID0gZGF0ZVJhbmdlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZUZpbHRlci5uZXh0KGRhdGVSYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyT2JqZWN0c0ZvckRhdGVSYW5nZShvYmplY3RzOiBhbnlbXSwgZGF0ZVJhbmdlOiBEYXRlW10pOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdHMuZmlsdGVyKChvYmplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0RGF0ZSA9IG5ldyBEYXRlKG9iamVjdC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJNZWFzdXJlbWVudHNGb3JEYXRlUmFuZ2UoXHJcbiAgICAgICAgbWVhc3VyZW1lbnRzOiBNZWFzdXJlbWVudFtdLFxyXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxyXG4gICAgKTogTWVhc3VyZW1lbnRbXSB7XHJcbiAgICAgICAgY29uc3QgaXNJbnZhbGlkRGF0ZSA9IChkOiBEYXRlKSA9PiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc05hTihkLmdldFRpbWUoKSk7XHJcblxyXG4gICAgICAgIGlmIChkYXRlUmFuZ2UuZXZlcnkoZCA9PiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc0ludmFsaWREYXRlKGQpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVhc3VyZW1lbnRzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1lYXN1cmVtZW50cy5maWx0ZXIoKG1lYXN1cmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0RGF0ZSA9IG5ldyBEYXRlKG1lYXN1cmUuY29tbWVudC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICBvYmplY3RzOiBhbnlbXSwgLy8gVE9ETzogcmVtb3ZlIGFueSBoZXJlLi5cclxuICAgICAgICB6b25lSUQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgem9uZTogWm9uZSA9IG51bGwsXHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3RzID0gW107XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIG9iamVjdHMubWFwKGFzeW5jIChvYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtwb2ldID0gb2JqZWN0LnBvaXMuaXRlbXM7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pICYmIHpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoem9uZS5zd2VlcElEcyAmJiB6b25lLnN3ZWVwSURzLmluY2x1ZGVzKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucG9pU2VydmljZS5wb2lJc1ZpcnR1YWwocG9pKSAmJiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbmNsdWRlIGluIEZsb29yIHpvbmUgb25seVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucG9pU2VydmljZS5wb2lJc1ZpcnR1YWwocG9pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwb2kgJiYgIXpvbmUgJiYgem9uZUlEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzRm9yT2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVzLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoem9uZV8pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZV8uaWQgPT09IHpvbmVJRCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVfLnBhcmVudElEID09PSB6b25lSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkT2JqZWN0cztcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxyXG4gICAgICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxyXG4gICAgICAgIGRvbWFpbklETGlzdDogc3RyaW5nW10sXHJcbiAgICApOiBFcXVpcG1lbnRbXSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRCeURvbWFpbiA9IGVxdWlwbWVudHMuZmlsdGVyKChlcXVpcCkgPT5cclxuICAgICAgICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5RG9tYWluXTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gZXF1aXBtZW50cy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChlcXVpcCkgPT5cclxuICAgICAgICAgICAgICAgIGVxdWlwLmRvbWFpbiAmJlxyXG4gICAgICAgICAgICAgICAgZXF1aXAuZG9tYWluLnBhcmVudElEICYmXHJcbiAgICAgICAgICAgICAgICBkb21haW5JRExpc3QuaW5jbHVkZXMoZXF1aXAuZG9tYWluLnBhcmVudElEKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5UGFyZW50RG9tYWluXTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGZpbHRlcmVkKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gTm90IGltcGxlbWVudGVkIHlldCFcclxuICAgIC8vIGZpbHRlck9iamVjdHMzREJ5RG9tYWluTGlzdChcclxuICAgIC8vICAgb2JqZWN0czNEOiBPYmplY3QzRFtdLFxyXG4gICAgLy8gICBkb21haW5JRExpc3Q6IHN0cmluZ1tdLFxyXG4gICAgLy8gKTogT2JqZWN0M0RbXSB7XHJcbiAgICAvLyAgIGxldCBmaWx0ZXJlZCA9IFtdO1xyXG4gICAgLy8gICBjb25zdCBmaWx0ZXJlZEJ5RG9tYWluID0gb2JqZWN0czNELmZpbHRlcigoZXF1aXApID0+XHJcbiAgICAvLyAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcclxuICAgIC8vICAgKTtcclxuICAgIC8vICAgZmlsdGVyZWQgPSBbLi4uZmlsdGVyZWQsIC4uLmZpbHRlcmVkQnlEb21haW5dO1xyXG4gICAgLy8gICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gb2JqZWN0czNELmZpbHRlcihcclxuICAgIC8vICAgICAob2JqKSA9PlxyXG4gICAgLy8gICAgICAgb2JqLmRvbWFpbiAmJlxyXG4gICAgLy8gICAgICAgb2JqLmRvbWFpbi5wYXJlbnRJRCAmJlxyXG4gICAgLy8gICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKG9iai5kb21haW4ucGFyZW50SUQpLFxyXG4gICAgLy8gICApO1xyXG4gICAgLy8gICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZCwgLi4uZmlsdGVyZWRCeVBhcmVudERvbWFpbl07XHJcbiAgICAvLyAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoZmlsdGVyZWQpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGZpbHRlckVxdWlwbWVudHNGb3JUZXJtKGVxdWlwczogRXF1aXBtZW50W10sIHRlcm06IHN0cmluZyk6IEVxdWlwbWVudFtdIHtcclxuICAgICAgICAvLyBmaWx0ZXIgZG9tYWluc1xyXG4gICAgICAgIGxldCBieURvbWFpbiA9IGVxdWlwcy5maWx0ZXIoKGVxKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcS5kb21haW4gJiYgZXEuZG9tYWluLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREb21haW4gPSBlcS5kb21haW4ubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ID0gbGV2ZW5zaHRlaW4obm9ybWFsaXplZERvbWFpbiwgdGVybSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2IDw9IDIgfHwgbm9ybWFsaXplZERvbWFpbi5pbmNsdWRlcyh0ZXJtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgYnlQYXJlbnREb21haW4gPSBlcXVpcHMuZmlsdGVyKChlcSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXEuZG9tYWluICYmIGVxLmRvbWFpbi5wYXJlbnRJRCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhcmVudCA9IGVxLmRvbWFpbi5wYXJlbnQubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ID0gbGV2ZW5zaHRlaW4obm9ybWFsaXplZFBhcmVudCwgdGVybSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2IDw9IDIgfHwgbm9ybWFsaXplZFBhcmVudC5pbmNsdWRlcyh0ZXJtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnlEb21haW4gPSBbLi4uYnlEb21haW4sIC4uLmJ5UGFyZW50RG9tYWluXTtcclxuICAgICAgICAvLyBmaWx0ZXIgbmFtZVxyXG4gICAgICAgIGxldCBieU5hbWUgPSBbXTtcclxuICAgICAgICBjb25zdCB0ZXJtcyA9IHRlcm0uc3BsaXQoXCIgXCIpLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmxlbmd0aCA+IDIpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZXEgb2YgZXF1aXBzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZXEubmFtZVxyXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIiBcIilcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5sZW5ndGggPiAyKTtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRlcm1zKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZW5zaHRlaW4odG9rZW4sIHdvcmQpIDw9IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoID09PSB0ZXJtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGJ5TmFtZS5wdXNoKGVxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYnlOYW1lU2ltcGxlID0gZXF1aXBzLmZpbHRlcigoZXEpID0+XHJcbiAgICAgICAgICAgIGVxLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGJ5TmFtZSA9IFsuLi5ieU5hbWUsIC4uLmJ5TmFtZVNpbXBsZV07XHJcbiAgICAgICAgLy8gYnkgc2VyaWFsIG51bWJlclxyXG4gICAgICAgIGNvbnN0IGJ5U2VyaWFsTnVtYmVyID0gZXF1aXBzLmZpbHRlcihcclxuICAgICAgICAgICAgKGVxKSA9PiBlcS5zZXJpYWxOdW1iZXIgJiYgZXEuc2VyaWFsTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT09IHRlcm0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uYnlEb21haW4sIC4uLmJ5TmFtZSwgLi4uYnlTZXJpYWxOdW1iZXJdO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQocmVzdWx0KTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzRm9yVGVybSh0aWNrZXRzOiBUaWNrZXRbXSwgdGVybTogc3RyaW5nKTogVGlja2V0W10ge1xyXG4gICAgICAgIC8vIGZpbHRlciB0ZXJtIGluIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxyXG4gICAgICAgIGNvbnN0IGJ5VGl0bGUgPSB0aGlzLmZpbHRlck9iamVjdHNGb3JUZXJtKHRpY2tldHMsIHRlcm0pO1xyXG4gICAgICAgIC8vIGJ5IGVxdWlwbWVudFxyXG4gICAgICAgIGNvbnN0IGJ5RXF1aXBtZW50ID0gdGlja2V0cy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh0aWNrZXQpID0+XHJcbiAgICAgICAgICAgICAgICB0aWNrZXQuZXF1aXBtZW50cyAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJFcXVpcG1lbnRzRm9yVGVybSh0aWNrZXQuZXF1aXBtZW50cywgdGVybSkubGVuZ3RoID5cclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKFsuLi5ieVRpdGxlLCAuLi5ieUVxdWlwbWVudF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlckxvY2F0aW9uc0ZvclRlcm0obG9jYXRpb25zOiBTcGFjZVtdLCB0ZXJtOiBzdHJpbmcpOiBTcGFjZVtdIHtcclxuICAgICAgICAvLyBieSBuYW1lXHJcbiAgICAgICAgY29uc3QgYnlOYW1lID0gbG9jYXRpb25zLmZpbHRlcigobG9jKSA9PlxyXG4gICAgICAgICAgICBsb2MubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYnkgYWRkcmVzc1xyXG4gICAgICAgIGNvbnN0IGJ5QWRkcmVzcyA9IGxvY2F0aW9ucy5maWx0ZXIoKGxvYykgPT5cclxuICAgICAgICAgICAgbG9jLmFkZHJlc3Nlcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlOYW1lLCAuLi5ieUFkZHJlc3NdKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJPcmdhbmlzYXRpb25zRm9yVGVybShcclxuICAgICAgICBvcmdzOiBPcmdhbmlzYXRpb25bXSxcclxuICAgICAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICApOiBPcmdhbmlzYXRpb25bXSB7XHJcbiAgICAgICAgY29uc3QgYnlOYW1lID0gb3Jncy5maWx0ZXIoKG9yZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB3b3JkcyA9IG9yZy5uYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgd29yZHMuc29tZShcclxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXHJcbiAgICAgICAgICAgICAgICApIHx8IG9yZy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYnlOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlclVzZXJzRm9yVGVybSh1c2VyczogUHJvZmlsZUVudGl0eVtdLCB0ZXJtOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBieU5hbWUgPSB1c2Vycy5maWx0ZXIoKHVzZXIpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgd29yZHMgPSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgd29yZHMuc29tZShcclxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXHJcbiAgICAgICAgICAgICAgICApIHx8IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBieU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyRmVhdHVyZXNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXSxcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPEZlYXR1cmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmFsRmVhdHVyZXM6IEZlYXR1cmVbXSA9IFtdO1xyXG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBsZXQgaGFzaHRhZ0ZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xyXG4gICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0TGVsZWwgPVxyXG4gICAgICAgICAgICAgICAgICAgIGdldEhpZ2hlc3RMZXZlbEZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpZ2hlc3RSb2xlID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5MRVZFTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdExlbGVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkID0gYXdhaXQgdGhpcy5hcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuSEFTSFRBRykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNodGFnRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNodGFnRmlsdGVyZWQuaW5jbHVkZXMoZmVhdHVyZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsRmVhdHVyZXMucHVzaChmZWF0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsRmVhdHVyZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRmVhdHVyZXNGb3JUZXJtKGZlYXR1cmVzOiBGZWF0dXJlW10sIHRlcm06IHN0cmluZyk6IEZlYXR1cmVbXSB7XHJcbiAgICAgICAgLy8gZmlsdGVyIHRlcm0gaW4gdGl0bGVcclxuICAgICAgICBjb25zdCBieVRpdGxlID0gdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybShmZWF0dXJlcywgdGVybSk7XHJcbiAgICAgICAgLy8gYnkgY29tbWVudHNcclxuICAgICAgICBjb25zdCBieUNvbW1lbnQgPSBmZWF0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybShmZWF0dXJlLmNvbW1lbnRzLml0ZW1zLCB0ZXJtKS5sZW5ndGggPlxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5VGl0bGUsIC4uLmJ5Q29tbWVudF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvYmplY3RzIEFycmF5IG9mIENvbW1lbnRzLCBUaWNrZXRzLCBGZWF0dXJlcy4gT2JsaWdhdG9yeSBwcm9wb3J0aWVzOiB0aXRsZSwgZGVzY3JpcHRpb25cclxuICAgICAqIEBwYXJhbSB0ZXJtIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBmaWx0ZXJPYmplY3RzRm9yVGVybShvYmplY3RzOiBhbnlbXSwgdGVybTogc3RyaW5nKTogYW55W10ge1xyXG4gICAgICAgIC8vIGZpbHRlciB0ZXJtIGluIHRpdGxlXHJcbiAgICAgICAgY29uc3QgYnlUaXRsZSA9IG9iamVjdHMuZmlsdGVyKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZmVhdHVyZS50aXRsZS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIHdvcmRzLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgKHdvcmQpID0+IHdvcmQubGVuZ3RoID4gMiAmJiBsZXZlbnNodGVpbih3b3JkLCB0ZXJtKSA8PSAxLFxyXG4gICAgICAgICAgICAgICAgKSB8fCBmZWF0dXJlLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyB0ZXJtIHByZXNlbnQgaW4gZGVzY3JpcHRpb25cclxuICAgICAgICBjb25zdCBieURlc2NyaXB0aW9uID0gb2JqZWN0cy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5kZXNjcmlwdGlvbiAmJlxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlUaXRsZSwgLi4uYnlEZXNjcmlwdGlvbl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlck1pc3Npb25CeVN0YXJ0VGltZURhdGVGb3JEYXRlUmFuZ2UoXHJcbiAgICAgICAgbWlzc2lvbnM6IGFueVtdLFxyXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxyXG4gICAgKTogYW55W10ge1xyXG4gICAgICAgIHJldHVybiBtaXNzaW9ucy5maWx0ZXIoKG1pc3Npb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlVGltZSA9IG5ldyBEYXRlKG1pc3Npb24uc3RhcnREYXRlVGltZSk7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGVUaW1lID49IGRhdGVSYW5nZVswXSAmJiBzdGFydERhdGVUaW1lIDw9IGRhdGVSYW5nZVsxXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxyXG4gICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zOiBNaXNzaW9uW10sXHJcbiAgICAgICAgb2JqZWN0czogYW55W10sXHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgY29uc3QgYWxsb3dlZFpvbmVzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBtaXNzaW9uIG9mIGN1cnJlbnRTcGFjZU1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChtaXNzaW9uLnpvbmVJRCkge1xyXG4gICAgICAgICAgICAgICAgYWxsb3dlZFpvbmVzLnB1c2gobWlzc2lvbi56b25lSUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhbGxvd2VkWm9uZXMubGVuZ3RoID09PSBjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGFsbFpvbmVGaWx0ZXJlZCA9IFtdO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIGFsbG93ZWRab25lcy5tYXAoYXN5bmMgKHpvbmVJRCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRab25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBhbGxab25lRmlsdGVyZWQgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFsbFpvbmVGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudFpvbmVGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoYWxsWm9uZUZpbHRlcmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyRXF1aXBtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgZXF1aXBzOiBFcXVpcG1lbnRbXSxcclxuICAgICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgICAgICBjb25zdCBmaW5hbEVxdWlwczogRXF1aXBtZW50W10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IEVxdWlwbWVudFtdID0gZXF1aXBzO1xyXG4gICAgICAgIGNvbnN0IHJvbGVGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgY29uc3QgbGV2ZWxGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcclxuICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ET01BSU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0uZG9tYWlucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgLi4ubS5kb21haW5zXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFsbERvbWFpbnNGaWx0ZXJlZCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudERvbUZpbHRlcmVkID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChlcXVpcHMsIGRvbWFpbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxEb21haW5zRmlsdGVyZWQgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hbGxEb21haW5zRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50RG9tRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkID0gYWxsRG9tYWluc0ZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlJPTEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaGlnaGVzdFJvbGVNaXNzaW9uID0gY3VycmVudFNwYWNlTWlzc2lvbnMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIChtKSA9PiBtLnJvbGUgPT09IGhpZ2hlc3RSb2xlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8sIGVxdWlwbWVudCBkb2VzIG5vdCBoYXZlIGxldmVsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkID0gYXdhaXQgdGhpcy5hcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXBzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGljIG9mIGxldmVsRmlsdGVyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkLmluY2x1ZGVzKHRpYykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZUZpbHRlcmVkLmluY2x1ZGVzKHRpYykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKHRpYylcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxFcXVpcHMucHVzaCh0aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmluYWxFcXVpcHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyTWVhc3VyZW1lbnRzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgICAgICBjb21tZW50czogQ29tbWVudFtdLFxyXG4gICAgKTogUHJvbWlzZTxDb21tZW50W10+IHtcclxuICAgICAgICBsZXQgZmluYWxNZWFzdXJlbWVudHM6IENvbW1lbnRbXSA9IFtdO1xyXG4gICAgICAgIGxldCB6b25lRmlsdGVyZWQ6IENvbW1lbnRbXSA9IGNvbW1lbnRzO1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb25zID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbnM7XHJcbiAgICAgICAgaWYgKG1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKG0pID0+IG0uc3BhY2VJRCA9PT0gc3BhY2VJRCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpZ2hlc3RSb2xlID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbmFsTWVhc3VyZW1lbnRzID0gem9uZUZpbHRlcmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaW5hbE1lYXN1cmVtZW50cztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpc09iamVjdEFsbG93ZWRGb3JVc2VySW5TcGFjZShcclxuICAgICAgICBvYmplY3Q6IE9iamVjdCxcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihzcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShtaXNzaW9uLnJvbGUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBcImxldmVsXCIpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgW29iamVjdF0sXHJcbiAgICAgICAgICAgICAgICAgICAgbWlzc2lvbi5sZXZlbCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGV2ZWxGaWx0ZXJlZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxyXG4gICAgICAgICAgICAgICAgICAgIFttaXNzaW9uXSxcclxuICAgICAgICAgICAgICAgICAgICBbb2JqZWN0XSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoem9uZUZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJUZW1wbGF0ZXNGb3JUZXJtKG1pc3Npb25zOiBNaXNzaW9uW10sIHRlcm06IHN0cmluZyk6IE1pc3Npb25bXSB7XHJcbiAgICAgICAgLy8gdGVybSBwcmVzZW50IGluIGRlc2NyaXB0aW9uXHJcbiAgICAgICAgY29uc3QgYnlEZXNjcmlwdGlvbiA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgKG1pcykgPT5cclxuICAgICAgICAgICAgICAgIG1pcy5kZXNjcmlwdGlvbiAmJiBtaXMuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGJ5IHVzZXIgbGFzdE5hbWUgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIHZpc2l0OlxyXG4gICAgICAgIC8vIG1ldGFkYXRhOiBcIntcXFwiZmlyc3ROYW1lXFxcIjpcXFwiXFxcIixcXFwibGFzdE5hbWVcXFwiOlxcXCJWaXNpdGUgZHUgNSBKdWlsbGV0XFxcIn1cIlxyXG4gICAgICAgIGNvbnN0IHVzZXJQcm9maWxlcyA9IG1pc3Npb25zLm1hcCgobWlzKSA9PiBuZXcgUHJvZmlsZUVudGl0eShtaXMudXNlcikpO1xyXG4gICAgICAgIGNvbnN0IGJ5VXNlckxhc3RuYW1lID0gdGhpcy5maWx0ZXJVc2Vyc0ZvclRlcm0odXNlclByb2ZpbGVzLCB0ZXJtKTtcclxuICAgICAgICBjb25zdCB1c2VySWRzID0gbmV3IFNldChieVVzZXJMYXN0bmFtZS5tYXAoKHVzZXIpID0+IHVzZXIuaWQpKTtcclxuICAgICAgICBjb25zdCBtaXNzaW9uc0J5VXNlciA9IG1pc3Npb25zLmZpbHRlcigobWlzKSA9PlxyXG4gICAgICAgICAgICB1c2VySWRzLmhhcyhtaXMudXNlcklEKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5RGVzY3JpcHRpb24sIC4uLm1pc3Npb25zQnlVc2VyXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyT2JqZWN0c0ZvclN3ZWVwKFxyXG4gICAgICAgIG9iamVjdHM6IGFueVtdLFxyXG4gICAgICAgIG9iamVjdFR5cGU6IFBvaVR5cGUsXHJcbiAgICAgICAgc3dlZXA6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICBsZXQgZmlsdGVyZWQgPSBbXTtcclxuICAgICAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvaXMgPVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucG9pU2VydmljZS5nZXRQb2lzQnlNYXR0ZXJwb3J0U3dlZXBCeVR5cGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcXVpcElEcyA9IG5ldyBTZXQocG9pcy5tYXAoKHBvaSkgPT4gcG9pLmVsZW1lbnRJRCkpO1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyZWQgPSBvYmplY3RzLmZpbHRlcigob2JqZWN0KSA9PiBlcXVpcElEcy5oYXMob2JqZWN0LmlkKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRmVhdHVyZXNCeUhhc2h0YWdzQW5kTG9jYWxlKFxyXG4gICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zOiBNaXNzaW9uW10sXHJcbiAgICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXSxcclxuICAgICk6IEZlYXR1cmVbXSB7XHJcbiAgICAgICAgY29uc3QgW2N1cnJlbnRNaXNzaW9uXSA9IGN1cnJlbnRTcGFjZU1pc3Npb25zO1xyXG4gICAgICAgIC8vIGZpbHRlciBieSBsb2NhbGVcclxuICAgICAgICBsZXQgZmlsdGVyZWRMb2NhbGUgPSBbLi4uZmVhdHVyZXNdO1xyXG4gICAgICAgIGlmIChjdXJyZW50TWlzc2lvbi5sb2NhbGUpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWRMb2NhbGUgPSBmZWF0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoZmVhdHVyZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmxvY2FsZSAmJiBmZWF0dXJlLmxvY2FsZSA9PT0gY3VycmVudE1pc3Npb24ubG9jYWxlLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBmaWx0ZXIgYnkgaGFzaHRhZ3NcclxuICAgICAgICBpZiAoY3VycmVudE1pc3Npb24uaGFzaHRhZ3MgJiYgY3VycmVudE1pc3Npb24uaGFzaHRhZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5SGFzaHRhZ3MgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZpbHRlcmVkTG9jYWxlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZlYXR1cmUuaGFzaHRhZ3MgfHwgZmVhdHVyZS5oYXNodGFncy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBGZWF0dXJlIHdpdGhvdXQgaGFzaHRhZyBpcyBhdmFpbGFibGUgZm9yIGV2ZXJ5Ym9keVxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkQnlIYXNodGFncy5wdXNoKGZlYXR1cmUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWlzc2lvbi5oYXNodGFncy5ldmVyeSgoaGFzaHRhZykgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5oYXNodGFncy5pbmNsdWRlcyhoYXNodGFnKSxcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEJ5SGFzaHRhZ3MucHVzaChmZWF0dXJlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRCeUhhc2h0YWdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVyZWRMb2NhbGU7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRmVhdHVyZXNGb3JNaXNzaW9uV2l0aG91dFpvbmUoXHJcbiAgICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXSxcclxuICAgICAgICBtaXNzaW9uOiBNaXNzaW9uLFxyXG4gICAgKTogRmVhdHVyZVtdIHtcclxuICAgICAgICBjb25zdCBmaW5hbEZlYXR1cmVzOiBGZWF0dXJlW10gPSBbXTtcclxuICAgICAgICBsZXQgbGV2ZWxGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcbiAgICAgICAgbGV0IGhhc2h0YWdGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKG1pc3Npb24ucm9sZSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMKSB7XHJcbiAgICAgICAgICAgICAgICBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcclxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICAgICAgICAgICAgICBtaXNzaW9uLmxldmVsLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgLy8gICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnMsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgIC8vICAgICApO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuSEFTSFRBRykge1xyXG4gICAgICAgICAgICAgICAgaGFzaHRhZ0ZpbHRlcmVkID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckZlYXR1cmVzQnlIYXNodGFnc0FuZExvY2FsZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgW21pc3Npb25dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKSAmJlxyXG4gICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZmluYWxGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaW5hbEZlYXR1cmVzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
603
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsdGVyLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ZpbHRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLHlDQUF5QztBQUN6QyxxQ0FBcUM7QUFDckMsaUNBQWlDO0FBQ2pDLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQWdCLE1BQU0sTUFBTSxDQUFDO0FBQzdDLE9BQU8sRUFBRSxjQUFjLEVBQUUsMEJBQTBCLEVBQUUseUJBQXlCLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsSSxPQUFPLEVBT0gsT0FBTyxFQUNQLGFBQWEsRUFDYixVQUFVLEVBT2IsTUFBTSxrQkFBa0IsQ0FBQztBQVkxQixPQUFPLFdBQVcsTUFBTSxnQkFBZ0IsQ0FBQzs7Ozs7QUFSekMsSUFBSyxVQU9KO0FBUEQsV0FBSyxVQUFVO0lBQ1gsK0JBQWlCLENBQUE7SUFDakIsNkJBQWUsQ0FBQTtJQUNmLDJCQUFhLENBQUE7SUFDYiwyQkFBYSxDQUFBO0lBQ2IsNkJBQWUsQ0FBQTtJQUNmLGlDQUFtQixDQUFBO0FBQ3ZCLENBQUMsRUFQSSxVQUFVLEtBQVYsVUFBVSxRQU9kO0FBS0QsTUFBTSxPQUFPLGFBQWE7SUFLdEIsWUFDWSxXQUE0QixFQUM1QixXQUF3QixFQUN4QixVQUFzQjtRQUZ0QixnQkFBVyxHQUFYLFdBQVcsQ0FBaUI7UUFDNUIsZ0JBQVcsR0FBWCxXQUFXLENBQWE7UUFDeEIsZUFBVSxHQUFWLFVBQVUsQ0FBWTtRQVAxQixxQkFBZ0IsR0FBb0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztJQVF0RCxDQUFDO0lBRUwscUJBQXFCLENBQUMsZUFBeUIsRUFBRSxNQUFjO1FBQzNELE9BQU8sZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxNQUFNLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRUQsb0JBQW9CLENBQUMsZUFBc0IsRUFBRSxLQUFrQjtRQUMzRCxNQUFNLGFBQWEsR0FBRyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUMsTUFBTSxRQUFRLEdBQUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQzVDLGFBQWEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUNwQyxDQUFDO1FBQ0YsT0FBTyxRQUFRLENBQUM7SUFDcEIsQ0FBQztJQUVELHVCQUF1QixDQUNuQixlQUF5QixFQUN6QixPQUFnQjtRQUVoQixNQUFNLFlBQVksR0FBaUI7WUFDL0IsVUFBVSxDQUFDLE9BQU87WUFDbEIsVUFBVSxDQUFDLEtBQUs7WUFDaEIsVUFBVSxDQUFDLEtBQUs7U0FDbkIsQ0FBQztRQUNGLElBQUksQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUN0QyxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssVUFBVSxDQUFDLE9BQU8sRUFBRTtnQkFDckMsa0RBQWtEO2dCQUNsRCxNQUFNLGVBQWUsR0FBRyxFQUFFLENBQUM7Z0JBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksZUFBZSxFQUFFO29CQUM3QixJQUFJLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7d0JBQzlCLEtBQUssTUFBTSxVQUFVLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLEVBQUU7NEJBQ3hDLElBQUksVUFBVSxDQUFDLFNBQVMsS0FBSyxPQUFPLENBQUMsRUFBRSxFQUFFO2dDQUNyQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDOzZCQUMzQjt5QkFDSjtxQkFDSjtpQkFDSjtnQkFDRCxPQUFPLGVBQWUsQ0FBQzthQUMxQjtZQUNELDhEQUE4RDtZQUM5RCxPQUFPLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtnQkFDckMsT0FBTyxNQUFNLENBQUMsY0FBYyxLQUFLLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUM7U0FDTjtRQUNELE9BQU8sZUFBZSxDQUFDO0lBQzNCLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUFnQjtRQUM5QixRQUFRLElBQUksRUFBRTtZQUNWLEtBQUssVUFBVSxDQUFDLEtBQUs7Z0JBQ2pCLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDOUIsS0FBSyxVQUFVLENBQUMsT0FBTztnQkFDbkIsT0FBTyxDQUFDLFVBQVUsQ0FBQyxJQUFJLEVBQUUsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQy9DLEtBQUssVUFBVSxDQUFDLEtBQUs7Z0JBQ2pCLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUMvQyxLQUFLLFVBQVUsQ0FBQyxPQUFPO2dCQUNuQixPQUFPO29CQUNILFVBQVUsQ0FBQyxJQUFJO29CQUNmLFVBQVUsQ0FBQyxLQUFLO29CQUNoQixVQUFVLENBQUMsTUFBTTtvQkFDakIsVUFBVSxDQUFDLElBQUksRUFBRSxpQ0FBaUM7aUJBQ3JELENBQUM7WUFDTixLQUFLLFVBQVUsQ0FBQyxRQUFRO2dCQUNwQixPQUFPO29CQUNILFVBQVUsQ0FBQyxJQUFJO29CQUNmLFVBQVUsQ0FBQyxNQUFNO29CQUNqQixVQUFVLENBQUMsSUFBSTtvQkFDZixVQUFVLENBQUMsS0FBSztvQkFDaEIsVUFBVSxDQUFDLE9BQU87aUJBQ3JCLENBQUM7WUFDTixLQUFLLFVBQVUsQ0FBQyxPQUFPO2dCQUNuQixPQUFPO29CQUNILFVBQVUsQ0FBQyxJQUFJO29CQUNmLFVBQVUsQ0FBQyxLQUFLO29CQUNoQixVQUFVLENBQUMsTUFBTTtvQkFDakIsVUFBVSxDQUFDLElBQUk7b0JBQ2YsVUFBVSxDQUFDLE9BQU87aUJBQ3JCLENBQUM7WUFDTixLQUFLLFVBQVUsQ0FBQyxjQUFjO2dCQUMxQixPQUFPLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxVQUFVLENBQUMsS0FBSyxFQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztZQUNuRSxLQUFLLFVBQVUsQ0FBQyxZQUFZO2dCQUN4QixPQUFPLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQzlCO2dCQUNJLE9BQU8sQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7U0FDakM7SUFDTCxDQUFDO0lBRUQsS0FBSyxDQUFDLGtDQUFrQyxDQUNwQyxPQUFtQixFQUNuQixPQUFlO1FBRWYsTUFBTSxjQUFjLEdBQWUsRUFBRSxDQUFDO1FBQ3RDLElBQUksV0FBVyxHQUFlLE9BQU8sQ0FBQztRQUN0QyxJQUFJLGFBQWEsR0FBZSxPQUFPLENBQUM7UUFDeEMsSUFBSSxZQUFZLEdBQWUsT0FBTyxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO1FBQ2xELElBQUksUUFBUSxFQUFFO1lBQ1YsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQy9CLENBQUM7WUFDRixJQUFJLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFO29CQUM3QixJQUNJLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO3dCQUN6QixZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUM1Qjt3QkFDRSxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUM1QjtpQkFDSjthQUNKO1NBQ0o7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDO0lBRUQsS0FBSyxDQUFDLGtDQUFrQyxDQUNwQyxPQUFpQixFQUNqQixPQUFlO1FBRWYsTUFBTSxZQUFZLEdBQWEsRUFBRSxDQUFDO1FBQ2xDLElBQUksV0FBVyxHQUFhLE9BQU8sQ0FBQztRQUNwQyxJQUFJLFlBQVksR0FBYSxPQUFPLENBQUM7UUFDckMsSUFBSSxhQUFhLEdBQWEsT0FBTyxDQUFDO1FBQ3RDLElBQUksWUFBWSxHQUFhLE9BQU8sQ0FBQztRQUNyQyxNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLGVBQWUsQ0FBQztRQUNsRCxJQUFJLFFBQVEsRUFBRTtZQUNWLE1BQU0sb0JBQW9CLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDeEMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssT0FBTyxDQUMvQixDQUFDO1lBQ0YsSUFBSSxvQkFBb0IsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFO2dCQUNqQyxNQUFNLFlBQVksR0FDZCwwQkFBMEIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNyRCxNQUFNLFdBQVcsR0FDYix5QkFBeUIsQ0FBQyxvQkFBb0IsQ0FBQyxDQUFDO2dCQUNwRCxnRkFBZ0Y7Z0JBRWhGLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7b0JBQzFCLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxNQUFNLEVBQUU7d0JBQzlCLElBQUksT0FBTyxHQUFhLEVBQUUsQ0FBQzt3QkFDM0IsS0FBSyxNQUFNLENBQUMsSUFBSSxvQkFBb0IsRUFBRTs0QkFDbEMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFO2dDQUNYLE9BQU8sR0FBRyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDOzZCQUN4Qzt5QkFDSjt3QkFDRCxJQUFJLGtCQUFrQixHQUFHLEVBQUUsQ0FBQzt3QkFDNUIsS0FBSyxNQUFNLENBQUMsSUFBSSxPQUFPLEVBQUU7NEJBQ3JCLE1BQU0sa0JBQWtCLEdBQ3BCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUM7NEJBQzNDLGtCQUFrQixHQUFHO2dDQUNqQixHQUFHLGtCQUFrQjtnQ0FDckIsR0FBRyxrQkFBa0I7NkJBQ3hCLENBQUM7eUJBQ0w7d0JBQ0QsV0FBVyxHQUFHLGtCQUFrQixDQUFDO3FCQUNwQztvQkFDRCxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsSUFBSSxFQUFFO3dCQUM1QixNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixDQUFDLElBQUksQ0FDaEQsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssV0FBVyxDQUNoQyxDQUFDO3dCQUNGLFlBQVksR0FBRyxJQUFJLENBQUMsdUJBQXVCLENBQ3ZDLE9BQU8sRUFDUCxrQkFBa0IsQ0FDckIsQ0FBQztxQkFDTDtvQkFFRCxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsS0FBSyxFQUFFO3dCQUM3QixhQUFhLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUNyQyxPQUFPLEVBQ1AsWUFBWSxDQUNmLENBQUM7cUJBQ0w7b0JBRUQsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRTt3QkFDNUIsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUNoRCxvQkFBb0IsRUFDcEIsT0FBTyxDQUNWLENBQUM7cUJBQ0w7aUJBQ0o7Z0JBQ0QsbURBQW1EO2dCQUNuRCw0QkFBNEI7Z0JBQzVCLDZCQUE2QjtnQkFDN0IsOEJBQThCO2dCQUM5Qiw2QkFBNkI7Z0JBQzdCLEtBQUssTUFBTSxHQUFHLElBQUksYUFBYSxFQUFFO29CQUM3QixJQUNJLFdBQVcsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO3dCQUN6QixZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQzt3QkFDMUIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFDNUI7d0JBQ0UsWUFBWSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztxQkFDMUI7aUJBQ0o7YUFDSjtTQUNKO1FBQ0QsNkJBQTZCO1FBQzdCLE9BQU8sWUFBWSxDQUFDO0lBQ3hCLENBQUM7SUFFRCwyQkFBMkIsQ0FDdkIsSUFBMkIsRUFDM0IsS0FBNEIsRUFDNUIsUUFBcUI7UUFFckIsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBQ2pFLE9BQU8sQ0FBQyxDQUFDO0lBQ2IsQ0FBQztJQUVELGlCQUFpQixDQUFDLFNBQXdCO1FBQ3RDLElBQUksQ0FBQyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7UUFDbkMsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQseUJBQXlCLENBQUMsT0FBYyxFQUFFLFNBQWlCO1FBQ3ZELE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFO1lBQzdCLE1BQU0sYUFBYSxHQUFHLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUNqRCxPQUFPLENBQ0gsYUFBYSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxhQUFhLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUNqRSxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsOEJBQThCLENBQzFCLFlBQTJCLEVBQzNCLFNBQWlCO1FBRWpCLE1BQU0sYUFBYSxHQUFHLENBQUMsQ0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFlBQVksSUFBSSxJQUFJLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUUzRSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLFlBQVksSUFBSSxJQUFJLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQzdELE9BQU8sWUFBWSxDQUFDO1NBQ3ZCO1FBRUQsT0FBTyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDbkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQztZQUMxRCxPQUFPLENBQ0gsYUFBYSxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsSUFBSSxhQUFhLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUNqRSxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsS0FBSyxDQUFDLG9CQUFvQixDQUN0QixPQUFjLEVBQUUsMEJBQTBCO0lBQzFDLFNBQWlCLElBQUksRUFDckIsT0FBYSxJQUFJO1FBRWpCLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQztRQUMzQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLEVBQUU7WUFDekIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ2hDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRTtnQkFDYixJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLEVBQUU7b0JBQ2hFLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLEtBQUssSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUU7d0JBQ2hGLGdDQUFnQzt3QkFDaEMsZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztxQkFDaEM7b0JBQ0QsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLEdBQUcsQ0FBQyxFQUFFO3dCQUNwQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO3FCQUNoQztpQkFDSjthQUNKO1lBQ0QsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLElBQUksTUFBTSxFQUFFO2dCQUN4QixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUksQ0FBQyxXQUFXLENBQUMsaUJBQWlCLENBQ2xELE1BQU0sQ0FDVCxDQUFDO2dCQUNGLElBQ0ksS0FBSztvQkFDTCxLQUFLLENBQUMsSUFBSSxDQUNOLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDTixLQUFLLENBQUMsRUFBRSxLQUFLLE1BQU07d0JBQ25CLEtBQUssQ0FBQyxRQUFRLEtBQUssTUFBTSxDQUNoQyxFQUNIO29CQUNFLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7aUJBQ2hDO2FBQ0o7UUFDTCxDQUFDLENBQUMsQ0FDTCxDQUFDO1FBQ0YsT0FBTyxlQUFlLENBQUM7SUFDM0IsQ0FBQztJQUVELDRCQUE0QixDQUN4QixVQUF1QixFQUN2QixZQUFzQjtRQUV0QixJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FDakQsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLENBQ3hDLENBQUM7UUFDRixRQUFRLEdBQUcsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLGdCQUFnQixDQUFDLENBQUM7UUFDOUMsTUFBTSxzQkFBc0IsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUM1QyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQ04sS0FBSyxDQUFDLE1BQU07WUFDWixLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVE7WUFDckIsWUFBWSxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUNuRCxDQUFDO1FBQ0YsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxzQkFBc0IsQ0FBQyxDQUFDO1FBQ3BELE9BQU8scUJBQXFCLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsQ0FBQztJQUdELHVCQUF1QjtJQUN2QiwrQkFBK0I7SUFDL0IsMkJBQTJCO0lBQzNCLDRCQUE0QjtJQUM1QixrQkFBa0I7SUFDbEIsdUJBQXVCO0lBQ3ZCLHlEQUF5RDtJQUN6RCw2Q0FBNkM7SUFDN0MsT0FBTztJQUNQLG1EQUFtRDtJQUNuRCxxREFBcUQ7SUFDckQsZUFBZTtJQUNmLHNCQUFzQjtJQUN0QiwrQkFBK0I7SUFDL0Isb0RBQW9EO0lBQ3BELE9BQU87SUFDUCx5REFBeUQ7SUFDekQsNENBQTRDO0lBQzVDLElBQUk7SUFFSix1QkFBdUIsQ0FBQyxNQUFtQixFQUFFLElBQVk7UUFDckQsaUJBQWlCO1FBQ2pCLElBQUksUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtZQUNoQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7Z0JBQzdCLE1BQU0sZ0JBQWdCLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3RELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDaEQsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0RDtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO1lBQ3hDLElBQUksRUFBRSxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRTtnQkFDakMsTUFBTSxnQkFBZ0IsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzdELE1BQU0sR0FBRyxHQUFHLFdBQVcsQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDaEQsT0FBTyxHQUFHLElBQUksQ0FBQyxJQUFJLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQzthQUN0RDtZQUNELE9BQU8sS0FBSyxDQUFDO1FBQ2pCLENBQUMsQ0FBQyxDQUFDO1FBQ0gsUUFBUSxHQUFHLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQztRQUM1QyxjQUFjO1FBQ2QsSUFBSSxNQUFNLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2xFLEtBQUssTUFBTSxFQUFFLElBQUksTUFBTSxFQUFFO1lBQ3JCLE1BQU0sS0FBSyxHQUFHLEVBQUUsQ0FBQyxJQUFJO2lCQUNoQixXQUFXLEVBQUU7aUJBQ2IsS0FBSyxDQUFDLEdBQUcsQ0FBQztpQkFDVixNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekMsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ25CLEtBQUssTUFBTSxLQUFLLElBQUksS0FBSyxFQUFFO2dCQUN2QixLQUFLLE1BQU0sSUFBSSxJQUFJLEtBQUssRUFBRTtvQkFDdEIsSUFBSSxXQUFXLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTt3QkFDL0IsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQzt3QkFDbkIsTUFBTTtxQkFDVDtpQkFDSjthQUNKO1lBQ0QsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLEtBQUssQ0FBQyxNQUFNLEVBQUU7Z0JBQ2pDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDbkI7U0FDSjtRQUVELE1BQU0sWUFBWSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUN0QyxFQUFFLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdkMsQ0FBQztRQUNGLE1BQU0sR0FBRyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7UUFDdEMsbUJBQW1CO1FBQ25CLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ2hDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsWUFBWSxJQUFJLEVBQUUsQ0FBQyxZQUFZLENBQUMsV0FBVyxFQUFFLEtBQUssSUFBSSxDQUNwRSxDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLE1BQU0sRUFBRSxHQUFHLGNBQWMsQ0FBQyxDQUFDO1FBQzNELE9BQU8scUJBQXFCLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDekMsQ0FBQztJQUVELG9CQUFvQixDQUFDLE9BQWlCLEVBQUUsSUFBWTtRQUNoRCx1Q0FBdUM7UUFDdkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLG9CQUFvQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN6RCxlQUFlO1FBQ2YsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FDOUIsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUNQLE1BQU0sQ0FBQyxVQUFVO1lBQ2pCLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDLE1BQU07Z0JBQzVELENBQUMsQ0FDUixDQUFDO1FBQ0YsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBRUQsc0JBQXNCLENBQUMsU0FBa0IsRUFBRSxJQUFZO1FBQ25ELFVBQVU7UUFDVixNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDcEMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQ3hDLENBQUM7UUFDRixhQUFhO1FBQ2IsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ3ZDLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUM3QyxDQUFDO1FBQ0YsT0FBTyxxQkFBcUIsQ0FBQyxDQUFDLEdBQUcsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztJQUM1RCxDQUFDO0lBRUQsMEJBQTBCLENBQ3RCLElBQW9CLEVBQ3BCLElBQVk7UUFFWixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxLQUFLLEdBQUcsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDaEQsT0FBTyxDQUNILEtBQUssQ0FBQyxJQUFJLENBQ04sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUM1RCxJQUFJLEdBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUM3QyxDQUFDO1FBQ04sQ0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLE1BQU0sQ0FBQztJQUNsQixDQUFDO0lBRUQsa0JBQWtCLENBQUMsS0FBc0IsRUFBRSxJQUFZO1FBQ25ELE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRTtZQUNqQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN4RCxPQUFPLENBQ0gsS0FBSyxDQUFDLElBQUksQ0FDTixDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQzVELElBQUksSUFBSSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQ3JELENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sTUFBTSxDQUFDO0lBQ2xCLENBQUM7SUFFRCxLQUFLLENBQUMsbUNBQW1DLENBQ3JDLFFBQW1CLEVBQ25CLE9BQWU7UUFFZixNQUFNLGFBQWEsR0FBYyxFQUFFLENBQUM7UUFDcEMsSUFBSSxhQUFhLEdBQWMsUUFBUSxDQUFDO1FBQ3hDLElBQUksWUFBWSxHQUFjLFFBQVEsQ0FBQztRQUN2QyxJQUFJLGVBQWUsR0FBYyxRQUFRLENBQUM7UUFDMUMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUM7UUFDbEQsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FDL0IsQ0FBQztZQUNGLElBQUksb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDakMsTUFBTSxZQUFZLEdBQ2QsMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDckQsTUFBTSxXQUFXLEdBQ2IseUJBQXlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFFcEQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFDO2dCQUNwRCxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtvQkFDMUIsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLEtBQUssRUFBRTt3QkFDN0IsYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDckMsUUFBUSxFQUNSLFlBQVksQ0FDZixDQUFDO3FCQUNMO29CQUNELElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7d0JBQzVCLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FDaEQsb0JBQW9CLEVBQ3BCLFFBQVEsQ0FDWCxDQUFDO3FCQUNMO29CQUNELElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxPQUFPLEVBQUU7d0JBQy9CLGVBQWU7NEJBQ1gsSUFBSSxDQUFDLGlDQUFpQyxDQUNsQyxvQkFBb0IsRUFDcEIsUUFBUSxDQUNYLENBQUM7cUJBQ1Q7aUJBQ0o7Z0JBQ0QsS0FBSyxNQUFNLE9BQU8sSUFBSSxhQUFhLEVBQUU7b0JBQ2pDLElBQ0ksZUFBZSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUM7d0JBQ2pDLFlBQVksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQ2hDO3dCQUNFLGFBQWEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQy9CO2lCQUNKO2FBQ0o7U0FDSjtRQUNELE9BQU8sYUFBYSxDQUFDO0lBQ3pCLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxRQUFtQixFQUFFLElBQVk7UUFDbkQsdUJBQXVCO1FBQ3ZCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDMUQsY0FBYztRQUNkLE1BQU0sU0FBUyxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQzdCLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDUixJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsTUFBTTtZQUM5RCxDQUFDLENBQ1IsQ0FBQztRQUNGLE9BQU8scUJBQXFCLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVEOzs7O09BSUc7SUFDSCxvQkFBb0IsQ0FBQyxPQUFjLEVBQUUsSUFBWTtRQUM3Qyx1QkFBdUI7UUFDdkIsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFO1lBQ3ZDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQ3JELE9BQU8sQ0FDSCxLQUFLLENBQUMsSUFBSSxDQUNOLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FDNUQsSUFBSSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDbEQsQ0FBQztRQUNOLENBQUMsQ0FBQyxDQUFDO1FBQ0gsOEJBQThCO1FBQzlCLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQ2hDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDUixPQUFPLENBQUMsV0FBVztZQUNuQixPQUFPLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdkQsQ0FBQztRQUNGLE9BQU8scUJBQXFCLENBQUMsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7SUFDakUsQ0FBQztJQUVELHdDQUF3QyxDQUNwQyxRQUFlLEVBQ2YsU0FBaUI7UUFFakIsT0FBTyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDL0IsTUFBTSxhQUFhLEdBQUcsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ3RELE9BQU8sQ0FDSCxhQUFhLElBQUksU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLGFBQWEsSUFBSSxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQ2pFLENBQUM7UUFDTixDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7SUFFRCxLQUFLLENBQUMsMEJBQTBCLENBQzVCLG9CQUErQixFQUMvQixPQUFjO1FBRWQsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLEtBQUssTUFBTSxPQUFPLElBQUksb0JBQW9CLEVBQUU7WUFDeEMsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO2dCQUNoQixZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQzthQUNyQztTQUNKO1FBQ0QsSUFBSSxZQUFZLENBQUMsTUFBTSxLQUFLLG9CQUFvQixDQUFDLE1BQU0sRUFBRTtZQUNyRCxJQUFJLGVBQWUsR0FBRyxFQUFFLENBQUM7WUFDekIsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUNiLFlBQVksQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxFQUFFO2dCQUM5QixNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBSSxDQUFDLG9CQUFvQixDQUN2RCxPQUFPLEVBQ1AsTUFBTSxDQUNULENBQUM7Z0JBQ0YsZUFBZSxHQUFHO29CQUNkLEdBQUcsZUFBZTtvQkFDbEIsR0FBRyxtQkFBbUI7aUJBQ3pCLENBQUM7WUFDTixDQUFDLENBQUMsQ0FDTCxDQUFDO1lBQ0YsT0FBTyxxQkFBcUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztTQUNqRDtRQUNELE9BQU8sT0FBTyxDQUFDO0lBQ25CLENBQUM7SUFFRCxLQUFLLENBQUMscUNBQXFDLENBQ3ZDLE9BQWUsRUFDZixNQUFtQjtRQUVuQixNQUFNLFdBQVcsR0FBZ0IsRUFBRSxDQUFDO1FBQ3BDLElBQUksV0FBVyxHQUFnQixNQUFNLENBQUM7UUFDdEMsTUFBTSxZQUFZLEdBQWdCLE1BQU0sQ0FBQztRQUN6QyxNQUFNLGFBQWEsR0FBZ0IsTUFBTSxDQUFDO1FBQzFDLElBQUksWUFBWSxHQUFnQixNQUFNLENBQUM7UUFDdkMsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxlQUFlLENBQUM7UUFDbEQsSUFBSSxRQUFRLEVBQUU7WUFDVixNQUFNLG9CQUFvQixHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQ3hDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsT0FBTyxLQUFLLE9BQU8sQ0FDL0IsQ0FBQztZQUNGLElBQUksb0JBQW9CLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtnQkFDakMsTUFBTSxZQUFZLEdBQ2QsMEJBQTBCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDckQsTUFBTSxXQUFXLEdBQ2IseUJBQXlCLENBQUMsb0JBQW9CLENBQUMsQ0FBQztnQkFDcEQsZ0ZBQWdGO2dCQUVoRixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsV0FBVyxDQUFDLENBQUM7Z0JBQ3BELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO29CQUMxQixJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsTUFBTSxFQUFFO3dCQUM5QixJQUFJLE9BQU8sR0FBYSxFQUFFLENBQUM7d0JBQzNCLEtBQUssTUFBTSxDQUFDLElBQUksb0JBQW9CLEVBQUU7NEJBQ2xDLElBQUksQ0FBQyxDQUFDLE9BQU8sRUFBRTtnQ0FDWCxPQUFPLEdBQUcsQ0FBQyxHQUFHLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQzs2QkFDeEM7eUJBQ0o7d0JBRUQsSUFBSSxrQkFBa0IsR0FBRyxFQUFFLENBQUM7d0JBRTVCLE1BQU0sa0JBQWtCLEdBQ3BCLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUM7d0JBQ3ZELGtCQUFrQixHQUFHOzRCQUNqQixHQUFHLGtCQUFrQjs0QkFDckIsR0FBRyxrQkFBa0I7eUJBQ3hCLENBQUM7d0JBQ0YsV0FBVyxHQUFHLGtCQUFrQixDQUFDO3FCQUNwQztvQkFDRCxJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsSUFBSSxFQUFFO3dCQUM1Qix3REFBd0Q7d0JBQ3hELHFDQUFxQzt3QkFDckMsS0FBSzt3QkFDTCxPQUFPO3FCQUNWO29CQUVELElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxLQUFLLEVBQUU7d0JBQzdCLHNDQUFzQztxQkFDekM7b0JBRUQsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRTt3QkFDNUIsWUFBWSxHQUFHLE1BQU0sSUFBSSxDQUFDLDBCQUEwQixDQUNoRCxvQkFBb0IsRUFDcEIsTUFBTSxDQUNULENBQUM7cUJBQ0w7aUJBQ0o7Z0JBQ0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxhQUFhLEVBQUU7b0JBQzdCLElBQ0ksV0FBVyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUM7d0JBQ3pCLFlBQVksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDO3dCQUMxQixZQUFZLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUM1Qjt3QkFDRSxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO3FCQUN6QjtpQkFDSjthQUNKO1NBQ0o7UUFDRCxPQUFPLFdBQVcsQ0FBQztJQUN2QixDQUFDO0lBRUQsS0FBSyxDQUFDLHVDQUF1QyxDQUN6QyxPQUFlLEVBQ2YsUUFBbUI7UUFFbkIsSUFBSSxpQkFBaUIsR0FBYyxFQUFFLENBQUM7UUFDdEMsSUFBSSxZQUFZLEdBQWMsUUFBUSxDQUFDO1FBQ3ZDLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsZUFBZSxDQUFDO1FBQ2xELElBQUksUUFBUSxFQUFFO1lBQ1YsTUFBTSxvQkFBb0IsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUN4QyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sS0FBSyxPQUFPLENBQy9CLENBQUM7WUFDRixJQUFJLG9CQUFvQixDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUU7Z0JBQ2pDLE1BQU0sV0FBVyxHQUNiLHlCQUF5QixDQUFDLG9CQUFvQixDQUFDLENBQUM7Z0JBRXBELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDcEQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7b0JBQzFCLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUU7d0JBQzVCLFlBQVksR0FBRyxNQUFNLElBQUksQ0FBQywwQkFBMEIsQ0FDaEQsb0JBQW9CLEVBQ3BCLFFBQVEsQ0FDWCxDQUFDO3FCQUNMO2lCQUNKO2dCQUNELGlCQUFpQixHQUFHLFlBQVksQ0FBQzthQUNwQztTQUNKO1FBQ0QsT0FBTyxpQkFBaUIsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxDQUFDLDZCQUE2QixDQUMvQixNQUFjLEVBQ2QsT0FBZTtRQUVmLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDckQsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPLEVBQUU7WUFDMUIsSUFDSSxNQUFNLEtBQUssVUFBVSxDQUFDLEtBQUs7Z0JBQzNCLE1BQU0sQ0FBQyxTQUFTLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQ3ZEO2dCQUNFLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FDM0MsQ0FBQyxNQUFNLENBQUMsRUFDUixPQUFPLENBQUMsS0FBSyxDQUNoQixDQUFDO2dCQUNGLElBQUksYUFBYSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQzVCLE9BQU8sS0FBSyxDQUFDO2lCQUNoQjthQUNKO1lBQ0QsSUFBSSxNQUFNLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRTtnQkFDNUIsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsMEJBQTBCLENBQ3RELENBQUMsT0FBTyxDQUFDLEVBQ1QsQ0FBQyxNQUFNLENBQUMsQ0FDWCxDQUFDO2dCQUNGLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUU7b0JBQzNCLE9BQU8sS0FBSyxDQUFDO2lCQUNoQjthQUNKO1NBQ0o7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNoQixDQUFDO0lBRUQsc0JBQXNCLENBQUMsUUFBbUIsRUFBRSxJQUFZO1FBQ3BELDhCQUE4QjtRQUM5QixNQUFNLGFBQWEsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUNqQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQ0osR0FBRyxDQUFDLFdBQVcsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLFdBQVcsRUFBRSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FDdEUsQ0FBQztRQUNGLG1EQUFtRDtRQUNuRCx3RUFBd0U7UUFDeEUsTUFBTSxZQUFZLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDeEUsTUFBTSxjQUFjLEdBQUcsSUFBSSxDQUFDLGtCQUFrQixDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsQ0FBQztRQUNuRSxNQUFNLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxjQUFjLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMvRCxNQUFNLGNBQWMsR0FBRyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FDM0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQzFCLENBQUM7UUFDRixPQUFPLHFCQUFxQixDQUFDLENBQUMsR0FBRyxhQUFhLEVBQUUsR0FBRyxjQUFjLENBQUMsQ0FBQyxDQUFDO0lBQ3hFLENBQUM7SUFFRCxLQUFLLENBQUMscUJBQXFCLENBQ3ZCLE9BQWMsRUFDZCxVQUFtQixFQUNuQixLQUFhO1FBRWIsSUFBSSxRQUFRLEdBQUcsRUFBRSxDQUFDO1FBQ2xCLFFBQVEsVUFBVSxFQUFFO1lBQ2hCLEtBQUssT0FBTyxDQUFDLFNBQVM7Z0JBQ2xCLE1BQU0sSUFBSSxHQUNOLE1BQU0sSUFBSSxDQUFDLFVBQVUsQ0FBQyw4QkFBOEIsQ0FDaEQsS0FBSyxFQUNMLFVBQVUsQ0FDYixDQUFDO2dCQUNOLE1BQU0sUUFBUSxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDO2dCQUMzRCxRQUFRLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztnQkFDL0QsTUFBTTtZQUNWO2dCQUNJLE1BQU07U0FDYjtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ3BCLENBQUM7SUFFRCxpQ0FBaUMsQ0FDN0Isb0JBQStCLEVBQy9CLFFBQW1CO1FBRW5CLE1BQU0sQ0FBQyxjQUFjLENBQUMsR0FBRyxvQkFBb0IsQ0FBQztRQUM5QyxtQkFBbUI7UUFDbkIsSUFBSSxjQUFjLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ25DLElBQUksY0FBYyxDQUFDLE1BQU0sRUFBRTtZQUN2QixjQUFjLEdBQUcsUUFBUSxDQUFDLE1BQU0sQ0FDNUIsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNSLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxjQUFjLENBQUMsTUFBTSxDQUNqRSxDQUFDO1NBQ0w7UUFDRCxxQkFBcUI7UUFDckIsSUFBSSxjQUFjLENBQUMsUUFBUSxJQUFJLGNBQWMsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtZQUMvRCxNQUFNLGtCQUFrQixHQUFHLEVBQUUsQ0FBQztZQUM5QixLQUFLLE1BQU0sT0FBTyxJQUFJLGNBQWMsRUFBRTtnQkFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLElBQUksT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO29CQUNwRCxxREFBcUQ7b0JBQ3JELGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDcEM7cUJBQU0sSUFDSCxjQUFjLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQ3RDLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUNyQyxFQUNIO29CQUNFLGtCQUFrQixDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztpQkFDcEM7YUFDSjtZQUNELE9BQU8sa0JBQWtCLENBQUM7U0FDN0I7UUFDRCxPQUFPLGNBQWMsQ0FBQztJQUMxQixDQUFDO0lBRUQsbUNBQW1DLENBQy9CLFFBQW1CLEVBQ25CLE9BQWdCO1FBRWhCLE1BQU0sYUFBYSxHQUFjLEVBQUUsQ0FBQztRQUNwQyxJQUFJLGFBQWEsR0FBYyxRQUFRLENBQUM7UUFDeEMsSUFBSSxZQUFZLEdBQWMsUUFBUSxDQUFDO1FBQ3ZDLElBQUksZUFBZSxHQUFjLFFBQVEsQ0FBQztRQUUxQyxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFO1lBQzFCLElBQUksTUFBTSxLQUFLLFVBQVUsQ0FBQyxLQUFLLEVBQUU7Z0JBQzdCLGFBQWEsR0FBRyxJQUFJLENBQUMsb0JBQW9CLENBQ3JDLFFBQVEsRUFDUixPQUFPLENBQUMsS0FBSyxDQUNoQixDQUFDO2FBQ0w7WUFDRCxvQ0FBb0M7WUFDcEMsNERBQTREO1lBQzVELGdDQUFnQztZQUNoQyxvQkFBb0I7WUFDcEIsU0FBUztZQUNULElBQUk7WUFDSixJQUFJLE1BQU0sS0FBSyxVQUFVLENBQUMsT0FBTyxFQUFFO2dCQUMvQixlQUFlO29CQUNYLElBQUksQ0FBQyxpQ0FBaUMsQ0FDbEMsQ0FBQyxPQUFPLENBQUMsRUFDVCxRQUFRLENBQ1gsQ0FBQzthQUNUO1NBQ0o7UUFDRCxLQUFLLE1BQU0sT0FBTyxJQUFJLGFBQWEsRUFBRTtZQUNqQyxJQUNJLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDO2dCQUNqQyxZQUFZLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUNoQztnQkFDRSxhQUFhLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO2FBQy9CO1NBQ0o7UUFDRCxPQUFPLGFBQWEsQ0FBQztJQUN6QixDQUFDOzsyR0EzeUJRLGFBQWE7K0dBQWIsYUFBYSxjQUZWLE1BQU07NEZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyIvKiBlc2xpbnQtZGlzYWJsZSBuby1jYXNlLWRlY2xhcmF0aW9ucyAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1hd2FpdC1pbi1sb29wICovXHJcbi8qIGVzbGludC1kaXNhYmxlIGd1YXJkLWZvci1pbiAqL1xyXG4vKiBlc2xpbnQtZGlzYWJsZSBjbGFzcy1tZXRob2RzLXVzZS10aGlzICovXHJcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBTdWJqZWN0LCBTdWJzY3JpcHRpb24gfSBmcm9tIFwicnhqc1wiO1xyXG5pbXBvcnQgeyBnZXRMZXZlbHNCZWxvdywgZ2V0SGlnaGVzdExldmVsRm9yTWlzc2lvbnMsIGdldEhpZ2hlc3RSb2xlRm9yTWlzc2lvbnMsIGZpbHRlclVuaXF1ZUFycmF5QnlJRCB9IGZyb20gXCIuLi9oZWxwZXJzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHtcclxuICAgIFpvbmUsXHJcbiAgICBFcXVpcG1lbnQsXHJcbiAgICBMZXZlbFN0YXR1cyxcclxuICAgIE1lYXN1cmVtZW50LFxyXG4gICAgTWlzc2lvbixcclxuICAgIE9yZ2FuaXNhdGlvbixcclxuICAgIFBvaVR5cGUsXHJcbiAgICBQcm9maWxlRW50aXR5LFxyXG4gICAgUm9sZVN0YXR1cyxcclxuICAgIFNwYWNlLFxyXG4gICAgVGlja2V0LFxyXG4gICAgRGJPYmplY3RUeXBlLFxyXG4gICAgRmVhdHVyZSxcclxuICAgIENvbW1lbnQsXHJcbiAgICBWaXNpdFRlbXBsYXRlLCBPYmplY3QzRFxyXG59IGZyb20gXCIuLi90eXBlcy5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IFBvaVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvcG9pLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgWm9uZVNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvem9uZS5zZXJ2aWNlXCI7XHJcbmltcG9ydCB7IEJhc2VVc2VyU2VydmljZSB9IGZyb20gXCIuL3VzZXIuc2VydmljZVwiO1xyXG5lbnVtIEZpbHRlclR5cGUge1xyXG4gICAgRE9NQUlOID0gXCJET01BSU5cIixcclxuICAgIExFVkVMID0gXCJMRVZFTFwiLFxyXG4gICAgUk9MRSA9IFwiUk9MRVwiLFxyXG4gICAgWk9ORSA9IFwiWk9ORVwiLFxyXG4gICAgU1BBQ0UgPSBcIlNQQUNFXCIsXHJcbiAgICBIQVNIVEFHID0gXCJIQVNIVEFHXCIsXHJcbn1cclxuaW1wb3J0IGxldmVuc2h0ZWluIGZyb20gJ2pzLWxldmVuc2h0ZWluJztcclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBGaWx0ZXJTZXJ2aWNlIHtcclxuICAgIHByaXZhdGUgdXBkYXRlRGF0ZUZpbHRlcjogU3ViamVjdDxEYXRlW10+ID0gbmV3IFN1YmplY3QoKTtcclxuXHJcbiAgICBwdWJsaWMgY3VycmVudERhdGVGaWx0ZXI6IERhdGVbXTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihcclxuICAgICAgICBwcml2YXRlIHVzZXJTZXJ2aWNlOiBCYXNlVXNlclNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSB6b25lU2VydmljZTogWm9uZVNlcnZpY2UsXHJcbiAgICAgICAgcHJpdmF0ZSBwb2lTZXJ2aWNlOiBQb2lTZXJ2aWNlLFxyXG4gICAgKSB7IH1cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzQnlEb21haW4odGlja2V0c1RvRmlsdGVyOiBUaWNrZXRbXSwgZG9tYWluOiBzdHJpbmcpIHtcclxuICAgICAgICByZXR1cm4gdGlja2V0c1RvRmlsdGVyLmZpbHRlcigodGljKSA9PiB0aWMuZG9tYWluSUQgPT09IGRvbWFpbik7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyT2JqZWN0c0J5TGV2ZWwob2JqZWN0c1RvRmlsdGVyOiBhbnlbXSwgbGV2ZWw6IExldmVsU3RhdHVzKTogYW55W10ge1xyXG4gICAgICAgIGNvbnN0IHZpc2libGVMZXZlbHMgPSBnZXRMZXZlbHNCZWxvdyhsZXZlbCk7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWQgPSBvYmplY3RzVG9GaWx0ZXIuZmlsdGVyKCh0aWMpID0+XHJcbiAgICAgICAgICAgIHZpc2libGVMZXZlbHMuaW5jbHVkZXModGljLmxldmVsKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJlZDtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzRm9yTWlzc2lvbihcclxuICAgICAgICB0aWNrZXRzVG9GaWx0ZXI6IFRpY2tldFtdLFxyXG4gICAgICAgIG1pc3Npb246IE1pc3Npb24sXHJcbiAgICApOiBUaWNrZXRbXSB7XHJcbiAgICAgICAgY29uc3QgbWFuYWdlclJvbGVzOiBSb2xlU3RhdHVzW10gPSBbXHJcbiAgICAgICAgICAgIFJvbGVTdGF0dXMuTUFOQUdFUixcclxuICAgICAgICAgICAgUm9sZVN0YXR1cy5BRE1JTixcclxuICAgICAgICAgICAgUm9sZVN0YXR1cy5PV05FUixcclxuICAgICAgICBdO1xyXG4gICAgICAgIGlmICghbWFuYWdlclJvbGVzLmluY2x1ZGVzKG1pc3Npb24ucm9sZSkpIHtcclxuICAgICAgICAgICAgaWYgKG1pc3Npb24ucm9sZSA9PT0gUm9sZVN0YXR1cy5TRVJWSUNFKSB7XHJcbiAgICAgICAgICAgICAgICAvLyBTRVJWSUNFIGNhbiBzZWUgdGlja2V0cyB0byB3aGljaCBoZSBpcyBhc3NpZ25lZFxyXG4gICAgICAgICAgICAgICAgY29uc3QgdGlja2V0c0Fzc2lnbmVkID0gW107XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHQgb2YgdGlja2V0c1RvRmlsdGVyKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQuYXNzaWduZWVzLml0ZW1zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBhc3NpZ25tZW50IG9mIHQuYXNzaWduZWVzLml0ZW1zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXNzaWdubWVudC5taXNzaW9uSUQgPT09IG1pc3Npb24uaWQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRzQXNzaWduZWQucHVzaCh0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIHJldHVybiB0aWNrZXRzQXNzaWduZWQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgLy8gT0NDVVBBTlQgYW5kIFZJU0lUT1IgY2FuIHNlZSBvbmx5IHRpY2tldHMgdGhhdCB0aGV5IGNyZWF0ZWRcclxuICAgICAgICAgICAgcmV0dXJuIHRpY2tldHNUb0ZpbHRlci5maWx0ZXIoKHRpY2tldCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRpY2tldC5vd25lck1pc3Npb25JRCA9PT0gbWlzc2lvbi5pZDtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aWNrZXRzVG9GaWx0ZXI7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0RmlsdGVyc0ZvclJvbGUocm9sZTogUm9sZVN0YXR1cyk6IEZpbHRlclR5cGVbXSB7XHJcbiAgICAgICAgc3dpdGNoIChyb2xlKSB7XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5BRE1JTjpcclxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5NQU5BR0VSOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtGaWx0ZXJUeXBlLlpPTkUsIEZpbHRlclR5cGUuTEVWRUxdO1xyXG4gICAgICAgICAgICBjYXNlIFJvbGVTdGF0dXMuT1dORVI6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGNhc2UgUm9sZVN0YXR1cy5TRVJWSUNFOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5MRVZFTCxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkRPTUFJTixcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlJPTEUsIC8vIHRoYXQgaXMgdGhlIG1vc3Qgc2V2ZXJlIGZpbHRlclxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLk9DQ1VQQU5UOlxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFtcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLlpPTkUsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ET01BSU4sXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5ST0xFLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuTEVWRUwsXHJcbiAgICAgICAgICAgICAgICAgICAgRmlsdGVyVHlwZS5IQVNIVEFHLFxyXG4gICAgICAgICAgICAgICAgXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLlZJU0lUT1I6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW1xyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuWk9ORSxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkxFVkVMLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuRE9NQUlOLFxyXG4gICAgICAgICAgICAgICAgICAgIEZpbHRlclR5cGUuUk9MRSxcclxuICAgICAgICAgICAgICAgICAgICBGaWx0ZXJUeXBlLkhBU0hUQUcsXHJcbiAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICBjYXNlIFJvbGVTdGF0dXMuVklTSVRPUl9NVVNFVU06XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuWk9ORSwgRmlsdGVyVHlwZS5MRVZFTCwgRmlsdGVyVHlwZS5IQVNIVEFHXTtcclxuICAgICAgICAgICAgY2FzZSBSb2xlU3RhdHVzLkdVSURFX01VU0VVTTpcclxuICAgICAgICAgICAgICAgIHJldHVybiBbRmlsdGVyVHlwZS5MRVZFTF07XHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gW0ZpbHRlclR5cGUuTEVWRUxdO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICAgIG9iamVjdHM6IE9iamVjdDNEW10sXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxPYmplY3QzRFtdPiB7XHJcbiAgICAgICAgY29uc3QgZmluYWxPYmplY3QzRHM6IE9iamVjdDNEW10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IE9iamVjdDNEW10gPSBvYmplY3RzO1xyXG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBPYmplY3QzRFtdID0gb2JqZWN0cztcclxuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xyXG4gICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IG9iaiBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21GaWx0ZXJlZC5pbmNsdWRlcyhvYmopICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZC5pbmNsdWRlcyhvYmopXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsT2JqZWN0M0RzLnB1c2gob2JqKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsT2JqZWN0M0RzO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGZpbHRlclRpY2tldHNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgdGlja2V0czogVGlja2V0W10sXHJcbiAgICAgICAgc3BhY2VJRDogc3RyaW5nLFxyXG4gICAgKTogUHJvbWlzZTxUaWNrZXRbXT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmFsVGlja2V0czogVGlja2V0W10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcclxuICAgICAgICBsZXQgcm9sZUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XHJcbiAgICAgICAgbGV0IGxldmVsRmlsdGVyZWQ6IFRpY2tldFtdID0gdGlja2V0cztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBUaWNrZXRbXSA9IHRpY2tldHM7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcclxuICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ET01BSU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0uZG9tYWlucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgLi4ubS5kb21haW5zXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYWxsRG9tYWluc0ZpbHRlcmVkID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZCBvZiBkb21haW5zKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjdXJyZW50RG9tRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyVGlja2V0c0J5RG9tYWluKHRpY2tldHMsIGQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsRG9tYWluc0ZpbHRlcmVkID0gW1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFsbERvbWFpbnNGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50RG9tRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkID0gYWxsRG9tYWluc0ZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlJPTEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdFJvbGVNaXNzaW9uID0gY3VycmVudFNwYWNlTWlzc2lvbnMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIChtKSA9PiBtLnJvbGUgPT09IGhpZ2hlc3RSb2xlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQgPSB0aGlzLmZpbHRlclRpY2tldHNGb3JNaXNzaW9uKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlja2V0cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhpZ2hlc3RSb2xlTWlzc2lvbixcclxuICAgICAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuTEVWRUwpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aWNrZXRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdExlbGVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpY2tldHMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgLy8ga2VlcCBvbmx5IHRpY2tldHMgcHJlc2VudCBpbiBhbGwgZmlsdGVyZWQgYXJyYXlzXHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhkb21GaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhyb2xlRmlsdGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgLy8gY29uc29sZS5sb2cobGV2ZWxGaWx0ZXJlZCk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyh6b25lRmlsdGVyZWQpO1xyXG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCB0aWMgb2YgbGV2ZWxGaWx0ZXJlZCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9tRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICByb2xlRmlsdGVyZWQuaW5jbHVkZXModGljKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lRmlsdGVyZWQuaW5jbHVkZXModGljKVxyXG4gICAgICAgICAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBmaW5hbFRpY2tldHMucHVzaCh0aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBjb25zb2xlLmxvZyhmaW5hbFRpY2tldHMpO1xyXG4gICAgICAgIHJldHVybiBmaW5hbFRpY2tldHM7XHJcbiAgICB9XHJcblxyXG4gICAgc3Vic2NyaWJlVG9EYXRhRmlsdGVyVXBkYXRlKFxyXG4gICAgICAgIG5leHQ/OiAodmFsdWU6IGFueSkgPT4gdm9pZCxcclxuICAgICAgICBlcnJvcj86IChlcnJvcjogYW55KSA9PiB2b2lkLFxyXG4gICAgICAgIGNvbXBsZXRlPzogKCkgPT4gdm9pZCxcclxuICAgICk6IFN1YnNjcmlwdGlvbiB7XHJcbiAgICAgICAgY29uc3QgcyA9IHRoaXMudXBkYXRlRGF0ZUZpbHRlci5zdWJzY3JpYmUobmV4dCwgZXJyb3IsIGNvbXBsZXRlKTtcclxuICAgICAgICByZXR1cm4gcztcclxuICAgIH1cclxuXHJcbiAgICBkYXRlRmlsdGVyVXBkYXRlZChkYXRlUmFuZ2U6IERhdGVbXSB8IG51bGwpIHtcclxuICAgICAgICB0aGlzLmN1cnJlbnREYXRlRmlsdGVyID0gZGF0ZVJhbmdlO1xyXG4gICAgICAgIHRoaXMudXBkYXRlRGF0ZUZpbHRlci5uZXh0KGRhdGVSYW5nZSk7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyT2JqZWN0c0ZvckRhdGVSYW5nZShvYmplY3RzOiBhbnlbXSwgZGF0ZVJhbmdlOiBEYXRlW10pOiBhbnlbXSB7XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdHMuZmlsdGVyKChvYmplY3QpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0RGF0ZSA9IG5ldyBEYXRlKG9iamVjdC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJNZWFzdXJlbWVudHNGb3JEYXRlUmFuZ2UoXHJcbiAgICAgICAgbWVhc3VyZW1lbnRzOiBNZWFzdXJlbWVudFtdLFxyXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxyXG4gICAgKTogTWVhc3VyZW1lbnRbXSB7XHJcbiAgICAgICAgY29uc3QgaXNJbnZhbGlkRGF0ZSA9IChkOiBEYXRlKSA9PiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc05hTihkLmdldFRpbWUoKSk7XHJcblxyXG4gICAgICAgIGlmIChkYXRlUmFuZ2UuZXZlcnkoZCA9PiBkIGluc3RhbmNlb2YgRGF0ZSAmJiBpc0ludmFsaWREYXRlKGQpKSkge1xyXG4gICAgICAgICAgICByZXR1cm4gbWVhc3VyZW1lbnRzO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIG1lYXN1cmVtZW50cy5maWx0ZXIoKG1lYXN1cmUpID0+IHtcclxuICAgICAgICAgICAgY29uc3QgY3JlYXRlZEF0RGF0ZSA9IG5ldyBEYXRlKG1lYXN1cmUuY29tbWVudC5jcmVhdGVkQXQpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgY3JlYXRlZEF0RGF0ZSA+PSBkYXRlUmFuZ2VbMF0gJiYgY3JlYXRlZEF0RGF0ZSA8PSBkYXRlUmFuZ2VbMV1cclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBmaWx0ZXJPYmplY3RzRm9yWm9uZShcclxuICAgICAgICBvYmplY3RzOiBhbnlbXSwgLy8gVE9ETzogcmVtb3ZlIGFueSBoZXJlLi5cclxuICAgICAgICB6b25lSUQ6IHN0cmluZyA9IG51bGwsXHJcbiAgICAgICAgem9uZTogWm9uZSA9IG51bGwsXHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRPYmplY3RzID0gW107XHJcbiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoXHJcbiAgICAgICAgICAgIG9iamVjdHMubWFwKGFzeW5jIChvYmplY3QpID0+IHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IFtwb2ldID0gb2JqZWN0LnBvaXMuaXRlbXM7XHJcbiAgICAgICAgICAgICAgICBpZiAocG9pICYmIHpvbmUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoem9uZS5zd2VlcElEcyAmJiB6b25lLnN3ZWVwSURzLmluY2x1ZGVzKHBvaS5tYXR0ZXJwb3J0U3dlZXBJRCkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMucG9pU2VydmljZS5wb2lJc1ZpcnR1YWwocG9pKSAmJiB6b25lLmxheWVyICYmIHpvbmUubGF5ZXIubmFtZSA9PT0gXCJGTE9PUlwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBpbmNsdWRlIGluIEZsb29yIHpvbmUgb25seVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMucG9pU2VydmljZS5wb2lJc1ZpcnR1YWwocG9pKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGlmIChwb2kgJiYgIXpvbmUgJiYgem9uZUlEKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgem9uZXMgPSBhd2FpdCB0aGlzLnpvbmVTZXJ2aWNlLmdldFpvbmVzRm9yT2JqZWN0KFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3QsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVzICYmXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVzLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoem9uZV8pID0+XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgem9uZV8uaWQgPT09IHpvbmVJRCB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVfLnBhcmVudElEID09PSB6b25lSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyZWRPYmplY3RzLnB1c2gob2JqZWN0KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlcmVkT2JqZWN0cztcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJFcXVpcG1lbnRzQnlEb21haW5MaXN0KFxyXG4gICAgICAgIGVxdWlwbWVudHM6IEVxdWlwbWVudFtdLFxyXG4gICAgICAgIGRvbWFpbklETGlzdDogc3RyaW5nW10sXHJcbiAgICApOiBFcXVpcG1lbnRbXSB7XHJcbiAgICAgICAgbGV0IGZpbHRlcmVkID0gW107XHJcbiAgICAgICAgY29uc3QgZmlsdGVyZWRCeURvbWFpbiA9IGVxdWlwbWVudHMuZmlsdGVyKChlcXVpcCkgPT5cclxuICAgICAgICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5RG9tYWluXTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gZXF1aXBtZW50cy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChlcXVpcCkgPT5cclxuICAgICAgICAgICAgICAgIGVxdWlwLmRvbWFpbiAmJlxyXG4gICAgICAgICAgICAgICAgZXF1aXAuZG9tYWluLnBhcmVudElEICYmXHJcbiAgICAgICAgICAgICAgICBkb21haW5JRExpc3QuaW5jbHVkZXMoZXF1aXAuZG9tYWluLnBhcmVudElEKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGZpbHRlcmVkID0gWy4uLmZpbHRlcmVkLCAuLi5maWx0ZXJlZEJ5UGFyZW50RG9tYWluXTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKGZpbHRlcmVkKTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgLy8gTm90IGltcGxlbWVudGVkIHlldCFcclxuICAgIC8vIGZpbHRlck9iamVjdHMzREJ5RG9tYWluTGlzdChcclxuICAgIC8vICAgb2JqZWN0czNEOiBPYmplY3QzRFtdLFxyXG4gICAgLy8gICBkb21haW5JRExpc3Q6IHN0cmluZ1tdLFxyXG4gICAgLy8gKTogT2JqZWN0M0RbXSB7XHJcbiAgICAvLyAgIGxldCBmaWx0ZXJlZCA9IFtdO1xyXG4gICAgLy8gICBjb25zdCBmaWx0ZXJlZEJ5RG9tYWluID0gb2JqZWN0czNELmZpbHRlcigoZXF1aXApID0+XHJcbiAgICAvLyAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKGVxdWlwLmRvbWFpbklEKSxcclxuICAgIC8vICAgKTtcclxuICAgIC8vICAgZmlsdGVyZWQgPSBbLi4uZmlsdGVyZWQsIC4uLmZpbHRlcmVkQnlEb21haW5dO1xyXG4gICAgLy8gICBjb25zdCBmaWx0ZXJlZEJ5UGFyZW50RG9tYWluID0gb2JqZWN0czNELmZpbHRlcihcclxuICAgIC8vICAgICAob2JqKSA9PlxyXG4gICAgLy8gICAgICAgb2JqLmRvbWFpbiAmJlxyXG4gICAgLy8gICAgICAgb2JqLmRvbWFpbi5wYXJlbnRJRCAmJlxyXG4gICAgLy8gICAgICAgZG9tYWluSURMaXN0LmluY2x1ZGVzKG9iai5kb21haW4ucGFyZW50SUQpLFxyXG4gICAgLy8gICApO1xyXG4gICAgLy8gICBmaWx0ZXJlZCA9IFsuLi5maWx0ZXJlZCwgLi4uZmlsdGVyZWRCeVBhcmVudERvbWFpbl07XHJcbiAgICAvLyAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoZmlsdGVyZWQpO1xyXG4gICAgLy8gfVxyXG5cclxuICAgIGZpbHRlckVxdWlwbWVudHNGb3JUZXJtKGVxdWlwczogRXF1aXBtZW50W10sIHRlcm06IHN0cmluZyk6IEVxdWlwbWVudFtdIHtcclxuICAgICAgICAvLyBmaWx0ZXIgZG9tYWluc1xyXG4gICAgICAgIGxldCBieURvbWFpbiA9IGVxdWlwcy5maWx0ZXIoKGVxKSA9PiB7XHJcbiAgICAgICAgICAgIGlmIChlcS5kb21haW4gJiYgZXEuZG9tYWluLm5hbWUpIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWREb21haW4gPSBlcS5kb21haW4ubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ID0gbGV2ZW5zaHRlaW4obm9ybWFsaXplZERvbWFpbiwgdGVybSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2IDw9IDIgfHwgbm9ybWFsaXplZERvbWFpbi5pbmNsdWRlcyh0ZXJtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgY29uc3QgYnlQYXJlbnREb21haW4gPSBlcXVpcHMuZmlsdGVyKChlcSkgPT4ge1xyXG4gICAgICAgICAgICBpZiAoZXEuZG9tYWluICYmIGVxLmRvbWFpbi5wYXJlbnRJRCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3Qgbm9ybWFsaXplZFBhcmVudCA9IGVxLmRvbWFpbi5wYXJlbnQubmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ID0gbGV2ZW5zaHRlaW4obm9ybWFsaXplZFBhcmVudCwgdGVybSk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGV2IDw9IDIgfHwgbm9ybWFsaXplZFBhcmVudC5pbmNsdWRlcyh0ZXJtKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcbiAgICAgICAgYnlEb21haW4gPSBbLi4uYnlEb21haW4sIC4uLmJ5UGFyZW50RG9tYWluXTtcclxuICAgICAgICAvLyBmaWx0ZXIgbmFtZVxyXG4gICAgICAgIGxldCBieU5hbWUgPSBbXTtcclxuICAgICAgICBjb25zdCB0ZXJtcyA9IHRlcm0uc3BsaXQoXCIgXCIpLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmxlbmd0aCA+IDIpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZXEgb2YgZXF1aXBzKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZXEubmFtZVxyXG4gICAgICAgICAgICAgICAgLnRvTG93ZXJDYXNlKClcclxuICAgICAgICAgICAgICAgIC5zcGxpdChcIiBcIilcclxuICAgICAgICAgICAgICAgIC5maWx0ZXIoKHRva2VuKSA9PiB0b2tlbi5sZW5ndGggPiAyKTtcclxuICAgICAgICAgICAgY29uc3QgbWF0Y2hlZCA9IFtdO1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IHRva2VuIG9mIHRlcm1zKSB7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IHdvcmQgb2Ygd29yZHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobGV2ZW5zaHRlaW4odG9rZW4sIHdvcmQpIDw9IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hlZC5wdXNoKHRydWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKG1hdGNoZWQubGVuZ3RoID09PSB0ZXJtcy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgIGJ5TmFtZS5wdXNoKGVxKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgY29uc3QgYnlOYW1lU2ltcGxlID0gZXF1aXBzLmZpbHRlcigoZXEpID0+XHJcbiAgICAgICAgICAgIGVxLm5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIGJ5TmFtZSA9IFsuLi5ieU5hbWUsIC4uLmJ5TmFtZVNpbXBsZV07XHJcbiAgICAgICAgLy8gYnkgc2VyaWFsIG51bWJlclxyXG4gICAgICAgIGNvbnN0IGJ5U2VyaWFsTnVtYmVyID0gZXF1aXBzLmZpbHRlcihcclxuICAgICAgICAgICAgKGVxKSA9PiBlcS5zZXJpYWxOdW1iZXIgJiYgZXEuc2VyaWFsTnVtYmVyLnRvTG93ZXJDYXNlKCkgPT09IHRlcm0sXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCByZXN1bHQgPSBbLi4uYnlEb21haW4sIC4uLmJ5TmFtZSwgLi4uYnlTZXJpYWxOdW1iZXJdO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQocmVzdWx0KTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJUaWNrZXRzRm9yVGVybSh0aWNrZXRzOiBUaWNrZXRbXSwgdGVybTogc3RyaW5nKTogVGlja2V0W10ge1xyXG4gICAgICAgIC8vIGZpbHRlciB0ZXJtIGluIHRpdGxlIGFuZCBkZXNjcmlwdGlvblxyXG4gICAgICAgIGNvbnN0IGJ5VGl0bGUgPSB0aGlzLmZpbHRlck9iamVjdHNGb3JUZXJtKHRpY2tldHMsIHRlcm0pO1xyXG4gICAgICAgIC8vIGJ5IGVxdWlwbWVudFxyXG4gICAgICAgIGNvbnN0IGJ5RXF1aXBtZW50ID0gdGlja2V0cy5maWx0ZXIoXHJcbiAgICAgICAgICAgICh0aWNrZXQpID0+XHJcbiAgICAgICAgICAgICAgICB0aWNrZXQuZXF1aXBtZW50cyAmJlxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJFcXVpcG1lbnRzRm9yVGVybSh0aWNrZXQuZXF1aXBtZW50cywgdGVybSkubGVuZ3RoID5cclxuICAgICAgICAgICAgICAgIDAsXHJcbiAgICAgICAgKTtcclxuICAgICAgICByZXR1cm4gZmlsdGVyVW5pcXVlQXJyYXlCeUlEKFsuLi5ieVRpdGxlLCAuLi5ieUVxdWlwbWVudF0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlckxvY2F0aW9uc0ZvclRlcm0obG9jYXRpb25zOiBTcGFjZVtdLCB0ZXJtOiBzdHJpbmcpOiBTcGFjZVtdIHtcclxuICAgICAgICAvLyBieSBuYW1lXHJcbiAgICAgICAgY29uc3QgYnlOYW1lID0gbG9jYXRpb25zLmZpbHRlcigobG9jKSA9PlxyXG4gICAgICAgICAgICBsb2MubmFtZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgLy8gYnkgYWRkcmVzc1xyXG4gICAgICAgIGNvbnN0IGJ5QWRkcmVzcyA9IGxvY2F0aW9ucy5maWx0ZXIoKGxvYykgPT5cclxuICAgICAgICAgICAgbG9jLmFkZHJlc3Nlcy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlOYW1lLCAuLi5ieUFkZHJlc3NdKTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJPcmdhbmlzYXRpb25zRm9yVGVybShcclxuICAgICAgICBvcmdzOiBPcmdhbmlzYXRpb25bXSxcclxuICAgICAgICB0ZXJtOiBzdHJpbmcsXHJcbiAgICApOiBPcmdhbmlzYXRpb25bXSB7XHJcbiAgICAgICAgY29uc3QgYnlOYW1lID0gb3Jncy5maWx0ZXIoKG9yZykgPT4ge1xyXG4gICAgICAgICAgICBjb25zdCB3b3JkcyA9IG9yZy5uYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgd29yZHMuc29tZShcclxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXHJcbiAgICAgICAgICAgICAgICApIHx8IG9yZy5uYW1lLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICByZXR1cm4gYnlOYW1lO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlclVzZXJzRm9yVGVybSh1c2VyczogUHJvZmlsZUVudGl0eVtdLCB0ZXJtOiBzdHJpbmcpIHtcclxuICAgICAgICBjb25zdCBieU5hbWUgPSB1c2Vycy5maWx0ZXIoKHVzZXIpID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgd29yZHMgPSB1c2VyLmRpc3BsYXlOYW1lLnRvTG93ZXJDYXNlKCkuc3BsaXQoXCIgXCIpO1xyXG4gICAgICAgICAgICByZXR1cm4gKFxyXG4gICAgICAgICAgICAgICAgd29yZHMuc29tZShcclxuICAgICAgICAgICAgICAgICAgICAod29yZCkgPT4gd29yZC5sZW5ndGggPiAyICYmIGxldmVuc2h0ZWluKHdvcmQsIHRlcm0pIDw9IDEsXHJcbiAgICAgICAgICAgICAgICApIHx8IHVzZXIuZGlzcGxheU5hbWUudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIHJldHVybiBieU5hbWU7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyRmVhdHVyZXNGb3JDdXJyZW50VXNlckluU3BhY2UoXHJcbiAgICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXSxcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPEZlYXR1cmVbXT4ge1xyXG4gICAgICAgIGNvbnN0IGZpbmFsRmVhdHVyZXM6IEZlYXR1cmVbXSA9IFtdO1xyXG4gICAgICAgIGxldCBsZXZlbEZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBsZXQgem9uZUZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBsZXQgaGFzaHRhZ0ZpbHRlcmVkOiBGZWF0dXJlW10gPSBmZWF0dXJlcztcclxuICAgICAgICBjb25zdCBtaXNzaW9ucyA9IHRoaXMudXNlclNlcnZpY2UuY3VycmVudE1pc3Npb25zO1xyXG4gICAgICAgIGlmIChtaXNzaW9ucykge1xyXG4gICAgICAgICAgICBjb25zdCBjdXJyZW50U3BhY2VNaXNzaW9ucyA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgICAgIChtKSA9PiBtLnNwYWNlSUQgPT09IHNwYWNlSUQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGlmIChjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0TGVsZWwgPVxyXG4gICAgICAgICAgICAgICAgICAgIGdldEhpZ2hlc3RMZXZlbEZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpZ2hlc3RSb2xlID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5MRVZFTCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlnaGVzdExlbGVsLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkID0gYXdhaXQgdGhpcy5hcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuSEFTSFRBRykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNodGFnRmlsdGVyZWQgPVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJGZWF0dXJlc0J5SGFzaHRhZ3NBbmRMb2NhbGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBoYXNodGFnRmlsdGVyZWQuaW5jbHVkZXMoZmVhdHVyZSkgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpXHJcbiAgICAgICAgICAgICAgICAgICAgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbmFsRmVhdHVyZXMucHVzaChmZWF0dXJlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGZpbmFsRmVhdHVyZXM7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRmVhdHVyZXNGb3JUZXJtKGZlYXR1cmVzOiBGZWF0dXJlW10sIHRlcm06IHN0cmluZyk6IEZlYXR1cmVbXSB7XHJcbiAgICAgICAgLy8gZmlsdGVyIHRlcm0gaW4gdGl0bGVcclxuICAgICAgICBjb25zdCBieVRpdGxlID0gdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybShmZWF0dXJlcywgdGVybSk7XHJcbiAgICAgICAgLy8gYnkgY29tbWVudHNcclxuICAgICAgICBjb25zdCBieUNvbW1lbnQgPSBmZWF0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxyXG4gICAgICAgICAgICAgICAgdGhpcy5maWx0ZXJPYmplY3RzRm9yVGVybShmZWF0dXJlLmNvbW1lbnRzLml0ZW1zLCB0ZXJtKS5sZW5ndGggPlxyXG4gICAgICAgICAgICAgICAgMCxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5VGl0bGUsIC4uLmJ5Q29tbWVudF0pO1xyXG4gICAgfVxyXG5cclxuICAgIC8qKlxyXG4gICAgICpcclxuICAgICAqIEBwYXJhbSBvYmplY3RzIEFycmF5IG9mIENvbW1lbnRzLCBUaWNrZXRzLCBGZWF0dXJlcy4gT2JsaWdhdG9yeSBwcm9wb3J0aWVzOiB0aXRsZSwgZGVzY3JpcHRpb25cclxuICAgICAqIEBwYXJhbSB0ZXJtIHN0cmluZ1xyXG4gICAgICovXHJcbiAgICBmaWx0ZXJPYmplY3RzRm9yVGVybShvYmplY3RzOiBhbnlbXSwgdGVybTogc3RyaW5nKTogYW55W10ge1xyXG4gICAgICAgIC8vIGZpbHRlciB0ZXJtIGluIHRpdGxlXHJcbiAgICAgICAgY29uc3QgYnlUaXRsZSA9IG9iamVjdHMuZmlsdGVyKChmZWF0dXJlKSA9PiB7XHJcbiAgICAgICAgICAgIGNvbnN0IHdvcmRzID0gZmVhdHVyZS50aXRsZS50b0xvd2VyQ2FzZSgpLnNwbGl0KFwiIFwiKTtcclxuICAgICAgICAgICAgcmV0dXJuIChcclxuICAgICAgICAgICAgICAgIHdvcmRzLnNvbWUoXHJcbiAgICAgICAgICAgICAgICAgICAgKHdvcmQpID0+IHdvcmQubGVuZ3RoID4gMiAmJiBsZXZlbnNodGVpbih3b3JkLCB0ZXJtKSA8PSAxLFxyXG4gICAgICAgICAgICAgICAgKSB8fCBmZWF0dXJlLnRpdGxlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybSlcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICB9KTtcclxuICAgICAgICAvLyB0ZXJtIHByZXNlbnQgaW4gZGVzY3JpcHRpb25cclxuICAgICAgICBjb25zdCBieURlc2NyaXB0aW9uID0gb2JqZWN0cy5maWx0ZXIoXHJcbiAgICAgICAgICAgIChmZWF0dXJlKSA9PlxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5kZXNjcmlwdGlvbiAmJlxyXG4gICAgICAgICAgICAgICAgZmVhdHVyZS5kZXNjcmlwdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHRlcm0pLFxyXG4gICAgICAgICk7XHJcbiAgICAgICAgcmV0dXJuIGZpbHRlclVuaXF1ZUFycmF5QnlJRChbLi4uYnlUaXRsZSwgLi4uYnlEZXNjcmlwdGlvbl0pO1xyXG4gICAgfVxyXG5cclxuICAgIGZpbHRlck1pc3Npb25CeVN0YXJ0VGltZURhdGVGb3JEYXRlUmFuZ2UoXHJcbiAgICAgICAgbWlzc2lvbnM6IGFueVtdLFxyXG4gICAgICAgIGRhdGVSYW5nZTogRGF0ZVtdLFxyXG4gICAgKTogYW55W10ge1xyXG4gICAgICAgIHJldHVybiBtaXNzaW9ucy5maWx0ZXIoKG1pc3Npb24pID0+IHtcclxuICAgICAgICAgICAgY29uc3Qgc3RhcnREYXRlVGltZSA9IG5ldyBEYXRlKG1pc3Npb24uc3RhcnREYXRlVGltZSk7XHJcbiAgICAgICAgICAgIHJldHVybiAoXHJcbiAgICAgICAgICAgICAgICBzdGFydERhdGVUaW1lID49IGRhdGVSYW5nZVswXSAmJiBzdGFydERhdGVUaW1lIDw9IGRhdGVSYW5nZVsxXVxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIGFzeW5jIGFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxyXG4gICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zOiBNaXNzaW9uW10sXHJcbiAgICAgICAgb2JqZWN0czogYW55W10sXHJcbiAgICApOiBQcm9taXNlPGFueVtdPiB7XHJcbiAgICAgICAgY29uc3QgYWxsb3dlZFpvbmVzID0gW107XHJcbiAgICAgICAgZm9yIChjb25zdCBtaXNzaW9uIG9mIGN1cnJlbnRTcGFjZU1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIGlmIChtaXNzaW9uLnpvbmVJRCkge1xyXG4gICAgICAgICAgICAgICAgYWxsb3dlZFpvbmVzLnB1c2gobWlzc2lvbi56b25lSUQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGlmIChhbGxvd2VkWm9uZXMubGVuZ3RoID09PSBjdXJyZW50U3BhY2VNaXNzaW9ucy5sZW5ndGgpIHtcclxuICAgICAgICAgICAgbGV0IGFsbFpvbmVGaWx0ZXJlZCA9IFtdO1xyXG4gICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChcclxuICAgICAgICAgICAgICAgIGFsbG93ZWRab25lcy5tYXAoYXN5bmMgKHpvbmVJRCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRab25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmZpbHRlck9iamVjdHNGb3Jab25lKFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB6b25lSUQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgICAgICAgICBhbGxab25lRmlsdGVyZWQgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC4uLmFsbFpvbmVGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgLi4uY3VycmVudFpvbmVGaWx0ZXJlZCxcclxuICAgICAgICAgICAgICAgICAgICBdO1xyXG4gICAgICAgICAgICAgICAgfSksXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoYWxsWm9uZUZpbHRlcmVkKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG9iamVjdHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyRXF1aXBtZW50c0ZvckN1cnJlbnRVc2VySW5TcGFjZShcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICAgICAgZXF1aXBzOiBFcXVpcG1lbnRbXSxcclxuICAgICk6IFByb21pc2U8RXF1aXBtZW50W10+IHtcclxuICAgICAgICBjb25zdCBmaW5hbEVxdWlwczogRXF1aXBtZW50W10gPSBbXTtcclxuICAgICAgICBsZXQgZG9tRmlsdGVyZWQ6IEVxdWlwbWVudFtdID0gZXF1aXBzO1xyXG4gICAgICAgIGNvbnN0IHJvbGVGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgY29uc3QgbGV2ZWxGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRXF1aXBtZW50W10gPSBlcXVpcHM7XHJcbiAgICAgICAgY29uc3QgbWlzc2lvbnMgPSB0aGlzLnVzZXJTZXJ2aWNlLmN1cnJlbnRNaXNzaW9ucztcclxuICAgICAgICBpZiAobWlzc2lvbnMpIHtcclxuICAgICAgICAgICAgY29uc3QgY3VycmVudFNwYWNlTWlzc2lvbnMgPSBtaXNzaW9ucy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAobSkgPT4gbS5zcGFjZUlEID09PSBzcGFjZUlELFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBpZiAoY3VycmVudFNwYWNlTWlzc2lvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgaGlnaGVzdExlbGVsID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0TGV2ZWxGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBoaWdoZXN0Um9sZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgZ2V0SGlnaGVzdFJvbGVGb3JNaXNzaW9ucyhjdXJyZW50U3BhY2VNaXNzaW9ucyk7XHJcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhcIkhpZ2hlc3QgbGV2ZWw6IFwiLCBoaWdoZXN0TGVsZWwsIFwiLCBIaWdoZXN0IFJvbGU6IFwiLCBoaWdoZXN0Um9sZSlcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5ET01BSU4pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRvbWFpbnM6IHN0cmluZ1tdID0gW107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgbSBvZiBjdXJyZW50U3BhY2VNaXNzaW9ucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG0uZG9tYWlucykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvbWFpbnMgPSBbLi4uZG9tYWlucywgLi4ubS5kb21haW5zXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFsbERvbWFpbnNGaWx0ZXJlZCA9IFtdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VycmVudERvbUZpbHRlcmVkID1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmlsdGVyRXF1aXBtZW50c0J5RG9tYWluTGlzdChlcXVpcHMsIGRvbWFpbnMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBhbGxEb21haW5zRmlsdGVyZWQgPSBbXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5hbGxEb21haW5zRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5jdXJyZW50RG9tRmlsdGVyZWQsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkID0gYWxsRG9tYWluc0ZpbHRlcmVkO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlJPTEUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29uc3QgaGlnaGVzdFJvbGVNaXNzaW9uID0gY3VycmVudFNwYWNlTWlzc2lvbnMuZmluZChcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIChtKSA9PiBtLnJvbGUgPT09IGhpZ2hlc3RSb2xlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBUT0RPXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRPRE8sIGVxdWlwbWVudCBkb2VzIG5vdCBoYXZlIGxldmVsXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkID0gYXdhaXQgdGhpcy5hcHBseVpvbmVGaWx0ZXJGb3JNaXNzaW9ucyhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXF1aXBzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZvciAoY29uc3QgdGljIG9mIGxldmVsRmlsdGVyZWQpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRvbUZpbHRlcmVkLmluY2x1ZGVzKHRpYykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgcm9sZUZpbHRlcmVkLmluY2x1ZGVzKHRpYykgJiZcclxuICAgICAgICAgICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKHRpYylcclxuICAgICAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZmluYWxFcXVpcHMucHVzaCh0aWMpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmluYWxFcXVpcHM7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyTWVhc3VyZW1lbnRzRm9yQ3VycmVudFVzZXJJblNwYWNlKFxyXG4gICAgICAgIHNwYWNlSUQ6IHN0cmluZyxcclxuICAgICAgICBjb21tZW50czogQ29tbWVudFtdLFxyXG4gICAgKTogUHJvbWlzZTxDb21tZW50W10+IHtcclxuICAgICAgICBsZXQgZmluYWxNZWFzdXJlbWVudHM6IENvbW1lbnRbXSA9IFtdO1xyXG4gICAgICAgIGxldCB6b25lRmlsdGVyZWQ6IENvbW1lbnRbXSA9IGNvbW1lbnRzO1xyXG4gICAgICAgIGNvbnN0IG1pc3Npb25zID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbnM7XHJcbiAgICAgICAgaWYgKG1pc3Npb25zKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRTcGFjZU1pc3Npb25zID0gbWlzc2lvbnMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgKG0pID0+IG0uc3BhY2VJRCA9PT0gc3BhY2VJRCxcclxuICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKGN1cnJlbnRTcGFjZU1pc3Npb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgIGNvbnN0IGhpZ2hlc3RSb2xlID1cclxuICAgICAgICAgICAgICAgICAgICBnZXRIaWdoZXN0Um9sZUZvck1pc3Npb25zKGN1cnJlbnRTcGFjZU1pc3Npb25zKTtcclxuXHJcbiAgICAgICAgICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShoaWdoZXN0Um9sZSk7XHJcbiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGZpbHRlciBvZiBmaWx0ZXJzKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50U3BhY2VNaXNzaW9ucyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1lbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZpbmFsTWVhc3VyZW1lbnRzID0gem9uZUZpbHRlcmVkO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaW5hbE1lYXN1cmVtZW50cztcclxuICAgIH1cclxuXHJcbiAgICBhc3luYyBpc09iamVjdEFsbG93ZWRGb3JVc2VySW5TcGFjZShcclxuICAgICAgICBvYmplY3Q6IE9iamVjdCxcclxuICAgICAgICBzcGFjZUlEOiBzdHJpbmcsXHJcbiAgICApOiBQcm9taXNlPGJvb2xlYW4+IHtcclxuICAgICAgICBjb25zdCBtaXNzaW9uID0gdGhpcy51c2VyU2VydmljZS5jdXJyZW50TWlzc2lvbihzcGFjZUlEKTtcclxuICAgICAgICBjb25zdCBmaWx0ZXJzID0gdGhpcy5nZXRGaWx0ZXJzRm9yUm9sZShtaXNzaW9uLnJvbGUpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZmlsdGVyIG9mIGZpbHRlcnMpIHtcclxuICAgICAgICAgICAgaWYgKFxyXG4gICAgICAgICAgICAgICAgZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMICYmXHJcbiAgICAgICAgICAgICAgICBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBcImxldmVsXCIpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgY29uc3QgbGV2ZWxGaWx0ZXJlZCA9IHRoaXMuZmlsdGVyT2JqZWN0c0J5TGV2ZWwoXHJcbiAgICAgICAgICAgICAgICAgICAgW29iamVjdF0sXHJcbiAgICAgICAgICAgICAgICAgICAgbWlzc2lvbi5sZXZlbCxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAobGV2ZWxGaWx0ZXJlZC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGZpbHRlciA9PT0gRmlsdGVyVHlwZS5aT05FKSB7XHJcbiAgICAgICAgICAgICAgICBjb25zdCB6b25lRmlsdGVyZWQgPSBhd2FpdCB0aGlzLmFwcGx5Wm9uZUZpbHRlckZvck1pc3Npb25zKFxyXG4gICAgICAgICAgICAgICAgICAgIFttaXNzaW9uXSxcclxuICAgICAgICAgICAgICAgICAgICBbb2JqZWN0XSxcclxuICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBpZiAoem9uZUZpbHRlcmVkLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgIH1cclxuXHJcbiAgICBmaWx0ZXJUZW1wbGF0ZXNGb3JUZXJtKG1pc3Npb25zOiBNaXNzaW9uW10sIHRlcm06IHN0cmluZyk6IE1pc3Npb25bXSB7XHJcbiAgICAgICAgLy8gdGVybSBwcmVzZW50IGluIGRlc2NyaXB0aW9uXHJcbiAgICAgICAgY29uc3QgYnlEZXNjcmlwdGlvbiA9IG1pc3Npb25zLmZpbHRlcihcclxuICAgICAgICAgICAgKG1pcykgPT5cclxuICAgICAgICAgICAgICAgIG1pcy5kZXNjcmlwdGlvbiAmJiBtaXMuZGVzY3JpcHRpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0ZXJtKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIC8vIGJ5IHVzZXIgbGFzdE5hbWUgd2hpY2ggaXMgdGhlIG5hbWUgb2YgdGhlIHZpc2l0OlxyXG4gICAgICAgIC8vIG1ldGFkYXRhOiBcIntcXFwiZmlyc3ROYW1lXFxcIjpcXFwiXFxcIixcXFwibGFzdE5hbWVcXFwiOlxcXCJWaXNpdGUgZHUgNSBKdWlsbGV0XFxcIn1cIlxyXG4gICAgICAgIGNvbnN0IHVzZXJQcm9maWxlcyA9IG1pc3Npb25zLm1hcCgobWlzKSA9PiBuZXcgUHJvZmlsZUVudGl0eShtaXMudXNlcikpO1xyXG4gICAgICAgIGNvbnN0IGJ5VXNlckxhc3RuYW1lID0gdGhpcy5maWx0ZXJVc2Vyc0ZvclRlcm0odXNlclByb2ZpbGVzLCB0ZXJtKTtcclxuICAgICAgICBjb25zdCB1c2VySWRzID0gbmV3IFNldChieVVzZXJMYXN0bmFtZS5tYXAoKHVzZXIpID0+IHVzZXIuaWQpKTtcclxuICAgICAgICBjb25zdCBtaXNzaW9uc0J5VXNlciA9IG1pc3Npb25zLmZpbHRlcigobWlzKSA9PlxyXG4gICAgICAgICAgICB1c2VySWRzLmhhcyhtaXMudXNlcklEKSxcclxuICAgICAgICApO1xyXG4gICAgICAgIHJldHVybiBmaWx0ZXJVbmlxdWVBcnJheUJ5SUQoWy4uLmJ5RGVzY3JpcHRpb24sIC4uLm1pc3Npb25zQnlVc2VyXSk7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZmlsdGVyT2JqZWN0c0ZvclN3ZWVwKFxyXG4gICAgICAgIG9iamVjdHM6IGFueVtdLFxyXG4gICAgICAgIG9iamVjdFR5cGU6IFBvaVR5cGUsXHJcbiAgICAgICAgc3dlZXA6IHN0cmluZyxcclxuICAgICk6IFByb21pc2U8YW55W10+IHtcclxuICAgICAgICBsZXQgZmlsdGVyZWQgPSBbXTtcclxuICAgICAgICBzd2l0Y2ggKG9iamVjdFR5cGUpIHtcclxuICAgICAgICAgICAgY2FzZSBQb2lUeXBlLkVRVUlQTUVOVDpcclxuICAgICAgICAgICAgICAgIGNvbnN0IHBvaXMgPVxyXG4gICAgICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMucG9pU2VydmljZS5nZXRQb2lzQnlNYXR0ZXJwb3J0U3dlZXBCeVR5cGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHN3ZWVwLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RUeXBlLFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgICAgICBjb25zdCBlcXVpcElEcyA9IG5ldyBTZXQocG9pcy5tYXAoKHBvaSkgPT4gcG9pLmVsZW1lbnRJRCkpO1xyXG4gICAgICAgICAgICAgICAgZmlsdGVyZWQgPSBvYmplY3RzLmZpbHRlcigob2JqZWN0KSA9PiBlcXVpcElEcy5oYXMob2JqZWN0LmlkKSk7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVyZWQ7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRmVhdHVyZXNCeUhhc2h0YWdzQW5kTG9jYWxlKFxyXG4gICAgICAgIGN1cnJlbnRTcGFjZU1pc3Npb25zOiBNaXNzaW9uW10sXHJcbiAgICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXSxcclxuICAgICk6IEZlYXR1cmVbXSB7XHJcbiAgICAgICAgY29uc3QgW2N1cnJlbnRNaXNzaW9uXSA9IGN1cnJlbnRTcGFjZU1pc3Npb25zO1xyXG4gICAgICAgIC8vIGZpbHRlciBieSBsb2NhbGVcclxuICAgICAgICBsZXQgZmlsdGVyZWRMb2NhbGUgPSBbLi4uZmVhdHVyZXNdO1xyXG4gICAgICAgIGlmIChjdXJyZW50TWlzc2lvbi5sb2NhbGUpIHtcclxuICAgICAgICAgICAgZmlsdGVyZWRMb2NhbGUgPSBmZWF0dXJlcy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoZmVhdHVyZSkgPT5cclxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlLmxvY2FsZSAmJiBmZWF0dXJlLmxvY2FsZSA9PT0gY3VycmVudE1pc3Npb24ubG9jYWxlLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIH1cclxuICAgICAgICAvLyBmaWx0ZXIgYnkgaGFzaHRhZ3NcclxuICAgICAgICBpZiAoY3VycmVudE1pc3Npb24uaGFzaHRhZ3MgJiYgY3VycmVudE1pc3Npb24uaGFzaHRhZ3MubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBmaWx0ZXJlZEJ5SGFzaHRhZ3MgPSBbXTtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBmZWF0dXJlIG9mIGZpbHRlcmVkTG9jYWxlKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIWZlYXR1cmUuaGFzaHRhZ3MgfHwgZmVhdHVyZS5oYXNodGFncy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyBGZWF0dXJlIHdpdGhvdXQgaGFzaHRhZyBpcyBhdmFpbGFibGUgZm9yIGV2ZXJ5Ym9keVxyXG4gICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkQnlIYXNodGFncy5wdXNoKGZlYXR1cmUpO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChcclxuICAgICAgICAgICAgICAgICAgICBjdXJyZW50TWlzc2lvbi5oYXNodGFncy5ldmVyeSgoaGFzaHRhZykgPT5cclxuICAgICAgICAgICAgICAgICAgICAgICAgZmVhdHVyZS5oYXNodGFncy5pbmNsdWRlcyhoYXNodGFnKSxcclxuICAgICAgICAgICAgICAgICAgICApXHJcbiAgICAgICAgICAgICAgICApIHtcclxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZEJ5SGFzaHRhZ3MucHVzaChmZWF0dXJlKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmlsdGVyZWRCeUhhc2h0YWdzO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZmlsdGVyZWRMb2NhbGU7XHJcbiAgICB9XHJcblxyXG4gICAgZmlsdGVyRmVhdHVyZXNGb3JNaXNzaW9uV2l0aG91dFpvbmUoXHJcbiAgICAgICAgZmVhdHVyZXM6IEZlYXR1cmVbXSxcclxuICAgICAgICBtaXNzaW9uOiBNaXNzaW9uLFxyXG4gICAgKTogRmVhdHVyZVtdIHtcclxuICAgICAgICBjb25zdCBmaW5hbEZlYXR1cmVzOiBGZWF0dXJlW10gPSBbXTtcclxuICAgICAgICBsZXQgbGV2ZWxGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcbiAgICAgICAgbGV0IHpvbmVGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcbiAgICAgICAgbGV0IGhhc2h0YWdGaWx0ZXJlZDogRmVhdHVyZVtdID0gZmVhdHVyZXM7XHJcblxyXG4gICAgICAgIGNvbnN0IGZpbHRlcnMgPSB0aGlzLmdldEZpbHRlcnNGb3JSb2xlKG1pc3Npb24ucm9sZSk7XHJcbiAgICAgICAgZm9yIChjb25zdCBmaWx0ZXIgb2YgZmlsdGVycykge1xyXG4gICAgICAgICAgICBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLkxFVkVMKSB7XHJcbiAgICAgICAgICAgICAgICBsZXZlbEZpbHRlcmVkID0gdGhpcy5maWx0ZXJPYmplY3RzQnlMZXZlbChcclxuICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICAgICAgICAgICAgICBtaXNzaW9uLmxldmVsLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvLyBpZiAoZmlsdGVyID09PSBGaWx0ZXJUeXBlLlpPTkUpIHtcclxuICAgICAgICAgICAgLy8gICAgIHpvbmVGaWx0ZXJlZCA9IGF3YWl0IHRoaXMuYXBwbHlab25lRmlsdGVyRm9yTWlzc2lvbnMoXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgY3VycmVudFNwYWNlTWlzc2lvbnMsXHJcbiAgICAgICAgICAgIC8vICAgICAgICAgZmVhdHVyZXMsXHJcbiAgICAgICAgICAgIC8vICAgICApO1xyXG4gICAgICAgICAgICAvLyB9XHJcbiAgICAgICAgICAgIGlmIChmaWx0ZXIgPT09IEZpbHRlclR5cGUuSEFTSFRBRykge1xyXG4gICAgICAgICAgICAgICAgaGFzaHRhZ0ZpbHRlcmVkID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbHRlckZlYXR1cmVzQnlIYXNodGFnc0FuZExvY2FsZShcclxuICAgICAgICAgICAgICAgICAgICAgICAgW21pc3Npb25dLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBsZXZlbEZpbHRlcmVkKSB7XHJcbiAgICAgICAgICAgIGlmIChcclxuICAgICAgICAgICAgICAgIGhhc2h0YWdGaWx0ZXJlZC5pbmNsdWRlcyhmZWF0dXJlKSAmJlxyXG4gICAgICAgICAgICAgICAgem9uZUZpbHRlcmVkLmluY2x1ZGVzKGZlYXR1cmUpXHJcbiAgICAgICAgICAgICkge1xyXG4gICAgICAgICAgICAgICAgZmluYWxGZWF0dXJlcy5wdXNoKGZlYXR1cmUpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBmaW5hbEZlYXR1cmVzO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
|
@@ -225,12 +225,12 @@ export class InterventionService {
|
|
|
225
225
|
return date;
|
|
226
226
|
}
|
|
227
227
|
}
|
|
228
|
-
InterventionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
229
|
-
InterventionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
230
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
228
|
+
InterventionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: InterventionService, deps: [{ token: i1.EventService }, { token: i2.MissionService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
229
|
+
InterventionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: InterventionService, providedIn: "root" });
|
|
230
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: InterventionService, decorators: [{
|
|
231
231
|
type: Injectable,
|
|
232
232
|
args: [{
|
|
233
233
|
providedIn: "root",
|
|
234
234
|
}]
|
|
235
235
|
}], ctorParameters: function () { return [{ type: i1.EventService }, { type: i2.MissionService }]; } });
|
|
236
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2ZW50aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ludGVydmVudGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxXQUFXLEVBQUUsU0FBUyxFQUFlLGFBQWEsRUFBK0IsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQU8xSCxNQUFNLE9BQU8sbUJBQW1CO0lBUTVCLFlBQ1ksWUFBMEIsRUFDMUIsY0FBOEI7UUFEOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBVDFDLDJCQUFzQixHQUFHO1lBQ3JCLFNBQVMsQ0FBQyw0QkFBNEI7WUFDdEMsU0FBUyxDQUFDLHdCQUF3QjtZQUNsQyxTQUFTLENBQUMsU0FBUztZQUNuQixTQUFTLENBQUMsd0JBQXdCO1NBQ3JDLENBQUM7SUFLQyxDQUFDO0lBRUosS0FBSyxDQUFDLGdDQUFnQyxDQUNsQyxNQUFjO1FBRWQsTUFBTSxNQUFNLEdBQ1IsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLG1DQUFtQyxDQUN2RCxNQUFNLENBQUMsRUFBRSxDQUNaLENBQUM7UUFDTixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDM0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQ3BELENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUNwQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsd0JBQXdCLENBQ2pFLENBQUM7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Q0FBQyxpQkFBaUIsQ0FBQztnQkFDN0MsTUFBTTthQUNUO1NBQ0o7UUFDRCxPQUFPLGlCQUFpQixDQUFDO0lBQzdCLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxNQUFlO1FBQ3hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdFLEtBQUssTUFBTSxNQUFNLElBQUksWUFBWSxFQUFFO1lBQy9CLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7Z0JBQzlCLE1BQU07YUFDVDtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7Z0hBcFRRLG1CQUFtQjtvSEFBbkIsbUJBQW1CLGNBRmhCLE1BQU07MkZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEV2ZW50LCBFdmVudFN0YXR1cywgRXZlbnRUeXBlLCBQcmVzdGF0YWlyZSwgUHJvZmlsZUVudGl0eSwgUmVxdWVzdEludGVydmVudGlvbiwgVGlja2V0IH0gZnJvbSBcIi4uL3R5cGVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL2V2ZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTWlzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvbWlzc2lvbi5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEludGVydmVudGlvblNlcnZpY2Uge1xyXG4gICAgaW50ZXJ2ZW50aW9uRXZlbnRUeXBlcyA9IFtcclxuICAgICAgICBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OLFxyXG4gICAgICAgIEV2ZW50VHlwZS5SRVBPUlRJTkcsXHJcbiAgICAgICAgRXZlbnRUeXBlLlJFUVVFU1RfRk9SX0lOVEVSVkVOVElPTixcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1pc3Npb25TZXJ2aWNlOiBNaXNzaW9uU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBhc3luYyBnZXRSZXF1ZXN0SW50ZXJ2ZW50aW9uRnJvbVRpY2tldChcclxuICAgICAgICB0aWNrZXQ6IFRpY2tldCxcclxuICAgICk6IFByb21pc2U8UmVxdWVzdEludGVydmVudGlvbj4ge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50cyA9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZXZlbnRTZXJ2aWNlLmdldEV2ZW50c0J5VGlja2V0SURTb3J0ZWRCeURhdGVEZXNjKFxyXG4gICAgICAgICAgICAgICAgdGlja2V0LmlkLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJlbGF0ZWRFdmVudHMgPSBldmVudHMuZmlsdGVyKChldmVudF8pID0+XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2ZW50aW9uRXZlbnRUeXBlcy5pbmNsdWRlcyhldmVudF8udHlwZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBhbGxSZXF1ZXN0cyA9IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PiBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLlJFUVVFU1RfRk9SX0lOVEVSVkVOVElPTixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChhbGxSZXF1ZXN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnQgPSBhbGxSZXF1ZXN0c1swXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvc2VkUmVxdWVzdCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50VG9SZXF1ZXN0SW50ZXJ2ZW50aW9uKG1vc3RSZWNlbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbXBvc2VkUmVxdWVzdC5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkNBTkNFTExFRCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VkUmVxdWVzdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0ID0gcmVsYXRlZEV2ZW50cy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQpID0+IGV2ZW50Lmdyb3VwID09PSBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGxldCBpbnRlcnZlbnRpb247XHJcbiAgICAgICAgICAgIGlmIChldmVudHNGb3JNb3N0UmVjZW50UmVxdWVzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGJhY2sgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgICAgICAgICAgZXZlbnRzRm9yTW9zdFJlY2VudFJlcXVlc3QgPSByZWxhdGVkRXZlbnRzO1xyXG4gICAgICAgICAgICAgICAgLy8gZ2V0IGludGVydmVudGlvblxyXG4gICAgICAgICAgICAgICAgaW50ZXJ2ZW50aW9uID0gdGhpcy5jb21wb3NlSW50ZXJ2ZW50aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGVkRXZlbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IGR1cmF0aW9uXHJcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QucmVhbER1cmF0aW9uID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldER1cmF0aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEV2ZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW50ZXJ2ZW50aW9uID0gdGhpcy5jb21wb3NlSW50ZXJ2ZW50aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICBldmVudHNGb3JNb3N0UmVjZW50UmVxdWVzdCxcclxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxEdXJhdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREdXJhdGlvbkZvclJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVTdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvc2VkUmVxdWVzdC5lc3RpbWF0ZVN0YXJ0RGF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRNb3N0UmVjZW50RXN0aW1hdGVTdGFydERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxTdGFydERhdGUgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRFYXJsaWVzdFJlYWxTdGFydERhdGVGb3JSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmlkLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVFbmREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVFbmREYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE1vc3RSZWNlbnRFc3RpbWF0ZUVuZERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxFbmREYXRlID1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGF0ZXN0UmVhbEVuZERhdGVGb3JSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmlkLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNvbXBvc2VkUmVxdWVzdC5pbnRlcnZlbnRpb24gPSBpbnRlcnZlbnRpb247XHJcbiAgICAgICAgICAgIHJldHVybiBjb21wb3NlZFJlcXVlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvc2VJbnRlcnZlbnRpb25Gb3JSZXF1ZXN0KFxyXG4gICAgICAgIHJlbGF0ZWRFdmVudHM6IEV2ZW50W10sXHJcbiAgICAgICAgcmVxdWVzdElEOiBzdHJpbmcsXHJcbiAgICApOiBFdmVudCB7XHJcbiAgICAgICAgY29uc3QgaW50ZXJ2ZW50aW9ucyA9IHJlcXVlc3RJRFxyXG4gICAgICAgICAgICA/IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoaW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJbnRlcnZlbnRpb24gPSBpbnRlcnZlbnRpb25zWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gbGFzdEludGVydmVudGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UHJlc3RhdGFpcmVGb3JUaWNrZXQodGlja2V0OiBUaWNrZXQpOiBQcm9taXNlPFByZXN0YXRhaXJlPiB7XHJcbiAgICAgICAgaWYgKHRpY2tldC5hc3NpZ25lZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRBZmZlY3RhdGlvbnMgPSB0aWNrZXQuYXNzaWduZWVzLml0ZW1zLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAoYSwgYikgPT5cclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkQXQpIC0gbmV3IERhdGUoYS5jcmVhdGVkQXQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBtaXNzaW9uSURwcmVzdGEgPSBzb3J0ZWRBZmZlY3RhdGlvbnNbMF0ubWlzc2lvbklEO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVzdGFNaXNzaW9uID0gYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5nZXRNaXNzaW9uKFxyXG4gICAgICAgICAgICAgICAgbWlzc2lvbklEcHJlc3RhLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyUHJlc3RhdGFpcmUgPSBuZXcgUHJvZmlsZUVudGl0eShwcmVzdGFNaXNzaW9uLnVzZXIpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVzdGF0YWlyZSA9IHtcclxuICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogcHJlc3RhTWlzc2lvbi5vcmdhbmlzYXRpb24sXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uOiBwcmVzdGFNaXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgcHJvZmlsZTogdXNlclByZXN0YXRhaXJlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdXNlclByZXN0YXRhaXJlLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gcHJlc3RhdGFpcmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVhcmxpZXN0UmVhbFN0YXJ0RGF0ZUZvclJlcXVlc3QoXHJcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxyXG4gICAgICAgIHJlcXVlc3RJRDogc3RyaW5nLFxyXG4gICAgKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRJbnRlcnZlbnRpb25zID1cclxuICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZUFzYyhpbnRlcnZlbnRpb25zKTtcclxuICAgICAgICBpZiAoc29ydGVkSW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkSW50ZXJ2ZW50aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnJlYWxTdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gZXZlbnQucmVhbFN0YXJ0RGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXRlc3RSZWFsRW5kRGF0ZUZvclJlcXVlc3QoXHJcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxyXG4gICAgICAgIHJlcXVlc3RJRDogc3RyaW5nLFxyXG4gICAgKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRJbnRlcnZlbnRpb25zID1cclxuICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoaW50ZXJ2ZW50aW9ucyk7XHJcbiAgICAgICAgaWYgKHNvcnRlZEludGVydmVudGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZEludGVydmVudGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5yZWFsRW5kRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudC5yZWFsRW5kRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREdXJhdGlvbkZvclJlcXVlc3QoZXZlbnRzOiBFdmVudFtdLCByZXF1ZXN0SUQ6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gMDsgLy8gaW4gbWlsaXNlY29uZHNcclxuICAgICAgICBjb25zdCBpbnRlcnZlbnRpb25zID0gcmVxdWVzdElEXHJcbiAgICAgICAgICAgID8gZXZlbnRzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGV2ZW50XykgPT5cclxuICAgICAgICAgICAgICAgICAgICAgIChldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy5ncm91cCA9PT0gcmVxdWVzdElELFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOiBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5DT05UUkFDVFVBTF9JTlRFUlZFTlRJT04gfHxcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgaW50ZXJ2ZW50aW9ucykge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGltZVNwZW50KSB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiArPSBldmVudC50aW1lU3BlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEludGVydmVudGlvbihldmVudHMpOiBFdmVudCB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpbnRlcnZlbnRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbGFzdEludGVydmVudGlvbiA9IGludGVydmVudGlvbnNbMF07XHJcbiAgICAgICAgICAgIHJldHVybiBsYXN0SW50ZXJ2ZW50aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBldmVudFRvUmVxdWVzdEludGVydmVudGlvbihldmVudDogRXZlbnQpOiBSZXF1ZXN0SW50ZXJ2ZW50aW9uIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBpZDogZXZlbnQuZ3JvdXAgPT09IFwiZGVmYXVsdFwiID8gZXZlbnQuaWQgOiBldmVudC5ncm91cCxcclxuICAgICAgICAgICAgcmVhbEVuZERhdGU6IGV2ZW50LnJlYWxFbmREYXRlLFxyXG4gICAgICAgICAgICByZWFsU3RhcnREYXRlOiBldmVudC5yZWFsU3RhcnREYXRlLFxyXG4gICAgICAgICAgICBlc3RpbWF0ZVN0YXJ0RGF0ZTogZXZlbnQuZXN0aW1hdGVTdGFydERhdGUsXHJcbiAgICAgICAgICAgIGVzdGltYXRlRW5kRGF0ZTogZXZlbnQuZXN0aW1hdGVFbmREYXRlLFxyXG4gICAgICAgICAgICByZWFsRHVyYXRpb246IGV2ZW50LnRpbWVTcGVudCxcclxuICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZSxcclxuICAgICAgICAgICAgc3RhdHVzOiBldmVudC5zdGF0dXMsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogZXZlbnQuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGV2ZW50LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgdGlja2V0SUQ6IGV2ZW50LnRpY2tldElELFxyXG4gICAgICAgIH0gYXMgUmVxdWVzdEludGVydmVudGlvbjtcclxuICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb3N0UmVjZW50VGltZVNwZW50KGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIGxldCB0aW1lU3BlbnQgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHMpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnRfIG9mIHNvcnRlZEV2ZW50cykge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRfLnRpbWVTcGVudCkge1xyXG4gICAgICAgICAgICAgICAgdGltZVNwZW50ID0gZXZlbnRfLnRpbWVTcGVudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aW1lU3BlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHM6IEV2ZW50W10pOiBFdmVudFtdIHtcclxuICAgICAgICBjb25zdCBldmVudHNBZnRlcjogRXZlbnRbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnRlcnZlbnRpb24gPSB0aGlzLmdldEN1cnJlbnRJbnRldmVudGlvbihldmVudHMpO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZXZlbnRTZXJ2aWNlLnNvcnRFdmVudHNCeUNyZWF0ZWRBdERhdGVEZXNjKGV2ZW50cyk7XHJcbiAgICAgICAgaWYgKHNvcnRlZEV2ZW50cy5sZW5ndGggPiAwICYmIGN1cnJlbnRJbnRlcnZlbnRpb24pIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudHNBZnRlci5wdXNoKGV2ZW50Xyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRfLmlkID09PSBjdXJyZW50SW50ZXJ2ZW50aW9uLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50c0FmdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRJbnRldmVudGlvbihldmVudHM6IEV2ZW50W10pOiBFdmVudCB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBsZXQgY3VycmVudEludGVydmVudGlvbjtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkNSRUFURUQpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbnRlcnZlbnRpb24gPSBldmVudF87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5zdGF0dXMgIT09IEV2ZW50U3RhdHVzLkNSRUFURUQgJiYgY3VycmVudEludGVydmVudGlvbikge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbnRlcnZlbnRpb247XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9zdFJlY2VudEVzdGltYXRlU3RhcnREYXRlKGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIGxldCBlc3RpbWF0ZVN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5nZXRBbGxFdmVudHNBZnRlckxhc3RDcmVhdGVkKGV2ZW50cyk7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5lc3RpbWF0ZVN0YXJ0RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZXN0aW1hdGVTdGFydERhdGUgPSBldmVudF8uZXN0aW1hdGVTdGFydERhdGU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXN0aW1hdGVTdGFydERhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9zdFJlY2VudEVzdGltYXRlRW5kRGF0ZShldmVudHM6IEV2ZW50W10pOiBudW1iZXIgfCBudWxsIHtcclxuICAgICAgICBsZXQgZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5lc3RpbWF0ZUVuZERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8uZXN0aW1hdGVFbmREYXRlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZ2V0TW9zdFJlY2VudFJlYWxTdGFydERhdGUoZXZlbnRzOiBFdmVudFtdKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAvLyAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgLy8gICAgIC8vIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgIC8vICAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSB0aGlzLmdldEFsbEV2ZW50c0FmdGVyTGFzdENyZWF0ZWQoZXZlbnRzKTtcclxuICAgIC8vICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgIC8vICAgICAgICAgaWYgKGV2ZW50Xy5yZWFsU3RhcnREYXRlKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBkYXRlID0gZXZlbnRfLnJlYWxTdGFydERhdGU7XHJcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gZGF0ZTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBnZXRNb3N0UmVjZW50UmVhbFN0YXJ0RGF0ZUdsb2JhbChldmVudHM6IEV2ZW50W10pOiBudW1iZXIgfCBudWxsIHtcclxuICAgIC8vICAgICBsZXQgZGF0ZSA9IG51bGw7XHJcbiAgICAvLyAgICAgLy8gY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlRGVzYyhldmVudHMpO1xyXG4gICAgLy8gICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHMpO1xyXG4gICAgLy8gICAgIGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgIC8vICAgICAgICAgICAgIGlmIChldmVudF8ucmVhbFN0YXJ0RGF0ZSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8ucmVhbFN0YXJ0RGF0ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gZGF0ZTtcclxuICAgIC8vIH1cclxufVxyXG4iXX0=
|
|
236
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJ2ZW50aW9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2ludGVydmVudGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDJDQUEyQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBUyxXQUFXLEVBQUUsU0FBUyxFQUFlLGFBQWEsRUFBK0IsTUFBTSxrQkFBa0IsQ0FBQzs7OztBQU8xSCxNQUFNLE9BQU8sbUJBQW1CO0lBUTVCLFlBQ1ksWUFBMEIsRUFDMUIsY0FBOEI7UUFEOUIsaUJBQVksR0FBWixZQUFZLENBQWM7UUFDMUIsbUJBQWMsR0FBZCxjQUFjLENBQWdCO1FBVDFDLDJCQUFzQixHQUFHO1lBQ3JCLFNBQVMsQ0FBQyw0QkFBNEI7WUFDdEMsU0FBUyxDQUFDLHdCQUF3QjtZQUNsQyxTQUFTLENBQUMsU0FBUztZQUNuQixTQUFTLENBQUMsd0JBQXdCO1NBQ3JDLENBQUM7SUFLQyxDQUFDO0lBRUosS0FBSyxDQUFDLGdDQUFnQyxDQUNsQyxNQUFjO1FBRWQsTUFBTSxNQUFNLEdBQ1IsTUFBTSxJQUFJLENBQUMsWUFBWSxDQUFDLG1DQUFtQyxDQUN2RCxNQUFNLENBQUMsRUFBRSxDQUNaLENBQUM7UUFDTixNQUFNLGFBQWEsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FDM0MsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQ3BELENBQUM7UUFDRixNQUFNLFdBQVcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUNwQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLENBQUMsd0JBQXdCLENBQ2pFLENBQUM7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Q0FBQyxpQkFBaUIsQ0FBQztnQkFDN0MsTUFBTTthQUNUO1NBQ0o7UUFDRCxPQUFPLGlCQUFpQixDQUFDO0lBQzdCLENBQUM7SUFFRCw0QkFBNEIsQ0FBQyxNQUFlO1FBQ3hDLElBQUksSUFBSSxHQUFHLElBQUksQ0FBQztRQUNoQixNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLDZCQUE2QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdFLEtBQUssTUFBTSxNQUFNLElBQUksWUFBWSxFQUFFO1lBQy9CLElBQUksTUFBTSxDQUFDLGVBQWUsRUFBRTtnQkFDeEIsSUFBSSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUM7Z0JBQzlCLE1BQU07YUFDVDtTQUNKO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDaEIsQ0FBQzs7aUhBcFRRLG1CQUFtQjtxSEFBbkIsbUJBQW1CLGNBRmhCLE1BQU07NEZBRVQsbUJBQW1CO2tCQUgvQixVQUFVO21CQUFDO29CQUNSLFVBQVUsRUFBRSxNQUFNO2lCQUNyQiIsInNvdXJjZXNDb250ZW50IjpbIi8qIGVzbGludC1kaXNhYmxlIGNsYXNzLW1ldGhvZHMtdXNlLXRoaXMgKi9cclxuaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEV2ZW50LCBFdmVudFN0YXR1cywgRXZlbnRUeXBlLCBQcmVzdGF0YWlyZSwgUHJvZmlsZUVudGl0eSwgUmVxdWVzdEludGVydmVudGlvbiwgVGlja2V0IH0gZnJvbSBcIi4uL3R5cGVzLnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgRXZlbnRTZXJ2aWNlIH0gZnJvbSBcIi4vbW9kZWxzL2V2ZW50LnNlcnZpY2VcIjtcclxuaW1wb3J0IHsgTWlzc2lvblNlcnZpY2UgfSBmcm9tIFwiLi9tb2RlbHMvbWlzc2lvbi5zZXJ2aWNlXCI7XHJcblxyXG5ASW5qZWN0YWJsZSh7XHJcbiAgICBwcm92aWRlZEluOiBcInJvb3RcIixcclxufSlcclxuZXhwb3J0IGNsYXNzIEludGVydmVudGlvblNlcnZpY2Uge1xyXG4gICAgaW50ZXJ2ZW50aW9uRXZlbnRUeXBlcyA9IFtcclxuICAgICAgICBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OLFxyXG4gICAgICAgIEV2ZW50VHlwZS5SRVBPUlRJTkcsXHJcbiAgICAgICAgRXZlbnRUeXBlLlJFUVVFU1RfRk9SX0lOVEVSVkVOVElPTixcclxuICAgIF07XHJcblxyXG4gICAgY29uc3RydWN0b3IoXHJcbiAgICAgICAgcHJpdmF0ZSBldmVudFNlcnZpY2U6IEV2ZW50U2VydmljZSxcclxuICAgICAgICBwcml2YXRlIG1pc3Npb25TZXJ2aWNlOiBNaXNzaW9uU2VydmljZSxcclxuICAgICkge31cclxuXHJcbiAgICBhc3luYyBnZXRSZXF1ZXN0SW50ZXJ2ZW50aW9uRnJvbVRpY2tldChcclxuICAgICAgICB0aWNrZXQ6IFRpY2tldCxcclxuICAgICk6IFByb21pc2U8UmVxdWVzdEludGVydmVudGlvbj4ge1xyXG4gICAgICAgIGNvbnN0IGV2ZW50cyA9XHJcbiAgICAgICAgICAgIGF3YWl0IHRoaXMuZXZlbnRTZXJ2aWNlLmdldEV2ZW50c0J5VGlja2V0SURTb3J0ZWRCeURhdGVEZXNjKFxyXG4gICAgICAgICAgICAgICAgdGlja2V0LmlkLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgIGNvbnN0IHJlbGF0ZWRFdmVudHMgPSBldmVudHMuZmlsdGVyKChldmVudF8pID0+XHJcbiAgICAgICAgICAgIHRoaXMuaW50ZXJ2ZW50aW9uRXZlbnRUeXBlcy5pbmNsdWRlcyhldmVudF8udHlwZSksXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBhbGxSZXF1ZXN0cyA9IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PiBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLlJFUVVFU1RfRk9SX0lOVEVSVkVOVElPTixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChhbGxSZXF1ZXN0cy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IG1vc3RSZWNlbnQgPSBhbGxSZXF1ZXN0c1swXTtcclxuXHJcbiAgICAgICAgICAgIGNvbnN0IGNvbXBvc2VkUmVxdWVzdCA9XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV2ZW50VG9SZXF1ZXN0SW50ZXJ2ZW50aW9uKG1vc3RSZWNlbnQpO1xyXG5cclxuICAgICAgICAgICAgaWYgKGNvbXBvc2VkUmVxdWVzdC5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkNBTkNFTExFRCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbXBvc2VkUmVxdWVzdDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgbGV0IGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0ID0gcmVsYXRlZEV2ZW50cy5maWx0ZXIoXHJcbiAgICAgICAgICAgICAgICAoZXZlbnQpID0+IGV2ZW50Lmdyb3VwID09PSBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIGxldCBpbnRlcnZlbnRpb247XHJcbiAgICAgICAgICAgIGlmIChldmVudHNGb3JNb3N0UmVjZW50UmVxdWVzdC5sZW5ndGggPT09IDApIHtcclxuICAgICAgICAgICAgICAgIC8vIGJhY2sgY29tcGF0aWJpbGl0eVxyXG4gICAgICAgICAgICAgICAgZXZlbnRzRm9yTW9zdFJlY2VudFJlcXVlc3QgPSByZWxhdGVkRXZlbnRzO1xyXG4gICAgICAgICAgICAgICAgLy8gZ2V0IGludGVydmVudGlvblxyXG4gICAgICAgICAgICAgICAgaW50ZXJ2ZW50aW9uID0gdGhpcy5jb21wb3NlSW50ZXJ2ZW50aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICByZWxhdGVkRXZlbnRzLFxyXG4gICAgICAgICAgICAgICAgICAgIG51bGwsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgLy8gc2V0IGR1cmF0aW9uXHJcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QucmVhbER1cmF0aW9uID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldER1cmF0aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRlZEV2ZW50cyxcclxuICAgICAgICAgICAgICAgICAgICAgICAgbnVsbCxcclxuICAgICAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaW50ZXJ2ZW50aW9uID0gdGhpcy5jb21wb3NlSW50ZXJ2ZW50aW9uRm9yUmVxdWVzdChcclxuICAgICAgICAgICAgICAgICAgICBldmVudHNGb3JNb3N0UmVjZW50UmVxdWVzdCxcclxuICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICAgICApO1xyXG4gICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxEdXJhdGlvbiA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXREdXJhdGlvbkZvclJlcXVlc3QoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuaWQsXHJcbiAgICAgICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKCFjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVTdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGNvbXBvc2VkUmVxdWVzdC5lc3RpbWF0ZVN0YXJ0RGF0ZSA9XHJcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5nZXRNb3N0UmVjZW50RXN0aW1hdGVTdGFydERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxTdGFydERhdGUgPVxyXG4gICAgICAgICAgICAgICAgdGhpcy5nZXRFYXJsaWVzdFJlYWxTdGFydERhdGVGb3JSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmlkLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuICAgICAgICAgICAgaWYgKCFjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVFbmREYXRlKSB7XHJcbiAgICAgICAgICAgICAgICBjb21wb3NlZFJlcXVlc3QuZXN0aW1hdGVFbmREYXRlID1cclxuICAgICAgICAgICAgICAgICAgICB0aGlzLmdldE1vc3RSZWNlbnRFc3RpbWF0ZUVuZERhdGUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50c0Zvck1vc3RSZWNlbnRSZXF1ZXN0LFxyXG4gICAgICAgICAgICAgICAgICAgICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LnJlYWxFbmREYXRlID1cclxuICAgICAgICAgICAgICAgIHRoaXMuZ2V0TGF0ZXN0UmVhbEVuZERhdGVGb3JSZXF1ZXN0KFxyXG4gICAgICAgICAgICAgICAgICAgIHJlbGF0ZWRFdmVudHMsXHJcbiAgICAgICAgICAgICAgICAgICAgY29tcG9zZWRSZXF1ZXN0LmlkLFxyXG4gICAgICAgICAgICAgICAgKTtcclxuXHJcbiAgICAgICAgICAgIGNvbXBvc2VkUmVxdWVzdC5pbnRlcnZlbnRpb24gPSBpbnRlcnZlbnRpb247XHJcbiAgICAgICAgICAgIHJldHVybiBjb21wb3NlZFJlcXVlc3Q7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbXBvc2VJbnRlcnZlbnRpb25Gb3JSZXF1ZXN0KFxyXG4gICAgICAgIHJlbGF0ZWRFdmVudHM6IEV2ZW50W10sXHJcbiAgICAgICAgcmVxdWVzdElEOiBzdHJpbmcsXHJcbiAgICApOiBFdmVudCB7XHJcbiAgICAgICAgY29uc3QgaW50ZXJ2ZW50aW9ucyA9IHJlcXVlc3RJRFxyXG4gICAgICAgICAgICA/IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgICAgICAgKVxyXG4gICAgICAgICAgICA6IHJlbGF0ZWRFdmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICAgICAgICApO1xyXG5cclxuICAgICAgICBpZiAoaW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGNvbnN0IGxhc3RJbnRlcnZlbnRpb24gPSBpbnRlcnZlbnRpb25zWzBdO1xyXG4gICAgICAgICAgICByZXR1cm4gbGFzdEludGVydmVudGlvbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIG51bGw7XHJcbiAgICB9XHJcblxyXG4gICAgYXN5bmMgZ2V0UHJlc3RhdGFpcmVGb3JUaWNrZXQodGlja2V0OiBUaWNrZXQpOiBQcm9taXNlPFByZXN0YXRhaXJlPiB7XHJcbiAgICAgICAgaWYgKHRpY2tldC5hc3NpZ25lZXMuaXRlbXMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBjb25zdCBzb3J0ZWRBZmZlY3RhdGlvbnMgPSB0aWNrZXQuYXNzaWduZWVzLml0ZW1zLnNvcnQoXHJcbiAgICAgICAgICAgICAgICAoYSwgYikgPT5cclxuICAgICAgICAgICAgICAgICAgICAvLyBAdHMtaWdub3JlXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIHByZXR0aWVyL3ByZXR0aWVyXHJcbiAgICAgICAgICAgICAgICAgICAgbmV3IERhdGUoYi5jcmVhdGVkQXQpIC0gbmV3IERhdGUoYS5jcmVhdGVkQXQpLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCBtaXNzaW9uSURwcmVzdGEgPSBzb3J0ZWRBZmZlY3RhdGlvbnNbMF0ubWlzc2lvbklEO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVzdGFNaXNzaW9uID0gYXdhaXQgdGhpcy5taXNzaW9uU2VydmljZS5nZXRNaXNzaW9uKFxyXG4gICAgICAgICAgICAgICAgbWlzc2lvbklEcHJlc3RhLFxyXG4gICAgICAgICAgICApO1xyXG4gICAgICAgICAgICBjb25zdCB1c2VyUHJlc3RhdGFpcmUgPSBuZXcgUHJvZmlsZUVudGl0eShwcmVzdGFNaXNzaW9uLnVzZXIpO1xyXG4gICAgICAgICAgICBjb25zdCBwcmVzdGF0YWlyZSA9IHtcclxuICAgICAgICAgICAgICAgIG9yZ2FuaXNhdGlvbjogcHJlc3RhTWlzc2lvbi5vcmdhbmlzYXRpb24sXHJcbiAgICAgICAgICAgICAgICBtaXNzaW9uOiBwcmVzdGFNaXNzaW9uLFxyXG4gICAgICAgICAgICAgICAgcHJvZmlsZTogdXNlclByZXN0YXRhaXJlLFxyXG4gICAgICAgICAgICAgICAgbmFtZTogdXNlclByZXN0YXRhaXJlLmRpc3BsYXlOYW1lLFxyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICByZXR1cm4gcHJlc3RhdGFpcmU7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEVhcmxpZXN0UmVhbFN0YXJ0RGF0ZUZvclJlcXVlc3QoXHJcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxyXG4gICAgICAgIHJlcXVlc3RJRDogc3RyaW5nLFxyXG4gICAgKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRJbnRlcnZlbnRpb25zID1cclxuICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZUFzYyhpbnRlcnZlbnRpb25zKTtcclxuICAgICAgICBpZiAoc29ydGVkSW50ZXJ2ZW50aW9ucy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2Ygc29ydGVkSW50ZXJ2ZW50aW9ucykge1xyXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnJlYWxTdGFydERhdGUpIHtcclxuICAgICAgICAgICAgICAgICAgICBkYXRlID0gZXZlbnQucmVhbFN0YXJ0RGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXRMYXRlc3RSZWFsRW5kRGF0ZUZvclJlcXVlc3QoXHJcbiAgICAgICAgZXZlbnRzOiBFdmVudFtdLFxyXG4gICAgICAgIHJlcXVlc3RJRDogc3RyaW5nLFxyXG4gICAgKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgKGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OKSAmJlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLmdyb3VwID09PSByZXF1ZXN0SUQsXHJcbiAgICAgICAgKTtcclxuICAgICAgICBjb25zdCBzb3J0ZWRJbnRlcnZlbnRpb25zID1cclxuICAgICAgICAgICAgdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoaW50ZXJ2ZW50aW9ucyk7XHJcbiAgICAgICAgaWYgKHNvcnRlZEludGVydmVudGlvbnMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGV2ZW50IG9mIHNvcnRlZEludGVydmVudGlvbnMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChldmVudC5yZWFsRW5kRGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudC5yZWFsRW5kRGF0ZTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZGF0ZTtcclxuICAgIH1cclxuXHJcbiAgICBnZXREdXJhdGlvbkZvclJlcXVlc3QoZXZlbnRzOiBFdmVudFtdLCByZXF1ZXN0SUQ6IHN0cmluZyk6IG51bWJlciB7XHJcbiAgICAgICAgbGV0IGR1cmF0aW9uID0gMDsgLy8gaW4gbWlsaXNlY29uZHNcclxuICAgICAgICBjb25zdCBpbnRlcnZlbnRpb25zID0gcmVxdWVzdElEXHJcbiAgICAgICAgICAgID8gZXZlbnRzLmZpbHRlcihcclxuICAgICAgICAgICAgICAgICAgKGV2ZW50XykgPT5cclxuICAgICAgICAgICAgICAgICAgICAgIChldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTiB8fFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTikgJiZcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy5ncm91cCA9PT0gcmVxdWVzdElELFxyXG4gICAgICAgICAgICAgIClcclxuICAgICAgICAgICAgOiBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5DT05UUkFDVFVBTF9JTlRFUlZFTlRJT04gfHxcclxuICAgICAgICAgICAgICAgICAgICAgIGV2ZW50Xy50eXBlID09PSBFdmVudFR5cGUuTk9OX0NPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICAgICAgICApO1xyXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnQgb2YgaW50ZXJ2ZW50aW9ucykge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnQudGltZVNwZW50KSB7XHJcbiAgICAgICAgICAgICAgICBkdXJhdGlvbiArPSBldmVudC50aW1lU3BlbnQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGR1cmF0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEludGVydmVudGlvbihldmVudHMpOiBFdmVudCB8IG51bGwge1xyXG4gICAgICAgIGNvbnN0IGludGVydmVudGlvbnMgPSBldmVudHMuZmlsdGVyKFxyXG4gICAgICAgICAgICAoZXZlbnRfKSA9PlxyXG4gICAgICAgICAgICAgICAgZXZlbnRfLnR5cGUgPT09IEV2ZW50VHlwZS5OT05fQ09OVFJBQ1RVQUxfSU5URVJWRU5USU9OIHx8XHJcbiAgICAgICAgICAgICAgICBldmVudF8udHlwZSA9PT0gRXZlbnRUeXBlLkNPTlRSQUNUVUFMX0lOVEVSVkVOVElPTixcclxuICAgICAgICApO1xyXG4gICAgICAgIGlmIChpbnRlcnZlbnRpb25zLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgY29uc3QgbGFzdEludGVydmVudGlvbiA9IGludGVydmVudGlvbnNbMF07XHJcbiAgICAgICAgICAgIHJldHVybiBsYXN0SW50ZXJ2ZW50aW9uO1xyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gbnVsbDtcclxuICAgIH1cclxuXHJcbiAgICBldmVudFRvUmVxdWVzdEludGVydmVudGlvbihldmVudDogRXZlbnQpOiBSZXF1ZXN0SW50ZXJ2ZW50aW9uIHtcclxuICAgICAgICBjb25zdCByZXF1ZXN0ID0ge1xyXG4gICAgICAgICAgICBpZDogZXZlbnQuZ3JvdXAgPT09IFwiZGVmYXVsdFwiID8gZXZlbnQuaWQgOiBldmVudC5ncm91cCxcclxuICAgICAgICAgICAgcmVhbEVuZERhdGU6IGV2ZW50LnJlYWxFbmREYXRlLFxyXG4gICAgICAgICAgICByZWFsU3RhcnREYXRlOiBldmVudC5yZWFsU3RhcnREYXRlLFxyXG4gICAgICAgICAgICBlc3RpbWF0ZVN0YXJ0RGF0ZTogZXZlbnQuZXN0aW1hdGVTdGFydERhdGUsXHJcbiAgICAgICAgICAgIGVzdGltYXRlRW5kRGF0ZTogZXZlbnQuZXN0aW1hdGVFbmREYXRlLFxyXG4gICAgICAgICAgICByZWFsRHVyYXRpb246IGV2ZW50LnRpbWVTcGVudCxcclxuICAgICAgICAgICAgdHlwZTogZXZlbnQudHlwZSxcclxuICAgICAgICAgICAgc3RhdHVzOiBldmVudC5zdGF0dXMsXHJcbiAgICAgICAgICAgIGNyZWF0ZWRBdDogZXZlbnQuY3JlYXRlZEF0LFxyXG4gICAgICAgICAgICB1cGRhdGVkQXQ6IGV2ZW50LnVwZGF0ZWRBdCxcclxuICAgICAgICAgICAgdGlja2V0SUQ6IGV2ZW50LnRpY2tldElELFxyXG4gICAgICAgIH0gYXMgUmVxdWVzdEludGVydmVudGlvbjtcclxuICAgICAgICByZXR1cm4gcmVxdWVzdDtcclxuICAgIH1cclxuXHJcbiAgICBnZXRNb3N0UmVjZW50VGltZVNwZW50KGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIGxldCB0aW1lU3BlbnQgPSBudWxsO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHMpO1xyXG4gICAgICAgIGZvciAoY29uc3QgZXZlbnRfIG9mIHNvcnRlZEV2ZW50cykge1xyXG4gICAgICAgICAgICBpZiAoZXZlbnRfLnRpbWVTcGVudCkge1xyXG4gICAgICAgICAgICAgICAgdGltZVNwZW50ID0gZXZlbnRfLnRpbWVTcGVudDtcclxuICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiB0aW1lU3BlbnQ7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHM6IEV2ZW50W10pOiBFdmVudFtdIHtcclxuICAgICAgICBjb25zdCBldmVudHNBZnRlcjogRXZlbnRbXSA9IFtdO1xyXG4gICAgICAgIGNvbnN0IGN1cnJlbnRJbnRlcnZlbnRpb24gPSB0aGlzLmdldEN1cnJlbnRJbnRldmVudGlvbihldmVudHMpO1xyXG4gICAgICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZXZlbnRTZXJ2aWNlLnNvcnRFdmVudHNCeUNyZWF0ZWRBdERhdGVEZXNjKGV2ZW50cyk7XHJcbiAgICAgICAgaWYgKHNvcnRlZEV2ZW50cy5sZW5ndGggPiAwICYmIGN1cnJlbnRJbnRlcnZlbnRpb24pIHtcclxuICAgICAgICAgICAgZm9yIChjb25zdCBldmVudF8gb2Ygc29ydGVkRXZlbnRzKSB7XHJcbiAgICAgICAgICAgICAgICBldmVudHNBZnRlci5wdXNoKGV2ZW50Xyk7XHJcbiAgICAgICAgICAgICAgICBpZiAoZXZlbnRfLmlkID09PSBjdXJyZW50SW50ZXJ2ZW50aW9uLmlkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGV2ZW50c0FmdGVyO1xyXG4gICAgfVxyXG5cclxuICAgIGdldEN1cnJlbnRJbnRldmVudGlvbihldmVudHM6IEV2ZW50W10pOiBFdmVudCB7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBsZXQgY3VycmVudEludGVydmVudGlvbjtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5zdGF0dXMgPT09IEV2ZW50U3RhdHVzLkNSRUFURUQpIHtcclxuICAgICAgICAgICAgICAgIGN1cnJlbnRJbnRlcnZlbnRpb24gPSBldmVudF87XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5zdGF0dXMgIT09IEV2ZW50U3RhdHVzLkNSRUFURUQgJiYgY3VycmVudEludGVydmVudGlvbikge1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGN1cnJlbnRJbnRlcnZlbnRpb247XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9zdFJlY2VudEVzdGltYXRlU3RhcnREYXRlKGV2ZW50czogRXZlbnRbXSk6IG51bWJlciB8IG51bGwge1xyXG4gICAgICAgIGxldCBlc3RpbWF0ZVN0YXJ0RGF0ZSA9IG51bGw7XHJcbiAgICAgICAgLy8gY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5nZXRBbGxFdmVudHNBZnRlckxhc3RDcmVhdGVkKGV2ZW50cyk7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5lc3RpbWF0ZVN0YXJ0RGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgZXN0aW1hdGVTdGFydERhdGUgPSBldmVudF8uZXN0aW1hdGVTdGFydERhdGU7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgICByZXR1cm4gZXN0aW1hdGVTdGFydERhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgZ2V0TW9zdFJlY2VudEVzdGltYXRlRW5kRGF0ZShldmVudHM6IEV2ZW50W10pOiBudW1iZXIgfCBudWxsIHtcclxuICAgICAgICBsZXQgZGF0ZSA9IG51bGw7XHJcbiAgICAgICAgY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5ldmVudFNlcnZpY2Uuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgICAgICAgICAgaWYgKGV2ZW50Xy5lc3RpbWF0ZUVuZERhdGUpIHtcclxuICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8uZXN0aW1hdGVFbmREYXRlO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9XHJcbiAgICAgICAgcmV0dXJuIGRhdGU7XHJcbiAgICB9XHJcblxyXG4gICAgLy8gZ2V0TW9zdFJlY2VudFJlYWxTdGFydERhdGUoZXZlbnRzOiBFdmVudFtdKTogbnVtYmVyIHwgbnVsbCB7XHJcbiAgICAvLyAgICAgbGV0IGRhdGUgPSBudWxsO1xyXG4gICAgLy8gICAgIC8vIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuc29ydEV2ZW50c0J5Q3JlYXRlZEF0RGF0ZURlc2MoZXZlbnRzKTtcclxuICAgIC8vICAgICBjb25zdCBzb3J0ZWRFdmVudHMgPSB0aGlzLmdldEFsbEV2ZW50c0FmdGVyTGFzdENyZWF0ZWQoZXZlbnRzKTtcclxuICAgIC8vICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgIC8vICAgICAgICAgaWYgKGV2ZW50Xy5yZWFsU3RhcnREYXRlKSB7XHJcbiAgICAvLyAgICAgICAgICAgICBkYXRlID0gZXZlbnRfLnJlYWxTdGFydERhdGU7XHJcbiAgICAvLyAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gZGF0ZTtcclxuICAgIC8vIH1cclxuXHJcbiAgICAvLyBnZXRNb3N0UmVjZW50UmVhbFN0YXJ0RGF0ZUdsb2JhbChldmVudHM6IEV2ZW50W10pOiBudW1iZXIgfCBudWxsIHtcclxuICAgIC8vICAgICBsZXQgZGF0ZSA9IG51bGw7XHJcbiAgICAvLyAgICAgLy8gY29uc3Qgc29ydGVkRXZlbnRzID0gdGhpcy5zb3J0RXZlbnRzQnlDcmVhdGVkQXREYXRlRGVzYyhldmVudHMpO1xyXG4gICAgLy8gICAgIGNvbnN0IHNvcnRlZEV2ZW50cyA9IHRoaXMuZ2V0QWxsRXZlbnRzQWZ0ZXJMYXN0Q3JlYXRlZChldmVudHMpO1xyXG4gICAgLy8gICAgIGlmIChzb3J0ZWRFdmVudHMubGVuZ3RoID4gMCkge1xyXG4gICAgLy8gICAgICAgICBmb3IgKGNvbnN0IGV2ZW50XyBvZiBzb3J0ZWRFdmVudHMpIHtcclxuICAgIC8vICAgICAgICAgICAgIGlmIChldmVudF8ucmVhbFN0YXJ0RGF0ZSkge1xyXG4gICAgLy8gICAgICAgICAgICAgICAgIGRhdGUgPSBldmVudF8ucmVhbFN0YXJ0RGF0ZTtcclxuICAgIC8vICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgIC8vICAgICAgICAgICAgIH1cclxuICAgIC8vICAgICAgICAgfVxyXG4gICAgLy8gICAgIH1cclxuICAgIC8vICAgICByZXR1cm4gZGF0ZTtcclxuICAgIC8vIH1cclxufVxyXG4iXX0=
|
|
@@ -34,12 +34,12 @@ export class LocaleService {
|
|
|
34
34
|
return lang.slice(1);
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
|
-
LocaleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "
|
|
38
|
-
LocaleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "
|
|
39
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
37
|
+
LocaleService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocaleService, deps: [{ token: i1.TranslateService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
38
|
+
LocaleService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocaleService, providedIn: "root" });
|
|
39
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.10", ngImport: i0, type: LocaleService, decorators: [{
|
|
40
40
|
type: Injectable,
|
|
41
41
|
args: [{
|
|
42
42
|
providedIn: "root",
|
|
43
43
|
}]
|
|
44
44
|
}], ctorParameters: function () { return [{ type: i1.TranslateService }]; } });
|
|
45
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9jYWxlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc21hcnRlcnBsYW4tY29yZS9zcmMvbGliL3NlcnZpY2VzL2xvY2FsZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE1BQU0sQ0FBQzs7O0FBSy9CLE1BQU0sT0FBTyxhQUFhO0lBUXRCLFlBQW1CLFNBQTJCO1FBQTNCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBUDlDLGtCQUFhLEdBQUcsSUFBSSxDQUFDO1FBRXJCLDRCQUE0QjtRQUNwQixvQkFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7UUFFeEMsZUFBVSxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsWUFBWSxFQUFFLENBQUM7SUFFQSxDQUFDO0lBRWxELEtBQUs7UUFDRCxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNwQyxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxNQUFNLENBQUMsSUFBWTtRQUNmLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2xDLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLCtCQUErQjtJQUNuRSxDQUFDO0lBRUQsU0FBUztRQUNMLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVztZQUNuQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxXQUFXO1lBQzVCLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQztRQUNqQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDekIsQ0FBQzs7MkdBbENRLGFBQWE7K0dBQWIsYUFBYSxjQUZWLE1BQU07NEZBRVQsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDUixVQUFVLEVBQUUsTUFBTTtpQkFDckIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgVHJhbnNsYXRlU2VydmljZSB9IGZyb20gXCJAbmd4LXRyYW5zbGF0ZS9jb3JlXCI7XHJcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tIFwicnhqc1wiO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gICAgcHJvdmlkZWRJbjogXCJyb290XCIsXHJcbn0pXHJcbmV4cG9ydCBjbGFzcyBMb2NhbGVTZXJ2aWNlIHtcclxuICAgIGN1cnJlbnRMb2NhbGUgPSBcImVuXCI7XHJcblxyXG4gICAgLy8gT2JzZXJ2YWJsZSBzdHJpbmcgc291cmNlc1xyXG4gICAgcHJpdmF0ZSBzaG93TW9kYWxTb3VyY2UgPSBuZXcgU3ViamVjdCgpO1xyXG5cclxuICAgIHNob3dNb2RhbCQgPSB0aGlzLnNob3dNb2RhbFNvdXJjZS5hc09ic2VydmFibGUoKTtcclxuXHJcbiAgICBjb25zdHJ1Y3RvcihwdWJsaWMgdHJhbnNsYXRlOiBUcmFuc2xhdGVTZXJ2aWNlKSB7fVxyXG5cclxuICAgIG1vZGFsKCkge1xyXG4gICAgICAgIHRoaXMuc2hvd01vZGFsU291cmNlLm5leHQodHJ1ZSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBSZWxvYWQgdGhlIGFwcCB0byBhbm90aGVyIGxhbmd1YWdlLlxyXG4gICAgICpcclxuICAgICAqIE5hdmlnYXRpb24gaXMgcmVxdWlyZWQgYmVjYXVzZSBvZiB0aGUgd2F5IGFuZ3VsYXIgbG9jYWxpemVzOiBsb2NhbGVzIGFyZVxyXG4gICAgICogY29tcGxldGVseSBkaWZmZXJlbnQgY29tcGlsYXRpb24gYnVuZGxlcywgaW4gc2VwYXJhdGUgZGlyZWN0b3JpZXMsIGhlbmNlXHJcbiAgICAgKiB5b3UgbmVlZCB0byByZWxvYWQuXHJcbiAgICAgKlxyXG4gICAgICogQHBhcmFtIGxhbmdcclxuICAgICAqL1xyXG4gICAgY2hhbmdlKGxhbmc6IHN0cmluZyk6IHZvaWQge1xyXG4gICAgICAgIGNvbnNvbGUubG9nKFwiU3dpdGNoaW5nIHRvXCIsIGxhbmcpO1xyXG4gICAgICAgIHRoaXMuY3VycmVudExvY2FsZSA9IGxhbmc7XHJcbiAgICAgICAgdGhpcy50cmFuc2xhdGUudXNlKGBfJHtsYW5nfWApOyAvLyBiZWNhdXNlIGZpbGVzIGFyZSBcIl9lbi5qc29uXCJcclxuICAgIH1cclxuXHJcbiAgICBnZXRMb2NhbGUoKTogc3RyaW5nIHtcclxuICAgICAgICBjb25zdCBsYW5nID0gdGhpcy50cmFuc2xhdGUuY3VycmVudExhbmdcclxuICAgICAgICAgICAgPyB0aGlzLnRyYW5zbGF0ZS5jdXJyZW50TGFuZ1xyXG4gICAgICAgICAgICA6IHRoaXMudHJhbnNsYXRlLmRlZmF1bHRMYW5nO1xyXG4gICAgICAgIHJldHVybiBsYW5nLnNsaWNlKDEpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|