class SourceKey {
    /** */
    private final UUID ownerId;

    /** */
    private final int segmentId;

    /** */
    private final int batchLookupId;

    /**
     * @param ownerId Owner node ID.
     * @param segmentId Index segment ID.
     * @param batchLookupId Batch lookup ID.
     */
    public SourceKey(UUID ownerId, int segmentId, int batchLookupId) {
        this.ownerId = ownerId;
        this.segmentId = segmentId;
        this.batchLookupId = batchLookupId;
    }

    /** {@inheritDoc} */
    @Override public boolean equals(Object o) {
        if (!(o instanceof SourceKey))
            return false;

        SourceKey srcKey = (SourceKey)o;

        return batchLookupId == srcKey.batchLookupId && segmentId == srcKey.segmentId &&
            ownerId.equals(srcKey.ownerId);
    }

    /** {@inheritDoc} */
    @Override public int hashCode() {<FILL_FUNCTION_BODY>}
}

        int hash = ownerId.hashCode();

        hash = 31 * hash + segmentId;
        hash = 31 * hash + batchLookupId;

        return hash;
    
<no_super_class>