hunk.code_window: import com.facebook.react.uimanager.events.RCTEventEmitter;
   import com.facebook.react.uimanager.events.TouchEvent;
   import com.facebook.react.uimanager.events.TouchEventCoalescingKeyHelper;
   import com.facebook.react.uimanager.events.TouchEventType;
   import com.facebook.react.uimanager.events.EventDispatcher;
   /**
    * Custom {@link View} implementation that draws an RNSVGSvg React view and its \children.
  
hunk.labels: keep keep keep keep replace keep keep keep
hunk.after_edit: import javax.annotation.Nullable;
  
hunk.file_path: android/app/src/main/java/versioned/host/exp/exponent/modules/api/components/svg/RNSVGSvgView.java
hunk.type: replace
file: /**
   * Copyright (c) 2015-present, Facebook, Inc.
   * All rights reserved.
   *
   * This source code is licensed under the BSD-style license found in the
   * LICENSE file in the root directory of this source tree. An additional grant
   * of patent rights can be found in the PATENTS file in the same directory.
   */
  
  #import "ABI9_0_0ARTRenderable.h"
  
  @implementation ABI9_0_0ARTRenderable
  
  - (void)setFill:(ABI9_0_0ARTBrush *)fill
  {
    [self invalidate];
    _fill = fill;
  }
  
  - (void)setStroke:(CGColorRef)stroke
  {
    if (stroke == _stroke) {
      return;
    }
    [self invalidate];
    CGColorRelease(_stroke);
    _stroke = CGColorRetain(stroke);
  }
  
  - (void)setStrokeWidth:(CGFloat)strokeWidth
  {
    [self invalidate];
    _strokeWidth = strokeWidth;
  }
  
  - (void)setStrokeCap:(CGLineCap)strokeCap
  {
    [self invalidate];
    _strokeCap = strokeCap;
  }
  
  - (void)setStrokeJoin:(CGLineJoin)strokeJoin
  {
    [self invalidate];
    _strokeJoin = strokeJoin;
  }
  
  - (void)setStrokeDash:(ABI9_0_0ARTCGFloatArray)strokeDash
  {
    if (strokeDash.array == _strokeDash.array) {
      return;
    }
    if (_strokeDash.array) {
      free(_strokeDash.array);
    }
    [self invalidate];
    _strokeDash = strokeDash;
  }
  
  - (void)dealloc
  {
    CGColorRelease(_stroke);
    if (_strokeDash.array) {
      free(_strokeDash.array);
    }
  }
  
  - (void)renderTo:(CGContextRef)context
  {
    if (self.opacity <= 0 || self.opacity >= 1 || (self.fill && self.stroke)) {
      // If we have both fill and stroke, we will need to paint this using normal compositing
      [super renderTo: context];
      return;
    }
    // This is a terminal with only one painting. Therefore we don't need to paint this
    // off-screen. We can just composite it straight onto the buffer.
    CGContextSaveGState(context);
    CGContextConcatCTM(context, self.transform);
    CGContextSetAlpha(context, self.opacity);
    [self renderLayerTo:context];
    CGContextRestoreGState(context);
  }
  
  - (void)renderLayerTo:(CGContextRef)context
  {
    // abstract
  }
  
  @end
  