btw the `(?)` in front of these means that they are optional, but if they are defined they need to conform to the rules