if (ans!=null) return ans;
XMLNode node = nmap.get(id);
if (node==null) throw new IOException("Unknown SigID "+id+" encountered.");
if (!node.is("sig")) throw new IOException("ID "+id+" is not a sig.");
String label = label(node);
Attr isAbstract = yes(node,"abstract") ? Attr.ABSTRACT : null;
Attr isOne = yes(node,"one") ? Attr.ONE : null;
Attr isLone = yes(node,"lone") ? Attr.LONE : null;
Attr isSome = yes(node,"some") ? Attr.SOME : null;
Attr isPrivate = yes(node,"private") ? Attr.PRIVATE : null;
Attr isMeta = yes(node,"meta") ? Attr.META : null;
Attr isEnum = yes(node,"enum") ? Attr.ENUM : null;
Attr isExact = yes(node,"exact") ? Attr.EXACT : null;
if (yes(node,"builtin")) {
if (label.equals(UNIV.label)) { id2sig.put(id, UNIV); return UNIV; }
if (label.equals(SIGINT.label)) { id2sig.put(id, SIGINT); return SIGINT; }
if (label.equals(SEQIDX.label)) { id2sig.put(id, SEQIDX); return SEQIDX; }
if (label.equals(STRING.label)) { id2sig.put(id, STRING); return STRING; }