// name -> (name, parsed map) static Map>> mechReversedMultiMapCI_cache = synchroMap(); static MultiMap mechReversedMultiMapCI(S listName) { Pair> p = mechReversedMultiMapCI_cache.get(listName); S text = mechList_opt_raw(listName); if (p != null && eq(p.a, text)) ret p.b; MultiMap map = reverseMultiMapCI(parseDoubleArrowMultiMap(new MultiMap, tlft(text))); p = pair(text, map); mechReversedMultiMapCI_cache.put(listName, p); ret p.b; }