```json
{
  "sym_variables": [
    ("x0", "milligrams of vitamin B12"),
    ("x1", "milligrams of vitamin B4"),
    ("x2", "milligrams of zinc"),
    ("x3", "milligrams of magnesium"),
    ("x4", "milligrams of vitamin C")
  ],
  "objective_function": "1*x0 + 5*x1 + 2*x2 + 8*x3 + 2*x4",
  "constraints": [
    "0.14*x0 + 2.31*x1 + 5.34*x2 + 4.55*x3 + 14.35*x4 <= 215",
    "0.02*x0 + 15.78*x1 + 2.92*x2 + 1.15*x3 + 8.38*x4 <= 373",
    "7.07*x0 + 6.69*x1 + 15.2*x2 + 7.38*x3 + 13.55*x4 <= 155",
    "2.31*x1 + 4.55*x3 >= 31",
    "4.55*x3 + 14.35*x4 >= 34",
    "0.14*x0 + 4.55*x3 >= 42",
    "2.31*x1 + 14.35*x4 >= 41",
    "2.31*x1 + 5.34*x2 >= 28",
    "0.14*x0 + 5.34*x2 >= 24",
    "0.14*x0 + 5.34*x2 + 14.35*x4 >= 43",
    "5.34*x2 + 4.55*x3 + 14.35*x4 >= 43",
    "2.31*x1 + 5.34*x2 + 4.55*x3 >= 43",
    "0.14*x0 + 2.31*x1 + 14.35*x4 >= 43",
    "2.31*x1 + 4.55*x3 + 14.35*x4 >= 43",
    "0.14*x0 + 5.34*x2 + 4.55*x3 >= 43",
    "0.14*x0 + 5.34*x2 <= 92",
    "2.31*x1 + 4.55*x3 <= 142",
    "5.34*x2 + 14.35*x4 <= 101",
    "2.31*x1 + 5.34*x2 <= 153",
    "0.14*x0 + 14.35*x4 <= 183",
    "0.14*x0 + 4.55*x3 <= 198",
    "5.34*x2 + 4.55*x3 <= 154",
    "4.55*x3 + 14.35*x4 <= 103",
    "2.31*x1 + 5.34*x2 + 14.35*x4 <= 178",
    "0.14*x0 + 2.31*x1 + 5.34*x2 + 4.55*x3 + 14.35*x4 <= 178",
    "0.02*x0 + 15.78*x1 <= 80",
    "1.15*x3 + 8.38*x4 <= 282",
    "0.02*x0 + 8.38*x4 <= 267",
    "2.92*x2 + 1.15*x3 <= 369",
    "0.02*x0 + 15.78*x1 + 1.15*x3 <= 285",
    "0.02*x0 + 15.78*x1 + 2.92*x2 <= 373",
    "0.02*x0 + 2.92*x2 + 8.38*x4 <= 182",
    "15.78*x1 + 1.15*x3 + 8.38*x4 <= 241",
    "15.78*x1 + 2.92*x2 + 1.15*x3 <= 169",
    "0.02*x0 + 15.78*x1 + 2.92*x2 + 1.15*x3 + 8.38*x4 <= 169",
    "7.07*x0 + 6.69*x1 <= 103",
    "7.38*x3 + 13.55*x4 <= 41",
    "15.2*x2 + 13.55*x4 <= 119",
    "15.2*x2 + 7.38*x3 <= 56",
    "6.69*x1 + 13.55*x4 <= 63",
    "7.07*x0 + 15.2*x2 <= 67",
    "7.07*x0 + 6.69*x1 + 15.2*x2 + 7.38*x3 + 13.55*x4 <= 67",
    "2.92*x2 + 8.38*x4 >= 55",
    "0.02*x0 + 8.38*x4 >= 52",
    "15.78*x1 + 1.15*x3 >= 43",
    "2.92*x2 + 1.15*x3 >= 30",
    "1.15*x3 + 8.38*x4 >= 64",
    "0.02*x0 + 15.78*x1 >= 28",
    "x4 >= 0"
  ]
}
```

```python
import gurobipy as gp

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

# Create variables
x0 = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="vitamin_B12")
x1 = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="vitamin_B4")
x2 = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="zinc")
x3 = m.addVar(lb=0, vtype=gp.GRB.CONTINUOUS, name="magnesium")
x4 = m.addVar(lb=0, vtype=gp.GRB.INTEGER, name="vitamin_C")


# Set objective function
m.setObjective(1*x0 + 5*x1 + 2*x2 + 8*x3 + 2*x4, gp.GRB.MAXIMIZE)

# Add constraints
m.addConstr(0.14*x0 + 2.31*x1 + 5.34*x2 + 4.55*x3 + 14.35*x4 <= 215, "muscle_growth_index")
m.addConstr(0.02*x0 + 15.78*x1 + 2.92*x2 + 1.15*x3 + 8.38*x4 <= 373, "digestive_support_index")
m.addConstr(7.07*x0 + 6.69*x1 + 15.2*x2 + 7.38*x3 + 13.55*x4 <= 155, "energy_stability_index")

# ... (rest of the constraints from the JSON "constraints" section)
# Example:
m.addConstr(2.31*x1 + 4.55*x3 >= 31, "c1")
# ... (add all other constraints similarly)


# 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("Model is infeasible")
else:
    print("Optimization ended with status %d" % m.status)

```