 
 }
 
+void modMethod(FireTapDance)(byte id)
+{
+  byte count = modMethod(PressCount)[id] - 1;
+  char val = modMethod(GetKeyVal)(id, count);
+  byte type = modMethod(GetKeyType)(id, count);
+  modMethod(PressTimer)[id] = -1; // signal that the key has fired
+  PressKey(val, type);
+}
+
 byte modMethod(GetLength)(byte id)
 {
 

  {
    for (byte i = 0; i < modMethod(MAX_INDEX); i++)
    {
      if ((type != 19 || val != i) && modMethod(PressCount)[i] > 0)
      {
        modMethod(PressTimer)[i] = -1; // signal that the key has fired
        PressKey(modMethod(GetKeyVal)(i, modMethod(PressCount)[i] - 1), modMethod(GetKeyType)(i, modMethod(PressCount)[i] - 1));
        if (!modMethod(KeyIsDown)[i])
        {
          modMethod(KeyUp)(i, 19);

  {
    if (type == 19)
    {
      // if key has been fired
      if (modMethod(PressTimer)[val] < 0)
      {
        byte count = modMethod(PressCount)[val] - 1;
        char tdVal = modMethod(GetKeyVal)(val, count);
        byte tdType = modMethod(GetKeyType)(val, count);

        ReleaseKey(tdVal, tdType);
        modMethod(PressCount)[val] = 0;
        modMethod(PressTimer)[val] = 0;
      }
      modMethod(KeyIsDown)[val] = false;
    }
  }
}
