 import YepKit
 import AsyncDisplayKit
 
-class LeftBubbleNode: ASDisplayNode {
-
-    override class func drawRect(bounds: CGRect, withParameters parameters: NSObjectProtocol!, isCancelled isCancelledBlock: asdisplaynode_iscancelled_block_t, isRasterizing: Bool) {
-
-        let context = UIGraphicsGetCurrentContext()
-        CGContextSaveGState(context)
-
-        UIColor.leftBubbleTintColor().setFill()
-
-        do {
-            let path = UIBezierPath()
-            let arrowPoint = CGPoint(x: 0, y: 20)
-            let topPoint = CGPoint(x: 11, y: 10)
-            let topControlPoint = CGPoint(x: 7, y: 20)
-            let bottomPoint = CGPoint(x: 11, y: 30)
-            let bottomControlPoint = CGPoint(x: 7, y: 20)
-            path.moveToPoint(arrowPoint)
-            path.addQuadCurveToPoint(topPoint, controlPoint: topControlPoint)
-            path.addLineToPoint(bottomPoint)
-            path.addQuadCurveToPoint(arrowPoint, controlPoint: bottomControlPoint)
-            path.fill()
-        }
-
-        do {
-            let rect = CGRect(x: 8, y: 0, width: bounds.width - 8, height: bounds.height)
-            let path = UIBezierPath(roundedRect: rect, cornerRadius: 15)
-            path.fill()
-        }
-
-        CGContextRestoreGState(context)
-    }
-}
-
 class ChatLeftTextCellNode: ChatLeftBaseCellNode {
 
     static let textAttributes = [

        NSFontAttributeName: UIFont.chatTextFont(),
    ]

    lazy var bubbleNode: LeftBubbleNode = {
        let node = LeftBubbleNode()
        return node
    }()


    override init() {
        super.init()

        addSubnode(tailImageNode)
        addSubnode(bubbleNode)
        addSubnode(textNode)
    }

    func configure(withMessage message: Message) {
