I think your logic for NAND gates is incorrect. NAND gates should only return false when both inputs are true, and should return true if at least one input it false.
Thanks! I completely blanked on this. It has been fixed.