code: function sortDOM(node, parEl, body, state) {
  	var domIdxs = [];
  
  	var el = parEl.firstChild;
  
  	// array of new vnode idices in current (old) dom order
  	do  {
  		var n = el._node;
  		if (n.parent === node)
  			domIdxs.push(n.idx);
  	} while (el = nextSib(el));
  
  	// list of non-movable vnode indices (already in correct order in old dom)
  	var tombs = longestIncreasingSubsequence(domIdxs).map(i => domIdxs[i]);
  
  	for (var i = 0; i < tombs.length; i++)
  		body[tombs[i]]._lis = true;
  
  	state.tombs = tombs;
  
  	while (1) {
  		var r = syncLft(node, parEl, body, state, null, true);
  		if (r === BREAK_ALL) break;
  	}
  }
docs: TODO: also use the state.rgtSib and state.rgtNode bounds, plus reduce LIS range