code: function _Browser_application(impl) {
      var onUrlChange = impl.onUrlChange;
      var onUrlRequest = impl.onUrlRequest;
      var key = function() {
        key.a(onUrlChange(_Browser_getUrl()));
      };
  
      return _Browser_document({
        setup: function(sendToApp) {
          key.a = sendToApp;
          _Browser_window.addEventListener("popstate", key);
          _Browser_window.navigator.userAgent.indexOf("Trident") < 0 ||
            _Browser_window.addEventListener("hashchange", key);
  
          return F2(function(domNode, event) {
            if (
              !event.ctrlKey &&
              !event.metaKey &&
              !event.shiftKey &&
              event.button < 1 &&
              !domNode.target &&
              !domNode.download
            ) {
              event.preventDefault();
              var href = domNode.href;
              var curr = _Browser_getUrl();
              var next = elm$url$Url$fromString(href).a;
              sendToApp(
                onUrlRequest(
                  next &&
                  curr.protocol === next.protocol &&
                  curr.host === next.host &&
                  curr.port_.a === next.port_.a
                    ? elm$browser$Browser$Internal(next)
                    : elm$browser$Browser$External(href)
                )
              );
            }
          });
        },
        init: function(flags) {
          return A3(impl.init, flags, _Browser_getUrl(), key);
        },
        view: impl.view,
        update: impl.update,
        subscriptions: impl.subscriptions
      });
    }
docs: APPLICATION