// name -> (text, parsed map)
static Map<S, Pair<S, MultiMap<S, Pair<S>>>> mechMultiMapPairsCI_cache = synchroMap();

static MultiMap<S, Pair<S>> mechMultiMapPairsCI(S listName) {
  Pair<S, MultiMap<S, Pair<S>>> p = mechMultiMapPairsCI_cache.get(listName);
  S text = mechList_opt_raw(listName);
  if (p != null && eq(p.a, text)) ret p.b;
  MultiMap<S, Pair<S>> map = toPairsCIMultiMap(parseDoubleArrowMultiMap(new MultiMap, tlft(text)));
  p = pair(text, map);
  mechMultiMapPairsCI_cache.put(listName, p);
  ret p.b;
}