anchor.diff:    // update the references to the activeRoute and previousRoute. if you switch between routes quickly you may go to a
     // new route before the previous route's transition animation has completed. if that's the case we need to remove
     // the previous route's content before we replace the reference to the previous route.
  -  if (router.previousRoute != null &&
  -      router.previousRoute.transitionAnimationInProgress) {
  -    transitionAnimationEnd(router.previousRoute);
  -  }
  -  if (router.activeRoute != null) {
  -    router.activeRoute.active = false;
  -  }
  -  router.previousRoute = router.activeRoute;
  -  router.activeRoute = route;
  -  router.activeRoute.active = true;
  +  if (router._previousRoute != null &&
  +      router._previousRoute.transitionAnimationInProgress) {
  +    transitionAnimationEnd(router._previousRoute);
  +  }
  +  if (router._activeRoute != null) {
  +    router._activeRoute.active = false;
  +  }
  +  router._previousRoute = router._activeRoute;
  +  router._activeRoute = route;
  +  router._activeRoute.active = true;
   
     // import custom element or template
     if (route.imp != null) {
  
positive.code:     }
  
      // dispatch a popstate event
      PopStateEvent popstateEvent = new Event.eventType(
          'PopStateEvent', 'popstate', canBubble: false, cancelable: false);
      window.dispatchEvent(popstateEvent);
    }
  
    /// fireEvent(type, detail, node) - Fire a new CustomEvent(type, detail) on the node
  
negative.code:       List<WebRoute> webRoutes =
            querySelectorAll("web-route") as List<WebRoute>;
  
        _coreAnimatedPages = new CoreAnimatedPages();
        for (WebRoute route in webRoutes) {
          _coreAnimatedPages.append(route);
        }
  
        // don't know why it needs to be static, but absolute doesn't display the page
        //coreAnimatedPages.style.position = 'static';
  
        // toggle the selected page using selected="path" instead of selected="integer"
        _coreAnimatedPages.setAttribute('valueattr', 'path');
  
        // pass the transitions attribute from <app-router core-animated-pages transitions="hero-transition cross-fade">
        // to <core-animated-pages transitions="hero-transition cross-fade">
        _coreAnimatedPages.setAttribute('transitions', transitions);
  
        // set the shadow DOM's content
        shadowRoot.append(_coreAnimatedPages);
  
        // when a transition finishes, remove the previous route's content. there is a temporary overlap where both
        // the new and old route's content is in the DOM to animate the transition.
        _coreAnimatedPages.addEventListener('core-animated-pages-transition-end',
            (Event e) => transitionAnimationEnd(_previousRoute));
      }
  
      // listen for URL change events
      _popStateSubscription =
          window.onPopState.listen((PopStateEvent e) => _update());
  
      // load the web component for the current route
      _update();
    }
  
    /// clean up global event listeners
    @override
    void detached() {
      super.detached();
      if (_popStateSubscription != null) {
        _popStateSubscription.cancel();
      }
    }
  
    /// go(path, {replace}) - Navigate to the path. E.g.,
    ///   go('/home')
    void go(String path, {bool replace: false}) {
      if (mode != "pushstate") {
        // mode == hash
        path = '#' + path;
      }
      if (replace) {
  