function externalCall(address destination, uint256 value, bytes data) public returns (bool) {
    require(msg.sender == recipient, "Sender must be the recipient.");
    uint256 dataLength = data.length;
    bool result;
    assembly {
      let x := mload(0x40)   
      let d := add(data, 32) 
      result := call(
        sub(gas, 34710),     
                             
                             
        destination,
        value,
        d,
        dataLength,          
        x,
        0                    
      )
    }
    return result;
  }