Make me a password generator!
Python 2, 217 203 bytes

from random import*
r=[10]+range(33,127)
r=[r[65:91],r[33:59],r[16:26],r[:16]+r[26:33]+r[59:65]+r[91:]]
x=input()
l=x&gt;&gt;4
print''.join(map(chr,sample(sum([k[1]for k in enumerate(r)if x&amp;2**k[0]],[])*l,l)))


Ugh this is horribly long. The part I think could be golfed the most is the part to get the charsets; that part was a pain.

By the way, I am @HyperNeutrino; I'm just getting enough rep to chat. :P

-14 bytes thanks @ValueInk!
Bug fix thanks to @ovs!