```json
{
  "sym_variables": [
    ("x0", "hours worked by Ringo"),
    ("x1", "hours worked by Jean"),
    ("x2", "hours worked by Mary"),
    ("x3", "hours worked by Laura"),
    ("x4", "hours worked by Peggy"),
    ("x5", "hours worked by John"),
    ("x6", "hours worked by George")
  ],
  "objective_function": "x0**2 + 3*x0*x1 + 2*x0*x3 + 2*x0*x4 + 5*x0*x5 + 4*x1**2 + 7*x1*x4 + 5*x1*x6 + 7*x2*x3 + 8*x2*x4 + 9*x3*x4 + 6*x3*x5 + 8*x4**2 + 4*x4*x5 + 3*x4*x6 + x5*x6 + 4*x6**2 + 4*x1 + x2 + 3*x5 + 3*x6",
  "constraints": [
    "16*x3**2 + 6*x6**2 >= 25",
    "16*x0 + 12*x4 + 6*x6 >= 44",
    "16*x0 + 5*x5 + 6*x6 >= 44",
    "12*x1**2 + 12*x4**2 + 6*x6**2 >= 44",
    "16*x0 + 3*x2 + 12*x4 >= 44",
    "16*x0 + 3*x2 + 9*x3 >= 44",
    "16*x0 + 9*x3 + 12*x4 >= 44",
    "3*x2 + 9*x3 + 5*x5 >= 44",
    "16*x0**2 + 12*x1**2 + 6*x6**2 >= 44",
    "12*x1**2 + 12*x4**2 + 5*x5**2 >= 44",
    "16*x0 + 12*x4 + 5*x5 >= 44",
    "12*x1 + 3*x2 + 12*x4 >= 44",
    "16*x0 + 3*x2 + 6*x6 >= 44",
    "12*x1 + 9*x3 + 5*x5 >= 44",
    "9*x3**2 + 12*x4**2 + 6*x6**2 >= 44",
    "16*x0**2 + 12*x4**2 + 6*x6**2 >= 65",
    "16*x0 + 5*x5 + 6*x6 >= 65",
    "12*x1 + 12*x4 + 6*x6 >= 65",
    "16*x0**2 + 3*x2**2 + 12*x4**2 >= 65",
    "16*x0**2 + 3*x2**2 + 9*x3**2 >= 65",
    "16*x0 + 9*x3 + 12*x4 >= 65",
    "3*x2 + 9*x3 + 5*x5 >= 65",
    "16*x0**2 + 12*x1**2 + 6*x6**2 >= 65",
    "12*x1**2 + 12*x4**2 + 5*x5**2 >= 65",
    "16*x0 + 12*x4 + 5*x5 >= 65",
    "12*x1**2 + 3*x2**2 + 12*x4**2 >= 65",
    "16*x0 + 3*x2 + 6*x6 >= 65",
    "12*x1 + 9*x3 + 5*x5 >= 65",
    "9*x3**2 + 12*x4**2 + 6*x6**2 >= 65",
    "9*x3**2 + 6*x6**2 <= 505",
    "5*x5 + 6*x6 <= 413",
    "9*x3 + 5*x5 <= 452",
    "9*x3**2 + 12*x4**2 <= 520",
    "16*x0**2 + 12*x4**2 <= 337",
    "16*x0 + 12*x1 <= 100",
    "12*x4 + 5*x5 <= 146",
    "12*x1**2 + 3*x2**2 <= 488",
    "16*x0**2 + 6*x6**2 <= 334",
    "12*x1 + 9*x3 <= 95",
    "3*x2 + 12*x4 <= 306",
    "16*x0 + 3*x2 <= 453",
    "12*x1 + 6*x6 <= 372",
    "16*x0 + 12*x4 + 6*x6 <= 510",
    "12*x1 + 9*x3 + 12*x4 <= 413",
    "3*x2 + 12*x4 + 5*x5 <= 171",
    "12*x1 + 12*x4 + 6*x6 <= 250",
    "3*x2 + 9*x3 + 6*x6 <= 154",
    "12*x1 + 9*x3 + 6*x6 <= 455",
    "16*x0**2 + 3*x2**2 + 9*x3**2 <= 227",
    "12*x1 + 3*x2 + 12*x4 <= 376",
    "12*x1 + 12*x4 + 5*x5 <= 234",
    "12*x1**2 + 3*x2**2 + 6*x6**2 <= 507",
    "16*x0 + 9*x3 + 6*x6 <= 235",
    "3*x2 + 9*x3 + 5*x5 <= 398",
    "3*x2**2 + 12*x4**2 + 6*x6**2 <= 231",
    "16*x0 + 12*x1 + 6*x6 <= 456",
    "16*x0 + 12*x1 + 12*x4 <= 84",
    "3*x2**2 + 5*x5**2 + 6*x6**2 <= 194",
    "16*x0 + 12*x1 + 3*x2 + 9*x3 + 12*x4 + 5*x5 + 6*x6 <= 194"
  ]
}
```

```python
from gurobipy import *

# Create a new model
m = Model("Work Optimization")

# Create variables
ringo = m.addVar(vtype=GRB.INTEGER, name="ringo")
jean = m.addVar(vtype=GRB.CONTINUOUS, name="jean")
mary = m.addVar(vtype=GRB.CONTINUOUS, name="mary")
laura = m.addVar(vtype=GRB.INTEGER, name="laura")
peggy = m.addVar(vtype=GRB.INTEGER, name="peggy")
john = m.addVar(vtype=GRB.CONTINUOUS, name="john")
george = m.addVar(vtype=GRB.CONTINUOUS, name="george")


# Set objective
m.setObjective(ringo**2 + 3*ringo*jean + 2*ringo*laura + 2*ringo*peggy + 5*ringo*john + 4*jean**2 + 7*jean*peggy + 5*jean*george + 7*mary*laura + 8*mary*peggy + 9*laura*peggy + 6*laura*john + 8*peggy**2 + 4*peggy*john + 3*peggy*george + john*george + 4*george**2 + 4*jean + mary + 3*john + 3*george, GRB.MAXIMIZE)

# Add constraints
ratings = {'ringo': 16, 'jean': 12, 'mary': 3, 'laura': 9, 'peggy': 12, 'john': 5, 'george': 6}

m.addConstr(ratings['laura']*laura**2 + ratings['george']*george**2 >= 25)
# ... (add all other constraints using the ratings dictionary as above)

# Add upper bound constraint based on 'r0' resource
m.addConstr(ratings['ringo']*ringo + ratings['jean']*jean + ratings['mary']*mary + ratings['laura']*laura + ratings['peggy']*peggy + ratings['john']*john + ratings['george']*george <= 525, "r0_upper_bound")


# Optimize model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print('Obj: %g' % m.objVal)
    for v in m.getVars():
        print('%s %g' % (v.varName, v.x))
elif m.status == GRB.INFEASIBLE:
    print('Optimization problem is infeasible.')
else:
    print('Optimization ended with status %d' % m.status)

```