function resolveDispute(

    bytes16 _jobId,
    address _hirer,
    address _contractor,
    uint256 _value,
    uint256 _fee,
    uint8 _contractorPercent
  ) external onlyArbitrator
  {
    
    bytes32 jobHash = getJobHash(
      _jobId,
      _hirer,
      _contractor,
      _value,
      _fee);

    
    require(jobEscrows[jobHash].exists);

    require(jobEscrows[jobHash].status == STATUS_JOB_IN_DISPUTE);
    require(_contractorPercent <= 100);

    uint256 jobValue = hirerEscrowMap[_hirer][jobHash];

    
    require(jobValue > 0 && jobValue == _value);

    
    require(jobValue >= jobValue.sub(_fee));

    
    require(totalInEscrow >= jobValue && totalInEscrow > 0);

    totalInEscrow = totalInEscrow.sub(jobValue);
    feesAvailableForWithdraw = feesAvailableForWithdraw.add(_fee);
    

    delete jobEscrows[jobHash];
    delete  hirerEscrowMap[_hirer][jobHash];

    uint256 contractorAmount = jobValue.sub(_fee).mul(_contractorPercent).div(100);
    uint256 hirerAmount = jobValue.sub(_fee).mul(100 - _contractorPercent).div(100);
    emit DisputeResolved(
      jobHash,
      msg.sender,
      hirerAmount,
      contractorAmount);

    emit AddFeesToCoinSparrowPool(jobHash, _fee);

    _contractor.transfer(contractorAmount);
    _hirer.transfer(hirerAmount);

  }