anchor.diff:      return _leaveOldRoutes(startingFrom, treePath).then((bool allowed) {
         if (allowed) {
           var base = startingFrom;
  -        var tail;
           treePath.forEach((_Match matchedRoute) {
  -          tail = matchedRoute.urlMatch.tail;
  -          var event = new RouteEnterEvent(matchedRoute.urlMatch.match,
  -              matchedRoute.urlMatch.parameters, matchedRoute.route);
  +          var event = new RouteEnterEvent._fromMatch(matchedRoute);
             _unsetAllCurrentRoutes(base);
             base._currentRoute = matchedRoute.route;
             base._currentRoute._lastEvent = event;
  
positive.code:     });
    }
  
    Map _joinParams(Map parameters, RouteEvent lastEvent) {
      if (lastEvent == null) return parameters;
      return new Map.from(lastEvent.parameters)..addAll(parameters);
    }
  
    String toString() =>  '[Route: $name]';
  
  
negative.code: class RouteEnterEvent extends RouteEvent {
  
    RouteEnterEvent(path, parameters, route)  : super(path, parameters, route);
  
    RouteEnterEvent._fromMatch(_Match m)
        : this(m.urlMatch.match, m.urlMatch.parameters, m.route);
  }
  
  class RouteLeaveEvent extends RouteEvent {
  