hunk.code_window:   NSString *whenInUseUsageDescription = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"NSLocationWhenInUseUsageDescription"];
     if (!(alwaysUsageDescription || whenInUseUsageDescription)) {
       ABI29_0_0EXFatal(ABI29_0_0EXErrorWithMessage(@"This app is missing NSLocationAlwaysUsageDescription or NSLocationWhenInUseUsageDescription, so location services will fail. Add one of these keys to your bundle's Info.plist."));
       systemStatus = kCLAuthorizationStatusDenied;
     } else {
       systemStatus = [CLLocationManager authorizationStatus];
  
hunk.labels: keep replace replace keep keep keep
hunk.after_edit:   if (!whenInUseUsageDescription) {
       ABI29_0_0EXFatal(ABI29_0_0EXErrorWithMessage(@"This app is missing NSLocationWhenInUseUsageDescription, so location services will fail. Add one of these keys to your bundle's Info.plist."));
  
hunk.file_path: ios/versioned-react-native/ABI29_0_0/EXPermissions/ABI29_0_0EXPermissions/ABI29_0_0EXLocationRequester.m
hunk.type: replace
file: // Copyright 2004-present Facebook. All Rights Reserved.
  
  #pragma once
  
  #include <cxxreact/SharedProxyCxxModule.h>
  
  #include "CxxModuleWrapperBase.h"
  
  namespace facebook {
  namespace react {
  
  class CxxSharedModuleWrapper: public CxxModuleWrapperBase {
   public:
    std::string getName() override {
      return shared_->getName();
    }
  
    std::unique_ptr<xplat::module::CxxModule> getModule() override {
      // Instead of just moving out the stored CxxModule, this creates a
      // proxy which passes calls to the shared stored CxxModule.
  
      return std::make_unique<xplat::module::SharedProxyCxxModule>(shared_);
    }
  
  protected:
    explicit CxxSharedModuleWrapper(std::unique_ptr<xplat::module::CxxModule> module)
      : shared_(std::move(module)) {}
  
    std::shared_ptr<xplat::module::CxxModule> shared_;
  };
  
  }
  }
  