     return poly.all(where: { $0.almostZero() }) ? nil : poly.roots
 }
 
+@_inlineable
 public func CubicBezierLineIntersect(_ b0: Point, _ b1: Point, _ b2: Point, _ b3: Point, _ l0: Point, _ l1: Point) -> [Double]? {
     
     let a = b0 - l0

    public var m32: Point
    public var m33: Point
    
    public init(coonsPatch m00: Point, _ m01: Point, _ m02: Point, _ m03: Point,
                _ m10: Point, _ m13: Point, _ m20: Point, _ m23: Point,
                _ m30: Point, _ m31: Point, _ m32: Point, _ m33: Point) {
        self.m00 = m00
        self.m01 = m01
        self.m02 = m02
        self.m03 = m03
        self.m10 = m10
        self.m11 = (6 * (m01 + m10) + 3 * (m31 + m13) - 2 * (m03 + m30) - 4 * m00 - m33) / 9
        self.m12 = (6 * (m02 + m13) + 3 * (m32 + m10) - 2 * (m00 + m33) - 4 * m03 - m30) / 9
        self.m13 = m13
        self.m20 = m20
        self.m21 = (6 * (m31 + m20) + 3 * (m01 + m23) - 2 * (m33 + m00) - 4 * m30 - m03) / 9
        self.m22 = (6 * (m32 + m23) + 3 * (m02 + m20) - 2 * (m30 + m03) - 4 * m33 - m00) / 9
        self.m23 = m23
        self.m30 = m30
        self.m31 = m31

    return det.all(where: { $0.almostZero() }) ? nil : det.roots
}

@_inlineable
public func CubicBeziersIntersect(_ c0: Point, _ c1: Point, _ c2: Point, _ c3: Point, _ c4: Point, _ c5: Point, _ c6: Point, _ c7: Point) -> [Double]? {
    
    let a = c0 - c4
