static SS gazelle_deepZip_keepBrackets(S inputA, S inputB, O... _) { SS map = gazelle_zip_keepBrackets(inputA, inputB); if (map == null) null; SS map2 = similarEmptyMap(map); for (S a, S b : map) { bool iba = tok_isRoundOrCurlyBracketed(a), ibb = tok_isRoundOrCurlyBracketed(b); if (iba && ibb) { S aa = tok_deRoundOrCurlyBracket(a); S bb = tok_deRoundOrCurlyBracket(b); SS subMap = gazelle_deepZip_keepBrackets(aa, bb, _); if (subMap == null) null; if (!putAllStrictlyIC(map2, subMap)) null; } else if (eqic_roundBracketed(a, b)) { // OK, match } else if (!strictPutIC(map2, a, b)) null; } ret map2; }