function createLiability(
        bytes _ask,
        bytes _bid
    )
        external 
        onlyLighthouse
        returns (RobotLiability liability)
    {
        
        uint256 gasinit = gasleft();

        
        liability = new RobotLiability(robotLiabilityLib);
        emit NewLiability(liability);

        
        require(liability.call(abi.encodePacked(bytes4(0x82fbaa25), _ask))); 
        usedHashGuard(liability.askHash());

        require(liability.call(abi.encodePacked(bytes4(0x66193359), _bid))); 
        usedHashGuard(liability.bidHash());

        
        require(xrt.transferFrom(liability.promisor(),
                                 tx.origin,
                                 liability.lighthouseFee()));

        
        ERC20 token = liability.token();
        require(token.transferFrom(liability.promisee(),
                                   liability,
                                   liability.cost()));

        
        if (address(liability.validator()) != 0 && liability.validatorFee() > 0)
            require(xrt.transferFrom(liability.promisee(),
                                     liability,
                                     liability.validatorFee()));

        
        uint256 gas = gasinit - gasleft() + 110525; 
        totalGasUtilizing       += gas;
        gasUtilizing[liability] += gas;
     }