function bilink(root) {
const map = new Map(root.leaves().map(d => [d.data.id, d]));
for (const d of root.leaves()) d.incoming = [], d.outgoing = d.data.targets.map(i => [d, map.get(i)]);
for (const d of root.leaves()) for (const o of d.outgoing) if(o[1]){o[1].incoming.push(o)};
return root;
}