```json
{
  "sym_variables": [
    ("x0", "hours worked by John"),
    ("x1", "hours worked by Laura"),
    ("x2", "hours worked by Bobby"),
    ("x3", "hours worked by Ringo"),
    ("x4", "hours worked by Mary"),
    ("x5", "hours worked by George")
  ],
  "objective_function": "3.33 * x0 + 2.81 * x1 + 7.48 * x2 + 5.12 * x3 + 4.1 * x4 + 9.72 * x5",
  "constraints": [
    "19 * x0 + 1 * x5 >= 27",
    "19 * x2 + 1 * x5 >= 22",
    "4 * x1 + 11 * x3 >= 22",
    "19 * x2 + 4 * x4 + 1 * x5 >= 30",
    "11 * x3 + 4 * x4 + 1 * x5 >= 30",
    "19 * x2 + 11 * x3 + 1 * x5 >= 30",
    "19 * x0 + 11 * x3 + 1 * x5 >= 30",
    "19 * x0 + 11 * x3 + 4 * x4 >= 30",
    "19 * x0 + 4 * x1 + 11 * x3 >= 30",
    "19 * x2 + 11 * x3 + 4 * x4 >= 30",
    "19 * x0 + 4 * x1 + 4 * x4 >= 30",
    "19 * x0 + 4 * x1 + 1 * x5 >= 30",
    "19 * x0 + 19 * x2 + 1 * x5 >= 30",
    "19 * x2 + 4 * x4 + 1 * x5 >= 28",
    "11 * x3 + 4 * x4 + 1 * x5 >= 28",
    "19 * x2 + 11 * x3 + 1 * x5 >= 28",
    "19 * x0 + 11 * x3 + 1 * x5 >= 28",
    "19 * x0 + 11 * x3 + 4 * x4 >= 28",
    "19 * x0 + 4 * x1 + 11 * x3 >= 28",
    "19 * x2 + 11 * x3 + 4 * x4 >= 28",
    "19 * x0 + 4 * x1 + 4 * x4 >= 28",
    "19 * x0 + 4 * x1 + 1 * x5 >= 28",
    "19 * x0 + 19 * x2 + 1 * x5 >= 28",

    "4 * x1 + 4 * x4 <= 67",
    "4 * x1 + 1 * x5 <= 100",
    "19 * x0 + 4 * x4 + 1 * x5 <= 130",
    "19 * x0 + 4 * x1 + 19 * x2 <= 100",
    "4 * x1 + 11 * x3 + 4 * x4 <= 69",
    "19 * x0 + 11 * x3 + 4 * x4 <= 197",
    "4 * x1 + 19 * x2 + 4 * x4 <= 117",
    "19 * x0 + 19 * x2 + 1 * x5 <= 82",
    "4 * x1 + 19 * x2 + 11 * x3 <= 119",
    "11 * x3 + 4 * x4 + 1 * x5 <= 178",
    "19 * x0 + 4 * x1 + 1 * x5 <= 135",
    "19 * x0 + 19 * x2 + 4 * x4 <= 69",
    "19 * x0 + 4 * x1 + 4 * x4 <= 111",
    "19 * x0 + 4 * x1 + 19 * x2 + 11 * x3 + 4 * x4 + 1 * x5 <= 111",
    "x0 >= 0", "x1 >= 0", "x2 >= 0", "x3 >= 0", "x4 >= 0", "x5 >= 0",
    "19*x0 + 4*x1 + 19*x2 + 11*x3 + 4*x4 + x5 <= 222",
    "9*x0 + 21*x1 + 8*x2 + 5*x3 + 16*x4 + 23*x5 <= 225",
    "11*x0 + 4*x1 + 8*x2 + 17*x3 + 4*x4 + 5*x5 <= 127",
    "18*x0 + 21*x1 + 12*x2 + 20*x3 + 23*x4 + 21*x5 <= 152",
    "21*x0 + 7*x1 + 9*x2 + 14*x3 + 9*x4 + 17*x5 <= 130"

    
  ]
}
```

```python
import gurobipy as gp

# Create a new model
m = gp.Model("resource_allocation")

# Create variables
x = m.addVars(6, lb=0, vtype=gp.GRB.CONTINUOUS, name=["John", "Laura", "Bobby", "Ringo", "Mary", "George"])


# Set objective
m.setObjective(3.33 * x[0] + 2.81 * x[1] + 7.48 * x[2] + 5.12 * x[3] + 4.1 * x[4] + 9.72 * x[5], gp.GRB.MAXIMIZE)

# Resource constraints
resource_constraints = {
    'r0': {'upper_bound': 222, 'coefficients': [19, 4, 19, 11, 4, 1]},
    'r1': {'upper_bound': 225, 'coefficients': [9, 21, 8, 5, 16, 23]},
    'r2': {'upper_bound': 127, 'coefficients': [11, 4, 8, 17, 4, 5]},
    'r3': {'upper_bound': 152, 'coefficients': [18, 21, 12, 20, 23, 21]},
    'r4': {'upper_bound': 130, 'coefficients': [21, 7, 9, 14, 9, 17]}
}

for resource, data in resource_constraints.items():
    m.addConstr(gp.quicksum(data['coefficients'][i] * x[i] for i in range(6)) <= data['upper_bound'], name=resource)


# Additional constraints (parsed from the input)
additional_constraints = [
    (19 * x[0] + 1 * x[5] >= 27),
    (4 * x[1] + 4 * x[4] <= 67)
    # ... (Add all other constraints here)
]

for constraint in additional_constraints:
    m.addConstr(constraint)

# Optimize model
m.optimize()

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

```