Maximum storage a contract could hold?

What is the theoretical maximum amount of storage a contract could hole?

If I were to implement a stack using a storage_var

func myStack(index: felt) → (value: felt):
end

There could be a total of 2^32-1 total index’s myStack ?

And each slot could hold a felt; which is 2^32-1 bytes ? which is 2^256 -1 bits?

Meaning the theoretical maximum amount of storage myStack could hold is (2^32 -1) * (2^32-1) bytes ?

Plz correct me where I am wrong I’m just curious

What ever the theoretical max amount of data myStack could hold, how many myStacks could the contract hold before it maxes out?