angular-cesium
Version:
Angular library for working with Cesium.
211 lines • 27.5 kB
JavaScript
import { AcEntity } from '../../angular-cesium/models/ac-entity';
import { EditPoint } from './edit-point';
import { GeoUtilsService } from '../../angular-cesium/services/geo-utils/geo-utils.service';
import { EditArc } from './edit-arc';
import { defaultLabelProps } from './label-props';
export class EditableCircle extends AcEntity {
constructor(id, circlesLayer, pointsLayer, arcsLayer, options) {
super();
this.id = id;
this.circlesLayer = circlesLayer;
this.pointsLayer = pointsLayer;
this.arcsLayer = arcsLayer;
this.options = options;
this.doneCreation = false;
this._enableEdit = true;
this._labels = [];
this._circleProps = Object.assign({}, options.circleProps);
this._pointProps = Object.assign({}, options.pointProps);
this._polylineProps = Object.assign({}, options.polylineProps);
}
get labels() {
return this._labels;
}
set labels(labels) {
if (!labels || !this._center || !this._radiusPoint) {
return;
}
this._labels = labels.map((label, index) => {
if (!label.position) {
if (index !== labels.length - 1) {
label.position = this._center.getPosition();
}
else {
label.position = this._radiusPoint.getPosition();
}
}
return Object.assign({}, defaultLabelProps, label);
});
}
get polylineProps() {
return this._polylineProps;
}
set polylineProps(value) {
this._polylineProps = value;
}
get pointProps() {
return this._pointProps;
}
set pointProps(value) {
this._pointProps = value;
}
get circleProps() {
return this._circleProps;
}
set circleProps(value) {
this._circleProps = value;
}
get center() {
return this._center;
}
get radiusPoint() {
return this._radiusPoint;
}
get enableEdit() {
return this._enableEdit;
}
set enableEdit(value) {
this._enableEdit = value;
this._center.show = value;
this._radiusPoint.show = value;
this.updatePointsLayer();
}
setManually(center, radiusPoint, centerPointProp = this.pointProps, radiusPointProp = this.pointProps, circleProp = this.circleProps) {
if (!this._center) {
this._center = new EditPoint(this.id, center, centerPointProp);
}
else {
this._center.setPosition(center);
}
if (!this._radiusPoint) {
this._radiusPoint = new EditPoint(this.id, radiusPoint, radiusPointProp);
}
else {
this._radiusPoint.setPosition(radiusPoint);
}
if (!this._outlineArc) {
this.createOutlineArc();
}
else {
this._outlineArc.radius = this.getRadius();
}
this.circleProps = circleProp;
this.doneCreation = true;
this.updateArcsLayer();
this.updatePointsLayer();
this.updateCirclesLayer();
}
addPoint(position) {
if (this.doneCreation) {
return;
}
if (!this._center) {
this._center = new EditPoint(this.id, position, this.pointProps);
this._radiusPoint = new EditPoint(this.id, position.clone(), this.pointProps);
if (!this._outlineArc) {
this.createOutlineArc();
}
}
this.updateArcsLayer();
this.updatePointsLayer();
this.updateCirclesLayer();
}
addLastPoint(position) {
if (this.doneCreation || !this._center || !this._radiusPoint) {
return;
}
this._radiusPoint.setPosition(position);
this.doneCreation = true;
this.updatePointsLayer();
this.updateCirclesLayer();
}
movePoint(toPosition) {
if (!this._center || !this._radiusPoint) {
return;
}
this._radiusPoint.setPosition(toPosition);
this._outlineArc.radius = this.getRadius();
this.updateArcsLayer();
this.updatePointsLayer();
this.updateCirclesLayer();
}
moveCircle(dragStartPosition, dragEndPosition) {
if (!this.doneCreation) {
return;
}
if (!this.lastDraggedToPosition) {
this.lastDraggedToPosition = dragStartPosition;
}
const radius = this.getRadius();
const delta = GeoUtilsService.getPositionsDelta(this.lastDraggedToPosition, dragEndPosition);
const newCenterPosition = GeoUtilsService.addDeltaToPosition(this.getCenter(), delta, true);
this._center.setPosition(newCenterPosition);
this.radiusPoint.setPosition(GeoUtilsService.pointByLocationDistanceAndAzimuth(this.getCenter(), radius, Math.PI / 2, true));
this._outlineArc.radius = this.getRadius();
this._outlineArc.center = this._center.getPosition();
this.updateArcsLayer();
this.updatePointsLayer();
this.updateCirclesLayer();
this.lastDraggedToPosition = dragEndPosition;
}
endMovePolygon() {
this.lastDraggedToPosition = undefined;
}
getRadius() {
if (!this._center || !this._radiusPoint) {
return 0;
}
return GeoUtilsService.distance(this._center.getPosition(), this._radiusPoint.getPosition());
}
getRadiusCallbackProperty() {
return new Cesium.CallbackProperty(this.getRadius.bind(this), false);
}
getCenter() {
return this._center ? this._center.getPosition() : undefined;
}
getCenterCallbackProperty() {
return new Cesium.CallbackProperty(this.getCenter.bind(this), false);
}
getRadiusPoint() {
return this._radiusPoint ? this._radiusPoint.getPosition() : undefined;
}
dispose() {
if (this._center) {
this.pointsLayer.remove(this._center.getId());
}
if (this._radiusPoint) {
this.pointsLayer.remove(this._radiusPoint.getId());
}
if (this._outlineArc) {
this.arcsLayer.remove(this._outlineArc.getId());
}
this.circlesLayer.remove(this.id);
}
getId() {
return this.id;
}
updateCirclesLayer() {
this.circlesLayer.update(this, this.id);
}
updatePointsLayer() {
if (this._center) {
this.pointsLayer.update(this._center, this._center.getId());
}
if (this._radiusPoint) {
this.pointsLayer.update(this._radiusPoint, this._radiusPoint.getId());
}
}
updateArcsLayer() {
if (!this._outlineArc) {
return;
}
this.arcsLayer.update(this._outlineArc, this._outlineArc.getId());
}
createOutlineArc() {
if (!this._center || !this._radiusPoint) {
return;
}
this._outlineArc = new EditArc(this.id, this.getCenter(), this.getRadius(), Math.PI * 2, 0, this.polylineProps);
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWRpdGFibGUtY2lyY2xlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvYW5ndWxhci1jZXNpdW0vc3JjL2xpYi9hbmd1bGFyLWNlc2l1bS13aWRnZXRzL21vZGVscy9lZGl0YWJsZS1jaXJjbGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLHVDQUF1QyxDQUFDO0FBQ2pFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFHekMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDJEQUEyRCxDQUFDO0FBQzVGLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFJckMsT0FBTyxFQUFFLGlCQUFpQixFQUFjLE1BQU0sZUFBZSxDQUFDO0FBRzlELE1BQU0sT0FBTyxjQUFlLFNBQVEsUUFBUTtJQVkxQyxZQUNVLEVBQVUsRUFDVixZQUE4QixFQUM5QixXQUE2QixFQUM3QixTQUEyQixFQUMzQixPQUEwQjtRQUVsQyxLQUFLLEVBQUUsQ0FBQztRQU5BLE9BQUUsR0FBRixFQUFFLENBQVE7UUFDVixpQkFBWSxHQUFaLFlBQVksQ0FBa0I7UUFDOUIsZ0JBQVcsR0FBWCxXQUFXLENBQWtCO1FBQzdCLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLFlBQU8sR0FBUCxPQUFPLENBQW1CO1FBYjVCLGlCQUFZLEdBQUcsS0FBSyxDQUFDO1FBQ3JCLGdCQUFXLEdBQUcsSUFBSSxDQUFDO1FBS25CLFlBQU8sR0FBaUIsRUFBRSxDQUFDO1FBVWpDLElBQUksQ0FBQyxZQUFZLHFCQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM3QyxJQUFJLENBQUMsV0FBVyxxQkFBTyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLGNBQWMscUJBQU8sT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ25ELENBQUM7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RUFBRSxDQUFDLENBQUM7SUFDMUMsQ0FBQztJQUVPLGlCQUFpQjtRQUN2QixJQUFJLElBQUksQ0FBQyxPQUFPLEVBQUU7WUFDaEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDN0Q7UUFDRCxJQUFJLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDckIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7U0FDdkU7SUFDSCxDQUFDO0lBRU8sZUFBZTtRQUNyQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztJQUNwRSxDQUFDO0lBRU8sZ0JBQWdCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFlBQVksRUFBRTtZQUN2QyxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxFQUFFLElBQUksQ0FBQyxTQUFTLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0lBQ2xILENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFjRW50aXR5IH0gZnJvbSAnLi4vLi4vYW5ndWxhci1jZXNpdW0vbW9kZWxzL2FjLWVudGl0eSc7XHJcbmltcG9ydCB7IEVkaXRQb2ludCB9IGZyb20gJy4vZWRpdC1wb2ludCc7XHJcbmltcG9ydCB7IEFjTGF5ZXJDb21wb25lbnQgfSBmcm9tICcuLi8uLi9hbmd1bGFyLWNlc2l1bS9jb21wb25lbnRzL2FjLWxheWVyL2FjLWxheWVyLmNvbXBvbmVudCc7XHJcbmltcG9ydCB7IENhcnRlc2lhbjMgfSBmcm9tICcuLi8uLi9hbmd1bGFyLWNlc2l1bS9tb2RlbHMvY2FydGVzaWFuMyc7XHJcbmltcG9ydCB7IEdlb1V0aWxzU2VydmljZSB9IGZyb20gJy4uLy4uL2FuZ3VsYXItY2VzaXVtL3NlcnZpY2VzL2dlby11dGlscy9nZW8tdXRpbHMuc2VydmljZSc7XHJcbmltcG9ydCB7IEVkaXRBcmMgfSBmcm9tICcuL2VkaXQtYXJjJztcclxuaW1wb3J0IHsgQ2lyY2xlRWRpdE9wdGlvbnMgfSBmcm9tICcuL2NpcmNsZS1lZGl0LW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBQb2ludFByb3BzIH0gZnJvbSAnLi9wb2ludC1lZGl0LW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBQb2x5bGluZVByb3BzIH0gZnJvbSAnLi9wb2x5bGluZS1lZGl0LW9wdGlvbnMnO1xyXG5pbXBvcnQgeyBkZWZhdWx0TGFiZWxQcm9wcywgTGFiZWxQcm9wcyB9IGZyb20gJy4vbGFiZWwtcHJvcHMnO1xyXG5pbXBvcnQgeyBFbGxpcHNlUHJvcHMgfSBmcm9tICcuL2VsbGlwc2UtZWRpdC1vcHRpb25zJztcclxuXHJcbmV4cG9ydCBjbGFzcyBFZGl0YWJsZUNpcmNsZSBleHRlbmRzIEFjRW50aXR5IHtcclxuICBwcml2YXRlIF9jZW50ZXI6IEVkaXRQb2ludDtcclxuICBwcml2YXRlIF9yYWRpdXNQb2ludDogRWRpdFBvaW50O1xyXG4gIHByaXZhdGUgX291dGxpbmVBcmM6IEVkaXRBcmM7XHJcbiAgcHJpdmF0ZSBkb25lQ3JlYXRpb24gPSBmYWxzZTtcclxuICBwcml2YXRlIF9lbmFibGVFZGl0ID0gdHJ1ZTtcclxuICBwcml2YXRlIGxhc3REcmFnZ2VkVG9Qb3NpdGlvbjogYW55O1xyXG4gIHByaXZhdGUgX2NpcmNsZVByb3BzOiBFbGxpcHNlUHJvcHM7XHJcbiAgcHJpdmF0ZSBfcG9pbnRQcm9wczogUG9pbnRQcm9wcztcclxuICBwcml2YXRlIF9wb2x5bGluZVByb3BzOiBQb2x5bGluZVByb3BzO1xyXG4gIHByaXZhdGUgX2xhYmVsczogTGFiZWxQcm9wc1tdID0gW107XHJcblxyXG4gIGNvbnN0cnVjdG9yKFxyXG4gICAgcHJpdmF0ZSBpZDogc3RyaW5nLFxyXG4gICAgcHJpdmF0ZSBjaXJjbGVzTGF5ZXI6IEFjTGF5ZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIHBvaW50c0xheWVyOiBBY0xheWVyQ29tcG9uZW50LFxyXG4gICAgcHJpdmF0ZSBhcmNzTGF5ZXI6IEFjTGF5ZXJDb21wb25lbnQsXHJcbiAgICBwcml2YXRlIG9wdGlvbnM6IENpcmNsZUVkaXRPcHRpb25zLFxyXG4gICkge1xyXG4gICAgc3VwZXIoKTtcclxuICAgIHRoaXMuX2NpcmNsZVByb3BzID0gey4uLm9wdGlvbnMuY2lyY2xlUHJvcHN9O1xyXG4gICAgdGhpcy5fcG9pbnRQcm9wcyA9IHsuLi5vcHRpb25zLnBvaW50UHJvcHN9O1xyXG4gICAgdGhpcy5fcG9seWxpbmVQcm9wcyA9IHsuLi5vcHRpb25zLnBvbHlsaW5lUHJvcHN9O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGxhYmVscygpOiBMYWJlbFByb3BzW10ge1xyXG4gICAgcmV0dXJuIHRoaXMuX2xhYmVscztcclxuICB9XHJcblxyXG4gIHNldCBsYWJlbHMobGFiZWxzOiBMYWJlbFByb3BzW10pIHtcclxuICAgIGlmICghbGFiZWxzIHx8ICF0aGlzLl9jZW50ZXIgfHwgIXRoaXMuX3JhZGl1c1BvaW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX2xhYmVscyA9IGxhYmVscy5tYXAoKGxhYmVsLCBpbmRleCkgPT4ge1xyXG4gICAgICBpZiAoIWxhYmVsLnBvc2l0aW9uKSB7XHJcbiAgICAgICAgaWYgKGluZGV4ICE9PSBsYWJlbHMubGVuZ3RoIC0gMSkge1xyXG4gICAgICAgICAgbGFiZWwucG9zaXRpb24gPSB0aGlzLl9jZW50ZXIuZ2V0UG9zaXRpb24oKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgbGFiZWwucG9zaXRpb24gPSB0aGlzLl9yYWRpdXNQb2ludC5nZXRQb3NpdGlvbigpO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG5cclxuICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIGRlZmF1bHRMYWJlbFByb3BzLCBsYWJlbCk7XHJcbiAgICB9KTtcclxuICB9XHJcblxyXG4gIGdldCBwb2x5bGluZVByb3BzKCk6IFBvbHlsaW5lUHJvcHMge1xyXG4gICAgcmV0dXJuIHRoaXMuX3BvbHlsaW5lUHJvcHM7XHJcbiAgfVxyXG5cclxuICBzZXQgcG9seWxpbmVQcm9wcyh2YWx1ZTogUG9seWxpbmVQcm9wcykge1xyXG4gICAgdGhpcy5fcG9seWxpbmVQcm9wcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IHBvaW50UHJvcHMoKTogUG9pbnRQcm9wcyB7XHJcbiAgICByZXR1cm4gdGhpcy5fcG9pbnRQcm9wcztcclxuICB9XHJcblxyXG4gIHNldCBwb2ludFByb3BzKHZhbHVlOiBQb2ludFByb3BzKSB7XHJcbiAgICB0aGlzLl9wb2ludFByb3BzID0gdmFsdWU7XHJcbiAgfVxyXG5cclxuICBnZXQgY2lyY2xlUHJvcHMoKTogRWxsaXBzZVByb3BzIHtcclxuICAgIHJldHVybiB0aGlzLl9jaXJjbGVQcm9wcztcclxuICB9XHJcblxyXG4gIHNldCBjaXJjbGVQcm9wcyh2YWx1ZTogRWxsaXBzZVByb3BzKSB7XHJcbiAgICB0aGlzLl9jaXJjbGVQcm9wcyA9IHZhbHVlO1xyXG4gIH1cclxuXHJcbiAgZ2V0IGNlbnRlcigpOiBFZGl0UG9pbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX2NlbnRlcjtcclxuICB9XHJcblxyXG4gIGdldCByYWRpdXNQb2ludCgpOiBFZGl0UG9pbnQge1xyXG4gICAgcmV0dXJuIHRoaXMuX3JhZGl1c1BvaW50O1xyXG4gIH1cclxuXHJcbiAgZ2V0IGVuYWJsZUVkaXQoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5fZW5hYmxlRWRpdDtcclxuICB9XHJcblxyXG4gIHNldCBlbmFibGVFZGl0KHZhbHVlOiBib29sZWFuKSB7XHJcbiAgICB0aGlzLl9lbmFibGVFZGl0ID0gdmFsdWU7XHJcbiAgICB0aGlzLl9jZW50ZXIuc2hvdyA9IHZhbHVlO1xyXG4gICAgdGhpcy5fcmFkaXVzUG9pbnQuc2hvdyA9IHZhbHVlO1xyXG4gICAgdGhpcy51cGRhdGVQb2ludHNMYXllcigpO1xyXG4gIH1cclxuXHJcbiAgc2V0TWFudWFsbHkoXHJcbiAgICBjZW50ZXI6IENhcnRlc2lhbjMsXHJcbiAgICByYWRpdXNQb2ludDogQ2FydGVzaWFuMyxcclxuICAgIGNlbnRlclBvaW50UHJvcCA9IHRoaXMucG9pbnRQcm9wcyxcclxuICAgIHJhZGl1c1BvaW50UHJvcCA9IHRoaXMucG9pbnRQcm9wcyxcclxuICAgIGNpcmNsZVByb3AgPSB0aGlzLmNpcmNsZVByb3BzLFxyXG4gICkge1xyXG4gICAgaWYgKCF0aGlzLl9jZW50ZXIpIHtcclxuICAgICAgdGhpcy5fY2VudGVyID0gbmV3IEVkaXRQb2ludCh0aGlzLmlkLCBjZW50ZXIsIGNlbnRlclBvaW50UHJvcCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9jZW50ZXIuc2V0UG9zaXRpb24oY2VudGVyKTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX3JhZGl1c1BvaW50KSB7XHJcbiAgICAgIHRoaXMuX3JhZGl1c1BvaW50ID0gbmV3IEVkaXRQb2ludCh0aGlzLmlkLCByYWRpdXNQb2ludCwgcmFkaXVzUG9pbnRQcm9wKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIHRoaXMuX3JhZGl1c1BvaW50LnNldFBvc2l0aW9uKHJhZGl1c1BvaW50KTtcclxuICAgIH1cclxuXHJcbiAgICBpZiAoIXRoaXMuX291dGxpbmVBcmMpIHtcclxuICAgICAgdGhpcy5jcmVhdGVPdXRsaW5lQXJjKCk7XHJcbiAgICB9IGVsc2Uge1xyXG4gICAgICB0aGlzLl9vdXRsaW5lQXJjLnJhZGl1cyA9IHRoaXMuZ2V0UmFkaXVzKCk7XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5jaXJjbGVQcm9wcyA9IGNpcmNsZVByb3A7XHJcbiAgICB0aGlzLmRvbmVDcmVhdGlvbiA9IHRydWU7XHJcbiAgICB0aGlzLnVwZGF0ZUFyY3NMYXllcigpO1xyXG4gICAgdGhpcy51cGRhdGVQb2ludHNMYXllcigpO1xyXG4gICAgdGhpcy51cGRhdGVDaXJjbGVzTGF5ZXIoKTtcclxuICB9XHJcblxyXG4gIGFkZFBvaW50KHBvc2l0aW9uOiBDYXJ0ZXNpYW4zKSB7XHJcbiAgICBpZiAodGhpcy5kb25lQ3JlYXRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICghdGhpcy5fY2VudGVyKSB7XHJcbiAgICAgIHRoaXMuX2NlbnRlciA9IG5ldyBFZGl0UG9pbnQodGhpcy5pZCwgcG9zaXRpb24sIHRoaXMucG9pbnRQcm9wcyk7XHJcbiAgICAgIHRoaXMuX3JhZGl1c1BvaW50ID0gbmV3IEVkaXRQb2ludCh0aGlzLmlkLCBwb3NpdGlvbi5jbG9uZSgpLCB0aGlzLnBvaW50UHJvcHMpO1xyXG4gICAgICBpZiAoIXRoaXMuX291dGxpbmVBcmMpIHtcclxuICAgICAgICB0aGlzLmNyZWF0ZU91dGxpbmVBcmMoKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHRoaXMudXBkYXRlQXJjc0xheWVyKCk7XHJcbiAgICB0aGlzLnVwZGF0ZVBvaW50c0xheWVyKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUNpcmNsZXNMYXllcigpO1xyXG4gIH1cclxuXHJcbiAgYWRkTGFzdFBvaW50KHBvc2l0aW9uOiBDYXJ0ZXNpYW4zKSB7XHJcbiAgICBpZiAodGhpcy5kb25lQ3JlYXRpb24gfHwgIXRoaXMuX2NlbnRlciB8fCAhdGhpcy5fcmFkaXVzUG9pbnQpIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuX3JhZGl1c1BvaW50LnNldFBvc2l0aW9uKHBvc2l0aW9uKTtcclxuICAgIHRoaXMuZG9uZUNyZWF0aW9uID0gdHJ1ZTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZVBvaW50c0xheWVyKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUNpcmNsZXNMYXllcigpO1xyXG4gIH1cclxuXHJcbiAgbW92ZVBvaW50KHRvUG9zaXRpb246IENhcnRlc2lhbjMpIHtcclxuICAgIGlmICghdGhpcy5fY2VudGVyIHx8ICF0aGlzLl9yYWRpdXNQb2ludCkge1xyXG4gICAgICByZXR1cm47XHJcbiAgICB9XHJcblxyXG4gICAgdGhpcy5fcmFkaXVzUG9pbnQuc2V0UG9zaXRpb24odG9Qb3NpdGlvbik7XHJcbiAgICB0aGlzLl9vdXRsaW5lQXJjLnJhZGl1cyA9IHRoaXMuZ2V0UmFkaXVzKCk7XHJcblxyXG4gICAgdGhpcy51cGRhdGVBcmNzTGF5ZXIoKTtcclxuICAgIHRoaXMudXBkYXRlUG9pbnRzTGF5ZXIoKTtcclxuICAgIHRoaXMudXBkYXRlQ2lyY2xlc0xheWVyKCk7XHJcbiAgfVxyXG5cclxuICBtb3ZlQ2lyY2xlKGRyYWdTdGFydFBvc2l0aW9uOiBDYXJ0ZXNpYW4zLCBkcmFnRW5kUG9zaXRpb246IENhcnRlc2lhbjMpIHtcclxuICAgIGlmICghdGhpcy5kb25lQ3JlYXRpb24pIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gICAgaWYgKCF0aGlzLmxhc3REcmFnZ2VkVG9Qb3NpdGlvbikge1xyXG4gICAgICB0aGlzLmxhc3REcmFnZ2VkVG9Qb3NpdGlvbiA9IGRyYWdTdGFydFBvc2l0aW9uO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IHJhZGl1cyA9IHRoaXMuZ2V0UmFkaXVzKCk7XHJcbiAgICBjb25zdCBkZWx0YSA9IEdlb1V0aWxzU2VydmljZS5nZXRQb3NpdGlvbnNEZWx0YSh0aGlzLmxhc3REcmFnZ2VkVG9Qb3NpdGlvbiwgZHJhZ0VuZFBvc2l0aW9uKTtcclxuICAgIGNvbnN0IG5ld0NlbnRlclBvc2l0aW9uID0gR2VvVXRpbHNTZXJ2aWNlLmFkZERlbHRhVG9Qb3NpdGlvbih0aGlzLmdldENlbnRlcigpLCBkZWx0YSwgdHJ1ZSk7XHJcbiAgICB0aGlzLl9jZW50ZXIuc2V0UG9zaXRpb24obmV3Q2VudGVyUG9zaXRpb24pO1xyXG4gICAgdGhpcy5yYWRpdXNQb2ludC5zZXRQb3NpdGlvbihHZW9VdGlsc1NlcnZpY2UucG9pbnRCeUxvY2F0aW9uRGlzdGFuY2VBbmRBemltdXRoKHRoaXMuZ2V0Q2VudGVyKCksIHJhZGl1cywgTWF0aC5QSSAvIDIsIHRydWUpKTtcclxuICAgIHRoaXMuX291dGxpbmVBcmMucmFkaXVzID0gdGhpcy5nZXRSYWRpdXMoKTtcclxuICAgIHRoaXMuX291dGxpbmVBcmMuY2VudGVyID0gdGhpcy5fY2VudGVyLmdldFBvc2l0aW9uKCk7XHJcbiAgICB0aGlzLnVwZGF0ZUFyY3NMYXllcigpO1xyXG4gICAgdGhpcy51cGRhdGVQb2ludHNMYXllcigpO1xyXG4gICAgdGhpcy51cGRhdGVDaXJjbGVzTGF5ZXIoKTtcclxuICAgIHRoaXMubGFzdERyYWdnZWRUb1Bvc2l0aW9uID0gZHJhZ0VuZFBvc2l0aW9uO1xyXG4gIH1cclxuXHJcbiAgZW5kTW92ZVBvbHlnb24oKSB7XHJcbiAgICB0aGlzLmxhc3REcmFnZ2VkVG9Qb3NpdGlvbiA9IHVuZGVmaW5lZDtcclxuICB9XHJcblxyXG4gIGdldFJhZGl1cygpOiBudW1iZXIge1xyXG4gICAgaWYgKCF0aGlzLl9jZW50ZXIgfHwgIXRoaXMuX3JhZGl1c1BvaW50KSB7XHJcbiAgICAgIHJldHVybiAwO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIEdlb1V0aWxzU2VydmljZS5kaXN0YW5jZSh0aGlzLl9jZW50ZXIuZ2V0UG9zaXRpb24oKSwgdGhpcy5fcmFkaXVzUG9pbnQuZ2V0UG9zaXRpb24oKSk7XHJcbiAgfVxyXG5cclxuICBnZXRSYWRpdXNDYWxsYmFja1Byb3BlcnR5KCkge1xyXG4gICAgcmV0dXJuIG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSh0aGlzLmdldFJhZGl1cy5iaW5kKHRoaXMpLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBnZXRDZW50ZXIoKTogQ2FydGVzaWFuMyB7XHJcbiAgICByZXR1cm4gdGhpcy5fY2VudGVyID8gdGhpcy5fY2VudGVyLmdldFBvc2l0aW9uKCkgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBnZXRDZW50ZXJDYWxsYmFja1Byb3BlcnR5KCkge1xyXG4gICAgcmV0dXJuIG5ldyBDZXNpdW0uQ2FsbGJhY2tQcm9wZXJ0eSh0aGlzLmdldENlbnRlci5iaW5kKHRoaXMpLCBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICBnZXRSYWRpdXNQb2ludCgpOiBDYXJ0ZXNpYW4zIHtcclxuICAgIHJldHVybiB0aGlzLl9yYWRpdXNQb2ludCA/IHRoaXMuX3JhZGl1c1BvaW50LmdldFBvc2l0aW9uKCkgOiB1bmRlZmluZWQ7XHJcbiAgfVxyXG5cclxuICBkaXNwb3NlKCkge1xyXG4gICAgaWYgKHRoaXMuX2NlbnRlcikge1xyXG4gICAgICB0aGlzLnBvaW50c0xheWVyLnJlbW92ZSh0aGlzLl9jZW50ZXIuZ2V0SWQoKSk7XHJcbiAgICB9XHJcblxyXG4gICAgaWYgKHRoaXMuX3JhZGl1c1BvaW50KSB7XHJcbiAgICAgIHRoaXMucG9pbnRzTGF5ZXIucmVtb3ZlKHRoaXMuX3JhZGl1c1BvaW50LmdldElkKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIGlmICh0aGlzLl9vdXRsaW5lQXJjKSB7XHJcbiAgICAgIHRoaXMuYXJjc0xheWVyLnJlbW92ZSh0aGlzLl9vdXRsaW5lQXJjLmdldElkKCkpO1xyXG4gICAgfVxyXG5cclxuICAgIHRoaXMuY2lyY2xlc0xheWVyLnJlbW92ZSh0aGlzLmlkKTtcclxuICB9XHJcblxyXG4gIGdldElkKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuaWQ7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIHVwZGF0ZUNpcmNsZXNMYXllcigpIHtcclxuICAgIHRoaXMuY2lyY2xlc0xheWVyLnVwZGF0ZSh0aGlzLCB0aGlzLmlkKTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlUG9pbnRzTGF5ZXIoKSB7XHJcbiAgICBpZiAodGhpcy5fY2VudGVyKSB7XHJcbiAgICAgIHRoaXMucG9pbnRzTGF5ZXIudXBkYXRlKHRoaXMuX2NlbnRlciwgdGhpcy5fY2VudGVyLmdldElkKCkpO1xyXG4gICAgfVxyXG4gICAgaWYgKHRoaXMuX3JhZGl1c1BvaW50KSB7XHJcbiAgICAgIHRoaXMucG9pbnRzTGF5ZXIudXBkYXRlKHRoaXMuX3JhZGl1c1BvaW50LCB0aGlzLl9yYWRpdXNQb2ludC5nZXRJZCgpKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIHByaXZhdGUgdXBkYXRlQXJjc0xheWVyKCkge1xyXG4gICAgaWYgKCF0aGlzLl9vdXRsaW5lQXJjKSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuYXJjc0xheWVyLnVwZGF0ZSh0aGlzLl9vdXRsaW5lQXJjLCB0aGlzLl9vdXRsaW5lQXJjLmdldElkKCkpO1xyXG4gIH1cclxuXHJcbiAgcHJpdmF0ZSBjcmVhdGVPdXRsaW5lQXJjKCkge1xyXG4gICAgaWYgKCF0aGlzLl9jZW50ZXIgfHwgIXRoaXMuX3JhZGl1c1BvaW50KSB7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICAgIHRoaXMuX291dGxpbmVBcmMgPSBuZXcgRWRpdEFyYyh0aGlzLmlkLCB0aGlzLmdldENlbnRlcigpLCB0aGlzLmdldFJhZGl1cygpLCBNYXRoLlBJICogMiwgMCwgdGhpcy5wb2x5bGluZVByb3BzKTtcclxuICB9XHJcbn1cclxuIl19