             guard let m0 = self._offset_point(a, 0.25 * (t - s) + s) else { return }
             guard let m1 = self._offset_point(a, 0.5 * (t - s) + s) else { return }
             guard let m2 = self._offset_point(a, 0.75 * (t - s) + s) else { return }
-            guard let (c0, c1) = CubicBezierFitting(q0, q3, d0, -d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) else { return }
             
             if a.sign == angle.sign {
-                try calback(s...t, CubicBezier(q0, q0 + abs(c0) * d0, q3 - abs(c1) * d3, q3))
+                guard let (c0, c1) = CubicBezierFitting(q0, q3, d0, -d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) else { return }
+                try calback(s...t, CubicBezier(q0, q0 + c0 * d0, q3 - c1 * d3, q3))
+                
             } else {
-                try calback(s...t, CubicBezier(q0, q0 - abs(c0) * d0, q3 + abs(c1) * d3, q3))
+                guard let (c0, c1) = CubicBezierFitting(q0, q3, -d0, d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) else { return }
+                try calback(s...t, CubicBezier(q0, q0 - c0 * d0, q3 + c1 * d3, q3))
             }
         }
     }

            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 (c0, c1) = CubicBezierFitting(q0, q3, d0, -d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) else { return }
            
            let angle_signed = angle.sign == .minus
            if signed == angle_signed {
                try calback(s...t, CubicBezier(q0, q0 + abs(c0) * d0, q3 - abs(c1) * d3, q3))
            } else {
                try calback(s...t, CubicBezier(q0, q0 - abs(c0) * d0, q3 + abs(c1) * d3, q3))
            }
        }
    }

            guard let m2 = self._offset_point(a, 0.75 * (t - s) + s) else { continue }
            guard let (c0, c1) = CubicBezierFitting(q0, q3, d0, -d3, [(0.25, m0), (0.5, m1), (0.75, m2)]) else { continue }
            
            try calback(s...t, CubicBezier(q0, q0 + c0 * d0, q3 - c1 * d3, q3))
            
            s = t
        }
