The Queue remove function does not remove the item completely
When removing an item in a queue, the following function is used:\\n```\\nfunction remove(UniqueAddressQueue storage baseQueue, address addrToRemove) internal returns (bool) {\\n    if (!contains(baseQueue, addrToRemove)) {\\n        return false;\\n    }\\n\\n    if (baseQueue.HEAD == addrToRemove) {\\n        return removeFirst(baseQueue);\\n    }\\n\\n    if (baseQueue.TAIL == addrToRemove) {\\n        return removeLast(baseQueue);\\n    }\\n\\n    address prevAddr = baseQueue.queue[addrToRemove].prev;\\n    address nextAddr = baseQueue.queue[addrToRemove].next;\\n    baseQueue.queue[prevAddr].next = nextAddr;\\n    baseQueue.queue[nextAddr].prev = prevAddr;\\n    baseQueue.queueLength--;\\n\\n    return true;\\n}\\n```\\n\\nAs the result, the `baseQueue.queue[addrToRemove]` is not deleted, so the `contains` function will still return `True` after the removal.
Remove the element from the queue completely.
```\\nfunction remove(UniqueAddressQueue storage baseQueue, address addrToRemove) internal returns (bool) {\\n    if (!contains(baseQueue, addrToRemove)) {\\n        return false;\\n    }\\n\\n    if (baseQueue.HEAD == addrToRemove) {\\n        return removeFirst(baseQueue);\\n    }\\n\\n    if (baseQueue.TAIL == addrToRemove) {\\n        return removeLast(baseQueue);\\n    }\\n\\n    address prevAddr = baseQueue.queue[addrToRemove].prev;\\n    address nextAddr = baseQueue.queue[addrToRemove].next;\\n    baseQueue.queue[prevAddr].next = nextAddr;\\n    baseQueue.queue[nextAddr].prev = prevAddr;\\n    baseQueue.queueLength--;\\n\\n    return true;\\n}\\n```\\n