contract DistrictsAdmin is Ownable, Pausable {
  event ContractUpgrade(address newContract);

  address public newContractAddress;
  address public coreAddress;

  NarcosCoreInterface public narcoCore;

  function setNarcosCoreAddress(address _address) public onlyOwner {
    _setNarcosCoreAddress(_address);
  }

  function _setNarcosCoreAddress(address _address) internal {
    NarcosCoreInterface candidateContract = NarcosCoreInterface(_address);
    require(candidateContract.implementsERC721());
    coreAddress = _address;
    narcoCore = candidateContract;
  }

  /// @dev Used to mark the smart contract as upgraded, in case there is a serious
  ///  breaking bug. This method does nothing but keep track of the new contract and
  ///  emit a message indicating that the new address is set. It's up to clients of this
  ///  contract to update to the new contract address in that case.
  /// @param _v2Address new address
  function setNewAddress(address _v2Address) public onlyOwner whenPaused {
    newContractAddress = _v2Address;

    ContractUpgrade(_v2Address);
  }

  modifier onlyDopeRaiderContract() {
    require(msg.sender == coreAddress);
    _;
  }

}
function setNewAddress(address _v2Address) public onlyOwner whenPaused {
  newContractAddress = _v2Address;

  ContractUpgrade(_v2Address);
}

/// @dev Used to mark the smart contract as upgraded, in case there is a serious
///  breaking bug. This method does nothing but keep track of the new contract and
///  emit a message indicating that the new address is set. It's up to clients of this
///  contract to update to the new contract address in that case.
/// @param _v2Address new address