<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def validate(self, pA, pB):
 """ Validate that the two properties may be linked. @param pA: Endpoint (A) to link. @type pA: L{Endpoint} @param pB: Endpoint (B) to link. @type pB: L{Endpoint} @return: self @rtype: L{Link} """

        if pA in pB.links or \
           pB in pA.links:
            raise Exception('Already linked')
        dA = pA.domains()
        dB = pB.domains()
        for d in dA:
            if d in dB:
                raise Exception('Duplicate domain "%s" found' % d)
        for d in dB:
            if d in dA:
                raise Exception('Duplicate domain "%s" found' % d)
        kA = pA.keys()
        kB = pB.keys()
        for k in kA:
            if k in kB:
                raise Exception('Duplicate key %s found' % k)
        for k in kB:
            if k in kA:
                raise Exception('Duplicate key %s found' % k)
        return self