///|
pub struct QualityProfile {
  name : String
  max_errors : Int
  max_warnings : Int
  min_occupancy : Double
  max_duration : Int
  require_tags : Bool
} derive(Debug, Eq, ToJson, FromJson)

///|
pub fn QualityProfile::accepts(
  self : QualityProfile,
  report : QualityReport,
) -> Bool {
  report.errors <= self.max_errors &&
  report.warnings <= self.max_warnings &&
  report.occupancy >= self.min_occupancy &&
  report.total_duration <= self.max_duration &&
  (!self.require_tags || report.animation_count > 0)
}

///|
pub fn QualityProfile::to_json_string(
  self : QualityProfile,
  indent? : Int = 2,
) -> String {
  self.to_json().stringify(indent~)
}

///|
pub fn quality_profiles() -> Array[QualityProfile] {
  [
    {
      name: "quality_1",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 525,
      require_tags: false,
    },
    {
      name: "quality_2",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 550,
      require_tags: true,
    },
    {
      name: "quality_3",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 575,
      require_tags: false,
    },
    {
      name: "quality_4",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 600,
      require_tags: true,
    },
    {
      name: "quality_5",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 625,
      require_tags: false,
    },
    {
      name: "quality_6",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 650,
      require_tags: true,
    },
    {
      name: "quality_7",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 675,
      require_tags: false,
    },
    {
      name: "quality_8",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 700,
      require_tags: true,
    },
    {
      name: "quality_9",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 725,
      require_tags: false,
    },
    {
      name: "quality_10",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 750,
      require_tags: true,
    },
    {
      name: "quality_11",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 775,
      require_tags: false,
    },
    {
      name: "quality_12",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 800,
      require_tags: true,
    },
    {
      name: "quality_13",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 825,
      require_tags: false,
    },
    {
      name: "quality_14",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 850,
      require_tags: true,
    },
    {
      name: "quality_15",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 875,
      require_tags: false,
    },
    {
      name: "quality_16",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 900,
      require_tags: true,
    },
    {
      name: "quality_17",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 925,
      require_tags: false,
    },
    {
      name: "quality_18",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 950,
      require_tags: true,
    },
    {
      name: "quality_19",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 975,
      require_tags: false,
    },
    {
      name: "quality_20",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 1000,
      require_tags: true,
    },
    {
      name: "quality_21",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 1025,
      require_tags: false,
    },
    {
      name: "quality_22",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 1050,
      require_tags: true,
    },
    {
      name: "quality_23",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 1075,
      require_tags: false,
    },
    {
      name: "quality_24",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 1100,
      require_tags: true,
    },
    {
      name: "quality_25",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 1125,
      require_tags: false,
    },
    {
      name: "quality_26",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 1150,
      require_tags: true,
    },
    {
      name: "quality_27",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 1175,
      require_tags: false,
    },
    {
      name: "quality_28",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 1200,
      require_tags: true,
    },
    {
      name: "quality_29",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 1225,
      require_tags: false,
    },
    {
      name: "quality_30",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 1250,
      require_tags: true,
    },
    {
      name: "quality_31",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 1275,
      require_tags: false,
    },
    {
      name: "quality_32",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 1300,
      require_tags: true,
    },
    {
      name: "quality_33",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 1325,
      require_tags: false,
    },
    {
      name: "quality_34",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 1350,
      require_tags: true,
    },
    {
      name: "quality_35",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 1375,
      require_tags: false,
    },
    {
      name: "quality_36",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 1400,
      require_tags: true,
    },
    {
      name: "quality_37",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 1425,
      require_tags: false,
    },
    {
      name: "quality_38",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 1450,
      require_tags: true,
    },
    {
      name: "quality_39",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 1475,
      require_tags: false,
    },
    {
      name: "quality_40",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 1500,
      require_tags: true,
    },
    {
      name: "quality_41",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 1525,
      require_tags: false,
    },
    {
      name: "quality_42",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 1550,
      require_tags: true,
    },
    {
      name: "quality_43",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 1575,
      require_tags: false,
    },
    {
      name: "quality_44",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 1600,
      require_tags: true,
    },
    {
      name: "quality_45",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 1625,
      require_tags: false,
    },
    {
      name: "quality_46",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 1650,
      require_tags: true,
    },
    {
      name: "quality_47",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 1675,
      require_tags: false,
    },
    {
      name: "quality_48",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 1700,
      require_tags: true,
    },
    {
      name: "quality_49",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 1725,
      require_tags: false,
    },
    {
      name: "quality_50",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 1750,
      require_tags: true,
    },
    {
      name: "quality_51",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 1775,
      require_tags: false,
    },
    {
      name: "quality_52",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 1800,
      require_tags: true,
    },
    {
      name: "quality_53",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 1825,
      require_tags: false,
    },
    {
      name: "quality_54",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 1850,
      require_tags: true,
    },
    {
      name: "quality_55",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 1875,
      require_tags: false,
    },
    {
      name: "quality_56",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 1900,
      require_tags: true,
    },
    {
      name: "quality_57",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 1925,
      require_tags: false,
    },
    {
      name: "quality_58",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 1950,
      require_tags: true,
    },
    {
      name: "quality_59",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 1975,
      require_tags: false,
    },
    {
      name: "quality_60",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 2000,
      require_tags: true,
    },
    {
      name: "quality_61",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 2025,
      require_tags: false,
    },
    {
      name: "quality_62",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 2050,
      require_tags: true,
    },
    {
      name: "quality_63",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 2075,
      require_tags: false,
    },
    {
      name: "quality_64",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 2100,
      require_tags: true,
    },
    {
      name: "quality_65",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 2125,
      require_tags: false,
    },
    {
      name: "quality_66",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 2150,
      require_tags: true,
    },
    {
      name: "quality_67",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 2175,
      require_tags: false,
    },
    {
      name: "quality_68",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 2200,
      require_tags: true,
    },
    {
      name: "quality_69",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 2225,
      require_tags: false,
    },
    {
      name: "quality_70",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 2250,
      require_tags: true,
    },
    {
      name: "quality_71",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 2275,
      require_tags: false,
    },
    {
      name: "quality_72",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 2300,
      require_tags: true,
    },
    {
      name: "quality_73",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 2325,
      require_tags: false,
    },
    {
      name: "quality_74",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 2350,
      require_tags: true,
    },
    {
      name: "quality_75",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 2375,
      require_tags: false,
    },
    {
      name: "quality_76",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 2400,
      require_tags: true,
    },
    {
      name: "quality_77",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 2425,
      require_tags: false,
    },
    {
      name: "quality_78",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 2450,
      require_tags: true,
    },
    {
      name: "quality_79",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 2475,
      require_tags: false,
    },
    {
      name: "quality_80",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 2500,
      require_tags: true,
    },
    {
      name: "quality_81",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 2525,
      require_tags: false,
    },
    {
      name: "quality_82",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 2550,
      require_tags: true,
    },
    {
      name: "quality_83",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 2575,
      require_tags: false,
    },
    {
      name: "quality_84",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 2600,
      require_tags: true,
    },
    {
      name: "quality_85",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 2625,
      require_tags: false,
    },
    {
      name: "quality_86",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 2650,
      require_tags: true,
    },
    {
      name: "quality_87",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 2675,
      require_tags: false,
    },
    {
      name: "quality_88",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 2700,
      require_tags: true,
    },
    {
      name: "quality_89",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 2725,
      require_tags: false,
    },
    {
      name: "quality_90",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 2750,
      require_tags: true,
    },
    {
      name: "quality_91",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 2775,
      require_tags: false,
    },
    {
      name: "quality_92",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 2800,
      require_tags: true,
    },
    {
      name: "quality_93",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 2825,
      require_tags: false,
    },
    {
      name: "quality_94",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 2850,
      require_tags: true,
    },
    {
      name: "quality_95",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 2875,
      require_tags: false,
    },
    {
      name: "quality_96",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 2900,
      require_tags: true,
    },
    {
      name: "quality_97",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 2925,
      require_tags: false,
    },
    {
      name: "quality_98",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 2950,
      require_tags: true,
    },
    {
      name: "quality_99",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 2975,
      require_tags: false,
    },
    {
      name: "quality_100",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 3000,
      require_tags: true,
    },
    {
      name: "quality_101",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 3025,
      require_tags: false,
    },
    {
      name: "quality_102",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 3050,
      require_tags: true,
    },
    {
      name: "quality_103",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 3075,
      require_tags: false,
    },
    {
      name: "quality_104",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 3100,
      require_tags: true,
    },
    {
      name: "quality_105",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 3125,
      require_tags: false,
    },
    {
      name: "quality_106",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 3150,
      require_tags: true,
    },
    {
      name: "quality_107",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 3175,
      require_tags: false,
    },
    {
      name: "quality_108",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 3200,
      require_tags: true,
    },
    {
      name: "quality_109",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 3225,
      require_tags: false,
    },
    {
      name: "quality_110",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 3250,
      require_tags: true,
    },
    {
      name: "quality_111",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 3275,
      require_tags: false,
    },
    {
      name: "quality_112",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 3300,
      require_tags: true,
    },
    {
      name: "quality_113",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 3325,
      require_tags: false,
    },
    {
      name: "quality_114",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 3350,
      require_tags: true,
    },
    {
      name: "quality_115",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 3375,
      require_tags: false,
    },
    {
      name: "quality_116",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 3400,
      require_tags: true,
    },
    {
      name: "quality_117",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 3425,
      require_tags: false,
    },
    {
      name: "quality_118",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 3450,
      require_tags: true,
    },
    {
      name: "quality_119",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 3475,
      require_tags: false,
    },
    {
      name: "quality_120",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 3500,
      require_tags: true,
    },
    {
      name: "quality_121",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 3525,
      require_tags: false,
    },
    {
      name: "quality_122",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 3550,
      require_tags: true,
    },
    {
      name: "quality_123",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 3575,
      require_tags: false,
    },
    {
      name: "quality_124",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 3600,
      require_tags: true,
    },
    {
      name: "quality_125",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 3625,
      require_tags: false,
    },
    {
      name: "quality_126",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 3650,
      require_tags: true,
    },
    {
      name: "quality_127",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 3675,
      require_tags: false,
    },
    {
      name: "quality_128",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 3700,
      require_tags: true,
    },
    {
      name: "quality_129",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 3725,
      require_tags: false,
    },
    {
      name: "quality_130",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 3750,
      require_tags: true,
    },
    {
      name: "quality_131",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 3775,
      require_tags: false,
    },
    {
      name: "quality_132",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 3800,
      require_tags: true,
    },
    {
      name: "quality_133",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 3825,
      require_tags: false,
    },
    {
      name: "quality_134",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 3850,
      require_tags: true,
    },
    {
      name: "quality_135",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 3875,
      require_tags: false,
    },
    {
      name: "quality_136",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 3900,
      require_tags: true,
    },
    {
      name: "quality_137",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 3925,
      require_tags: false,
    },
    {
      name: "quality_138",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 3950,
      require_tags: true,
    },
    {
      name: "quality_139",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 3975,
      require_tags: false,
    },
    {
      name: "quality_140",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 4000,
      require_tags: true,
    },
    {
      name: "quality_141",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 4025,
      require_tags: false,
    },
    {
      name: "quality_142",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 4050,
      require_tags: true,
    },
    {
      name: "quality_143",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 4075,
      require_tags: false,
    },
    {
      name: "quality_144",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 4100,
      require_tags: true,
    },
    {
      name: "quality_145",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 4125,
      require_tags: false,
    },
    {
      name: "quality_146",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 4150,
      require_tags: true,
    },
    {
      name: "quality_147",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 4175,
      require_tags: false,
    },
    {
      name: "quality_148",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 4200,
      require_tags: true,
    },
    {
      name: "quality_149",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 4225,
      require_tags: false,
    },
    {
      name: "quality_150",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 4250,
      require_tags: true,
    },
    {
      name: "quality_151",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 4275,
      require_tags: false,
    },
    {
      name: "quality_152",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 4300,
      require_tags: true,
    },
    {
      name: "quality_153",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 4325,
      require_tags: false,
    },
    {
      name: "quality_154",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 4350,
      require_tags: true,
    },
    {
      name: "quality_155",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 4375,
      require_tags: false,
    },
    {
      name: "quality_156",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 4400,
      require_tags: true,
    },
    {
      name: "quality_157",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 4425,
      require_tags: false,
    },
    {
      name: "quality_158",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 4450,
      require_tags: true,
    },
    {
      name: "quality_159",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 4475,
      require_tags: false,
    },
    {
      name: "quality_160",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 4500,
      require_tags: true,
    },
    {
      name: "quality_161",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 4525,
      require_tags: false,
    },
    {
      name: "quality_162",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 4550,
      require_tags: true,
    },
    {
      name: "quality_163",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 4575,
      require_tags: false,
    },
    {
      name: "quality_164",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 4600,
      require_tags: true,
    },
    {
      name: "quality_165",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 4625,
      require_tags: false,
    },
    {
      name: "quality_166",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 4650,
      require_tags: true,
    },
    {
      name: "quality_167",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 4675,
      require_tags: false,
    },
    {
      name: "quality_168",
      max_errors: 0,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 4700,
      require_tags: true,
    },
    {
      name: "quality_169",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 4725,
      require_tags: false,
    },
    {
      name: "quality_170",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 4750,
      require_tags: true,
    },
    {
      name: "quality_171",
      max_errors: 0,
      max_warnings: 1,
      min_occupancy: 0.01,
      max_duration: 4775,
      require_tags: false,
    },
    {
      name: "quality_172",
      max_errors: 1,
      max_warnings: 2,
      min_occupancy: 0.02,
      max_duration: 4800,
      require_tags: true,
    },
    {
      name: "quality_173",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.03,
      max_duration: 4825,
      require_tags: false,
    },
    {
      name: "quality_174",
      max_errors: 0,
      max_warnings: 4,
      min_occupancy: 0.04,
      max_duration: 4850,
      require_tags: true,
    },
    {
      name: "quality_175",
      max_errors: 1,
      max_warnings: 0,
      min_occupancy: 0.05,
      max_duration: 4875,
      require_tags: false,
    },
    {
      name: "quality_176",
      max_errors: 1,
      max_warnings: 1,
      min_occupancy: 0.06,
      max_duration: 4900,
      require_tags: true,
    },
    {
      name: "quality_177",
      max_errors: 0,
      max_warnings: 2,
      min_occupancy: 0.07,
      max_duration: 4925,
      require_tags: false,
    },
    {
      name: "quality_178",
      max_errors: 1,
      max_warnings: 3,
      min_occupancy: 0.08,
      max_duration: 4950,
      require_tags: true,
    },
    {
      name: "quality_179",
      max_errors: 1,
      max_warnings: 4,
      min_occupancy: 0.09,
      max_duration: 4975,
      require_tags: false,
    },
    {
      name: "quality_180",
      max_errors: 0,
      max_warnings: 0,
      min_occupancy: 0,
      max_duration: 5000,
      require_tags: true,
    },
  ]
}

///|
pub fn quality_profile_named(name : String) -> QualityProfile? {
  match quality_profiles().search_by(fn(profile) { profile.name == name }) {
    Some(index) => Some(quality_profiles()[index])
    None => None
  }
}

///|
pub fn passing_quality_profiles(
  report : QualityReport,
) -> Array[QualityProfile] {
  quality_profiles().filter(fn(profile) { profile.accepts(report) })
}

///|
pub fn quality_profile_count() -> Int {
  quality_profiles().length()
}