             
         } else {
             
-            guard let m0 = _offset_point(0.25 * (t - s) + s) else { return }
-            guard let m1 = _offset_point(0.5 * (t - s) + s) else { return }
-            guard let m2 = _offset_point(0.75 * (t - s) + s) else { return }
+            guard let m0 = _offset_point(0.25 * (t - s) + s).map({ $0 + $1 }) else { return }
+            guard let m1 = _offset_point(0.5 * (t - s) + s).map({ $0 + $1 }) else { return }
+            guard let m2 = _offset_point(0.75 * (t - s) + s).map({ $0 + $1 }) else { return }
             
             let angle_signed = angle.sign == .minus
             

extension BezierProtocol where Scalar == Double, Element == Point {
    
    @inlinable
    func _offset(_ signed: Bool, _ _offset_point: (Double) -> Point?, _ calback: (ClosedRange<Double>, CubicBezier<Point>) throws -> Void) rethrows {
        
        var s = 0.0
        

            
            let t = Double(_t) / Double(degree)
            
            guard let (u0, v0) = _offset_point(s) else { continue }
            guard let (u1, v1) = _offset_point(t) else { continue }
            
            let q0 = u0 + v0
            let q3 = u1 + v1
            
            let d0 = v0.unit * SDTransform.rotate(signed ? -0.5 * .pi : 0.5 * .pi)
            let d3 = v1.unit * SDTransform.rotate(signed ? -0.5 * .pi : 0.5 * .pi)
            
            guard let m0 = _offset_point(0.25 * (t - s) + s).map({ $0 + $1 }) else { continue }
            guard let m1 = _offset_point(0.5 * (t - s) + s).map({ $0 + $1 }) else { continue }
            guard let m2 = _offset_point(0.75 * (t - s) + s).map({ $0 + $1 }) else { continue }
            
            if let curve = CubicBezierFitting(q0, q3, d0, -d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) {
                try calback(s...t, curve)
