{
 "firmware": "FiMba-1",
 "slug": "fimba",
 "author": "jadamsowers (FiMba-1); Charles Vestal (FoMni and X0X); Leo Kuroshita / Hügelton Instruments (Felucca platform)",
 "repo": "https://github.com/jadamsowers/fm1-fimba",
 "licence": "GPL-3.0-only",
 "closed_source": false,
 "mapped_release": "v0.6.1",
 "mapped_commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
 "release_date": "2026-10-13",
 "date_mapped": "2026-10-17",
 "status": "Independently checked: zero errors in round 3 (2026-10-17), after the round-1 and round-2 fixes. No device testing.",
 "version_note": "v0.6.1 is a GitHub pre-release; the community hub marks FiMba-1 beta.",
 "turns_it_into": "A modelled kalimba with alternate tine layouts, rolled chords, four mbira patterns, and grain, delay and reverb effects.",
 "docs": [
  {
   "title": "FiMba-1 README",
   "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/README.md",
   "words": 6065,
   "read_at": "2026-10-17",
   "word_count_method": "Whitespace-separated Markdown tokens."
  }
 ],
 "install": {
  "official": "https://github.com/jadamsowers/fm1-fimba/releases/tag/v0.6.1",
  "hub": "https://thefirmwarehub.com/",
  "official_installer": "https://jadamsowers.github.io/fm1-fimba/#install"
 },
 "part_id_notes": "SEL is the printed button between FX and ENV. PLAY means grain freeze, REC means palm mute, and ARP means a preset mbira pattern. Buttons act on release except PLAY and REC, which act on press; timed holds consume their release. Page modes and playing modes are independent: a layout or black-key mode applies on every normal page. The any mode means normal operation; reset confirmation, calibration, safe mode and updates override it where specified. Encoders have no push action and no held-button alternate assignment. LEDs use lights.button_<part> and lights.key_lights; groups.key_lights lists the 27 shared key-light parts. jack_usb is the reconciled USB-C part.",
 "modes": [
  {
   "id": "tine",
   "name": "Tine page",
   "how_to_get_there": "Use HOME.",
   "what_it_is": "KNOB 1–4: Material, Hardness, Decay and Tone.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "24-27",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "30",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L30"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "435-460",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L460"
    }
   ]
  },
  {
   "id": "character",
   "name": "Character page",
   "how_to_get_there": "Use HOME again from Tine.",
   "what_it_is": "KNOB 1–4: Worn, Glide, Tuning and Release.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "24-27",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "31",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L31"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "435-460",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L460"
    }
   ]
  },
  {
   "id": "body",
   "name": "Body page",
   "how_to_get_there": "Use ENV.",
   "what_it_is": "KNOB 1–4: Body, Buzz, Wah and Wah rate.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "24-27",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "32",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L32"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "435-460",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L460"
    }
   ]
  },
  {
   "id": "space",
   "name": "Space page",
   "how_to_get_there": "Use FX.",
   "what_it_is": "KNOB 1–4: Reverb, Size, Delay and Time.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "24-27",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "33",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L33"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "435-460",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L460"
    }
   ]
  },
  {
   "id": "color",
   "name": "Color page",
   "how_to_get_there": "Use FX again from Space.",
   "what_it_is": "KNOB 1–4: Tape, Lo-fi, Chorus and Filter.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "24-27",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "34",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L34"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "435-460",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L460"
    }
   ]
  },
  {
   "id": "grain",
   "name": "Grain page",
   "how_to_get_there": "Use LFO.",
   "what_it_is": "KNOB 1–4: Grains, Grain ms, Density and Pitch.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "24-27",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "35",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L35"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "435-460",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L460"
    }
   ]
  },
  {
   "id": "spread",
   "name": "Spread page",
   "how_to_get_there": "Use LFO again from Grain.",
   "what_it_is": "KNOB 1–4: Spray, Feedback and Width; KNOB 4 is unused.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "24-27",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "36",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L36"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "435-460",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L460"
    }
   ]
  },
  {
   "id": "keys",
   "name": "Keys page",
   "how_to_get_there": "Use SEL with Tine or Mirror selected.",
   "what_it_is": "KNOB 1–4: Layout, Scale, Key and Black.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "24-27",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "37",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L37"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "435-460",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L460"
    }
   ]
  },
  {
   "id": "play",
   "name": "Play page",
   "how_to_get_there": "Use SEL again from Keys.",
   "what_it_is": "KNOB 1–4: Strum ms and Octave; KNOB 3 and 4 are unused.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "24-27",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "38",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L38"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "435-460",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L460"
    }
   ]
  },
  {
   "id": "pattern",
   "name": "Pattern page",
   "how_to_get_there": "Use SEQ, or hold ARP for 0.5 seconds.",
   "what_it_is": "KNOB 1–4: Pattern and Tempo; KNOB 3 and 4 are unused.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "24-27",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "39",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L39"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "435-460",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L460"
    }
   ]
  },
  {
   "id": "setup",
   "name": "Setup page",
   "how_to_get_there": "Use GLO.",
   "what_it_is": "KNOB 1–4: Tune, MIDI ch, MIDI out and Theme, with version and audio-load readouts.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "24-27",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "40",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L40"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "435-460",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L460"
    }
   ]
  },
  {
   "id": "keys_keyboard",
   "name": "Keys page in Keyboard",
   "how_to_get_there": "Choose Keyboard with Keys KNOB 1.",
   "what_it_is": "KNOB 1–4 become Layout, Transpose, Octave and unused.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "46-47",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L46-L47"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "231-234",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L231-L234"
    }
   ]
  },
  {
   "id": "tine_layout",
   "name": "Tine layout",
   "how_to_get_there": "Keys KNOB 1: Tine.",
   "what_it_is": "Sixteen white keys alternate scale degrees out from white key 9.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/dsp/kalimba.c",
     "lines": "78-108",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "330-338",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
    }
   ]
  },
  {
   "id": "mirror_layout",
   "name": "Mirror layout",
   "how_to_get_there": "Keys KNOB 1: Mirror.",
   "what_it_is": "The tine layout reflected left to right, centred on white key 8.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/dsp/kalimba.c",
     "lines": "78-108",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "330-338",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
    }
   ]
  },
  {
   "id": "keyboard_layout",
   "name": "Keyboard, pattern off",
   "how_to_get_there": "Keys KNOB 1: Keyboard; stop ARP if running.",
   "what_it_is": "All keys play their printed pitches, shifted by Transpose and Octave.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "330-348",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/dsp/kalimba.c",
     "lines": "107-108",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
    }
   ]
  },
  {
   "id": "chords",
   "name": "Tine or Mirror: Chords, pattern off",
   "how_to_get_there": "Keys KNOB 4: Chords; stop ARP if running.",
   "what_it_is": "Black keys roll four-note chords using the chosen scale and key.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "351-361",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/dsp/kalimba.c",
     "lines": "112-126",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
    }
   ]
  },
  {
   "id": "chords_pattern",
   "name": "Tine or Mirror: Chords, pattern on",
   "how_to_get_there": "Choose Chords and tap ARP.",
   "what_it_is": "Black keys select the latched pattern chord instead of rolling it; white keys still play.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "330-361",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L361"
    }
   ]
  },
  {
   "id": "sharps",
   "name": "Tine or Mirror: Sharps",
   "how_to_get_there": "Keys KNOB 4: Sharps.",
   "what_it_is": "Each black key raises the tine of its left white neighbour by a semitone.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "363-366",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
    }
   ]
  },
  {
   "id": "perform",
   "name": "Tine or Mirror: Perform",
   "how_to_get_there": "Keys KNOB 4: Perform.",
   "what_it_is": "Black keys mute, cover the hole, freeze, shift octave or select material.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "368-393",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L368-L393"
    }
   ]
  },
  {
   "id": "keyboard_pattern",
   "name": "Keyboard, pattern on",
   "how_to_get_there": "Choose Keyboard and tap ARP.",
   "what_it_is": "A fresh hand of keys builds a latched pattern chord of up to six pitches.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "317-347",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "590-607",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/dsp/kalimba.h",
     "lines": "109-112",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
    }
   ]
  },
  {
   "id": "reset_confirm",
   "name": "Reset question",
   "how_to_get_there": "Hold SAVE until RESET? appears after 1.5 seconds; its five-second timer starts at appearance, then release the first hold.",
   "what_it_is": "Release SAVE again before the timer expires to confirm, even if that second press was held; another button action cancels except an ARP hold, and a key cancels while still playing.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "403-444",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L403-L444"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "583-592",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L583-L592"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "424-430",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L424-L430"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/ui.c",
     "lines": "563-589",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L589"
    }
   ]
  },
  {
   "id": "calibration",
   "name": "Hardware calibration",
   "how_to_get_there": "Hold both OCT buttons while powering on.",
   "what_it_is": "Teach each button and clockwise encoder turn; completion saves the map, while 30 seconds idle at a prompt abandons it.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/panel.c",
     "lines": "46-109",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L46-L109"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "299-301",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L299-L301"
    }
   ]
  },
  {
   "id": "safe",
   "name": "Safe mode",
   "how_to_get_there": "Two failed starts enter this automatically.",
   "what_it_is": "Audio is disabled and USB accepts reinstallation; PLAY retries normal boot.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "177-228",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L177-L228"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "372-385",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L372-L385"
    }
   ]
  },
  {
   "id": "update",
   "name": "Update screens",
   "how_to_get_there": "Start an install over USB, or hold both OCT buttons for more than five seconds.",
   "what_it_is": "USB installation has progress messages; the OCT hold enters the chip updater.",
   "source": [
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/main.c",
     "lines": "104-122",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/main.c#L104-L122"
    },
    {
     "kind": "source",
     "repo": "jadamsowers/fm1-fimba",
     "ref": "v0.6.1",
     "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
     "path": "firmware/src/app/main_fm1.c",
     "lines": "321-349",
     "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L321-L349"
    }
   ]
  }
 ],
 "controls": {
  "button_home": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Opens Tine from another page group, or alternates Tine and Character within its own group.",
    "short_label": "TINE PAGES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-458",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L458"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Opens Body.",
    "short_label": "BODY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-458",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L458"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Opens Space from another page group, or alternates Space and Color within its own group.",
    "short_label": "SPACE/COLOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-458",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L458"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Opens Grain from another page group, or alternates Grain and Spread within its own group.",
    "short_label": "GRAIN/SPREAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-458",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L458"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Opens Keys from another page group, or alternates Keys and Play within its own group.",
    "short_label": "KEYS / PLAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-458",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L458"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Opens Pattern without starting or stopping it.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-458",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L458"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Opens Setup.",
    "short_label": "SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-458",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L458"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Advances through Tine, Character, Body, Space, Color, Grain, Spread, Keys, Play, Pattern and Setup, then returns to Tine.",
    "short_label": "NEXT PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "460",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L460"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Toggles grain recording between frozen and live without stopping the pattern or clearing the recorded audio.",
    "short_label": "FREEZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "271-275",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L271-L275"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "461",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L461"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "573-574",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L573-L574"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "safe",
    "gesture": "press",
    "action": "After the safe screen has been up for half a second, clears the failed-start counter and reboots to try normal operation again.",
    "short_label": "RETRY BOOT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "199-218",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L199-L218"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "press",
    "action": "Damps every tine and cancels pending chord-roll plucks while effect tails and the pattern can continue.",
    "short_label": "PALM MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "462-465",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L462-L465"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1357-1361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1357-L1361"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "After a tap shorter than 0.5 seconds, starts or stops the preset pattern using the last chord, or a default tonic chord if none was chosen.",
    "short_label": "PATTERN RUN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "293-314",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L293-L314"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "466",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L466"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "569-581",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L569-L581"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "After 0.5 seconds, opens Pattern and consumes the release without toggling playback.",
    "short_label": "PATTERN PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "42",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L42"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "579-581",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L579-L581"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Releasing an ARP tap shorter than 0.5 seconds cancels the reset question and consumes the usual pattern-toggle action.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-581",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L581"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "438-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L438-L444"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "long_press",
    "action": "After 0.5 seconds, opens Pattern without cancelling the reset question and consumes the release without toggling playback.",
    "short_label": "PATTERN HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "579-589",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L579-L589"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Moves the saved octave down by one within −2 to +2 and marks the setup for autosave.",
    "short_label": "OCT -",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-181",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L181"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "467-469",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L467-L469"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "24",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_up",
    "action": "Holding both octave buttons for more than five seconds enters the chip updater without saving pending edits, with a countdown after two seconds and early release to cancel, so press and release SAVE before starting the hold.",
    "short_label": "UPDATE HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "321-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L321-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "165-175",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L165-L175"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "1020",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1020"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "action": "Holding both octave buttons during power-on opens hardware calibration, which writes the learned panel map only after all prompts finish and has no separate final confirmation or undo.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "299-301",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L299-L301"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "46-109",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L46-L109"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "Moves the saved octave up by one within −2 to +2 and marks the setup for autosave.",
    "short_label": "OCT +",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-181",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L181"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "467-469",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L467-L469"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "24",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L24"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "press_while_holding:button_oct_down",
    "action": "Holding both octave buttons for more than five seconds enters the chip updater without saving pending edits, with a countdown after two seconds and early release to cancel, so press and release SAVE before starting the hold.",
    "short_label": "UPDATE HOLD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "321-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L321-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "165-175",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L165-L175"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "1020",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1020"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "action": "Holding both octave buttons during power-on opens hardware calibration, which writes the learned panel map only after all prompts finish and has no separate final confirmation or undo.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "299-301",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L299-L301"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "46-109",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L46-L109"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Cancels the reset question and consumes this button action without changing its usual target.",
    "short_label": "KEEP SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "435-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L435-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L577"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "release",
    "action": "A short tap writes the entire setup immediately without a question or undo, even during sound or with no edits, and reports success only after verification.",
    "short_label": "SAVE SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "471-477",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L471-L477"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "571-577",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L571-L577"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/project.c",
      "lines": "45",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/project.c#L45"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/storage.c",
      "lines": "112-147",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/storage.c#L112-L147"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "long_press",
    "action": "At 1.5 seconds, opens the reset question and starts its five-second timer immediately, consuming this first release without itself resetting or saving settings.",
    "short_label": "RESET SOUND",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "42-44",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L42-L44"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "583-586",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L583-L586"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "424-430",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L424-L430"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "release",
    "action": "Releasing SAVE again before five seconds have passed since RESET? appeared, whether tapped or held, restores all parameters except Tune, MIDI ch, MIDI out and Theme, stops the pattern, unfreezes grains and marks the result for later autosave or another SAVE, without undo.",
    "short_label": "RESET YES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "403-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L403-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "583-589",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L583-L589"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "424-430",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L424-L430"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "438-444",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L438-L444"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-589",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L589"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "press",
    "action": "When this printed button is requested, assigns the next unused physical button to it; only finishing all prompts writes the panel map, without another question or undo.",
    "short_label": "TEACH BUTTON",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "6-7",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L6-L7"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "60-76",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L60-L76"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "102-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
     }
    ]
   }
  ],
  "encoder_select": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Steps among Steel, Brass, Bronze, Aluminium, Bamboo and Glass, clamped at either end, and marks the setup for autosave.",
    "short_label": "MATERIAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "612-615",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L612-L615"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-181",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L181"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "16-17",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L16-L17"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "36-43",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L36-L43"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When this encoder is requested, records its physical identity and clockwise direction; only finishing every prompt saves calibration immediately, without another question or undo.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "8-9",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L8-L9"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L78-L108"
     }
    ]
   }
  ],
  "encoder_algorithm": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Steps through the twelve scales without wrapping and marks the setup for autosave, including the stored scale while Keyboard layout is active.",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "616-619",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L616-L619"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-181",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L181"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "54-66",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L54-L66"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When this encoder is requested, records its physical identity and clockwise direction; only finishing every prompt saves calibration immediately, without another question or undo.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "8-9",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L8-L9"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L78-L108"
     }
    ]
   }
  ],
  "encoder_presets": [
   {
    "mode": "tine_layout",
    "gesture": "turn",
    "action": "Changes the tonic C–B with wrapping and marks the setup for autosave.",
    "short_label": "KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "620-627",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L620-L627"
     }
    ]
   },
   {
    "mode": "mirror_layout",
    "gesture": "turn",
    "action": "Changes the tonic C–B with wrapping and marks the setup for autosave.",
    "short_label": "KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "620-627",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L620-L627"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "turn",
    "action": "Changes Keyboard transpose within −12 to +12 semitones and marks the setup for autosave.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "620-627",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L620-L627"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "24",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L24"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "turn",
    "action": "Changes Keyboard transpose within −12 to +12 semitones and marks the setup for autosave.",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "620-627",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L620-L627"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "24",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L24"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When this encoder is requested, records its physical identity and clockwise direction; only finishing every prompt saves calibration immediately, without another question or undo.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "8-9",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L8-L9"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L78-L108"
     }
    ]
   }
  ],
  "encoder_knob1": [
   {
    "mode": "tine",
    "gesture": "turn",
    "action": "Selects the tine material from Steel, Brass, Bronze, Aluminium, Bamboo and Glass (default Steel).",
    "short_label": "MATERIAL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "30",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L30"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "17",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L17"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "389-415",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L389-L415"
     }
    ]
   },
   {
    "mode": "character",
    "gesture": "turn",
    "action": "Sets repeatable tine-to-tine wear and pitch variation from 0 to 100 (default 0).",
    "short_label": "WORN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "31",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L31"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "344-400",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L344-L400"
     }
    ]
   },
   {
    "mode": "body",
    "gesture": "turn",
    "action": "Chooses None, Board, Box or Gourd (default Box).",
    "short_label": "BODY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "32",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L32"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "18",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L18"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "580-590",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L580-L590"
     }
    ]
   },
   {
    "mode": "space",
    "gesture": "turn",
    "action": "Sets the amount sent to the plate reverb from 0 to 100 (default 30).",
    "short_label": "REVERB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "33",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L33"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "19",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L19"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1216-1220",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1216-L1220"
     }
    ]
   },
   {
    "mode": "color",
    "gesture": "turn",
    "action": "Sets tape pitch movement and saturation from 0 to 100 (default 0).",
    "short_label": "TAPE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "34",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L34"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "25",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L25"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1010-1029",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1010-L1029"
     }
    ]
   },
   {
    "mode": "grain",
    "gesture": "turn",
    "action": "Sets grain-cloud level from 0 to 100 (default 0).",
    "short_label": "GRAINS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "35",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L35"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "20",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L20"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1224",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1224"
     }
    ]
   },
   {
    "mode": "spread",
    "gesture": "turn",
    "action": "Sets the grains’ position, timing, pitch and pan scatter from 0 to 100 (default 30).",
    "short_label": "SPRAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "36",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L36"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "22",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L22"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "855-898",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L855-L898"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "turn",
    "action": "Chooses Tine, Keyboard or Mirror for the keys (default Tine).",
    "short_label": "LAYOUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "37",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L37"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "21",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L21"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "turn",
    "action": "Sets the spacing between rolled chord notes from 0 to 120 ms (default 30 ms).",
    "short_label": "STRUM ms",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "38",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L38"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "22",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L22"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Selects Thumbs, Cascade, 3 over 2 or Interlock (default Thumbs).",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "39",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L39"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "26",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L26"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1144-1192",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1144-L1192"
     }
    ]
   },
   {
    "mode": "setup",
    "gesture": "turn",
    "action": "Fine-tunes the instrument from −50 to +50 cents (default 0).",
    "short_label": "TUNE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "40",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L40"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "23",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L23"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1209-1211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1209-L1211"
     }
    ]
   },
   {
    "mode": "keys_keyboard",
    "gesture": "turn",
    "action": "Chooses Tine, Keyboard or Mirror for the keys (default Tine).",
    "short_label": "LAYOUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "46-47",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L46-L47"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "231-234",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L231-L234"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "21",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L21"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When this encoder is requested, records its physical identity and clockwise direction; only finishing every prompt saves calibration immediately, without another question or undo.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "8-9",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L8-L9"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L78-L108"
     }
    ]
   }
  ],
  "encoder_knob2": [
   {
    "mode": "tine",
    "gesture": "turn",
    "action": "Sets pluck hardness from 0 to 100 (default 45).",
    "short_label": "HARDNESS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "30",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L30"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "17",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L17"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "479-517",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L479-L517"
     }
    ]
   },
   {
    "mode": "character",
    "gesture": "turn",
    "action": "Sets the pluck’s initial sharp pitch movement from 0 to 100 (default 30).",
    "short_label": "GLIDE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "31",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L31"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "26",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L26"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "502-512",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L502-L512"
     }
    ]
   },
   {
    "mode": "body",
    "gesture": "turn",
    "action": "Sets body-buzzer strength from 0 to 100 (default 0).",
    "short_label": "BUZZ",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "32",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L32"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "18",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L18"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1213-1215",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1213-L1215"
     }
    ]
   },
   {
    "mode": "space",
    "gesture": "turn",
    "action": "Sets reverb decay from 0 to 100 (default 60).",
    "short_label": "SIZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "33",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L33"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "19",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L19"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1216-1220",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1216-L1220"
     }
    ]
   },
   {
    "mode": "color",
    "gesture": "turn",
    "action": "Sets treble loss, stereo narrowing and hiss from 0 to 100 (default 0).",
    "short_label": "LO-FI",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "34",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L34"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "25",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L25"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1030-1038",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1030-L1038"
     }
    ]
   },
   {
    "mode": "grain",
    "gesture": "turn",
    "action": "Sets grain duration from 20 to 500 ms (default 140 ms).",
    "short_label": "GRAIN ms",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "35",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L35"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "20",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L20"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "855-898",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L855-L898"
     }
    ]
   },
   {
    "mode": "spread",
    "gesture": "turn",
    "action": "Sets delay feedback from 0 to 95 (default 45).",
    "short_label": "FEEDBACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "36",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L36"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "22",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L22"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1223",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1223"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "turn",
    "action": "Chooses Major, Minor, Penta, Penta m, Dorian, Mixolyd., Lydian, Harm. m, Hirajoshi, Blues, Mbira or Chromatic (default Major).",
    "short_label": "SCALE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "37",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L37"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "21",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L21"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "turn",
    "action": "Sets the saved octave from −2 to +2 (default 0).",
    "short_label": "OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "38",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L38"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "24",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L24"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Sets internal pattern tempo from 40 to 200 BPM while incoming MIDI clock can take over (default 96 BPM).",
    "short_label": "TEMPO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "39",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L39"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "26",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L26"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1174-1192",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1174-L1192"
     }
    ]
   },
   {
    "mode": "setup",
    "gesture": "turn",
    "action": "Chooses Omni or MIDI receive channel 1–16 (default Omni).",
    "short_label": "MIDI CH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "40",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L40"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "23",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L23"
     }
    ]
   },
   {
    "mode": "keys_keyboard",
    "gesture": "turn",
    "action": "Shifts Keyboard pitches from −12 to +12 semitones (default 0).",
    "short_label": "TRANSPOSE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "46-47",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L46-L47"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "231-234",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L231-L234"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "24",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L24"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When this encoder is requested, records its physical identity and clockwise direction; only finishing every prompt saves calibration immediately, without another question or undo.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "8-9",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L8-L9"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L78-L108"
     }
    ]
   }
  ],
  "encoder_knob3": [
   {
    "mode": "tine",
    "gesture": "turn",
    "action": "Sets tine decay from 0 to 100 (default 50).",
    "short_label": "DECAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "30",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L30"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "17",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L17"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "389-415",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L389-L415"
     }
    ]
   },
   {
    "mode": "character",
    "gesture": "turn",
    "action": "Chooses Equal or Just tuning, leaving off-grid Mbira pitches unchanged (default Equal).",
    "short_label": "TUNING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "31",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L31"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "26",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L26"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "92-98",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L92-L98"
     }
    ]
   },
   {
    "mode": "body",
    "gesture": "turn",
    "action": "Sets sound-hole coverage, or the flutter depth when Wah rate is active, from 0 to 100 on Box or Gourd (default 0).",
    "short_label": "WAH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "32",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L32"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "18",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L18"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "609-643",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L609-L643"
     }
    ]
   },
   {
    "mode": "space",
    "gesture": "turn",
    "action": "Sets delay level from 0 to 100 (default 0).",
    "short_label": "DELAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "33",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L33"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "19",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L19"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1221-1223",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1221-L1223"
     }
    ]
   },
   {
    "mode": "color",
    "gesture": "turn",
    "action": "Sets stereo chorus amount from 0 to 100 (default 0).",
    "short_label": "CHORUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "34",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L34"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "25",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L25"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1041-1048",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1041-L1048"
     }
    ]
   },
   {
    "mode": "grain",
    "gesture": "turn",
    "action": "Sets grain starts from 1 to 60 per second (default 14).",
    "short_label": "DENSITY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "35",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L35"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "20",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L20"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1643-1650",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1643-L1650"
     }
    ]
   },
   {
    "mode": "spread",
    "gesture": "turn",
    "action": "Sets the stereo spread of tines, grains and delay from 0 to 100 (default 70).",
    "short_label": "WIDTH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "36",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L36"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "23",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L23"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1225",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1225"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "turn",
    "action": "Selects the tine tonic from C to B without wrapping (default C).",
    "short_label": "KEY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "37",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L37"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "21",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L21"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "38",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L38"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "202-206",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L202-L206"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "39",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L39"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "202-206",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L202-L206"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     }
    ]
   },
   {
    "mode": "setup",
    "gesture": "turn",
    "action": "Enables or disables key-note output over USB on the selected channel, using channel 1 for Omni (default Off).",
    "short_label": "MIDI OUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "40",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L40"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "23",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L23"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "235-244",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L235-L244"
     }
    ]
   },
   {
    "mode": "keys_keyboard",
    "gesture": "turn",
    "action": "Sets the saved octave from −2 to +2 (default 0).",
    "short_label": "OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "46-47",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L46-L47"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "231-234",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L231-L234"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "24",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L24"
     }
    ]
   },
   {
    "mode": "body",
    "gesture": "turn",
    "action": "With None or Board selected, leaves the wah setting unchanged and shows NO HOLE because the body has no sound hole.",
    "short_label": "NO HOLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "199-209",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L199-L209"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "590",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L590"
     }
    ],
    "condition": "Body is None or Board; this overrides the ordinary Wah entry."
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When this encoder is requested, records its physical identity and clockwise direction; only finishing every prompt saves calibration immediately, without another question or undo.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "8-9",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L8-L9"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L78-L108"
     }
    ]
   }
  ],
  "encoder_knob4": [
   {
    "mode": "tine",
    "gesture": "turn",
    "action": "Sets overtone sustain from 0 to 100 (default 55).",
    "short_label": "TONE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "30",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L30"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "17",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L17"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "389-425",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L389-L425"
     }
    ]
   },
   {
    "mode": "character",
    "gesture": "turn",
    "action": "Chooses Ring or Damp when a played key is released (default Ring).",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "31",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L31"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "22",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L22"
     }
    ]
   },
   {
    "mode": "body",
    "gesture": "turn",
    "action": "Sets sound-hole flutter from Off to 100 on Box or Gourd (default Off).",
    "short_label": "WAH RATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "32",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L32"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "18",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L18"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "619-627",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L619-L627"
     }
    ]
   },
   {
    "mode": "space",
    "gesture": "turn",
    "action": "Sets ping-pong delay time from 40 to 740 ms (default 330 ms).",
    "short_label": "TIME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "33",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L33"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "19",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L19"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1221-1223",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1221-L1223"
     }
    ]
   },
   {
    "mode": "color",
    "gesture": "turn",
    "action": "Sweeps from low-pass at −100 through Off at 0 to high-pass at +100 (default Off).",
    "short_label": "FILTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "34",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L34"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "25",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L25"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "935-956",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L935-L956"
     }
    ]
   },
   {
    "mode": "grain",
    "gesture": "turn",
    "action": "Chooses grain pitch −12, −7, 0, +7, +12 or +19 semitones, Shimmer or Reverse (default +12).",
    "short_label": "PITCH",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "35",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L35"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "20",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L20"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "855-891",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L855-L891"
     }
    ]
   },
   {
    "mode": "spread",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "36",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L36"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "202-206",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L202-L206"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "turn",
    "action": "Assigns black keys to Chords, Sharps or Perform (default Chords).",
    "short_label": "BLACK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "37",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L37"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "21",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L21"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "38",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L38"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "202-206",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L202-L206"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "turn",
    "action": "Does nothing on this page.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "39",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L39"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "202-206",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L202-L206"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     }
    ]
   },
   {
    "mode": "setup",
    "gesture": "turn",
    "action": "Chooses Light or Dark screen colours (default Light).",
    "short_label": "THEME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "40",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L40"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-211",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L211"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "629-635",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L629-L635"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L27"
     }
    ]
   },
   {
    "mode": "keys_keyboard",
    "gesture": "turn",
    "action": "Does nothing on the Keys page in Keyboard layout.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "46-47",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L46-L47"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "202-206",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L202-L206"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "231-234",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L231-L234"
     }
    ]
   },
   {
    "mode": "body",
    "gesture": "turn",
    "action": "With None or Board selected, leaves the wah setting unchanged and shows NO HOLE because the body has no sound hole.",
    "short_label": "NO HOLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "199-209",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L199-L209"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "590",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L590"
     }
    ],
    "condition": "Body is None or Board; this overrides the ordinary Wah entry."
   },
   {
    "mode": "calibration",
    "gesture": "turn_cw",
    "action": "When this encoder is requested, records its physical identity and clockwise direction; only finishing every prompt saves calibration immediately, without another question or undo.",
    "short_label": "TEACH KNOB",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "8-9",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L8-L9"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L78-L108"
     }
    ]
   }
  ],
  "knob_master": [
   {
    "mode": "any",
    "gesture": "turn",
    "action": "Sets the final output volume, including the audio sent to USB, without changing a saved setup value.",
    "short_label": "VOLUME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "312-319",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L312-L319"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "28-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L28-L41"
     }
    ]
   }
  ],
  "key_f3": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks D6 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE D6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 1
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks C6 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE C6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 1
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed F3 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "F3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_g3": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks B5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE B5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 2
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks A5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE A5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 2
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed G3 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "G3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_a3": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks G5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 3
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks F5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 3
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed A3 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "A3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_b3": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks E5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 4
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks D5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 4
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed B3 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "B3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_c4": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks C5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 5
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks B4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 5
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed C4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_d4": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks A4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 6
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks G4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 6
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed D4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_e4": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks F4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 7
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks E4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 7
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed E4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_f4": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks D4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 8
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks C4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 8
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed F4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_g4": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks C4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE C4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 9
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks D4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE D4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 9
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed G4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_a4": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks E4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE E4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 10
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks F4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE F4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 10
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed A4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_b4": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks G4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE G4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 11
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks A4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE A4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 11
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed B4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_c5": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks B4 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE B4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 12
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks C5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 12
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed C5 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "C5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_d5": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks D5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 13
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks E5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 13
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed D5 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "D5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_e5": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks F5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 14
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks G5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 14
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed E5 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "E5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_f5": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks A5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE A5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 15
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks B5 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE B5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 15
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed F5 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "F5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_g5": [
   {
    "mode": "tine_layout",
    "gesture": "press",
    "action": "Plucks C6 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE C6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 16
   },
   {
    "mode": "mirror_layout",
    "gesture": "press",
    "action": "Plucks D6 at default C major and octave 0, with pitch following the chosen scale, key, octave and tuning even while a pattern runs.",
    "short_label": "TINE D6",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "223-230",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L223-L230"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "78-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L78-L108"
     }
    ],
    "white_number": 16
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_cs4",
    "action": "Plucks this tine one octave below the saved octave while the performance octave key is held.",
    "short_label": "TINE -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press_while_holding:key_ds4",
    "action": "Plucks this tine one octave above the saved octave while the performance octave key is held.",
    "short_label": "TINE +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-391",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L391"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed G5 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "G5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   }
  ],
  "key_fs3": [
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed F#3 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "F#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   },
   {
    "mode": "chords",
    "gesture": "press",
    "action": "Rolls the scale’s I chord, C in default C major, as four plucks spaced by Strum ms with the current octave and tuning.",
    "short_label": "CHORD I",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "112-126",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
     }
    ],
    "black_number": 1
   },
   {
    "mode": "chords_pattern",
    "gesture": "press",
    "action": "Selects the scale’s I chord for the pattern without a chord roll, keeping it after release until another chord is selected.",
    "short_label": "PATTERN I",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "284-291",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L284-L291"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-356",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1392-1404",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1392-L1404"
     }
    ]
   },
   {
    "mode": "sharps",
    "gesture": "press",
    "action": "Plucks a semitone above white key 1 from the left in the current Tine or Mirror layout, with octave and tuning applied.",
    "short_label": "RAISED TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "51-54",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L51-L54"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "363-366",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "219-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L219-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "Damps every tine and cancels pending rolled notes without stopping pattern playback or clearing effect tails.",
    "short_label": "PALM MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "368-370",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L368-L370"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1357-1361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1357-L1361"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Does nothing further after the palm mute.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     }
    ]
   }
  ],
  "key_gs3": [
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed G#3 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "G#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   },
   {
    "mode": "chords",
    "gesture": "press",
    "action": "Rolls the scale’s ii chord, Dm in default C major, as four plucks spaced by Strum ms with the current octave and tuning.",
    "short_label": "CHORD ii",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "112-126",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
     }
    ],
    "black_number": 2
   },
   {
    "mode": "chords_pattern",
    "gesture": "press",
    "action": "Selects the scale’s ii chord for the pattern without a chord roll, keeping it after release until another chord is selected.",
    "short_label": "PATTERN ii",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "284-291",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L284-L291"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-356",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1392-1404",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1392-L1404"
     }
    ]
   },
   {
    "mode": "sharps",
    "gesture": "press",
    "action": "Plucks a semitone above white key 2 from the left in the current Tine or Mirror layout, with octave and tuning applied.",
    "short_label": "RAISED TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "51-54",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L51-L54"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "363-366",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "219-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L219-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "Covers the sound hole while held on Box or Gourd, adding to the knob and MIDI hole controls.",
    "short_label": "COVER HOLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "371-372",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L371-L372"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "590-619",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L590-L619"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Removes this key’s hole coverage while leaving the knob and MIDI hole controls in effect.",
    "short_label": "UNCOVER HOLE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "590-619",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L590-L619"
     }
    ]
   }
  ],
  "key_as3": [
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed A#3 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "A#3",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   },
   {
    "mode": "chords",
    "gesture": "press",
    "action": "Rolls the scale’s iii chord, Em in default C major, as four plucks spaced by Strum ms with the current octave and tuning.",
    "short_label": "CHORD iii",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "112-126",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
     }
    ],
    "black_number": 3
   },
   {
    "mode": "chords_pattern",
    "gesture": "press",
    "action": "Selects the scale’s iii chord for the pattern without a chord roll, keeping it after release until another chord is selected.",
    "short_label": "PATTERN iii",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "284-291",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L284-L291"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-356",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1392-1404",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1392-L1404"
     }
    ]
   },
   {
    "mode": "sharps",
    "gesture": "press",
    "action": "Plucks a semitone above white key 3 from the left in the current Tine or Mirror layout, with octave and tuning applied.",
    "short_label": "RAISED TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "51-54",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L51-L54"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "363-366",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "219-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L219-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "Toggles the grain buffer between frozen and live; releasing this key leaves that state latched.",
    "short_label": "FREEZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "373-374",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L373-L374"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "271-275",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L271-L275"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Leaves the latched freeze or material choice unchanged.",
    "short_label": "KEEP CHOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     }
    ]
   }
  ],
  "key_cs4": [
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed C#4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "C#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   },
   {
    "mode": "chords",
    "gesture": "press",
    "action": "Rolls the scale’s IV chord, F in default C major, as four plucks spaced by Strum ms with the current octave and tuning.",
    "short_label": "CHORD IV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "112-126",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
     }
    ],
    "black_number": 4
   },
   {
    "mode": "chords_pattern",
    "gesture": "press",
    "action": "Selects the scale’s IV chord for the pattern without a chord roll, keeping it after release until another chord is selected.",
    "short_label": "PATTERN IV",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "284-291",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L284-L291"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-356",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1392-1404",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1392-L1404"
     }
    ]
   },
   {
    "mode": "sharps",
    "gesture": "press",
    "action": "Plucks a semitone above white key 5 from the left in the current Tine or Mirror layout, with octave and tuning applied.",
    "short_label": "RAISED TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "51-54",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L51-L54"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "363-366",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "219-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L219-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "Temporarily shifts new notes one octave down while held, without changing the saved octave.",
    "short_label": "HOLD -8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-376",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L376"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Restores the saved octave even if the other performance octave key is still held.",
    "short_label": "END OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     }
    ]
   }
  ],
  "key_ds4": [
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed D#4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "D#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   },
   {
    "mode": "chords",
    "gesture": "press",
    "action": "Rolls the scale’s V chord, G in default C major, as four plucks spaced by Strum ms with the current octave and tuning.",
    "short_label": "CHORD V",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "112-126",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
     }
    ],
    "black_number": 5
   },
   {
    "mode": "chords_pattern",
    "gesture": "press",
    "action": "Selects the scale’s V chord for the pattern without a chord roll, keeping it after release until another chord is selected.",
    "short_label": "PATTERN V",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "284-291",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L284-L291"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-356",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1392-1404",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1392-L1404"
     }
    ]
   },
   {
    "mode": "sharps",
    "gesture": "press",
    "action": "Plucks a semitone above white key 6 from the left in the current Tine or Mirror layout, with octave and tuning applied.",
    "short_label": "RAISED TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "51-54",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L51-L54"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "363-366",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "219-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L219-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "Temporarily shifts new notes one octave up while held, without changing the saved octave.",
    "short_label": "HOLD +8VE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "375-376",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L375-L376"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "215-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L215-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Restores the saved octave even if the other performance octave key is still held.",
    "short_label": "END OCTAVE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     }
    ]
   }
  ],
  "key_fs4": [
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed F#4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "F#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   },
   {
    "mode": "chords",
    "gesture": "press",
    "action": "Rolls the scale’s vi chord, Am in default C major, as four plucks spaced by Strum ms with the current octave and tuning.",
    "short_label": "CHORD vi",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "112-126",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
     }
    ],
    "black_number": 6
   },
   {
    "mode": "chords_pattern",
    "gesture": "press",
    "action": "Selects the scale’s vi chord for the pattern without a chord roll, keeping it after release until another chord is selected.",
    "short_label": "PATTERN vi",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "284-291",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L284-L291"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-356",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1392-1404",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1392-L1404"
     }
    ]
   },
   {
    "mode": "sharps",
    "gesture": "press",
    "action": "Plucks a semitone above white key 8 from the left in the current Tine or Mirror layout, with octave and tuning applied.",
    "short_label": "RAISED TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "51-54",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L51-L54"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "363-366",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "219-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L219-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "Selects Steel and marks the setup for autosave, retaining that choice after release.",
    "short_label": "STEEL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "377-379",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L377-L379"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-181",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L181"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "36-43",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L36-L43"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Leaves the latched freeze or material choice unchanged.",
    "short_label": "KEEP CHOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     }
    ]
   }
  ],
  "key_gs4": [
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed G#4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "G#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   },
   {
    "mode": "chords",
    "gesture": "press",
    "action": "Rolls the scale’s vii chord, Bdim in default C major, as four plucks spaced by Strum ms with the current octave and tuning.",
    "short_label": "CHORD vii",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "112-126",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
     }
    ],
    "black_number": 7
   },
   {
    "mode": "chords_pattern",
    "gesture": "press",
    "action": "Selects the scale’s vii chord for the pattern without a chord roll, keeping it after release until another chord is selected.",
    "short_label": "PATTERN vii",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "284-291",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L284-L291"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-356",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1392-1404",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1392-L1404"
     }
    ]
   },
   {
    "mode": "sharps",
    "gesture": "press",
    "action": "Plucks a semitone above white key 9 from the left in the current Tine or Mirror layout, with octave and tuning applied.",
    "short_label": "RAISED TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "51-54",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L51-L54"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "363-366",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "219-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L219-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "Selects Brass and marks the setup for autosave, retaining that choice after release.",
    "short_label": "BRASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "377-379",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L377-L379"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-181",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L181"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "36-43",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L36-L43"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Leaves the latched freeze or material choice unchanged.",
    "short_label": "KEEP CHOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     }
    ]
   }
  ],
  "key_as4": [
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed A#4 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "A#4",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   },
   {
    "mode": "chords",
    "gesture": "press",
    "action": "Rolls the scale’s I7 chord, CM7 in default C major, as four plucks spaced by Strum ms with the current octave and tuning.",
    "short_label": "CHORD I7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "112-126",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
     }
    ],
    "black_number": 8
   },
   {
    "mode": "chords_pattern",
    "gesture": "press",
    "action": "Selects the scale’s I7 chord for the pattern without a chord roll, keeping it after release until another chord is selected.",
    "short_label": "PATTERN I7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "284-291",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L284-L291"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-356",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1392-1404",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1392-L1404"
     }
    ]
   },
   {
    "mode": "sharps",
    "gesture": "press",
    "action": "Plucks a semitone above white key 10 from the left in the current Tine or Mirror layout, with octave and tuning applied.",
    "short_label": "RAISED TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "51-54",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L51-L54"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "363-366",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "219-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L219-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "Selects Bronze and marks the setup for autosave, retaining that choice after release.",
    "short_label": "BRONZE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "377-379",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L377-L379"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-181",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L181"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "36-43",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L36-L43"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Leaves the latched freeze or material choice unchanged.",
    "short_label": "KEEP CHOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     }
    ]
   }
  ],
  "key_cs5": [
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed C#5 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "C#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   },
   {
    "mode": "chords",
    "gesture": "press",
    "action": "Rolls the scale’s IV7 chord, FM7 in default C major, as four plucks spaced by Strum ms with the current octave and tuning.",
    "short_label": "CHORD IV7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "112-126",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
     }
    ],
    "black_number": 9
   },
   {
    "mode": "chords_pattern",
    "gesture": "press",
    "action": "Selects the scale’s IV7 chord for the pattern without a chord roll, keeping it after release until another chord is selected.",
    "short_label": "PATTERN IV7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "284-291",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L284-L291"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-356",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1392-1404",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1392-L1404"
     }
    ]
   },
   {
    "mode": "sharps",
    "gesture": "press",
    "action": "Plucks a semitone above white key 12 from the left in the current Tine or Mirror layout, with octave and tuning applied.",
    "short_label": "RAISED TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "51-54",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L51-L54"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "363-366",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "219-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L219-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "Selects Aluminium and marks the setup for autosave, retaining that choice after release.",
    "short_label": "ALUMINIUM",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "377-379",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L377-L379"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-181",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L181"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "36-43",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L36-L43"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Leaves the latched freeze or material choice unchanged.",
    "short_label": "KEEP CHOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     }
    ]
   }
  ],
  "key_ds5": [
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed D#5 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "D#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   },
   {
    "mode": "chords",
    "gesture": "press",
    "action": "Rolls the scale’s V7 chord, G7 in default C major, as four plucks spaced by Strum ms with the current octave and tuning.",
    "short_label": "CHORD V7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "112-126",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
     }
    ],
    "black_number": 10
   },
   {
    "mode": "chords_pattern",
    "gesture": "press",
    "action": "Selects the scale’s V7 chord for the pattern without a chord roll, keeping it after release until another chord is selected.",
    "short_label": "PATTERN V7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "284-291",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L284-L291"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-356",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1392-1404",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1392-L1404"
     }
    ]
   },
   {
    "mode": "sharps",
    "gesture": "press",
    "action": "Plucks a semitone above white key 13 from the left in the current Tine or Mirror layout, with octave and tuning applied.",
    "short_label": "RAISED TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "51-54",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L51-L54"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "363-366",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "219-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L219-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "Selects Bamboo and marks the setup for autosave, retaining that choice after release.",
    "short_label": "BAMBOO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "377-379",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L377-L379"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-181",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L181"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "36-43",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L36-L43"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Leaves the latched freeze or material choice unchanged.",
    "short_label": "KEEP CHOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     }
    ]
   }
  ],
  "key_fs5": [
   {
    "mode": "keyboard_layout",
    "gesture": "press",
    "action": "Plucks printed F#5 shifted by Transpose and Octave, with the selected tuning and the same panel velocity as the other keys.",
    "short_label": "F#5",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "217-221",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L217-L221"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "330-348",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L330-L348"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "107-108",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L107-L108"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "press",
    "action": "Adds this key’s current pitch to the pattern chord, replacing the old chord when no panel keys were held and ignoring additions beyond six pitches.",
    "short_label": "PATTERN NOTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "317-347",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L317-L347"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "109-112",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L109-L112"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Sends note-offs for notes this key plucked when MIDI out is enabled and, with Release set to Damp, damps them unless a sustain pedal defers it.",
    "short_label": "RELEASE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "260-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L260-L268"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "602-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L602-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1345-1368",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1345-L1368"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "press",
    "action": "Cancels the reset question, then performs this key’s current playing or performance action.",
    "short_label": "KEEP AND USE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "590-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L590-L607"
     }
    ]
   },
   {
    "mode": "chords",
    "gesture": "press",
    "action": "Rolls the scale’s vi7 chord, Am7 in default C major, as four plucks spaced by Strum ms with the current octave and tuning.",
    "short_label": "CHORD vi7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L361"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "112-126",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L112-L126"
     }
    ],
    "black_number": 11
   },
   {
    "mode": "chords_pattern",
    "gesture": "press",
    "action": "Selects the scale’s vi7 chord for the pattern without a chord roll, keeping it after release until another chord is selected.",
    "short_label": "PATTERN vi7",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "284-291",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L284-L291"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "351-356",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L351-L356"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1392-1404",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1392-L1404"
     }
    ]
   },
   {
    "mode": "sharps",
    "gesture": "press",
    "action": "Plucks a semitone above white key 15 from the left in the current Tine or Mirror layout, with octave and tuning applied.",
    "short_label": "RAISED TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "51-54",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L51-L54"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "363-366",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L363-L366"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "219-229",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L219-L229"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "press",
    "action": "Selects Glass and marks the setup for autosave, retaining that choice after release.",
    "short_label": "GLASS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "377-379",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L377-L379"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "173-181",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L173-L181"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "36-43",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L36-L43"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "release",
    "action": "Leaves the latched freeze or material choice unchanged.",
    "short_label": "KEEP CHOICE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "385-393",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L385-L393"
     }
    ]
   }
  ],
  "screen": [
   {
    "mode": "tine",
    "gesture": "shows",
    "action": "Shows Tine with Material, Hardness, Decay and Tone.",
    "short_label": "TINE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L41"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "16-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L16-L27"
     }
    ]
   },
   {
    "mode": "character",
    "gesture": "shows",
    "action": "Shows Character with Worn, Glide, Tuning and Release.",
    "short_label": "CHARACTER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L41"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "16-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L16-L27"
     }
    ]
   },
   {
    "mode": "body",
    "gesture": "shows",
    "action": "Shows Body with Body, Buzz, Wah and Wah rate.",
    "short_label": "BODY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L41"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "16-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L16-L27"
     }
    ]
   },
   {
    "mode": "space",
    "gesture": "shows",
    "action": "Shows Space with Reverb, Size, Delay and Time.",
    "short_label": "SPACE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L41"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "16-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L16-L27"
     }
    ]
   },
   {
    "mode": "color",
    "gesture": "shows",
    "action": "Shows Color with Tape, Lo-fi, Chorus and Filter.",
    "short_label": "COLOR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L41"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "16-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L16-L27"
     }
    ]
   },
   {
    "mode": "grain",
    "gesture": "shows",
    "action": "Shows Grain with Grains, Grain ms, Density and Pitch.",
    "short_label": "GRAIN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L41"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "16-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L16-L27"
     }
    ]
   },
   {
    "mode": "spread",
    "gesture": "shows",
    "action": "Shows Spread with Spray, Feedback and Width; KNOB 4 is unused.",
    "short_label": "SPREAD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L41"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "16-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L16-L27"
     }
    ]
   },
   {
    "mode": "keys",
    "gesture": "shows",
    "action": "Shows Keys with Layout, Scale, Key and Black.",
    "short_label": "KEYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L41"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "16-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L16-L27"
     }
    ]
   },
   {
    "mode": "play",
    "gesture": "shows",
    "action": "Shows Play with Strum ms and Octave; KNOB 3 and 4 are unused.",
    "short_label": "PLAY",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L41"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "16-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L16-L27"
     }
    ]
   },
   {
    "mode": "pattern",
    "gesture": "shows",
    "action": "Shows Pattern with Pattern and Tempo; KNOB 3 and 4 are unused.",
    "short_label": "PATTERN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L41"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "16-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L16-L27"
     }
    ]
   },
   {
    "mode": "setup",
    "gesture": "shows",
    "action": "Shows Tune, MIDI ch, MIDI out and Theme, plus the firmware version, CPU load and any audio-dropout count.",
    "short_label": "SETUP",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L41"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     }
    ]
   },
   {
    "mode": "keys_keyboard",
    "gesture": "shows",
    "action": "Shows Layout, Transpose and Octave with the fourth knob blank.",
    "short_label": "KEYBOARD",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "46-47",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L46-L47"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "231-234",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L231-L234"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "920-970",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L920-L970"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Shows the tine instrument, sounding notes, body and sound hole, black-key roles, page dots, grain freeze, pattern beat, damping mode and an unsaved dot, with brief messages replacing the header.",
    "short_label": "INSTRUMENT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "679-776",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L679-L776"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "799-891",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L799-L891"
     }
    ]
   },
   {
    "mode": "reset_confirm",
    "gesture": "shows",
    "action": "Shows RESET? SAVE: YES for five seconds from its appearance during the first hold, requiring another SAVE release before expiry to reset the sound defaults.",
    "short_label": "RESET?",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "424-432",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L424-L432"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "583-592",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L583-L592"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "424-430",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L424-L430"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "563-589",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L563-L589"
     }
    ]
   },
   {
    "mode": "calibration",
    "gesture": "shows",
    "action": "Prompts for each button and clockwise encoder turn, saving the panel map immediately only on completion; any prompt left idle for 30 seconds abandons the new map without a write.",
    "short_label": "CALIBRATION",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "46-109",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L46-L109"
     }
    ]
   },
   {
    "mode": "safe",
    "gesture": "shows",
    "action": "Reports failed starts and a silent safe mode with USB reinstallation available and PLAY to retry.",
    "short_label": "SAFE MODE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "177-218",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L177-L218"
     }
    ]
   },
   {
    "mode": "update",
    "gesture": "shows",
    "action": "Shows the octave-hold countdown or updater progress, restart or failure messages according to the update path.",
    "short_label": "UPDATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "321-338",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L321-L338"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/main.c",
      "lines": "104-114",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/main.c#L104-L114"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "At startup shows FiMba-1 and its version, with a separate crash report after a fault before rebooting.",
    "short_label": "BOOT STATUS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "142-162",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L142-L162"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "231-244",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L231-L244"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "267-278",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L267-L278"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "shows",
    "action": "Displays NOT SAVED and FLASH ERROR when an explicit SAVE fails, so that attempt has not confirmed a stored setup.",
    "short_label": "SAVE ERROR",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "471-477",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L471-L477"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "697-700",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L697-L700"
     }
    ]
   }
  ],
  "switch_power": [
   {
    "mode": "any",
    "gesture": "power_on_holding:button_oct_down+button_oct_up",
    "action": "Starts the prompted panel-learning flow; only completing it writes the new panel map and there is no final question or undo.",
    "short_label": "CALIBRATE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "299-301",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L299-L301"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/panel.c",
      "lines": "46-109",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L46-L109"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "release",
    "action": "Power-off has no save handler, so edits since the last successful SAVE or autosave can be lost.",
    "short_label": "POWER OFF",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "305-360",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L305-L360"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "1015-1026",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1015-L1026"
     }
    ]
   }
  ],
  "jack_midi_in": [
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Receives notes on the selected channel or Omni, plucking with MIDI velocity or building a latched pattern chord while ARP is on.",
    "short_label": "MIDI NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "520-543",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L520-L543"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/main.c",
      "lines": "43-47",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/main.c#L43-L47"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Receives hole control on CC1 or channel pressure, sustain on CC64, six sound controls on CC72/73/74/91/93/94, material by Program Change, and two-semitone pitch bend.",
    "short_label": "MIDI CONTROL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "500-553",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L500-L553"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Follows MIDI clock, Start, Continue and Stop for the pattern regardless of MIDI channel, reverting to local tempo after roughly half a second without clock while Stop still holds playback.",
    "short_label": "MIDI CLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "525-527",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L525-L527"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1174-1192",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1174-L1192"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1407-1425",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1407-L1425"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1724-1726",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1724-L1726"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "113-115",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L113-L115"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "CC120 or CC123 damps every tine and cancels pending plucks without stopping the pattern.",
    "short_label": "MIDI MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "511",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L511"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1357-1361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1357-L1361"
     }
    ]
   }
  ],
  "jack_usb": [
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Receives notes on the selected channel or Omni, plucking with MIDI velocity or building a latched pattern chord while ARP is on.",
    "short_label": "MIDI NOTES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "520-543",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L520-L543"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/main.c",
      "lines": "43-47",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/main.c#L43-L47"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Receives hole control on CC1 or channel pressure, sustain on CC64, six sound controls on CC72/73/74/91/93/94, material by Program Change, and two-semitone pitch bend.",
    "short_label": "MIDI CONTROL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "500-553",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L500-L553"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Follows MIDI clock, Start, Continue and Stop for the pattern regardless of MIDI channel, reverting to local tempo after roughly half a second without clock while Stop still holds playback.",
    "short_label": "MIDI CLOCK",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "525-527",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L525-L527"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1174-1192",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1174-L1192"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1407-1425",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1407-L1425"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1724-1726",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1724-L1726"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.h",
      "lines": "113-115",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.h#L113-L115"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "CC120 or CC123 damps every tine and cancels pending plucks without stopping the pattern.",
    "short_label": "MIDI MUTE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "511",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L511"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/dsp/kalimba.c",
      "lines": "1357-1361",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1357-L1361"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "Sends the post-MASTER stereo mix to a computer as 44.1 kHz, 16-bit USB audio.",
    "short_label": "USB AUDIO",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/main.c",
      "lines": "35-38",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/main.c#L35-L38"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/usb.c",
      "lines": "183-189",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/usb.c#L183-L189"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "28-41",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L28-L41"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "With MIDI out enabled, sends panel plucks as note-ons and key releases as note-offs on the selected MIDI channel, using channel 1 for Omni.",
    "short_label": "NOTE OUTPUT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "235-268",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L235-L268"
     }
    ]
   },
   {
    "mode": "update",
    "gesture": "hold",
    "action": "Accepts the updater protocol for a firmware install, which can erase the temporary update area even when the attempt is refused or fails.",
    "short_label": "INSTALL",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "340-349",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L340-L349"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/ota.c",
      "lines": "338-378",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/ota.c#L338-L378"
     }
    ]
   },
   {
    "mode": "any",
    "gesture": "hold",
    "action": "A USB chip-updater request immediately leaves FiMba without saving pending edits, so press and release SAVE before sending it.",
    "short_label": "CHIP UPDATER",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/usb.c",
      "lines": "581",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/usb.c#L581"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/usb.c",
      "lines": "603-607",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/usb.c#L603-L607"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "348-349",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L348-L349"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/main_fm1.c",
      "lines": "165-175",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L165-L175"
     }
    ],
    "protocol_message": "F0 22 24 35 7D F7"
   },
   {
    "mode": "update",
    "gesture": "hold",
    "action": "With the update loader still active, reconnect USB and choose Install again with the same package to retry, skipping program sectors that already match.",
    "short_label": "RESUME",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "web/emu/index.html",
      "lines": "631-640",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/web/emu/index.html#L631-L640"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "web/fm1ota.js",
      "lines": "210-214",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/web/fm1ota.js#L210-L214"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/loader/ldr_core.c",
      "lines": "99-119",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/loader/ldr_core.c#L99-L119"
     }
    ]
   }
  ]
 },
 "lights": {
  "button_home": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when one of this button’s pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-988",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L988"
     }
    ]
   }
  ],
  "button_env": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when one of this button’s pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-988",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L988"
     }
    ]
   }
  ],
  "button_fx": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when one of this button’s pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-988",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L988"
     }
    ]
   }
  ],
  "button_lfo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when one of this button’s pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-988",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L988"
     }
    ]
   }
  ],
  "button_sel": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when one of this button’s pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-988",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L988"
     }
    ]
   }
  ],
  "button_seq": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when one of this button’s pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-988",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L988"
     }
    ]
   }
  ],
  "button_glo": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights when one of this button’s pages is on screen.",
    "short_label": "PAGE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "24-27",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L24-L27"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-988",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L988"
     }
    ]
   }
  ],
  "button_play_stop": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Lights while the grain buffer is frozen.",
    "short_label": "FROZEN",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "989-990",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L989-L990"
     }
    ]
   }
  ],
  "button_arp": [
   {
    "mode": "any",
    "gesture": "blinking",
    "action": "Lights while the pattern is enabled except on every third pulse, when it goes dark for the beat.",
    "short_label": "PATTERN BEAT",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "991-992",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L991-L992"
     }
    ]
   }
  ],
  "button_edit": [
   {
    "mode": "any",
    "gesture": "off",
    "action": "Has no normal illumination assigned.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-1008",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L1008"
     }
    ]
   }
  ],
  "button_save": [
   {
    "mode": "any",
    "gesture": "off",
    "action": "Has no normal illumination assigned.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-1008",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L1008"
     }
    ]
   }
  ],
  "button_rec": [
   {
    "mode": "any",
    "gesture": "off",
    "action": "Has no normal illumination assigned.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-1008",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L1008"
     }
    ]
   }
  ],
  "button_oct_down": [
   {
    "mode": "any",
    "gesture": "off",
    "action": "Has no normal illumination assigned.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-1008",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L1008"
     }
    ]
   }
  ],
  "button_oct_up": [
   {
    "mode": "any",
    "gesture": "off",
    "action": "Has no normal illumination assigned.",
    "short_label": "-",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "986-1008",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L986-L1008"
     }
    ]
   }
  ],
  "key_lights": [
   {
    "mode": "any",
    "gesture": "lit",
    "action": "Every physically held key lights, alongside the keys whose current tines are ringing.",
    "short_label": "HELD KEYS",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "993-1002",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L993-L1002"
     }
    ]
   },
   {
    "mode": "tine_layout",
    "gesture": "dim",
    "action": "White key 9 glows dimly as the lowest-tine locator unless a brighter state takes over.",
    "short_label": "CENTRE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "975-983",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L975-L983"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "1008",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1008"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "48-56",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/plat_fm1.c#L48-L56"
     }
    ]
   },
   {
    "mode": "mirror_layout",
    "gesture": "dim",
    "action": "White key 8 glows dimly as the lowest-tine locator unless a brighter state takes over.",
    "short_label": "CENTRE",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "975-983",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L975-L983"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "1008",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1008"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/plat_fm1.c",
      "lines": "48-56",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/plat_fm1.c#L48-L56"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "dim",
    "action": "The key currently mapped to middle C glows dimly if one is in range, unless a brighter state takes over.",
    "short_label": "MIDDLE C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "975-983",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L975-L983"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "1008",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1008"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "dim",
    "action": "The key currently mapped to middle C glows dimly if one is in range, unless a brighter state takes over.",
    "short_label": "MIDDLE C",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "975-983",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L975-L983"
     },
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "1008",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1008"
     }
    ]
   },
   {
    "mode": "perform",
    "gesture": "lit",
    "action": "The selected material key stays lit and the freeze key stays lit while frozen, even after release.",
    "short_label": "CHOICES",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "1003-1007",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1003-L1007"
     }
    ]
   },
   {
    "mode": "tine_layout",
    "gesture": "lit",
    "action": "White-key lights track their matching sounding tines; black keys gain no ringing-tail light.",
    "short_label": "RINGING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "993-1000",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L993-L1000"
     }
    ]
   },
   {
    "mode": "mirror_layout",
    "gesture": "lit",
    "action": "White-key lights track their matching sounding tines; black keys gain no ringing-tail light.",
    "short_label": "RINGING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "993-1000",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L993-L1000"
     }
    ]
   },
   {
    "mode": "keyboard_layout",
    "gesture": "lit",
    "action": "All keys can stay lit while their matching tine rings.",
    "short_label": "RINGING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "993-996",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L993-L996"
     }
    ]
   },
   {
    "mode": "keyboard_pattern",
    "gesture": "lit",
    "action": "All keys can light when pattern notes ring at their current pitches.",
    "short_label": "RINGING",
    "evidence": "read-in-source",
    "source": [
     {
      "kind": "source",
      "repo": "jadamsowers/fm1-fimba",
      "ref": "v0.6.1",
      "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
      "path": "firmware/src/app/ui.c",
      "lines": "993-996",
      "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L993-L996"
     }
    ]
   }
  ]
 },
 "groups": {
  "key_lights": [
   "led_f3",
   "led_fs3",
   "led_g3",
   "led_gs3",
   "led_a3",
   "led_as3",
   "led_b3",
   "led_c4",
   "led_cs4",
   "led_d4",
   "led_ds4",
   "led_e4",
   "led_f4",
   "led_fs4",
   "led_g4",
   "led_gs4",
   "led_a4",
   "led_as4",
   "led_b4",
   "led_c5",
   "led_cs5",
   "led_d5",
   "led_ds5",
   "led_e5",
   "led_f5",
   "led_fs5",
   "led_g5"
  ]
 },
 "saving_note": {
  "text": "One saved setup holds all forty parameters; there are no user pattern slots or saved grain recordings, and neither the current page nor pattern-running and freeze states are saved. SAVE writes immediately, with no overwrite question or undo, and checks the stored result. Autosave requires a pending edit, no held buttons or keys, no frozen grains, low output including effect tails, silent tines and at least four seconds on the activity timer. KNOB 1–4, keys, held buttons and musical MIDI refresh that timer; SELECT, ALGORITHM and PRESETS do not, so their edits may save as soon as the other guards permit. Failed autosaves remain pending. A confirmed sound reset changes RAM first and is written only by later autosave or another SAVE. Starting an update that returns early reinitializes the UI and clears its unsaved flag without saving the still-loaded parameters; press SAVE before installing and again after such a return if those edits matter. The reset question does not block autosave of pending edits, and calibration ignores its save return value without showing a failure. Press and release SAVE before any firmware install or chip-updater entry, including an OCT-button hold or a computer’s USB request; neither updater entry saves pending edits, and held buttons or frozen grains prevent autosave.",
  "source": [
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "471-477",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L471-L477"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "609-635",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L609-L635"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "1011-1034",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1011-L1034"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "403-421",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L403-L421"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "340-346",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L340-L346"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/app.h",
    "lines": "13-24",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/app.h#L13-L24"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "1015-1026",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1015-L1026"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/panel.c",
    "lines": "102-108",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "165-175",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L165-L175"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "336-349",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L336-L349"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "1020",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1020"
   }
  ]
 },
 "switching_note": {
  "kept_on_unit": "One setup of sound, key, pattern and Setup values, plus a separately saved panel calibration, survives ordinary power cycles after a successful save; startup reads the setup or uses defaults without immediately saving those defaults. From the flash atlas: install (FiMba package update loader): Erases and rewrites changed program sectors; equal sectors are skipped, each write is read back with at most two attempts; never writes the first 16 KiB. Incoming flash length must be at least 93000, not exactly 93000. Retrying the same package through the browser resume path repeats this scan and skips sectors already equal; this is retry/resume, not restoration of user work (after UFW header/list, entry and chip-key/decrypted-app-header checks pass). install (FiMba package update loader record cleanup): After installation, clear only valid update-record sectors. Ordinary saved projects, sounds and samples are not update records (After an install, erase only a 4 KiB sector whose last 256 bytes hold a valid update record (marker 0x5441 at +6 and a matching nonzero CRC16 over bytes 2..79): in practice the family staging-record sector 0xE4000 and, on a first install from stock, stock record sector 0xE8000. Saved music does not hold that record. This loader does not skip 0x97000-0xDFFFF). every normal or safe-mode startup: Before safe-mode selection, reads four bytes at E0000 and eight at E4F00; any non-FF byte erases all 5 sectors, with no record identity or CRC check. Isolated bytes elsewhere do not trigger it (expected flash JEDEC 856014 detected, both probe reads succeed, and at least one probe is not blank). startup project and panel load: No project or calibration flash write: loads compatible records or RAM defaults; ui_init starts dirty=false (every startup that reaches app initialization). ordinary use after parameter change: Eligible quiet autosave replaces the whole project in the alternate sector; reset or incoming MIDI parameter edits use the same path, not a separate immediate write; an unanswered reset question does not suspend ordinary autosave (dirty, no held controls, >=4000 ms on activity timer, not frozen, output <=0.0005, all tine levels 0; top three encoders do not restart activity timer). software updater attempt (leaving or reinstalling): After validation, erases five sectors and stages incoming loader; ANY ota_stage refusal or error also calls unstage and erases five sectors, even if staging had not begun. Record write/verify failure does the same (host initiates update while flash is available; actual stage requires accepted package, failure cleanup runs even for a refused package). software updater commit: Writes and verifies 112-byte update record, then resets through RAM update parameter transfer (staged loader verified and host sent success). hardware updater gesture: Holding both OCT buttons >5 seconds enters chip UBOOT; this gesture itself stages nothing and saves no project. Its external updater policy is outside supplied source. Pending edits are lost on leaving this execution; autosave is blocked by ui.btn during the hold, and enter_uboot calls no project save (both calibrated OCT buttons held beyond 5000 ms). USB chip-updater request: UBOOT_KEY SysEx F0 22 24 35 7D F7 sets usb.uboot_req; normal main loop calls enter_uboot immediately, without project_save or autosave. Pending unsaved edits are lost. This entry itself performs no flash write or staging (computer sends the exact six-byte chip-updater request). optional Mac rescue tool restoring stock V15: After a raw whole-flash dump, rewrites only program sectors different from hash-approved stock V15, high to low, verifies final whole-flash read against stock image plus the old tail, then restarts. Differences in the protected head abort before writes. This installs stock; it does not restore the raw dump or write the saved-data tail (--write supplied; this bypasses the --ask callback even if both flags are supplied). optional Mac rescue tool restoring stock V15: After a raw whole-flash dump, rewrites only program sectors different from hash-approved stock V15, high to low, verifies final whole-flash read against stock image plus the old tail, then restarts. Differences in the protected head abort before writes. This installs stock; it does not restore the raw dump or write the saved-data tail (--ask supplied without --write and owner types yes after backup and checks). What FiMba-1 beta writes over the previous firmware's data is in overwrites_previous; what the next firmware writes over FiMba-1 beta's is in when_you_leave.",
  "lost": "Ringing notes, grain audio, frozen state, pattern-running state and the displayed page are not stored; unsaved edits can vanish at power-off, and there is no panel undo or setup restore command. From the flash atlas: Other firmwares reading FiMba-1 beta's data: FoMni reads and uses FiMba-1 beta's FiMba-1 beta panel calibration; FuMi-1 reads and uses FiMba-1 beta's FiMba-1 beta panel calibration; Fart Machine One reads and uses FiMba-1 beta's FiMba-1 beta panel calibration; AMB-1 reads and uses FiMba-1 beta's FiMba-1 beta panel calibration; Polly reads and uses FiMba-1 beta's FiMba-1 beta panel calibration. What FiMba-1 beta reads of other firmwares' data: FiMba-1 beta reads and uses FoMni's FoMni button calibration; FiMba-1 beta reads and uses AMB-1's AMB-1 panel calibration; FiMba-1 beta reads and uses Polly's Polly button and encoder calibration; FiMba-1 beta reads and uses Fart Machine One's learned button and encoder calibration; FiMba-1 beta reads and uses FuMi-1's FuMi-1 button and encoder calibration. Everything else of another firmware's looks empty or foreign to the reader.",
  "back_up_first": "There is no supported hardware setup export or setup restore; write down every page value before switching, and use the previous firmware’s backup tool before FiMba’s first start; browser SAVE stores only the browser instrument’s own settings and does not read the unit.",
  "going_back_a_version": "This release carries older FiMba settings forward and gives missing or invalid values their defaults in memory; the converted setup reaches flash only on a later SAVE or eligible autosave, and retention after a downgrade remains unverified because earlier release loaders were not supplied.",
  "own_write_precautions": "SAVE replaces the whole stored setup immediately without asking; autosave can do the same during quiet use after an edit, confirmed reset waits for one of those writes, and finished calibration replaces the panel map without another question.",
  "cross_firmware": "FiMba-1 does not open FoMni, AMB-1 or Polly setups; compatible FoMni, AMB-1 and Polly panel calibration is reused. See the switching advice in this section for the affected saved work. One successful FiMba SAVE or autosave over X0X’s saved settings makes X0X v1.1.0 start its whole project from factory when you return, including settings, sound, all 32 patterns, song and motion. That reset turns X0X’s autosave back on, so later eligible autosaves can replace the old project copies without a question. Back up before switching.",
  "atlas_status": "Back up with the firmware that made the work BEFORE the first start of FiMba-1. See the switching advice in this section.",
  "source": [
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/app.h",
    "lines": "13-24",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/app.h#L13-L24"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/project.c",
    "lines": "18-45",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/project.c#L18-L45"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/storage.c",
    "lines": "49-147",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/storage.c#L49-L147"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/panel.c",
    "lines": "27-44",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L27-L44"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/panel.c",
    "lines": "102-108",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/panel.c#L102-L108"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "1011-1034",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1011-L1034"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "web/emu/index.html",
    "lines": "446-459",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/web/emu/index.html#L446-L459"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "340-346",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L340-L346"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "251-256",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/main_fm1.c#L251-L256"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/ota.c",
    "lines": "330-349",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/ota.c#L330-L349"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/ota.c",
    "lines": "383-395",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/ota.c#L383-L395"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/storage.c",
    "lines": "49-64",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/storage.c#L49-L64"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/storage.c",
    "lines": "112-147",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/storage.c#L112-L147"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "612-627",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L612-L627"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "1015-1026",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1015-L1026"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "web/emu/index.html",
    "lines": "631-640",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/web/emu/index.html#L631-L640"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "1029-1034",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L1029-L1034"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "tools/fm1_rescue.py",
    "lines": "43-46",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/tools/fm1_rescue.py#L43-L46"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "tools/fm1_rescue.py",
    "lines": "236-264",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/tools/fm1_rescue.py#L236-L264"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "tools/fm1_rescue.py",
    "lines": "381-411",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/tools/fm1_rescue.py#L381-L411"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/loader/ldr_core.c",
    "lines": "99-119",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/loader/ldr_core.c#L99-L119"
   },
   {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/storage.c",
    "lines": "119-139",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/storage.c#L119-L139"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/storage.c",
    "lines": "65-119",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/storage.c#L65-L119"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "130-142",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L130-L142"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "449-455",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L449-L455"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "507",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L507"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/main_fm1.c",
    "lines": "435-436",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/main_fm1.c#L435-L436"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "36-56",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L36-L56"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/ui.c",
    "lines": "4591-4610",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/ui.c#L4591-L4610"
   },
   {
    "kind": "source",
    "repo": "charlesvestal/fm1-x0x",
    "ref": "v1.1.0",
    "commit": "27f6fac7e07ce97b5de158b45aec99f59a9e23fd",
    "path": "firmware/src/app/project.c",
    "lines": "525-538",
    "url": "https://github.com/charlesvestal/fm1-x0x/blob/27f6fac7e07ce97b5de158b45aec99f59a9e23fd/firmware/src/app/project.c#L525-L538"
   }
  ],
  "before_first_start": "Before installing or starting FiMba-1 for the first time, back up saved work using the firmware that created it; installation or startup cleanup can erase overlapping data before you touch SAVE, and there is no undo.",
  "overwrites_on_startup": "At every start, FiMba-1 checks part of its temporary update space and clears the whole area without a question if either checked area contains data. See the switching advice in this section for the affected saved work.\n\nWrites to shared storage can also remove other firmwares’ unfinished restores and pending updates; keep the original files.",
  "overwrites_on_save": "The first SAVE or eligible autosave after an edit writes without a question; one SELECT turn can be enough to trigger autosave, and repeated saves can replace both copies of paired settings. See the switching advice in this section for the affected saved work.",
  "overwrites_at_calibration": "Finishing hardware calibration writes without a final question or undo; repeated calibrations can replace both saved copies. See the switching advice in this section for the affected saved work. These writes can also replace ChoralRoot’s legacy sounds 1–16, kept for returning to ChoralRoot 0.21 or older.",
  "sample_risk_on_save": "SAVE and autosave can also replace M-VAVE Open sample audio where its uploaded bank reaches the setup storage; the upload need not have filled every overlapping area.",
  "editor_send": "The browser instrument does not send its saved setup to the unit; its installer can still erase temporary update space during an attempted firmware update, even when the attempt fails, without a panel question.",
  "overlap_evidence": {
   "evidence": "inferred",
   "why": "Consequences combine source-defined FiMba write ranges and triggers with the foreign layouts in the supplied atlas and checked fragments; no retention was tested on a unit.",
   "layout_records": "refresh/work/fimba.storage.json reads_foreign rows for all seventeen supplied foreign firmwares."
  },
  "raw_backup": "The repository’s Mac rescue tool can read a raw 1 MiB image of the unit’s flash through the chip updater, using sudo and the approved stock V15 package; omit both --write and --ask to read without rewriting flash, and keep in mind that the tool cannot restore that dump or recover settings that were never saved.",
  "overwrites_during_install": "Export Open projects and sample audio before installing. See the switching advice in this section for the affected saved work.",
  "overwrites_previous": [
   {
    "from": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "stock settings (and possibly patterns)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "At start-up, FiMba-1 erases the space where firmware updates are prepared if a checked spot there holds data. This can erase stock data in that space. The exact locations of stock saved data are only reported."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): stock settings (and possibly patterns). At start-up, FiMba-1 erases the space where firmware updates are prepared if a checked spot there holds data. This can erase stock data in that space. The exact locations of stock saved data are only reported.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "Baud Girl presets (128)",
     "Baud Girl patterns (16, with locks)"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "At start-up, FiMba-1 erases the space where firmware updates are prepared if a checked spot there holds data. This can erase Baud Girl’s saved work if it sits in that space, including the checked spots. Exact saved-data locations are unknown."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): Baud Girl presets (128); Baud Girl patterns (16, with locks). At start-up, FiMba-1 erases the space where firmware updates are prepared if a checked spot there holds data. This can erase Baud Girl’s saved work if it sits in that space, including the checked spots. Exact saved-data locations are unknown.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "felucca",
    "name": "Felucca",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, button calibration, favourites, MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, button calibration, favourites, MIDI LEARN map. At risk when you act: user presets 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloop",
    "name": "SLOOP",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, SYN1-4 kits, MIDI LEARN, theme and favourites. At risk when you act: user sounds U01-U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "x0x",
    "name": "X0X",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "the whole X0X project (settings, sound, all 32 patterns, song, knob motion)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "X0X button calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Before leaving X0X, stop playback and back up its project over USB. One save or automatic save in FiMba-1 beta can make X0X load defaults for its whole project when you return, including sounds, patterns, song and knob motion. Restore the X0X backup after reinstalling X0X; the older stored copy cannot be used as a backup."
    ],
    "owner_text": "At risk by itself: the whole X0X project (settings, sound, all 32 patterns, song, knob motion). At risk when you act: X0X button calibration. Before leaving X0X, stop playback and back up its project over USB. One save or automatic save in FiMba-1 beta can make X0X load defaults for its whole project when you return, including sounds, patterns, song and knob motion. Restore the X0X backup after reinstalling X0X; the older stored copy cannot be used as a backup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jiant",
    "name": "JIANT",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, favourites, MENU options",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, favourites, MENU options. At risk when you act: user sounds U01-U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "melodee",
    "name": "Melodee",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, factory favourites, calibration, saved template",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared user presets U001-U018",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, factory favourites, calibration, saved template. At risk when you act: shared user presets U001-U018.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fomni",
    "name": "FoMni",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FoMni setup (pages, chord buttons, lights)",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FoMni button calibration"
    ],
    "kept_unseen": [],
    "notes": [
     "After FiMba-1 saves its setup, going back to FoMni uses its default setup. FoMni’s own last save may still be stored, but FoMni will not load it. Later FiMba-1 saves write over it."
    ],
    "owner_text": "At risk by itself: FoMni setup (pages, chord buttons, lights). Carried over: FoMni button calibration. After FiMba-1 saves its setup, going back to FoMni uses its default setup. FoMni’s own last save may still be stored, but FoMni will not load it. Later FiMba-1 saves write over it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "amb",
    "name": "AMB-1",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "AMB-1 pieces and setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "AMB-1 panel calibration"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: AMB-1 pieces and setup. Carried over: AMB-1 panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "choralroot",
    "name": "ChoralRoot",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "options, playing setup and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: options, playing setup and panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration. At risk when you act: user sounds 1–16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Open shared sample audio",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if sample audio reaches a checked spot where firmware updates are prepared and leaves data there",
        "effect": "lost"
       },
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       },
       {
        "way": "when you install another firmware or an update while FiMba-1 is running",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 2",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 3",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 4",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 5",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 6",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 7",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 8",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 9",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 10",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 11",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 12",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 13",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 14",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 15",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open USER project 16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "Open device preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Installing replaces Open’s sixteen USER projects, preferences and the information needed to read its sample bank, including the start of its sample storage. Export projects and the device sample bank before leaving Open. The required return through stock firmware has other unchecked data risks.",
     "At start-up, FiMba-1 erases the space where firmware updates are prepared if a checked spot there holds data. This can erase Open sample audio if the bank reaches that far. Export the device sample bank before leaving Open."
    ],
    "owner_text": "At risk by itself: Open shared sample audio. At risk when you act: Open USER project 1; Open USER project 2; Open USER project 3; Open USER project 4; Open USER project 5; Open USER project 6; Open USER project 7; Open USER project 8; Open USER project 9; Open USER project 10; Open USER project 11; Open USER project 12; Open USER project 13; Open USER project 14; Open USER project 15; Open USER project 16; Open device preferences. Installing replaces Open’s sixteen USER projects, preferences and the information needed to read its sample bank, including the start of its sample storage. Export projects and the device sample bank before leaving Open. The required return through stock firmware has other unchecked data risks. At start-up, FiMba-1 erases the space where firmware updates are prepared if a checked spot there holds data. This can erase Open sample audio if the bank reaches that far. Export the device sample bank before leaving Open.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "octave, last selected preset and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: octave, last selected preset and MIDI preferences.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "hortator",
    "name": "Hortator",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "saved programs and global settings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "pattern 1",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 2",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 3",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 4",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 5",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 6",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 7",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     },
     {
      "object": "pattern 8",
      "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain",
      "ways": [
       {
        "way": "automatically during use [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its saved B-track program]",
        "effect": "its B-track sound can change if it uses a saved program; its pattern notes remain"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: saved programs and global settings; pattern 1 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 2 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 3 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 4 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 5 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 6 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 7 (its B-track sound can change if it uses a saved program; its pattern notes remain); pattern 8 (its B-track sound can change if it uses a saved program; its pattern notes remain).",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "polly",
    "name": "Polly",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Polly setup and channel sounds",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "Polly button and encoder calibration"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Polly setup and channel sounds. Carried over: Polly button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "skiff",
    "name": "Skiff",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sound bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration and favourites. At risk when you act: user sound bank 1.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopdx",
    "name": "sloopDX",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, MIDI, theme and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user presets 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, MIDI, theme and favourites. At risk when you act: user presets 1–16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "rainbow",
    "name": "Rainbow Mode",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16, names and sixteen-step patterns without automation",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: Felucca preferences, calibration and favourites; Rainbow WRITE song, greeting name, hat, volume limit and look-alikes. At risk when you act: user sounds U01–U16, names and sixteen-step patterns without automation.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "duell",
    "name": "DUELL beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and panel setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved patches",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and panel setup. At risk when you act: saved patches.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "maku",
    "name": "MAKU",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings and calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "inherited user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings and calibration. At risk when you act: inherited user preset bank 1.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fart",
    "name": "Fart Machine One",
    "flags": "K",
    "weakest_grade": "read-in-source",
    "at_risk": [],
    "possibly_at_risk": [],
    "carried_over": [
     "learned button and encoder calibration"
    ],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Carried over: learned button and encoder calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "chord",
    "name": "fm1-chord",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, four chord preset setups and the current chord setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, four chord preset setups and the current chord setup. At risk when you act: user sounds 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, synthesized drum kits and DX-bank setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Saving a FiMba-1 beta project can remove DX7 Banks’ saved count of DX banks already set up. An older copy of the settings can survive the first save. Without that count, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching."
    ],
    "owner_text": "At risk by itself: settings, calibration, song order, synthesized drum kits and DX-bank setup. At risk when you act: user sounds 1–16. Saving a FiMba-1 beta project can remove DX7 Banks’ saved count of DX banks already set up. An older copy of the settings can survive the first save. Without that count, DX7 Banks erases DX banks 1–8 at its next start without asking, including your own banks 5–8. Back up your DX banks before switching.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fumi",
    "name": "FuMi-1",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FuMi-1 sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FuMi-1 button and encoder calibration"
    ],
    "kept_unseen": [],
    "notes": [
     "After FiMba-1 saves its setup, going back to FuMi-1 uses its default setup. FuMi-1’s own last save may still be stored, but FuMi-1 will not load it. Later FiMba-1 saves write over it."
    ],
    "owner_text": "At risk by itself: FuMi-1 sound and playing setup. Carried over: FuMi-1 button and encoder calibration. After FiMba-1 saves its setup, going back to FuMi-1 uses its default setup. FuMi-1’s own last save may still be stored, but FuMi-1 will not load it. Later FiMba-1 saves write over it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "jangada",
    "name": "Jangada",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "preferences, calibration and MIDI LEARN map",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: preferences, calibration and MIDI LEARN map. At risk when you act: user sounds U01-U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1–16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration and favourites. At risk when you act: user sounds 1–16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "orbit",
    "name": "ORBIT",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "saved section A",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "saved section B",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "saved section C",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "saved section D",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "working music kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "USER sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, song order, SYN1-SYN4 kits and MIDI preferences; saved section A (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); saved section B (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); saved section C (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); saved section D (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); working music kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: USER sounds U01-U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration and song order",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration and song order. At risk when you act: user sounds U01–U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "winampfm",
    "name": "winampFM Synth",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel calibration, song order, SYN kits and MIDI",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds 1-16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel calibration, song order, SYN kits and MIDI. At risk when you act: user sounds 1-16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "screen language pack",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "system preferences and last pattern",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: screen language pack; system preferences and last pattern.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "salt",
    "name": "Felucca [Salt]",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "screen preferences, calibration and favourites",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01-U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: screen preferences, calibration and favourites. At risk when you act: user sounds U01-U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "pigeon",
    "name": "PIGEON",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "preferences, MIDI LEARN and panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "shared song and drum sample bank",
      "effect": "lost",
      "ways": [
       {
        "way": "when you install FiMba-1 beta",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "older user preset bank 1",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "If your PIGEON sample bank reaches the storage that installing FiMba-1 beta writes over, PIGEON can no longer read any of the bank, either song or the kit. Export the PIGEON session and audio bank before switching."
    ],
    "owner_text": "At risk by itself: preferences, MIDI LEARN and panel calibration. At risk when you act: shared song and drum sample bank; older user preset bank 1. If your PIGEON sample bank reaches the storage that installing FiMba-1 beta writes over, PIGEON can no longer read any of the bank, either song or the kit. Export the PIGEON session and audio bank before switching.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm1move",
    "name": "FM1 Move",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, calibration, SYN kits and stored MIDI mappings",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "project 1",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "project 2",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "the working project kept by autosave",
      "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain",
      "ways": [
       {
        "way": "automatically during use [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       },
       {
        "way": "when you press SAVE briefly (without asking) [uses its separate samples or sound setup]",
        "effect": "sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, calibration, SYN kits and stored MIDI mappings; project 1 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); project 2 (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain); the working project kept by autosave (sounds can change or stop playing when separate samples, FM6 patches or SYN kits are replaced; saved notes and sound settings remain). At risk when you act: user sounds U01–U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "fm1quest",
    "name": "FM1 Quest",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "settings, panel mapping, song order and Quest preferences/progress",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE briefly (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "user sounds U01–U16",
      "effect": "lost",
      "ways": [
       {
        "way": "when you complete hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: settings, panel mapping, song order and Quest preferences/progress. At risk when you act: user sounds U01–U16.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "from": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "Groove project slot 1",
     "Groove project slot 2",
     "Groove project slot 3",
     "Groove resume autosave",
     "Groove sound bank A",
     "Groove sound bank B",
     "Groove sound bank C",
     "Groove sound bank D",
     "Groove custom drum sounds and kits",
     "Groove device preferences",
     "Groove crash reports"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "Where Groove OS saves data and which firmware can read it are not public. Back up its projects and your own sounds separately before switching. It is not known whether they survive this switch."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): Groove project slot 1; Groove project slot 2; Groove project slot 3; Groove resume autosave; Groove sound bank A; Groove sound bank B; Groove sound bank C; Groove sound bank D; Groove custom drum sounds and kits; Groove device preferences; Groove crash reports. Where Groove OS saves data and which firmware can read it are not public. Back up its projects and your own sounds separately before switching. It is not known whether they survive this switch.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ],
  "when_you_leave": [
   {
    "to": "stock",
    "name": "Stock V15",
    "flags": "?",
    "weakest_grade": "reported",
    "at_risk": [],
    "possibly_at_risk": [
     "FiMba-1 beta panel calibration"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "baudgirl",
    "name": "Baud Girl FM-1+VA",
    "flags": "?",
    "weakest_grade": "inferred",
    "at_risk": [],
    "possibly_at_risk": [
     "FiMba-1 beta panel calibration"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "Possibly at risk (layout reported or inferred): FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "felucca",
    "name": "Felucca",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if beta 2ND CORE is on and a sound calculation fails or takes too long",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you learn MIDI CC assignments (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "If no readable older shared settings copy remains, beta 2ND CORE stays OFF by default. These settings do not turn it on."
    ],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration. If no readable older shared settings copy remains, beta 2ND CORE stays OFF by default. These settings do not turn it on.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloop",
    "name": "SLOOP",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if SLOOP can still read older SLOOP settings with default MIDI controls and older working music whose drum MIDI channel differs from those settings (FiMba-1 beta’s own settings cannot trigger this update)",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you load a song file from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you load a song from the editor LIVE playlist (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send or remove a theme from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the song from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "x0x",
    "name": "X0X",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if X0X crashed while 2ND CORE was on and then restarted without being switched off",
        "effect": "lost"
       },
       {
        "way": "when you back up unsaved project changes over USB (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you reset to factory settings (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup over USB with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "A saved setup from the other firmware can make X0X use defaults for its whole project when you return, including sounds, patterns, song and knob motion. Automatic saving is then on. If you backed up X0X before leaving it, restore that backup after installing X0X; X0X cannot load the older stored copy on its own.",
     "After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed."
    ],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration. A saved setup from the other firmware can make X0X use defaults for its whole project when you return, including sounds, patterns, song and knob motion. Automatic saving is then on. If you backed up X0X before leaving it, restore that backup after installing X0X; X0X cannot load the older stored copy on its own. After you confirm a restore on the computer, X0X starts erasing before asking again on the FM-1. Saying no keeps X0X’s current project but does not bring back erased data from your previous firmware, even if the computer says nothing changed.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jiant",
    "name": "JIANT",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "melodee",
    "name": "Melodee",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a setting on the panel or in the menu (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you mark a favourite with a star (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a template (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically, only if a matching saved preset bank needs repair or a change of format, or changing older Prophet sounds to the new format needs extra storage space",
        "effect": "lost"
       },
       {
        "way": "automatically, only if erasing all user presets was confirmed earlier but stopped before it finished",
        "effect": "lost"
       },
       {
        "way": "when you confirm erasing all user presets to recover from a problem (asks first: press the button to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you import SysEx sound data into slots (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk by itself, under a condition: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fomni",
    "name": "FoMni",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FiMba-1 beta panel calibration"
    ],
    "kept_unseen": [],
    "notes": [
     "After FoMni saves its setup, going back to FiMba-1 uses its default setup. FiMba-1’s own last save may still be stored, but FiMba-1 will not load it. Later FoMni saves write over it."
    ],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. Carried over: FiMba-1 beta panel calibration. After FoMni saves its setup, going back to FiMba-1 uses its default setup. FiMba-1’s own last save may still be stored, but FiMba-1 will not load it. Later FoMni saves write over it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "amb",
    "name": "AMB-1",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FiMba-1 beta panel calibration"
    ],
    "kept_unseen": [],
    "notes": [
     "The saved button and encoder mapping carries over. This does not import saved pieces, songs, clips or sound choices."
    ],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. Carried over: FiMba-1 beta panel calibration. The saved button and encoder mapping carries over. This does not import saved pieces, songs, clips or sound choices.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "choralroot",
    "name": "ChoralRoot",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a processor failure blocked Dual Core while its saved setting was On",
        "effect": "lost"
       },
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm Reset Settings with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you hold SAVE for a global save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you keep calibration or enter update mode by holding OCT- + OCT+ + HOME for 5 s (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the installer page, device manager or computer tool (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup with the computer question skipped (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you confirm Flash Data erase with OCT+ twice (asks first: press again to confirm)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "ghoulbox",
    "name": "GHOULBOX",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change settings from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "mvaveopen",
    "name": "M-VAVE FM-1 Open",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you send a complete sample-bank upload through MIDI (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you write the sample bank to the device (the computer asks first)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: FiMba-1 beta panel calibration; FiMba-1 beta sound and playing setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm106",
    "name": "FM-106",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm deletion of the active user slot (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE in the save screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you release a short SAVE (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again."
    ],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. FM-106 Beta4 does not save edited user sounds, even when it says the save worked. Export them before turning off the FM-1 or changing firmware again.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "hortator",
    "name": "Hortator",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you remember or forget a Bluetooth device (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "obervave",
    "name": "OberVave",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you tap SAVE twice outside the sequencer (asks for that slot only: press again to confirm; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "polly",
    "name": "Polly",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you confirm FACTORY RESET (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you confirm NEW SONG or FREE (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the computer",
        "effect": "lost"
       },
       {
        "way": "when you send a backup for USB restore with computer questions skipped (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start a USB backup while playback is stopped, or enter a test session (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FiMba-1 beta panel calibration"
    ],
    "kept_unseen": [],
    "notes": [
     "The saved button and encoder mapping carries over. This does not import saved pieces, songs, clips or sound choices.",
     "After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed."
    ],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. Carried over: FiMba-1 beta panel calibration. The saved button and encoder mapping carries over. This does not import saved pieces, songs, clips or sound choices. After you agree to restore on the computer, Polly starts erasing before the FM-1 asks. Saying no on the FM-1 keeps Polly’s current project, but cannot bring back erased data from your previous firmware, even if the computer says nothing changed.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "skiff",
    "name": "Skiff",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if Skiff starts without recovering from a crash, freeze or failed start and has not already cleared the old scene storage",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel or change editor preferences (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you confirm RESET SETTINGS (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save, import, erase or rename a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopdx",
    "name": "sloopDX",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when the saved input setting selects one MIDI channel rather than NOTES or CLOCK",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls at power-on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings, MIDI controls or a theme with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose FACTORY RESET in ABOUT and confirm (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "rainbow",
    "name": "Rainbow Mode",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if a greeting name was entered in the installer",
        "effect": "lost"
       },
       {
        "way": "when you change Rainbow preferences or save its greeting name (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a user preset (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or a name from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user preset (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "duell",
    "name": "DUELL beta",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change MIDI LEARN (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change USB serial settings from the editor (the computer asks first)",
        "effect": "lost"
       },
       {
        "way": "when you change preferences from the editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you erase all saved data (asks first: press again to confirm)",
        "effect": "lost"
       },
       {
        "way": "when you install DUELL with Erase saved data enabled (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you rename a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a patch on the panel (asks for that slot only: press the button to confirm; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or import a patch from the editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a patch directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send backup restore commands directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send the erase-all command directly with a MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase."
    ],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration. The installer starts with its erase option selected for this firmware change. Clear it before installing to avoid this extra erase.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "maku",
    "name": "MAKU",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you hold OCT- and OCT+ while powering on (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: FiMba-1 beta sound and playing setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fart",
    "name": "Fart Machine One",
    "flags": "K",
    "weakest_grade": "read-in-source",
    "at_risk": [],
    "possibly_at_risk": [],
    "carried_over": [
     "FiMba-1 beta panel calibration"
    ],
    "kept_unseen": [],
    "notes": [
     "Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate."
    ],
    "owner_text": "Carried over: FiMba-1 beta panel calibration. Fart Machine One does not import or save a music setup or loop. SAVE does nothing. Its recorded loop, tempo and effect choices last only while it stays on. Calibration is separate.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "chord",
    "name": "fm1-chord",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change favourites or their filter (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a chord preset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you perform factory reset (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "sloopbanks",
    "name": "SLOOP DX7 Banks",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save SYN drum kits from the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send a song order from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound on the FM-1 (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save selected DX7 voices from the editor (the computer asks first about the slots it fills; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fumi",
    "name": "FuMi-1",
    "flags": "ASK",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [
     "FiMba-1 beta panel calibration"
    ],
    "kept_unseen": [],
    "notes": [
     "After FuMi-1 saves its setup, going back to FiMba-1 uses its default setup. FiMba-1’s own last save may still be stored, but FiMba-1 will not load it. Later FuMi-1 saves write over it."
    ],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. Carried over: FiMba-1 beta panel calibration. After FuMi-1 saves its setup, going back to FiMba-1 uses its default setup. FiMba-1’s own last save may still be stored, but FiMba-1 will not load it. Later FuMi-1 saves write over it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "jangada",
    "name": "Jangada",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically during use (if the second core fails and playback stops, with AUTO selected by default)",
        "effect": "lost"
       },
       {
        "way": "when you enter power-on hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you learn or clear MIDI CC mappings (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you set screen colours from the USB console (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup to Jangada with a computer tool, without the web editor (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user preset (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send user sounds to Jangada with a computer tool, without the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "waveloop",
    "name": "WaveLoop FM-1",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the buttons and knob at power-on; cancelling also requests a settings save (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you change a favourite mark or the filter for favourites (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you erase a starred user sound, which also removes its favourite mark (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you run MENU calibration, then close MENU (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send MENU settings, display preferences or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save a user sound (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "orbit",
    "name": "ORBIT",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "automatically, only when song order has an unsaved change as an update or restart starts",
        "effect": "lost"
       },
       {
        "way": "when you hold both OCT buttons as you turn it on to calibrate the controls (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you choose SAVE > USER > SAVE or ERASE and repeat the action (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, erase, rename or restore user sounds with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store DX7 cartridge voices with optional USER sound links from the web editor (the computer asks first for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the web editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "floyd",
    "name": "SLOOP Floyd FM",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the controls from HOME and close the menu (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you press REC on the SONG screen to save a section and the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you start calibrating the controls at power-on (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save or erase a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "winampfm",
    "name": "winampFM Synth",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only if it can resume music saved in a SLOOP format from before version 2.6 with a different usable drum MIDI channel, and your saved settings include SYN drum kits but no MIDI controls or channels",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode, start a firmware update or restart from the computer",
        "effect": "lost"
       },
       {
        "way": "when you record the current music into the selected song section (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore preferences or store SYN drum kits directly with a MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save the song order (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a user sound with a USER GO knob (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "bubba",
    "name": "Bubba Machine (beta)",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically at first start",
        "effect": "lost"
       },
       {
        "way": "automatically during use (its autosave is on by default)",
        "effect": "lost"
       },
       {
        "way": "automatically, only when older Bubba settings or patterns cause it to reset the space holding your data (with older patterns, takes and sounds are kept)",
        "effect": "lost"
       },
       {
        "way": "when you load or remove a screen language pack (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "salt",
    "name": "Felucca [Salt]",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you erase a user sound (asks first or waits for you to turn again)",
        "effect": "lost"
       },
       {
        "way": "when you run hardware calibration (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send display or favourite changes from the editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you save a user sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "pigeon",
    "name": "PIGEON",
    "flags": "ACS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "automatically, only when playback stops after you learn or clear a MIDI mapping",
        "effect": "lost"
       },
       {
        "way": "when you calibrate the panel (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send preferences from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a PIGEON archive with the library tool (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a PIGEON session in its editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the older editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore compatible backup data with another MIDI tool (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm1move",
    "name": "FM1 Move",
    "flags": "S",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you import a preset file from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send or clear a user-sound bank directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, store, rename or erase a user sound directly with a MIDI tool (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you store a user sound from the device page (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "when you finish calibration or let it time out after holding both OCT buttons as you turn it on (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you send settings or MIDI control assignments with a computer tool or store SYN kits from the web editor (without asking)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk when you act: FiMba-1 beta panel calibration; FiMba-1 beta sound and playing setup.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "fm1quest",
    "name": "FM1 Quest",
    "flags": "AS",
    "weakest_grade": "read-in-source",
    "at_risk": [
     {
      "object": "FiMba-1 beta sound and playing setup",
      "effect": "lost",
      "ways": [
       {
        "way": "automatically during use",
        "effect": "lost"
       },
       {
        "way": "when you enter update mode with settings waiting to be saved",
        "effect": "lost"
       },
       {
        "way": "when you press SAVE on the SONG screen (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you save section A from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section B from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section C from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you save section D from SONG (without asking)",
        "effect": "lost"
       },
       {
        "way": "when you send settings with computer commands (without asking)",
        "effect": "lost"
       }
      ]
     },
     {
      "object": "FiMba-1 beta panel calibration",
      "effect": "lost",
      "ways": [
       {
        "way": "when you restore a backup from the editor (the computer asks once before restoring the whole backup)",
        "effect": "lost"
       },
       {
        "way": "when you restore a user-sound bank with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save or erase a USER sound (asks or waits for you to turn again for that slot only; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you save the current sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send a user sound from the editor (without asking; writes the whole bank)",
        "effect": "lost"
       },
       {
        "way": "when you send, save or erase a user sound with computer commands (without asking; writes the whole bank)",
        "effect": "lost"
       }
      ]
     }
    ],
    "possibly_at_risk": [],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [],
    "owner_text": "At risk by itself: FiMba-1 beta sound and playing setup. At risk when you act: FiMba-1 beta panel calibration.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   },
   {
    "to": "grooveos",
    "name": "Groove OS",
    "flags": "?",
    "weakest_grade": null,
    "at_risk": [],
    "possibly_at_risk": [
     "FiMba-1 beta sound and playing setup",
     "FiMba-1 beta panel calibration"
    ],
    "carried_over": [],
    "kept_unseen": [],
    "notes": [
     "The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it."
    ],
    "owner_text": "Possibly at risk (layout reported or inferred): FiMba-1 beta sound and playing setup; FiMba-1 beta panel calibration. The official route first puts V15 back, then installs Groove OS. Treat this firmware’s saved work as lost and back it up with its own tools before starting. Groove OS’s project saves, autosave, preferences, sample uploads and extra installed pages can also replace leftover work; nobody has published which parts of storage they use. A sound missing from PRESETS may still occupy storage, and do not count on Groove OS’s own backups to keep it.",
    "source": "flash-atlas derived/matrix.json (generated by apply_to_maps.py; do not edit by hand)"
   }
  ]
 },
 "disagreements": [
  {
   "topic": "Autosave timing after the three global encoders",
   "docs_say": "The SAVE row puts autosave roughly four seconds after a change.",
   "source_says": "SELECT, ALGORITHM and PRESETS mark values dirty but do not refresh the activity timer, so a quiet setup can save sooner than four seconds after those turns.",
   "docs_ref": {
    "kind": "doc",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "README.md",
    "lines": "200",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/README.md#L200"
   },
   "source_ref": {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "609-635",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L609-L635"
   }
  },
  {
   "topic": "Perform strip highlighting",
   "docs_say": "The black-key strip is described as highlighting keys while held.",
   "source_says": "The strip also keeps the selected material and active grain-freeze key highlighted after release.",
   "docs_ref": {
    "kind": "doc",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "README.md",
    "lines": "343-344",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/README.md#L343-L344"
   },
   "source_ref": {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "871-877",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L871-L877"
   }
  },
  {
   "topic": "Pattern bass with arbitrary held notes",
   "docs_say": "The bass roles are described as the root and fifth.",
   "source_says": "The engine uses the lowest and third sorted chord tones; this is often root and fifth for a triad, but need not be for arbitrary Keyboard or MIDI chords.",
   "docs_ref": {
    "kind": "doc",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "README.md",
    "lines": "449-454",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/README.md#L449-L454"
   },
   "source_ref": {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/dsp/kalimba.c",
    "lines": "1117-1139",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/dsp/kalimba.c#L1117-L1139"
   }
  },
  {
   "topic": "MIDI note-off while a pattern runs",
   "docs_say": "The MIDI table describes note-off as damping when Release is Damp.",
   "source_says": "Incoming note-off damps only when Release is Damp and the pattern is off; during a pattern it updates the held-note count without damping that pitch.",
   "docs_ref": {
    "kind": "doc",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "README.md",
    "lines": "359",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/README.md#L359"
   },
   "source_ref": {
    "kind": "source",
    "repo": "jadamsowers/fm1-fimba",
    "ref": "v0.6.1",
    "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
    "path": "firmware/src/app/ui.c",
    "lines": "539-543",
    "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/firmware/src/app/ui.c#L539-L543"
   }
  }
 ],
 "not_mapped": [
  "Retention after installing an older FiMba release: only this release and FoMni v0.4 were supplied, so the older FiMba loaders were not checked.",
  "Physical LED colour of PLAY is not asserted: this firmware addresses the calibrated button matrix and gives no separate named green/orange lamp state.",
  "The chip-resident updater entered by the OCT pair is outside the supplied application source; its own screens and erase policy are not mapped here."
 ],
 "mapping_scope": "Static reading only at the supplied release commit; no firmware scripts, builds, tests or hardware execution. An independent checker found zero errors in round 3 (2026-10-17).",
 "refresh_check_fixes": [
  {
   "round": 1,
   "error": "1 DATA LOSS: named switching hazards",
   "fixed": "Added first-start backup advice and named conditional startup, first SAVE/autosave, calibration, sample and browser-installer risks; each warns that no question protects the previous work, and every atlas pointer identifies the absent Les switching-table entry. Also named the installation footprint over Open USER projects, preferences and the start of its sample bank, with advice to export before installation; distinguished X0X settings from whole projects.",
   "at": "switching_note.before_first_start / overwrites_on_startup / overwrites_on_save / overwrites_at_calibration / sample_risk_on_save / editor_send / cross_firmware / atlas_status; fimba.md Before you switch firmware; switching_note.overwrites_during_install"
  },
  {
   "round": 1,
   "error": "2 MISLEADING: chip updater drops unsaved edits",
   "fixed": "Added SAVE-before-entry advice to both octave-hold entries, general save advice and recovery rows; appended the USB UBOOT request and its no-write/no-save storage row.",
   "at": "controls.button_oct_down[1]; controls.button_oct_up[1]; controls.jack_usb[7]; saving_note; fimba.md saving and recovery; fimba.storage.json install_and_startup_writes[7..8]"
  },
  {
   "round": 1,
   "error": "3 MINOR: reset confirmation timing",
   "fixed": "Made the deadline start at RESET? appearance during the first hold, and documented that the second SAVE confirms on release even when held; clarified delayed flash writes in the storage trigger.",
   "at": "controls.button_save[1..2]; modes[20]; controls.screen[13]; fimba.md RESET? rows; fimba.storage.json objects[0].parameter_edit_triggers[2]"
  },
  {
   "round": 1,
   "error": "4 MINOR: ARP hold leaves reset armed",
   "fixed": "Restricted ARP cancellation to a short tap and appended an explicit held-ARP override; updated reset mode, owner table and reset storage description.",
   "at": "controls.button_arp[2]; controls.button_arp[4]; modes[20]; fimba.md RESET? table; fimba.storage.json objects[0].parameter_edit_triggers[2]"
  },
  {
   "round": 1,
   "error": "5 MINOR: MIDI clock timeout citation",
   "fixed": "Added the exact render timeout and clock contract references without changing the confirmed action.",
   "at": "controls.jack_midi_in[2].source; controls.jack_usb[2].source"
  },
  {
   "round": 1,
   "error": "6 MINOR: migration is not an immediate save",
   "fixed": "Specified that conversion stays in memory until a later SAVE or eligible autosave; retained the existing source-confirmed storage load rule.",
   "at": "switching_note.going_back_a_version; fimba.md Before you switch firmware"
  },
  {
   "round": 1,
   "error": "7 MINOR: labels and screen-name case",
   "fixed": "Renamed only the Body refusal labels to NO HOLE, retaining - for unused slots, and capitalised the first displayed parameter name in screen actions[0..9].",
   "at": "controls.encoder_knob3[12].short_label; controls.encoder_knob4[12].short_label; controls.screen[0..9].action"
  },
  {
   "round": 1,
   "error": "Coverage: interrupted install and SAVE error",
   "fixed": "Appended the browser resume path and explicit save-failure screen, with matching owner instructions and install-row retry detail.",
   "at": "controls.jack_usb[8]; controls.screen[18]; fimba.md recovery and screen text; fimba.storage.json install_and_startup_writes[0]"
  },
  {
   "round": 1,
   "error": "Coverage: MIDI note-off disagreement",
   "fixed": "Recorded the docs omission of the pattern-off damping guard; the existing owner MIDI behavior already stated that guard.",
   "at": "disagreements[3]; fimba.md Where the docs and the firmware disagree"
  },
  {
   "round": 1,
   "error": "Coverage: raw rescue dump and limits",
   "fixed": "Added the optional Mac whole-flash read, prerequisites and no-dump-restore limit; recorded the rescue tool’s separate opt-in stock-program writes and exact confirmation behavior.",
   "at": "switching_note.back_up_first / raw_backup; fimba.md Before you switch firmware; fimba.storage.json firmware_notes.backup and install_and_startup_writes[9..10]"
  },
  {
   "round": 1,
   "error": "Coverage: author lineage",
   "fixed": "Retained jadamsowers and added the source-credited FoMni, X0X and Felucca contributors.",
   "at": "author; author_source; fimba.md opening paragraph"
  },
  {
   "round": 2,
   "error": "1 DATA LOSS: X0X return resets its whole project",
   "fixed": "Replaced the settings-only warning with the full return cascade: one successful FiMba SAVE/autosave makes X0X v1.1.0 load factory settings, sound, all32 patterns, song and motion; the reset re-enables X0X autosave, whose later eligible saves can replace old project copies. Confirmed both loaders and the X0X reset/save call sites directly; no immediate autosave at boot is claimed.",
   "at": "switching_note.cross_firmware and source; fimba.md Before you switch firmware; fimba.storage.json reads_foreign[10] and firmware_notes.x0x_return"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.encoder_knob1[8].short_label",
   "old": "STRUM MS",
   "new": "STRUM ms",
   "why": "firmware/src/app/ui.c:38@0485ed0d387ce78216428c7b19f97d77bbe10b4d"
  },
  {
   "round": "overlay-fix-r1",
   "at": "controls.encoder_knob2[5].short_label",
   "old": "GRAIN MS",
   "new": "GRAIN ms",
   "why": "firmware/src/app/ui.c:35@0485ed0d387ce78216428c7b19f97d77bbe10b4d"
  }
 ],
 "author_source": [
  {
   "kind": "doc",
   "repo": "jadamsowers/fm1-fimba",
   "ref": "v0.6.1",
   "commit": "0485ed0d387ce78216428c7b19f97d77bbe10b4d",
   "path": "README.md",
   "lines": "54-68",
   "url": "https://github.com/jadamsowers/fm1-fimba/blob/0485ed0d387ce78216428c7b19f97d77bbe10b4d/README.md#L54-L68"
  }
 ]
}