don't use global state