Make test iframes visible when debugging.

Make test iframes visible when debugging.

Closes #429
diff --git a/CHANGELOG.md b/CHANGELOG.md
index fa6972d..75f59f6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## 0.12.15+11
+
+* Make test iframes visible when debugging.
+
 ## 0.12.15+10
 
 * Throw a better error if a group body is asynchronous.
diff --git a/README.md b/README.md
index bc5d6c8..dfa9b06 100644
--- a/README.md
+++ b/README.md
@@ -599,6 +599,12 @@
 controls how tests are run. You can type "restart" there to re-run your test as
 many times as you need to figure out what's going on.
 
+Normally, browser tests are run in hidden iframes. However, when debugging, the
+iframe for the current test suite is expanded to fill the browser window so you
+can see and interact with any HTML it renders. Note that the Dart animation may
+still be visible behind the iframe; to hide it, just add a `background-color` to
+the page's HTML.
+
 ## Testing With `barback`
 
 Packages using the `barback` transformer system may need to test code that's
diff --git a/lib/src/runner/browser/platform.dart b/lib/src/runner/browser/platform.dart
index 656912f..f9cd17e 100644
--- a/lib/src/runner/browser/platform.dart
+++ b/lib/src/runner/browser/platform.dart
@@ -374,7 +374,10 @@
     var webSocketUrl = url.replace(scheme: 'ws').resolve(path);
     var hostUrl = (_config.pubServeUrl == null ? url : _config.pubServeUrl)
         .resolve('packages/test/src/runner/browser/static/index.html')
-        .replace(queryParameters: {'managerUrl': webSocketUrl.toString()});
+        .replace(queryParameters: {
+          'managerUrl': webSocketUrl.toString(),
+          'debug': _config.pauseAfterLoad.toString()
+        });
 
     var future = BrowserManager.start(platform, hostUrl, completer.future,
         debug: _config.pauseAfterLoad);
diff --git a/lib/src/runner/browser/static/host.css b/lib/src/runner/browser/static/host.css
index 6a7bcc3..3e21180 100644
--- a/lib/src/runner/browser/static/host.css
+++ b/lib/src/runner/browser/static/host.css
@@ -19,6 +19,7 @@
 
 .paused #play {
   display: block;
+  z-index: 1;
 }
 
 .paused #dark {
@@ -37,6 +38,21 @@
           animation-play-state: paused;
 }
 
+.debug body {
+  margin: 0;
+  padding: 0;
+}
+
+.debug iframe {
+  visibility: visible;
+  border: none;
+  position: absolute;
+  top: 0;
+  left: 0;
+  width: 100%;
+  height: 100%;
+}
+
 /* Compiled output from
  * http://codepen.io/mknadler/pen/11b75cb014a3c382f54abf527655af21. */
 
diff --git a/lib/src/runner/browser/static/host.dart b/lib/src/runner/browser/static/host.dart
index 74015a2..4eb5d95 100644
--- a/lib/src/runner/browser/static/host.dart
+++ b/lib/src/runner/browser/static/host.dart
@@ -23,6 +23,9 @@
 /// The iframes created for each loaded test suite, indexed by the suite id.
 final _iframes = new Map<int, IFrameElement>();
 
+/// The URL for the current page.
+final _currentUrl = Uri.parse(window.location.href);
+
 /// Code that runs in the browser and loads test suites at the server's behest.
 ///
 /// One instance of this runs for each browser. When the server tells it to load
@@ -79,6 +82,10 @@
   // rendered.
   testRunner?.waitUntilDone();
 
+  if (_currentUrl.queryParameters['debug'] == 'true') {
+    document.body.classes.add('debug');
+  }
+
   runZoned(() {
     var serverChannel = _connectToServer();
     serverChannel.stream.listen((message) {
@@ -116,8 +123,7 @@
 MultiChannel _connectToServer() {
   // The `managerUrl` query parameter contains the WebSocket URL of the remote
   // [BrowserManager] with which this communicates.
-  var currentUrl = Uri.parse(window.location.href);
-  var webSocket = new WebSocket(currentUrl.queryParameters['managerUrl']);
+  var webSocket = new WebSocket(_currentUrl.queryParameters['managerUrl']);
 
   var controller = new StreamChannelController(sync: true);
   webSocket.onMessage.listen((message) {
diff --git a/lib/src/runner/browser/static/host.dart.js b/lib/src/runner/browser/static/host.dart.js
index 274769f..d52559d 100644
--- a/lib/src/runner/browser/static/host.dart.js
+++ b/lib/src/runner/browser/static/host.dart.js
@@ -1,4 +1,4 @@
-// Generated by dart2js, the Dart to JavaScript compiler version: 1.19.1.
+// Generated by dart2js, the Dart to JavaScript compiler version: 1.20.1.
 // The code supports the following hooks:
 // dartPrint(message):
 //    if this function is defined it is called instead of the Dart [print]
@@ -10,7 +10,7 @@
 //    [args] is passed to [dartMainRunner].
 //
 // dartDeferredLibraryLoader(uri, successCallback, errorCallback):
-//    if this function is defined, it will be called when a deferered library
+//    if this function is defined, it will be called when a deferred library
 //    is loaded. It should load and eval the javascript of `uri`, and call
 //    successCallback. If it fails to do so, it should call errorCallback with
 //    an error.
@@ -647,7 +647,7 @@
       }
     },
     JSArray: {
-      "^": "Interceptor;",
+      "^": "Interceptor;$ti",
       checkMutable$1: function(receiver, reason) {
         if (!!receiver.immutable$list)
           throw H.wrapException(new P.UnsupportedError(reason));
@@ -707,7 +707,7 @@
         }
       },
       map$1: function(receiver, f) {
-        return H.setRuntimeTypeInfo(new H.MappedListIterable(receiver, f), [null, null]);
+        return new H.MappedListIterable(receiver, f, [null, null]);
       },
       join$1: function(receiver, separator) {
         var t1, list, i, t2;
@@ -938,26 +938,26 @@
       }
     },
     JSUnmodifiableArray: {
-      "^": "JSArray;"
+      "^": "JSArray;$ti"
     },
     ArrayIterator: {
-      "^": "Object;__interceptors$_iterable,__interceptors$_length,__interceptors$_index,__interceptors$_current",
+      "^": "Object;_iterable,__interceptors$_length,_index,__interceptors$_current",
       get$current: function() {
         return this.__interceptors$_current;
       },
       moveNext$0: function() {
         var t1, $length, t2;
-        t1 = this.__interceptors$_iterable;
+        t1 = this._iterable;
         $length = t1.length;
         if (this.__interceptors$_length !== $length)
           throw H.wrapException(H.throwConcurrentModificationError(t1));
-        t2 = this.__interceptors$_index;
+        t2 = this._index;
         if (t2 >= $length) {
           this.__interceptors$_current = null;
           return false;
         }
         this.__interceptors$_current = t1[t2];
-        this.__interceptors$_index = t2 + 1;
+        this._index = t2 + 1;
         return true;
       }
     },
@@ -1197,9 +1197,6 @@
       substring$1: function($receiver, startIndex) {
         return this.substring$2($receiver, startIndex, null);
       },
-      toLowerCase$0: function(receiver) {
-        return receiver.toLowerCase();
-      },
       trim$0: function(receiver) {
         var result, endIndex, startIndex, t1, endIndex0;
         result = receiver.trim();
@@ -1238,6 +1235,15 @@
         }
         return result;
       },
+      padRight$2: function(receiver, width, padding) {
+        var delta = J.$sub$n(width, receiver.length);
+        if (J.$le$n(delta, 0))
+          return receiver;
+        return receiver + this.$mul(padding, delta);
+      },
+      padRight$1: function($receiver, width) {
+        return this.padRight$2($receiver, width, " ");
+      },
       get$codeUnits: function(receiver) {
         return new H.CodeUnits(receiver);
       },
@@ -1402,7 +1408,7 @@
       }
     },
     ListIterable: {
-      "^": "Iterable;",
+      "^": "Iterable;$ti",
       get$iterator: function(_) {
         return new H.ListIterator(this, this.get$length(this), 0, null);
       },
@@ -1480,7 +1486,7 @@
         return this.join$1($receiver, "");
       },
       map$1: function(_, f) {
-        return H.setRuntimeTypeInfo(new H.MappedListIterable(this, f), [H.getRuntimeTypeArgument(this, "ListIterable", 0), null]);
+        return new H.MappedListIterable(this, f, [H.getRuntimeTypeArgument(this, "ListIterable", 0), null]);
       },
       fold$2: function(_, initialValue, combine) {
         var $length, value, i;
@@ -1521,10 +1527,10 @@
       $isEfficientLength: 1
     },
     SubListIterable: {
-      "^": "ListIterable;_iterable,__internal$_start,_endOrLength",
+      "^": "ListIterable;__internal$_iterable,__internal$_start,_endOrLength,$ti",
       get$_endIndex: function() {
         var $length, t1;
-        $length = J.get$length$asx(this._iterable);
+        $length = J.get$length$asx(this.__internal$_iterable);
         t1 = this._endOrLength;
         if (t1 == null || J.$gt$n(t1, $length))
           return $length;
@@ -1532,7 +1538,7 @@
       },
       get$_startIndex: function() {
         var $length, t1;
-        $length = J.get$length$asx(this._iterable);
+        $length = J.get$length$asx(this.__internal$_iterable);
         t1 = this.__internal$_start;
         if (J.$gt$n(t1, $length))
           return $length;
@@ -1540,7 +1546,7 @@
       },
       get$length: function(_) {
         var $length, t1, t2;
-        $length = J.get$length$asx(this._iterable);
+        $length = J.get$length$asx(this.__internal$_iterable);
         t1 = this.__internal$_start;
         if (J.$ge$n(t1, $length))
           return 0;
@@ -1553,12 +1559,12 @@
         var realIndex = J.$add$ns(this.get$_startIndex(), index);
         if (J.$lt$n(index, 0) || J.$ge$n(realIndex, this.get$_endIndex()))
           throw H.wrapException(P.IndexError$(index, this, "index", null, null));
-        return J.elementAt$1$ax(this._iterable, realIndex);
+        return J.elementAt$1$ax(this.__internal$_iterable, realIndex);
       },
       toList$1$growable: function(_, growable) {
         var start, t1, t2, end, end0, $length, result, t3, i, t4;
         start = this.__internal$_start;
-        t1 = this._iterable;
+        t1 = this.__internal$_iterable;
         t2 = J.getInterceptor$asx(t1);
         end = t2.get$length(t1);
         end0 = this._endOrLength;
@@ -1569,7 +1575,7 @@
           $length = 0;
         if (typeof $length !== "number")
           return H.iae($length);
-        result = H.setRuntimeTypeInfo(new Array($length), [H.getTypeArgumentByIndex(this, 0)]);
+        result = H.setRuntimeTypeInfo(new Array($length), this.$ti);
         if (typeof $length !== "number")
           return H.iae($length);
         t3 = J.getInterceptor$ns(start);
@@ -1600,25 +1606,25 @@
       },
       static: {
         SubListIterable$: function(_iterable, _start, _endOrLength, $E) {
-          var t1 = H.setRuntimeTypeInfo(new H.SubListIterable(_iterable, _start, _endOrLength), [$E]);
+          var t1 = new H.SubListIterable(_iterable, _start, _endOrLength, [$E]);
           t1.SubListIterable$3(_iterable, _start, _endOrLength, $E);
           return t1;
         }
       }
     },
     ListIterator: {
-      "^": "Object;_iterable,_length,_index,_current",
+      "^": "Object;__internal$_iterable,__internal$_length,__internal$_index,_current",
       get$current: function() {
         return this._current;
       },
       moveNext$0: function() {
         var t1, t2, $length, t3;
-        t1 = this._iterable;
+        t1 = this.__internal$_iterable;
         t2 = J.getInterceptor$asx(t1);
         $length = t2.get$length(t1);
-        if (!J.$eq$(this._length, $length))
+        if (!J.$eq$(this.__internal$_length, $length))
           throw H.wrapException(new P.ConcurrentModificationError(t1));
-        t3 = this._index;
+        t3 = this.__internal$_index;
         if (typeof $length !== "number")
           return H.iae($length);
         if (t3 >= $length) {
@@ -1626,22 +1632,20 @@
           return false;
         }
         this._current = t2.elementAt$1(t1, t3);
-        ++this._index;
+        ++this.__internal$_index;
         return true;
       }
     },
     MappedIterable: {
-      "^": "Iterable;_iterable,_f",
+      "^": "Iterable;__internal$_iterable,_f,$ti",
       get$iterator: function(_) {
-        var t1 = new H.MappedIterator(null, J.get$iterator$ax(this._iterable), this._f);
-        t1.$builtinTypeInfo = this.$builtinTypeInfo;
-        return t1;
+        return new H.MappedIterator(null, J.get$iterator$ax(this.__internal$_iterable), this._f, this.$ti);
       },
       get$length: function(_) {
-        return J.get$length$asx(this._iterable);
+        return J.get$length$asx(this.__internal$_iterable);
       },
       get$isEmpty: function(_) {
-        return J.get$isEmpty$asx(this._iterable);
+        return J.get$isEmpty$asx(this.__internal$_iterable);
       },
       $asIterable: function($S, $T) {
         return [$T];
@@ -1649,17 +1653,17 @@
       static: {
         MappedIterable_MappedIterable: function(iterable, $function, $S, $T) {
           if (!!J.getInterceptor(iterable).$isEfficientLength)
-            return H.setRuntimeTypeInfo(new H.EfficientLengthMappedIterable(iterable, $function), [$S, $T]);
-          return H.setRuntimeTypeInfo(new H.MappedIterable(iterable, $function), [$S, $T]);
+            return new H.EfficientLengthMappedIterable(iterable, $function, [$S, $T]);
+          return new H.MappedIterable(iterable, $function, [$S, $T]);
         }
       }
     },
     EfficientLengthMappedIterable: {
-      "^": "MappedIterable;_iterable,_f",
+      "^": "MappedIterable;__internal$_iterable,_f,$ti",
       $isEfficientLength: 1
     },
     MappedIterator: {
-      "^": "Iterator;_current,_iterator,_f",
+      "^": "Iterator;_current,_iterator,_f,$ti",
       moveNext$0: function() {
         var t1 = this._iterator;
         if (t1.moveNext$0()) {
@@ -1674,7 +1678,7 @@
       }
     },
     MappedListIterable: {
-      "^": "ListIterable;_source,_f",
+      "^": "ListIterable;_source,_f,$ti",
       get$length: function(_) {
         return J.get$length$asx(this._source);
       },
@@ -1690,15 +1694,16 @@
       $isEfficientLength: 1
     },
     WhereIterable: {
-      "^": "Iterable;_iterable,_f",
+      "^": "Iterable;__internal$_iterable,_f,$ti",
       get$iterator: function(_) {
-        var t1 = new H.WhereIterator(J.get$iterator$ax(this._iterable), this._f);
-        t1.$builtinTypeInfo = this.$builtinTypeInfo;
-        return t1;
+        return new H.WhereIterator(J.get$iterator$ax(this.__internal$_iterable), this._f, this.$ti);
+      },
+      map$1: function(_, f) {
+        return new H.MappedIterable(this, f, [H.getTypeArgumentByIndex(this, 0), null]);
       }
     },
     WhereIterator: {
-      "^": "Iterator;_iterator,_f",
+      "^": "Iterator;_iterator,_f,$ti",
       moveNext$0: function() {
         var t1, t2;
         for (t1 = this._iterator, t2 = this._f; t1.moveNext$0();)
@@ -1711,9 +1716,9 @@
       }
     },
     ExpandIterable: {
-      "^": "Iterable;_iterable,_f",
+      "^": "Iterable;__internal$_iterable,_f,$ti",
       get$iterator: function(_) {
-        return new H.ExpandIterator(J.get$iterator$ax(this._iterable), this._f, C.C_EmptyIterator, null);
+        return new H.ExpandIterator(J.get$iterator$ax(this.__internal$_iterable), this._f, C.C_EmptyIterator, null);
       },
       $asIterable: function($S, $T) {
         return [$T];
@@ -1743,15 +1748,13 @@
       }
     },
     SkipWhileIterable: {
-      "^": "Iterable;_iterable,_f",
+      "^": "Iterable;__internal$_iterable,_f,$ti",
       get$iterator: function(_) {
-        var t1 = new H.SkipWhileIterator(J.get$iterator$ax(this._iterable), this._f, false);
-        t1.$builtinTypeInfo = this.$builtinTypeInfo;
-        return t1;
+        return new H.SkipWhileIterator(J.get$iterator$ax(this.__internal$_iterable), this._f, false, this.$ti);
       }
     },
     SkipWhileIterator: {
-      "^": "Iterator;_iterator,_f,_hasSkipped",
+      "^": "Iterator;_iterator,_f,_hasSkipped,$ti",
       moveNext$0: function() {
         var t1, t2;
         if (!this._hasSkipped) {
@@ -1776,7 +1779,7 @@
       }
     },
     FixedLengthListMixin: {
-      "^": "Object;",
+      "^": "Object;$ti",
       set$length: function(receiver, newLength) {
         throw H.wrapException(new P.UnsupportedError("Cannot change the length of a fixed-length list"));
       },
@@ -1785,7 +1788,7 @@
       }
     },
     UnmodifiableListMixin: {
-      "^": "Object;",
+      "^": "Object;$ti",
       $indexSet: function(_, index, value) {
         throw H.wrapException(new P.UnsupportedError("Cannot modify an unmodifiable list"));
       },
@@ -1809,13 +1812,13 @@
       $isEfficientLength: 1
     },
     UnmodifiableListBase: {
-      "^": "ListBase+UnmodifiableListMixin;",
-      $isList: 1,
+      "^": "ListBase+UnmodifiableListMixin;$ti",
       $asList: null,
+      $isList: 1,
       $isEfficientLength: 1
     },
     ReversedListIterable: {
-      "^": "ListIterable;_source",
+      "^": "ListIterable;_source,$ti",
       get$length: function(_) {
         return J.get$length$asx(this._source);
       },
@@ -1860,16 +1863,17 @@
       t2.supportsWorkers = t4;
       t2.fromCommandLine = t3 && t5;
       t2.topEventLoop = new H._EventLoop(P.ListQueue$(null, H._IsolateEvent), 0);
-      t2.isolates = H.setRuntimeTypeInfo(new H.JsLinkedHashMap(0, null, null, null, null, null, 0), [P.$int, H._IsolateContext]);
-      t2.managers = H.setRuntimeTypeInfo(new H.JsLinkedHashMap(0, null, null, null, null, null, 0), [P.$int, null]);
+      t3 = P.$int;
+      t2.isolates = new H.JsLinkedHashMap(0, null, null, null, null, null, 0, [t3, H._IsolateContext]);
+      t2.managers = new H.JsLinkedHashMap(0, null, null, null, null, null, 0, [t3, null]);
       if (t2.isWorker === true) {
-        t3 = new H._MainManagerStub();
-        t2.mainManager = t3;
+        t4 = new H._MainManagerStub();
+        t2.mainManager = t4;
         self.onmessage = function(f, a) {
           return function(e) {
             f(a, e);
           };
-        }(H.IsolateNatives__processWorkerMessage, t3);
+        }(H.IsolateNatives__processWorkerMessage, t4);
         self.dartPrint = self.dartPrint || function(serialize) {
           return function(object) {
             if (self.console && self.console.log)
@@ -1882,11 +1886,11 @@
       if (init.globalState.isWorker === true)
         return;
       t2 = init.globalState.nextIsolateId++;
-      t3 = H.setRuntimeTypeInfo(new H.JsLinkedHashMap(0, null, null, null, null, null, 0), [P.$int, H.RawReceivePortImpl]);
-      t4 = P.LinkedHashSet_LinkedHashSet(null, null, null, P.$int);
+      t4 = new H.JsLinkedHashMap(0, null, null, null, null, null, 0, [t3, H.RawReceivePortImpl]);
+      t3 = P.LinkedHashSet_LinkedHashSet(null, null, null, t3);
       t5 = new H.RawReceivePortImpl(0, null, false);
-      rootContext = new H._IsolateContext(t2, t3, t4, init.createNewIsolate(), t5, new H.CapabilityImpl(H.random64()), new H.CapabilityImpl(H.random64()), false, false, [], P.LinkedHashSet_LinkedHashSet(null, null, null, null), null, null, false, true, P.LinkedHashSet_LinkedHashSet(null, null, null, null));
-      t4.add$1(0, 0);
+      rootContext = new H._IsolateContext(t2, t4, t3, init.createNewIsolate(), t5, new H.CapabilityImpl(H.random64()), new H.CapabilityImpl(H.random64()), false, false, [], P.LinkedHashSet_LinkedHashSet(null, null, null, null), null, null, false, true, P.LinkedHashSet_LinkedHashSet(null, null, null, null));
+      t3.add$1(0, 0);
       rootContext._addRegistration$2(0, t5);
       init.globalState.rootContext = rootContext;
       init.globalState.currentContext = rootContext;
@@ -1948,11 +1952,12 @@
           startPaused = t1.$index(msg, "startPaused");
           replyTo = new H._Deserializer(true, []).deserialize$1(t1.$index(msg, "replyTo"));
           t1 = init.globalState.nextIsolateId++;
-          t2 = H.setRuntimeTypeInfo(new H.JsLinkedHashMap(0, null, null, null, null, null, 0), [P.$int, H.RawReceivePortImpl]);
-          t3 = P.LinkedHashSet_LinkedHashSet(null, null, null, P.$int);
+          t2 = P.$int;
+          t3 = new H.JsLinkedHashMap(0, null, null, null, null, null, 0, [t2, H.RawReceivePortImpl]);
+          t2 = P.LinkedHashSet_LinkedHashSet(null, null, null, t2);
           t4 = new H.RawReceivePortImpl(0, null, false);
-          context = new H._IsolateContext(t1, t2, t3, init.createNewIsolate(), t4, new H.CapabilityImpl(H.random64()), new H.CapabilityImpl(H.random64()), false, false, [], P.LinkedHashSet_LinkedHashSet(null, null, null, null), null, null, false, true, P.LinkedHashSet_LinkedHashSet(null, null, null, null));
-          t3.add$1(0, 0);
+          context = new H._IsolateContext(t1, t3, t2, init.createNewIsolate(), t4, new H.CapabilityImpl(H.random64()), new H.CapabilityImpl(H.random64()), false, false, [], P.LinkedHashSet_LinkedHashSet(null, null, null, null), null, null, false, true, P.LinkedHashSet_LinkedHashSet(null, null, null, null));
+          t2.add$1(0, 0);
           context._addRegistration$2(0, t4);
           init.globalState.topEventLoop.events._add$1(new H._IsolateEvent(context, new H.IsolateNatives__processWorkerMessage_closure(entryPoint, args, message, isSpawnUri, startPaused, replyTo), "worker-start"));
           init.globalState.currentContext = context;
@@ -2288,7 +2293,7 @@
           if (t2) {
             t1 = t1.mainManager;
             t2 = P.LinkedHashMap__makeLiteral(["command", "close"]);
-            t2 = new H._Serializer(true, H.setRuntimeTypeInfo(new P._LinkedIdentityHashMap(0, null, null, null, null, null, 0), [null, P.$int])).serialize$1(t2);
+            t2 = new H._Serializer(true, new P._LinkedIdentityHashMap(0, null, null, null, null, null, 0, [null, P.$int])).serialize$1(t2);
             t1.toString;
             self.postMessage(t2);
           }
@@ -3560,13 +3565,13 @@
       return (Math.random() * 0x100000000 >>> 0) + (Math.random() * 0x100000000 >>> 0) * 4294967296;
     },
     setRuntimeTypeInfo: function(target, rti) {
-      target.$builtinTypeInfo = rti;
+      target.$ti = rti;
       return target;
     },
     getRuntimeTypeInfo: function(target) {
       if (target == null)
         return;
-      return target.$builtinTypeInfo;
+      return target.$ti;
     },
     getRuntimeTypeArguments: function(target, substitutionName) {
       return H.substitute(target["$as" + H.S(substitutionName)], H.getRuntimeTypeInfo(target));
@@ -3606,18 +3611,18 @@
           allDynamic = false;
         t1 = buffer._contents += H.S(H.runtimeTypeToString(argument, onTypeVariable));
       }
-      return allDynamic ? "" : "<" + H.S(buffer) + ">";
+      return allDynamic ? "" : "<" + buffer.toString$0(0) + ">";
     },
     substitute: function(substitution, $arguments) {
-      if (typeof substitution == "function") {
-        substitution = substitution.apply(null, $arguments);
-        if (substitution == null)
-          return substitution;
-        if (typeof substitution === "object" && substitution !== null && substitution.constructor === Array)
-          return substitution;
-        if (typeof substitution == "function")
-          return substitution.apply(null, $arguments);
-      }
+      if (substitution == null)
+        return $arguments;
+      substitution = substitution.apply(null, $arguments);
+      if (substitution == null)
+        return;
+      if (typeof substitution === "object" && substitution !== null && substitution.constructor === Array)
+        return substitution;
+      if (typeof substitution == "function")
+        return substitution.apply(null, $arguments);
       return $arguments;
     },
     areSubtypes: function(s, t) {
@@ -3634,7 +3639,7 @@
       return signature.apply(context, H.getRuntimeTypeArguments(context, contextName));
     },
     isSubtype: function(s, t) {
-      var t1, typeOfS, t2, typeOfT, substitution;
+      var t1, typeOfS, t2, typeOfT, typeOfTString, substitution;
       if (s === t)
         return true;
       if (s == null || t == null)
@@ -3648,9 +3653,10 @@
       t2 = typeof t === "object" && t !== null && t.constructor === Array;
       typeOfT = t2 ? t[0] : t;
       if (typeOfT !== typeOfS) {
-        if (!('$is' + H.runtimeTypeToString(typeOfT, null) in typeOfS.prototype))
+        typeOfTString = H.runtimeTypeToString(typeOfT, null);
+        if (!('$is' + typeOfTString in typeOfS.prototype))
           return false;
-        substitution = typeOfS.prototype["$as" + H.S(H.runtimeTypeToString(typeOfT, null))];
+        substitution = typeOfS.prototype["$as" + H.S(typeOfTString)];
       } else
         substitution = null;
       if (!t1 && substitution == null || !t2)
@@ -4000,7 +4006,7 @@
       $isMap: 1
     },
     ConstantStringMap: {
-      "^": "ConstantMap;__js_helper$_length,_jsObject,_keys",
+      "^": "ConstantMap;__js_helper$_length,_jsObject,_keys,$ti",
       get$length: function(_) {
         return this.__js_helper$_length;
       },
@@ -4434,7 +4440,7 @@
       }
     },
     JsLinkedHashMap: {
-      "^": "Object;__js_helper$_length,_strings,_nums,_rest,_first,_last,_modifications",
+      "^": "Object;__js_helper$_length,_strings,_nums,_rest,_first,_last,_modifications,$ti",
       get$length: function(_) {
         return this.__js_helper$_length;
       },
@@ -4445,7 +4451,7 @@
         return !this.get$isEmpty(this);
       },
       get$keys: function() {
-        return H.setRuntimeTypeInfo(new H.LinkedHashMapKeyIterable(this), [H.getTypeArgumentByIndex(this, 0)]);
+        return new H.LinkedHashMapKeyIterable(this, [H.getTypeArgumentByIndex(this, 0)]);
       },
       get$values: function(_) {
         return H.MappedIterable_MappedIterable(this.get$keys(), new H.JsLinkedHashMap_values_closure(this), H.getTypeArgumentByIndex(this, 0), H.getTypeArgumentByIndex(this, 1));
@@ -4667,7 +4673,7 @@
       $isMap: 1,
       static: {
         JsLinkedHashMap_JsLinkedHashMap$es6: function($K, $V) {
-          return H.setRuntimeTypeInfo(new H.JsLinkedHashMap(0, null, null, null, null, null, 0), [$K, $V]);
+          return new H.JsLinkedHashMap(0, null, null, null, null, null, 0, [$K, $V]);
         }
       }
     },
@@ -4681,26 +4687,26 @@
       "^": "Object;hashMapCellKey<,hashMapCellValue@,_next,_previous<"
     },
     LinkedHashMapKeyIterable: {
-      "^": "Iterable;_map",
+      "^": "Iterable;__js_helper$_map,$ti",
       get$length: function(_) {
-        return this._map.__js_helper$_length;
+        return this.__js_helper$_map.__js_helper$_length;
       },
       get$isEmpty: function(_) {
-        return this._map.__js_helper$_length === 0;
+        return this.__js_helper$_map.__js_helper$_length === 0;
       },
       get$iterator: function(_) {
         var t1, t2;
-        t1 = this._map;
+        t1 = this.__js_helper$_map;
         t2 = new H.LinkedHashMapKeyIterator(t1, t1._modifications, null, null);
         t2._cell = t1._first;
         return t2;
       },
       contains$1: function(_, element) {
-        return this._map.containsKey$1(element);
+        return this.__js_helper$_map.containsKey$1(element);
       },
       forEach$1: function(_, f) {
         var t1, cell, modifications;
-        t1 = this._map;
+        t1 = this.__js_helper$_map;
         cell = t1._first;
         modifications = t1._modifications;
         for (; cell != null;) {
@@ -4713,12 +4719,12 @@
       $isEfficientLength: 1
     },
     LinkedHashMapKeyIterator: {
-      "^": "Object;_map,_modifications,_cell,__js_helper$_current",
+      "^": "Object;__js_helper$_map,_modifications,_cell,__js_helper$_current",
       get$current: function() {
         return this.__js_helper$_current;
       },
       moveNext$0: function() {
-        var t1 = this._map;
+        var t1 = this.__js_helper$_map;
         if (this._modifications !== t1._modifications)
           throw H.wrapException(new P.ConcurrentModificationError(t1));
         else {
@@ -4741,13 +4747,13 @@
       }
     },
     initHooks_closure0: {
-      "^": "Closure:31;getUnknownTag",
+      "^": "Closure:22;getUnknownTag",
       call$2: function(o, tag) {
         return this.getUnknownTag(o, tag);
       }
     },
     initHooks_closure1: {
-      "^": "Closure:28;prototypeForTag",
+      "^": "Closure:29;prototypeForTag",
       call$1: function(tag) {
         return this.prototypeForTag(tag);
       }
@@ -5076,14 +5082,21 @@
     },
     NativeTypedArray_ListMixin: {
       "^": "NativeTypedArray+ListMixin;",
-      $isList: 1,
+      $asJavaScriptIndexingBehavior: Isolate.functionThatReturnsNull,
+      $asJSIndexable: Isolate.functionThatReturnsNull,
       $asList: function() {
         return [P.$double];
       },
+      $isList: 1,
       $isEfficientLength: 1
     },
     NativeTypedArray_ListMixin_FixedLengthListMixin: {
-      "^": "NativeTypedArray_ListMixin+FixedLengthListMixin;"
+      "^": "NativeTypedArray_ListMixin+FixedLengthListMixin;",
+      $asJavaScriptIndexingBehavior: Isolate.functionThatReturnsNull,
+      $asJSIndexable: Isolate.functionThatReturnsNull,
+      $asList: function() {
+        return [P.$double];
+      }
     },
     NativeTypedArrayOfInt: {
       "^": "NativeTypedArray_ListMixin_FixedLengthListMixin0;",
@@ -5110,14 +5123,21 @@
     },
     NativeTypedArray_ListMixin0: {
       "^": "NativeTypedArray+ListMixin;",
-      $isList: 1,
+      $asJavaScriptIndexingBehavior: Isolate.functionThatReturnsNull,
+      $asJSIndexable: Isolate.functionThatReturnsNull,
       $asList: function() {
         return [P.$int];
       },
+      $isList: 1,
       $isEfficientLength: 1
     },
     NativeTypedArray_ListMixin_FixedLengthListMixin0: {
-      "^": "NativeTypedArray_ListMixin0+FixedLengthListMixin;"
+      "^": "NativeTypedArray_ListMixin0+FixedLengthListMixin;",
+      $asJavaScriptIndexingBehavior: Isolate.functionThatReturnsNull,
+      $asJSIndexable: Isolate.functionThatReturnsNull,
+      $asList: function() {
+        return [P.$int];
+      }
     },
     NativeFloat32List: {
       "^": "NativeTypedArrayOfDouble;",
@@ -5294,7 +5314,7 @@
       else if (!!t1.$isFuture)
         object.then$2$onError(thenCallback, errorCallback);
       else {
-        future = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null]);
+        future = new P._Future(0, $.Zone__current, null, [null]);
         future._state = 4;
         future._resultOrListeners = object;
         future._thenNoZoneRegistration$2(thenCallback, null);
@@ -5324,12 +5344,12 @@
         return zone.registerUnaryCallback$1(errorHandler);
     },
     Future_Future$value: function(value, $T) {
-      var t1 = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [$T]);
+      var t1 = new P._Future(0, $.Zone__current, null, [$T]);
       t1._asyncComplete$1(value);
       return t1;
     },
     Completer_Completer$sync: function($T) {
-      return H.setRuntimeTypeInfo(new P._SyncCompleter(H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [$T])), [$T]);
+      return new P._SyncCompleter(new P._Future(0, $.Zone__current, null, [$T]), [$T]);
     },
     _microtaskLoop: function() {
       var t1, t2;
@@ -5406,15 +5426,10 @@
       t1.scheduleMicrotask$1(t1.bindCallback$2$runGuarded(callback, true));
     },
     StreamIterator_StreamIterator: function(stream, $T) {
-      var t1, t2, t3;
-      t1 = H.setRuntimeTypeInfo(new P._StreamIteratorImpl(null, null, null, 0), [$T]);
-      t2 = t1.get$_async$_onData();
-      t3 = t1.get$_onError();
-      t1._subscription = stream.listen$4$cancelOnError$onDone$onError(t2, true, t1.get$_onDone(), t3);
-      return t1;
+      return new P._StreamIterator(null, stream, false, [$T]);
     },
     StreamController_StreamController: function(onCancel, onListen, onPause, onResume, sync, $T) {
-      return H.setRuntimeTypeInfo(new P._SyncStreamController(null, 0, null, onListen, onPause, onResume, onCancel), [$T]);
+      return new P._SyncStreamController(null, 0, null, onListen, onPause, onResume, onCancel, [$T]);
     },
     _runGuarded: function(notificationHandler) {
       var result, e, s, exception, t1;
@@ -5462,7 +5477,7 @@
     },
     _cancelAndError: function(subscription, future, error, stackTrace) {
       var cancelFuture = subscription.cancel$0();
-      if (!!J.getInterceptor(cancelFuture).$isFuture)
+      if (!!J.getInterceptor(cancelFuture).$isFuture && cancelFuture !== $.$get$Future__nullFuture())
         cancelFuture.whenComplete$1(new P._cancelAndError_closure(future, error, stackTrace));
       else
         future._completeError$2(error, stackTrace);
@@ -5472,7 +5487,7 @@
     },
     _cancelAndValue: function(subscription, future, value) {
       var cancelFuture = subscription.cancel$0();
-      if (!!J.getInterceptor(cancelFuture).$isFuture)
+      if (!!J.getInterceptor(cancelFuture).$isFuture && cancelFuture !== $.$get$Future__nullFuture())
         cancelFuture.whenComplete$1(new P._cancelAndValue_closure(future, value));
       else
         future._complete$1(value);
@@ -5517,7 +5532,7 @@
       var t1 = {};
       t1.error = error;
       P._schedulePriorityAsyncCallback(new P._rootHandleUncaughtError_closure(t1, stackTrace));
-    }, "call$5", "async___rootHandleUncaughtError$closure", 10, 0, 20],
+    }, "call$5", "async___rootHandleUncaughtError$closure", 10, 0, 19],
     _rootRun: [function($self, $parent, zone, f) {
       var old, previous, t1;
       if (J.$eq$($.Zone__current, zone))
@@ -5648,7 +5663,7 @@
       }
     },
     _AsyncRun__initializeScheduleImmediate_closure: {
-      "^": "Closure:29;_box_0,div,span",
+      "^": "Closure:30;_box_0,div,span",
       call$1: function(callback) {
         var t1, t2;
         ++init.globalState.topEventLoop._activeJsAsyncCount;
@@ -5685,16 +5700,16 @@
       }
     },
     _wrapJsFunctionForAsync_closure: {
-      "^": "Closure:48;$protected",
+      "^": "Closure:27;$protected",
       call$2: function(errorCode, result) {
         this.$protected(errorCode, result);
       }
     },
     Future: {
-      "^": "Object;"
+      "^": "Object;$ti"
     },
     _Completer: {
-      "^": "Object;future<",
+      "^": "Object;future<,$ti",
       completeError$2: function(error, stackTrace) {
         var replacement;
         error = error != null ? error : new P.NullThrownError();
@@ -5713,7 +5728,7 @@
       }
     },
     _AsyncCompleter: {
-      "^": "_Completer;future",
+      "^": "_Completer;future,$ti",
       complete$1: function(_, value) {
         var t1 = this.future;
         if (t1._state !== 0)
@@ -5728,7 +5743,7 @@
       }
     },
     _SyncCompleter: {
-      "^": "_Completer;future",
+      "^": "_Completer;future,$ti",
       complete$1: [function(_, value) {
         var t1 = this.future;
         if (t1._state !== 0)
@@ -5736,7 +5751,7 @@
         t1._complete$1(value);
       }, function($receiver) {
         return this.complete$1($receiver, null);
-      }, "complete$0", "call$1", "call$0", "get$complete", 0, 2, 27, 0],
+      }, "complete$0", "call$1", "call$0", "get$complete", 0, 2, 28, 0],
       _completeError$2: function(error, stackTrace) {
         this.future._completeError$2(error, stackTrace);
       }
@@ -5769,11 +5784,11 @@
         t2 = H.getDynamicRuntimeType();
         t2 = H.buildFunctionType(t2, [t2, t2])._isTest$1(t1);
         t3 = J.getInterceptor$x(asyncError);
-        t4 = this.result;
+        t4 = this.result._zone;
         if (t2)
-          return t4._zone.runBinary$3(t1, t3.get$error(asyncError), asyncError.get$stackTrace());
+          return t4.runBinary$3(t1, t3.get$error(asyncError), asyncError.get$stackTrace());
         else
-          return t4._zone.runUnary$2(t1, t3.get$error(asyncError));
+          return t4.runUnary$2(t1, t3.get$error(asyncError));
       },
       handleWhenComplete$0: function() {
         return this.result._zone.run$1(this.callback);
@@ -5783,7 +5798,7 @@
       }
     },
     _Future: {
-      "^": "Object;_state@,_zone,_resultOrListeners<",
+      "^": "Object;_state<,_zone,_resultOrListeners<,$ti",
       get$_isChained: function() {
         return this._state === 2;
       },
@@ -5803,15 +5818,14 @@
         return this.then$2$onError(f, null);
       },
       _thenNoZoneRegistration$2: function(f, onError) {
-        var result = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null]);
+        var result = new P._Future(0, $.Zone__current, null, [null]);
         this._addListener$1(new P._FutureListener(null, result, onError == null ? 1 : 3, f, onError));
         return result;
       },
       whenComplete$1: function(action) {
         var t1, result;
         t1 = $.Zone__current;
-        result = new P._Future(0, t1, null);
-        result.$builtinTypeInfo = this.$builtinTypeInfo;
+        result = new P._Future(0, t1, null, this.$ti);
         this._addListener$1(new P._FutureListener(null, result, 8, t1 !== C.C__RootZone ? t1.registerCallback$1(action) : action, null));
         return result;
       },
@@ -5915,7 +5929,7 @@
       static: {
         _Future__chainForeignFuture: function(source, target) {
           var e, s, exception, t1;
-          target.set$_state(1);
+          target._state = 1;
           try {
             source.then$2$onError(new P._Future__chainForeignFuture_closure(target), new P._Future__chainForeignFuture_closure0(target));
           } catch (exception) {
@@ -6179,9 +6193,9 @@
       "^": "Object;callback,next"
     },
     Stream: {
-      "^": "Object;",
+      "^": "Object;$ti",
       map$1: function(_, convert) {
-        return H.setRuntimeTypeInfo(new P._MapStream(convert, this), [H.getRuntimeTypeArgument(this, "Stream", 0), null]);
+        return new P._MapStream(convert, this, [H.getRuntimeTypeArgument(this, "Stream", 0), null]);
       },
       pipe$1: function(streamConsumer) {
         return streamConsumer.addStream$1(this).then$1(new P.Stream_pipe_closure(streamConsumer));
@@ -6189,7 +6203,7 @@
       contains$1: function(_, needle) {
         var t1, future;
         t1 = {};
-        future = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [P.bool]);
+        future = new P._Future(0, $.Zone__current, null, [P.bool]);
         t1.subscription = null;
         t1.subscription = this.listen$4$cancelOnError$onDone$onError(new P.Stream_contains_closure(t1, this, needle, future), true, new P.Stream_contains_closure0(future), future.get$_completeError());
         return future;
@@ -6197,7 +6211,7 @@
       forEach$1: function(_, action) {
         var t1, future;
         t1 = {};
-        future = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null]);
+        future = new P._Future(0, $.Zone__current, null, [null]);
         t1.subscription = null;
         t1.subscription = this.listen$4$cancelOnError$onDone$onError(new P.Stream_forEach_closure(t1, this, action, future), true, new P.Stream_forEach_closure0(future), future.get$_completeError());
         return future;
@@ -6205,7 +6219,7 @@
       get$length: function(_) {
         var t1, future;
         t1 = {};
-        future = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [P.$int]);
+        future = new P._Future(0, $.Zone__current, null, [P.$int]);
         t1.count = 0;
         this.listen$4$cancelOnError$onDone$onError(new P.Stream_length_closure(t1), true, new P.Stream_length_closure0(t1, future), future.get$_completeError());
         return future;
@@ -6213,15 +6227,16 @@
       get$isEmpty: function(_) {
         var t1, future;
         t1 = {};
-        future = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [P.bool]);
+        future = new P._Future(0, $.Zone__current, null, [P.bool]);
         t1.subscription = null;
         t1.subscription = this.listen$4$cancelOnError$onDone$onError(new P.Stream_isEmpty_closure(t1, future), true, new P.Stream_isEmpty_closure0(future), future.get$_completeError());
         return future;
       },
       toList$0: function(_) {
-        var result, future;
-        result = H.setRuntimeTypeInfo([], [H.getRuntimeTypeArgument(this, "Stream", 0)]);
-        future = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [[P.List, H.getRuntimeTypeArgument(this, "Stream", 0)]]);
+        var t1, result, future;
+        t1 = H.getRuntimeTypeArgument(this, "Stream", 0);
+        result = H.setRuntimeTypeInfo([], [t1]);
+        future = new P._Future(0, $.Zone__current, null, [[P.List, t1]]);
         this.listen$4$cancelOnError$onDone$onError(new P.Stream_toList_closure(this, result), true, new P.Stream_toList_closure0(result, future), future.get$_completeError());
         return future;
       }
@@ -6253,7 +6268,7 @@
       }
     },
     Stream_contains__closure0: {
-      "^": "Closure:30;_box_0,future",
+      "^": "Closure:31;_box_0,future",
       call$1: function(isMatch) {
         if (isMatch === true)
           P._cancelAndValue(this._box_0.subscription, this.future, true);
@@ -6338,7 +6353,7 @@
       "^": "Object;"
     },
     _StreamController: {
-      "^": "Object;_state@",
+      "^": "Object;_state<,$ti",
       get$_pendingEvents: function() {
         if ((this._state & 8) === 0)
           return this._varData;
@@ -6349,21 +6364,17 @@
         if ((this._state & 8) === 0) {
           t1 = this._varData;
           if (t1 == null) {
-            t1 = new P._StreamImplEvents(null, null, 0);
-            t1.$builtinTypeInfo = this.$builtinTypeInfo;
+            t1 = new P._StreamImplEvents(null, null, 0, this.$ti);
             this._varData = t1;
           }
           return t1;
         }
         state = this._varData;
-        if (state.get$varData() == null) {
-          t1 = new P._StreamImplEvents(null, null, 0);
-          t1.$builtinTypeInfo = this.$builtinTypeInfo;
-          state.varData = t1;
-        }
+        if (state.get$varData() == null)
+          state.varData = new P._StreamImplEvents(null, null, 0, this.$ti);
         return state.varData;
       },
-      get$_subscription: function() {
+      get$_async$_subscription: function() {
         if ((this._state & 8) !== 0)
           return this._varData.get$varData();
         return this._varData;
@@ -6376,7 +6387,7 @@
       _ensureDoneFuture$0: function() {
         var t1 = this._doneFuture;
         if (t1 == null) {
-          t1 = (this._state & 2) !== 0 ? $.$get$Future__nullFuture() : H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null]);
+          t1 = (this._state & 2) !== 0 ? $.$get$Future__nullFuture() : new P._Future(0, $.Zone__current, null, [null]);
           this._doneFuture = t1;
         }
         return t1;
@@ -6404,7 +6415,7 @@
         this._async$_addError$2(error, stackTrace);
       }, function(error) {
         return this.addError$2(error, null);
-      }, "addError$1", "call$2", "call$1", "get$addError", 2, 2, 10, 0],
+      }, "addError$1", "call$2", "call$1", "get$addError", 2, 2, 33, 0],
       close$0: function(_) {
         var t1 = this._state;
         if ((t1 & 4) !== 0)
@@ -6420,16 +6431,11 @@
         return this._ensureDoneFuture$0();
       },
       _async$_add$1: function(value) {
-        var t1, t2;
-        t1 = this._state;
+        var t1 = this._state;
         if ((t1 & 1) !== 0)
           this._sendData$1(value);
-        else if ((t1 & 3) === 0) {
-          t1 = this._ensurePendingEvents$0();
-          t2 = new P._DelayedData(value, null);
-          t2.$builtinTypeInfo = this.$builtinTypeInfo;
-          t1.add$1(0, t2);
-        }
+        else if ((t1 & 3) === 0)
+          this._ensurePendingEvents$0().add$1(0, new P._DelayedData(value, null, this.$ti));
       },
       _async$_addError$2: function(error, stackTrace) {
         var t1 = this._state;
@@ -6439,16 +6445,16 @@
           this._ensurePendingEvents$0().add$1(0, new P._DelayedError(error, stackTrace, null));
       },
       _subscribe$4: function(onData, onError, onDone, cancelOnError) {
-        var t1, subscription, pendingEvents, addState;
+        var t1, t2, subscription, pendingEvents, addState;
         if ((this._state & 3) !== 0)
           throw H.wrapException(new P.StateError("Stream has already been listened to."));
         t1 = $.Zone__current;
-        subscription = new P._ControllerSubscription(this, null, null, null, t1, cancelOnError ? 1 : 0, null, null);
-        subscription.$builtinTypeInfo = this.$builtinTypeInfo;
+        t2 = cancelOnError ? 1 : 0;
+        subscription = new P._ControllerSubscription(this, null, null, null, t1, t2, null, null, this.$ti);
         subscription._BufferingStreamSubscription$4(onData, onError, onDone, cancelOnError, H.getTypeArgumentByIndex(this, 0));
         pendingEvents = this.get$_pendingEvents();
-        t1 = this._state |= 1;
-        if ((t1 & 8) !== 0) {
+        t2 = this._state |= 1;
+        if ((t2 & 8) !== 0) {
           addState = this._varData;
           addState.set$varData(subscription);
           addState.addSubscription.resume$0();
@@ -6474,7 +6480,7 @@
               t1 = H.unwrapException(exception);
               e = t1;
               s = H.getTraceFromException(exception);
-              result0 = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null]);
+              result0 = new P._Future(0, $.Zone__current, null, [null]);
               result0._asyncCompleteError$2(e, s);
               result = result0;
             }
@@ -6505,20 +6511,20 @@
     _SyncStreamControllerDispatch: {
       "^": "Object;",
       _sendData$1: function(data) {
-        this.get$_subscription()._async$_add$1(data);
+        this.get$_async$_subscription()._async$_add$1(data);
       },
       _sendError$2: function(error, stackTrace) {
-        this.get$_subscription()._async$_addError$2(error, stackTrace);
+        this.get$_async$_subscription()._async$_addError$2(error, stackTrace);
       },
       _sendDone$0: function() {
-        this.get$_subscription()._close$0();
+        this.get$_async$_subscription()._close$0();
       }
     },
     _SyncStreamController: {
-      "^": "_StreamController+_SyncStreamControllerDispatch;_varData,_state,_doneFuture,onListen,onPause,onResume,onCancel"
+      "^": "_StreamController+_SyncStreamControllerDispatch;_varData,_state,_doneFuture,onListen,onPause,onResume,onCancel,$ti"
     },
     _ControllerStream: {
-      "^": "_StreamImpl;_controller",
+      "^": "_StreamImpl;_controller,$ti",
       get$hashCode: function(_) {
         return (H.Primitives_objectHashCode(this._controller) ^ 892482866) >>> 0;
       },
@@ -6533,7 +6539,7 @@
       }
     },
     _ControllerSubscription: {
-      "^": "_BufferingStreamSubscription;_controller,_async$_onData,_onError,_onDone,_zone,_state,_cancelFuture,_pending",
+      "^": "_BufferingStreamSubscription;_controller,_async$_onData,_onError,_onDone,_zone,_state,_cancelFuture,_pending,$ti",
       _onCancel$0: function() {
         return this._controller._recordCancel$1(this);
       },
@@ -6551,7 +6557,7 @@
       }, "call$0", "get$_onResume", 0, 0, 2]
     },
     _StreamSinkWrapper: {
-      "^": "Object;_async$_target",
+      "^": "Object;_async$_target,$ti",
       add$1: [function(_, data) {
         var t1 = this._async$_target;
         if (t1._state >= 4)
@@ -6567,7 +6573,7 @@
       "^": "Object;"
     },
     _BufferingStreamSubscription: {
-      "^": "Object;_state@",
+      "^": "Object;_state<,$ti",
       _setPendingEvents$1: function(pendingEvents) {
         if (pendingEvents == null)
           return;
@@ -6617,10 +6623,10 @@
       cancel$0: function() {
         var t1 = (this._state & 4294967279) >>> 0;
         this._state = t1;
-        if ((t1 & 8) !== 0)
-          return this._cancelFuture;
-        this._cancel$0();
-        return this._cancelFuture;
+        if ((t1 & 8) === 0)
+          this._cancel$0();
+        t1 = this._cancelFuture;
+        return t1 == null ? $.$get$Future__nullFuture() : t1;
       },
       _cancel$0: function() {
         var t1 = (this._state | 8) >>> 0;
@@ -6638,7 +6644,7 @@
         if (t1 < 32)
           this._sendData$1(data);
         else
-          this._addPending$1(H.setRuntimeTypeInfo(new P._DelayedData(data, null), [null]));
+          this._addPending$1(new P._DelayedData(data, null, [null]));
       }],
       _async$_addError$2: ["super$_BufferingStreamSubscription$_addError", function(error, stackTrace) {
         var t1 = this._state;
@@ -6671,7 +6677,7 @@
         var pending, t1;
         pending = this._pending;
         if (pending == null) {
-          pending = H.setRuntimeTypeInfo(new P._StreamImplEvents(null, null, 0), [null]);
+          pending = new P._StreamImplEvents(null, null, 0, [null]);
           this._pending = pending;
         }
         pending.add$1(0, $event);
@@ -6691,14 +6697,19 @@
         this._checkState$1((t1 & 4) !== 0);
       },
       _sendError$2: function(error, stackTrace) {
-        var t1, t2;
+        var t1, t2, t3;
         t1 = this._state;
         t2 = new P._BufferingStreamSubscription__sendError_sendError(this, error, stackTrace);
         if ((t1 & 1) !== 0) {
           this._state = (t1 | 16) >>> 0;
           this._cancel$0();
           t1 = this._cancelFuture;
-          if (!!J.getInterceptor(t1).$isFuture)
+          if (!!J.getInterceptor(t1).$isFuture) {
+            t3 = $.$get$Future__nullFuture();
+            t3 = t1 == null ? t3 != null : t1 !== t3;
+          } else
+            t3 = false;
+          if (t3)
             t1.whenComplete$1(t2);
           else
             t2.call$0();
@@ -6708,12 +6719,17 @@
         }
       },
       _sendDone$0: function() {
-        var t1, t2;
+        var t1, t2, t3;
         t1 = new P._BufferingStreamSubscription__sendDone_sendDone(this);
         this._cancel$0();
         this._state = (this._state | 16) >>> 0;
         t2 = this._cancelFuture;
-        if (!!J.getInterceptor(t2).$isFuture)
+        if (!!J.getInterceptor(t2).$isFuture) {
+          t3 = $.$get$Future__nullFuture();
+          t3 = t2 == null ? t3 != null : t2 !== t3;
+        } else
+          t3 = false;
+        if (t3)
           t2.whenComplete$1(t1);
         else
           t1.call$0();
@@ -6810,7 +6826,7 @@
       }
     },
     _StreamImpl: {
-      "^": "Stream;",
+      "^": "Stream;$ti",
       listen$4$cancelOnError$onDone$onError: function(onData, cancelOnError, onDone, onError) {
         return this._controller._subscribe$4(onData, onError, onDone, true === cancelOnError);
       },
@@ -6831,7 +6847,7 @@
       "^": "Object;next@"
     },
     _DelayedData: {
-      "^": "_DelayedEvent;value,next",
+      "^": "_DelayedEvent;value,next,$ti",
       perform$1: function(dispatch) {
         dispatch._sendData$1(this.value);
       }
@@ -6855,7 +6871,7 @@
       }
     },
     _PendingEvents: {
-      "^": "Object;_state@",
+      "^": "Object;_state<",
       schedule$1: function(dispatch) {
         var t1 = this._state;
         if (t1 === 1)
@@ -6890,7 +6906,7 @@
       }
     },
     _StreamImplEvents: {
-      "^": "_PendingEvents;firstPendingEvent,lastPendingEvent,_state",
+      "^": "_PendingEvents;firstPendingEvent,lastPendingEvent,_state,$ti",
       get$isEmpty: function(_) {
         return this.lastPendingEvent == null;
       },
@@ -6906,7 +6922,7 @@
       }
     },
     _DoneStreamSubscription: {
-      "^": "Object;_zone,_state@,_onDone",
+      "^": "Object;_zone,_state<,_onDone",
       _schedule$0: function() {
         if ((this._state & 2) !== 0)
           return;
@@ -6929,7 +6945,7 @@
         }
       },
       cancel$0: function() {
-        return;
+        return $.$get$Future__nullFuture();
       },
       _sendDone$0: [function() {
         var t1 = (this._state & 4294967293) >>> 0;
@@ -6942,60 +6958,11 @@
           this._zone.runGuarded$1(t1);
       }, "call$0", "get$_sendDone", 0, 0, 2]
     },
-    _StreamIteratorImpl: {
-      "^": "Object;_subscription,_async$_current,_futureOrPrefetch,_state@",
-      _clear$0: function(_) {
-        this._subscription = null;
-        this._futureOrPrefetch = null;
-        this._async$_current = null;
-        this._state = 1;
-      },
-      _async$_onData$1: [function(data) {
-        var hasNext;
-        if (this._state === 2) {
-          this._async$_current = data;
-          hasNext = this._futureOrPrefetch;
-          this._futureOrPrefetch = null;
-          this._state = 0;
-          hasNext._complete$1(true);
-          return;
-        }
-        this._subscription.pause$0(0);
-        this._futureOrPrefetch = data;
-        this._state = 3;
-      }, "call$1", "get$_async$_onData", 2, 0, function() {
-        return H.computeSignature(function(T) {
-          return {func: 1, v: true, args: [T]};
-        }, this.$receiver, "_StreamIteratorImpl");
-      }],
-      _onError$2: [function(error, stackTrace) {
-        var hasNext;
-        if (this._state === 2) {
-          hasNext = this._futureOrPrefetch;
-          this._clear$0(0);
-          hasNext._completeError$2(error, stackTrace);
-          return;
-        }
-        this._subscription.pause$0(0);
-        this._futureOrPrefetch = new P.AsyncError(error, stackTrace);
-        this._state = 4;
-      }, function(error) {
-        return this._onError$2(error, null);
-      }, "_onError$1", "call$2", "call$1", "get$_onError", 2, 2, 10, 0],
-      _onDone$0: [function() {
-        if (this._state === 2) {
-          var hasNext = this._futureOrPrefetch;
-          this._clear$0(0);
-          hasNext._complete$1(false);
-          return;
-        }
-        this._subscription.pause$0(0);
-        this._futureOrPrefetch = null;
-        this._state = 5;
-      }, "call$0", "get$_onDone", 0, 0, 2]
+    _StreamIterator: {
+      "^": "Object;_async$_subscription,_stateData,_isPaused,$ti"
     },
     _EmptyStream: {
-      "^": "Stream;",
+      "^": "Stream;$ti",
       listen$4$cancelOnError$onDone$onError: function(onData, cancelOnError, onDone, onError) {
         var t1 = new P._DoneStreamSubscription($.Zone__current, 0, onDone);
         t1._schedule$0();
@@ -7027,7 +6994,7 @@
       }
     },
     _ForwardingStream: {
-      "^": "Stream;",
+      "^": "Stream;$ti",
       listen$4$cancelOnError$onDone$onError: function(onData, cancelOnError, onDone, onError) {
         return this._createSubscription$4(onData, onError, onDone, true === cancelOnError);
       },
@@ -7051,7 +7018,7 @@
       }
     },
     _ForwardingStreamSubscription: {
-      "^": "_BufferingStreamSubscription;_stream,_subscription,_async$_onData,_onError,_onDone,_zone,_state,_cancelFuture,_pending",
+      "^": "_BufferingStreamSubscription;_stream,_async$_subscription,_async$_onData,_onError,_onDone,_zone,_state,_cancelFuture,_pending,$ti",
       _async$_add$1: function(data) {
         if ((this._state & 2) !== 0)
           return;
@@ -7063,21 +7030,21 @@
         this.super$_BufferingStreamSubscription$_addError(error, stackTrace);
       },
       _onPause$0: [function() {
-        var t1 = this._subscription;
+        var t1 = this._async$_subscription;
         if (t1 == null)
           return;
         t1.pause$0(0);
       }, "call$0", "get$_onPause", 0, 0, 2],
       _onResume$0: [function() {
-        var t1 = this._subscription;
+        var t1 = this._async$_subscription;
         if (t1 == null)
           return;
         t1.resume$0();
       }, "call$0", "get$_onResume", 0, 0, 2],
       _onCancel$0: function() {
-        var t1 = this._subscription;
+        var t1 = this._async$_subscription;
         if (t1 != null) {
-          this._subscription = null;
+          this._async$_subscription = null;
           return t1.cancel$0();
         }
         return;
@@ -7091,7 +7058,7 @@
       }],
       _handleError$2: [function(error, stackTrace) {
         this._stream._handleError$3(error, stackTrace, this);
-      }, "call$2", "get$_handleError", 4, 0, 33],
+      }, "call$2", "get$_handleError", 4, 0, 34],
       _handleDone$0: [function() {
         this._close$0();
       }, "call$0", "get$_handleDone", 0, 0, 2],
@@ -7099,23 +7066,25 @@
         var t1, t2;
         t1 = this.get$_handleData();
         t2 = this.get$_handleError();
-        this._subscription = this._stream._async$_source.listen$3$onDone$onError(t1, this.get$_handleDone(), t2);
+        this._async$_subscription = this._stream._async$_source.listen$3$onDone$onError(t1, this.get$_handleDone(), t2);
       },
       $as_BufferingStreamSubscription: function($S, $T) {
         return [$T];
       },
       static: {
         _ForwardingStreamSubscription$: function(_stream, onData, onError, onDone, cancelOnError, $S, $T) {
-          var t1 = $.Zone__current;
-          t1 = H.setRuntimeTypeInfo(new P._ForwardingStreamSubscription(_stream, null, null, null, null, t1, cancelOnError ? 1 : 0, null, null), [$S, $T]);
-          t1._BufferingStreamSubscription$4(onData, onError, onDone, cancelOnError, $T);
-          t1._ForwardingStreamSubscription$5(_stream, onData, onError, onDone, cancelOnError, $S, $T);
-          return t1;
+          var t1, t2;
+          t1 = $.Zone__current;
+          t2 = cancelOnError ? 1 : 0;
+          t2 = new P._ForwardingStreamSubscription(_stream, null, null, null, null, t1, t2, null, null, [$S, $T]);
+          t2._BufferingStreamSubscription$4(onData, onError, onDone, cancelOnError, $T);
+          t2._ForwardingStreamSubscription$5(_stream, onData, onError, onDone, cancelOnError, $S, $T);
+          return t2;
         }
       }
     },
     _MapStream: {
-      "^": "_ForwardingStream;_transform,_async$_source",
+      "^": "_ForwardingStream;_transform,_async$_source,$ti",
       _handleData$2: function(inputEvent, sink) {
         var outputEvent, e, s, exception, t1;
         outputEvent = null;
@@ -7205,43 +7174,43 @@
         implementation = this._delegationTarget.get$_handleUncaughtError();
         implZone = implementation.zone;
         return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, error, stackTrace);
-      }, "call$3", "get$handleUncaughtError", 6, 0, 34],
+      }, "call$3", "get$handleUncaughtError", 6, 0, 35],
       run$2: [function(zone, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_run();
         implZone = implementation.zone;
         return implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, f);
-      }, "call$2", "get$run", 4, 0, 35],
+      }, "call$2", "get$run", 4, 0, 36],
       runUnary$3: [function(zone, f, arg) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_runUnary();
         implZone = implementation.zone;
         return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, f, arg);
-      }, "call$3", "get$runUnary", 6, 0, 36],
+      }, "call$3", "get$runUnary", 6, 0, 37],
       runBinary$4: [function(zone, f, arg1, arg2) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_runBinary();
         implZone = implementation.zone;
         return implementation.$function.call$6(implZone, P._parentDelegate(implZone), zone, f, arg1, arg2);
-      }, "call$4", "get$runBinary", 8, 0, 37],
+      }, "call$4", "get$runBinary", 8, 0, 38],
       registerCallback$2: [function(zone, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_registerCallback();
         implZone = implementation.zone;
         return implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, f);
-      }, "call$2", "get$registerCallback", 4, 0, 38],
+      }, "call$2", "get$registerCallback", 4, 0, 39],
       registerUnaryCallback$2: [function(zone, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_registerUnaryCallback();
         implZone = implementation.zone;
         return implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, f);
-      }, "call$2", "get$registerUnaryCallback", 4, 0, 39],
+      }, "call$2", "get$registerUnaryCallback", 4, 0, 40],
       registerBinaryCallback$2: [function(zone, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_registerBinaryCallback();
         implZone = implementation.zone;
         return implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, f);
-      }, "call$2", "get$registerBinaryCallback", 4, 0, 40],
+      }, "call$2", "get$registerBinaryCallback", 4, 0, 43],
       errorCallback$3: [function(zone, error, stackTrace) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_errorCallback();
@@ -7249,13 +7218,13 @@
         if (implZone === C.C__RootZone)
           return;
         return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, error, stackTrace);
-      }, "call$3", "get$errorCallback", 6, 0, 43],
+      }, "call$3", "get$errorCallback", 6, 0, 48],
       scheduleMicrotask$2: [function(zone, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_scheduleMicrotask();
         implZone = implementation.zone;
         implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, f);
-      }, "call$2", "get$scheduleMicrotask", 4, 0, 22],
+      }, "call$2", "get$scheduleMicrotask", 4, 0, 21],
       createTimer$3: [function(zone, duration, f) {
         var implementation, implZone;
         implementation = this._delegationTarget.get$_createTimer();
@@ -7383,35 +7352,35 @@
         return implementation.$function.call$5(t1, parentDelegate, this, specification, zoneValues);
       }, function() {
         return this.fork$2$specification$zoneValues(null, null);
-      }, "fork$0", "call$2$specification$zoneValues", "call$0", "get$fork", 0, 5, 11, 0, 0],
+      }, "fork$0", "call$2$specification$zoneValues", "call$0", "get$fork", 0, 5, 10, 0, 0],
       run$1: [function(f) {
         var implementation, t1, parentDelegate;
         implementation = this._run;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$4(t1, parentDelegate, this, f);
-      }, "call$1", "get$run", 2, 0, 12],
+      }, "call$1", "get$run", 2, 0, 11],
       runUnary$2: [function(f, arg) {
         var implementation, t1, parentDelegate;
         implementation = this._runUnary;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$5(t1, parentDelegate, this, f, arg);
-      }, "call$2", "get$runUnary", 4, 0, 13],
+      }, "call$2", "get$runUnary", 4, 0, 12],
       runBinary$3: [function(f, arg1, arg2) {
         var implementation, t1, parentDelegate;
         implementation = this._runBinary;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$6(t1, parentDelegate, this, f, arg1, arg2);
-      }, "call$3", "get$runBinary", 6, 0, 14],
+      }, "call$3", "get$runBinary", 6, 0, 13],
       registerCallback$1: [function(callback) {
         var implementation, t1, parentDelegate;
         implementation = this._registerCallback;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$4(t1, parentDelegate, this, callback);
-      }, "call$1", "get$registerCallback", 2, 0, 15],
+      }, "call$1", "get$registerCallback", 2, 0, 14],
       registerUnaryCallback$1: [function(callback) {
         var implementation, t1, parentDelegate;
         implementation = this._registerUnaryCallback;
@@ -7425,7 +7394,7 @@
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$4(t1, parentDelegate, this, callback);
-      }, "call$1", "get$registerBinaryCallback", 2, 0, 16],
+      }, "call$1", "get$registerBinaryCallback", 2, 0, 15],
       errorCallback$2: [function(error, stackTrace) {
         var implementation, implementationZone, parentDelegate;
         implementation = this._errorCallback;
@@ -7434,7 +7403,7 @@
           return;
         parentDelegate = P._parentDelegate(implementationZone);
         return implementation.$function.call$5(implementationZone, parentDelegate, this, error, stackTrace);
-      }, "call$2", "get$errorCallback", 4, 0, 17],
+      }, "call$2", "get$errorCallback", 4, 0, 16],
       scheduleMicrotask$1: [function(f) {
         var implementation, t1, parentDelegate;
         implementation = this._scheduleMicrotask;
@@ -7448,14 +7417,14 @@
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$5(t1, parentDelegate, this, duration, f);
-      }, "call$2", "get$createTimer", 4, 0, 18],
+      }, "call$2", "get$createTimer", 4, 0, 17],
       createPeriodicTimer$2: [function(duration, f) {
         var implementation, t1, parentDelegate;
         implementation = this._createPeriodicTimer;
         t1 = implementation.zone;
         parentDelegate = P._parentDelegate(t1);
         return implementation.$function.call$5(t1, parentDelegate, this, duration, f);
-      }, "call$2", "get$createPeriodicTimer", 4, 0, 19],
+      }, "call$2", "get$createPeriodicTimer", 4, 0, 18],
       print$1: [function(_, line) {
         var implementation, t1, parentDelegate;
         implementation = this._print;
@@ -7633,43 +7602,43 @@
         return P._rootFork(null, null, this, specification, zoneValues);
       }, function() {
         return this.fork$2$specification$zoneValues(null, null);
-      }, "fork$0", "call$2$specification$zoneValues", "call$0", "get$fork", 0, 5, 11, 0, 0],
+      }, "fork$0", "call$2$specification$zoneValues", "call$0", "get$fork", 0, 5, 10, 0, 0],
       run$1: [function(f) {
         if ($.Zone__current === C.C__RootZone)
           return f.call$0();
         return P._rootRun(null, null, this, f);
-      }, "call$1", "get$run", 2, 0, 12],
+      }, "call$1", "get$run", 2, 0, 11],
       runUnary$2: [function(f, arg) {
         if ($.Zone__current === C.C__RootZone)
           return f.call$1(arg);
         return P._rootRunUnary(null, null, this, f, arg);
-      }, "call$2", "get$runUnary", 4, 0, 13],
+      }, "call$2", "get$runUnary", 4, 0, 12],
       runBinary$3: [function(f, arg1, arg2) {
         if ($.Zone__current === C.C__RootZone)
           return f.call$2(arg1, arg2);
         return P._rootRunBinary(null, null, this, f, arg1, arg2);
-      }, "call$3", "get$runBinary", 6, 0, 14],
+      }, "call$3", "get$runBinary", 6, 0, 13],
       registerCallback$1: [function(f) {
         return f;
-      }, "call$1", "get$registerCallback", 2, 0, 15],
+      }, "call$1", "get$registerCallback", 2, 0, 14],
       registerUnaryCallback$1: [function(f) {
         return f;
       }, "call$1", "get$registerUnaryCallback", 2, 0, 9],
       registerBinaryCallback$1: [function(f) {
         return f;
-      }, "call$1", "get$registerBinaryCallback", 2, 0, 16],
+      }, "call$1", "get$registerBinaryCallback", 2, 0, 15],
       errorCallback$2: [function(error, stackTrace) {
         return;
-      }, "call$2", "get$errorCallback", 4, 0, 17],
+      }, "call$2", "get$errorCallback", 4, 0, 16],
       scheduleMicrotask$1: [function(f) {
         P._rootScheduleMicrotask(null, null, this, f);
       }, "call$1", "get$scheduleMicrotask", 2, 0, 4],
       createTimer$2: [function(duration, f) {
         return P.Timer__createTimer(duration, f);
-      }, "call$2", "get$createTimer", 4, 0, 18],
+      }, "call$2", "get$createTimer", 4, 0, 17],
       createPeriodicTimer$2: [function(duration, f) {
         return P.Timer__createPeriodicTimer(duration, f);
-      }, "call$2", "get$createPeriodicTimer", 4, 0, 19],
+      }, "call$2", "get$createPeriodicTimer", 4, 0, 18],
       print$1: [function(_, line) {
         H.printString(line);
       }, "call$1", "get$print", 2, 0, 7]
@@ -7693,7 +7662,7 @@
       }
     },
     runZoned_closure: {
-      "^": "Closure:20;onError",
+      "^": "Closure:19;onError",
       call$5: function($self, $parent, zone, error, stackTrace) {
         var e, s, t1, t2, exception;
         try {
@@ -7711,8 +7680,7 @@
           e = t1;
           s = H.getTraceFromException(exception);
           t1 = e;
-          t2 = error;
-          if (t1 == null ? t2 == null : t1 === t2)
+          if (t1 == null ? error == null : t1 === error)
             return $parent.handleUncaughtError$3(zone, error, stackTrace);
           else
             return $parent.handleUncaughtError$3(zone, e, s);
@@ -7722,16 +7690,16 @@
   }], ["dart.collection", "dart:collection",, P, {
     "^": "",
     LinkedHashMap_LinkedHashMap$_empty: function($K, $V) {
-      return H.setRuntimeTypeInfo(new H.JsLinkedHashMap(0, null, null, null, null, null, 0), [$K, $V]);
+      return new H.JsLinkedHashMap(0, null, null, null, null, null, 0, [$K, $V]);
     },
     LinkedHashMap__makeEmpty: function() {
-      return H.setRuntimeTypeInfo(new H.JsLinkedHashMap(0, null, null, null, null, null, 0), [null, null]);
+      return new H.JsLinkedHashMap(0, null, null, null, null, null, 0, [null, null]);
     },
     LinkedHashMap__makeLiteral: function(keyValuePairs) {
-      return H.fillLiteralMap(keyValuePairs, H.setRuntimeTypeInfo(new H.JsLinkedHashMap(0, null, null, null, null, null, 0), [null, null]));
+      return H.fillLiteralMap(keyValuePairs, new H.JsLinkedHashMap(0, null, null, null, null, null, 0, [null, null]));
     },
     HashMap_HashMap: function(equals, hashCode, isValidKey, $K, $V) {
-      return H.setRuntimeTypeInfo(new P._HashMap(0, null, null, null, null), [$K, $V]);
+      return new P._HashMap(0, null, null, null, null, [$K, $V]);
     },
     HashMap_HashMap$from: function(other, $K, $V) {
       var result = P.HashMap_HashMap(null, null, null, $K, $V);
@@ -7870,7 +7838,7 @@
       parts.push(ultimateString);
     },
     LinkedHashSet_LinkedHashSet: function(equals, hashCode, isValidKey, $E) {
-      return H.setRuntimeTypeInfo(new P._LinkedHashSet(0, null, null, null, null, null, 0), [$E]);
+      return new P._LinkedHashSet(0, null, null, null, null, null, 0, [$E]);
     },
     Maps_mapToString: function(m) {
       var t1, result, t2;
@@ -7883,7 +7851,7 @@
         t2 = result;
         t2._contents = t2.get$_contents() + "{";
         t1.first = true;
-        J.forEach$1$ax(m, new P.Maps_mapToString_closure(t1, result));
+        m.forEach$1(0, new P.Maps_mapToString_closure(t1, result));
         t1 = result;
         t1._contents = t1.get$_contents() + "}";
       } finally {
@@ -7896,7 +7864,7 @@
       return t1.charCodeAt(0) == 0 ? t1 : t1;
     },
     _HashMap: {
-      "^": "Object;_collection$_length,_collection$_strings,_collection$_nums,_collection$_rest,_collection$_keys",
+      "^": "Object;_collection$_length,_collection$_strings,_collection$_nums,_collection$_rest,_collection$_keys,$ti",
       get$length: function(_) {
         return this._collection$_length;
       },
@@ -8087,7 +8055,7 @@
       }
     },
     _LinkedIdentityHashMap: {
-      "^": "JsLinkedHashMap;__js_helper$_length,_strings,_nums,_rest,_first,_last,_modifications",
+      "^": "JsLinkedHashMap;__js_helper$_length,_strings,_nums,_rest,_first,_last,_modifications,$ti",
       internalComputeHashCode$1: function(key) {
         return H.objectHashCode(key) & 0x3ffffff;
       },
@@ -8105,12 +8073,12 @@
       },
       static: {
         _LinkedIdentityHashMap__LinkedIdentityHashMap$es6: function($K, $V) {
-          return H.setRuntimeTypeInfo(new P._LinkedIdentityHashMap(0, null, null, null, null, null, 0), [$K, $V]);
+          return new P._LinkedIdentityHashMap(0, null, null, null, null, null, 0, [$K, $V]);
         }
       }
     },
     _LinkedHashSet: {
-      "^": "_HashSetBase;_collection$_length,_collection$_strings,_collection$_nums,_collection$_rest,_collection$_first,_collection$_last,_collection$_modifications",
+      "^": "_HashSetBase;_collection$_length,_collection$_strings,_collection$_nums,_collection$_rest,_collection$_first,_collection$_last,_collection$_modifications,$ti",
       get$iterator: function(_) {
         var t1 = new P._LinkedHashSetIterator(this, this._collection$_modifications, null, null);
         t1._collection$_cell = this._collection$_first;
@@ -8356,22 +8324,22 @@
       }
     },
     _HashSetBase: {
-      "^": "SetBase;"
+      "^": "SetBase;$ti"
     },
     IterableBase: {
-      "^": "Iterable;"
+      "^": "Iterable;$ti"
     },
     ListBase: {
-      "^": "Object_ListMixin;"
+      "^": "Object_ListMixin;$ti"
     },
     Object_ListMixin: {
       "^": "Object+ListMixin;",
-      $isList: 1,
       $asList: null,
+      $isList: 1,
       $isEfficientLength: 1
     },
     ListMixin: {
-      "^": "Object;",
+      "^": "Object;$ti",
       get$iterator: function(receiver) {
         return new H.ListIterator(receiver, this.get$length(receiver), 0, null);
       },
@@ -8416,7 +8384,7 @@
         return false;
       },
       map$1: function(receiver, f) {
-        return H.setRuntimeTypeInfo(new H.MappedListIterable(receiver, f), [null, null]);
+        return new H.MappedListIterable(receiver, f, [null, null]);
       },
       skip$1: function(receiver, count) {
         return H.SubListIterable$(receiver, count, null, H.getRuntimeTypeArgument(receiver, "ListMixin", 0));
@@ -8531,30 +8499,31 @@
     MapView: {
       "^": "Object;",
       $index: function(_, key) {
-        return J.$index$asx(this._collection$_map, key);
+        return J.$index$asx(this._map, key);
       },
       $indexSet: function(_, key, value) {
-        J.$indexSet$ax(this._collection$_map, key, value);
+        J.$indexSet$ax(this._map, key, value);
       },
       forEach$1: function(_, action) {
-        J.forEach$1$ax(this._collection$_map, action);
+        J.forEach$1$ax(this._map, action);
       },
       get$isEmpty: function(_) {
-        return J.get$isEmpty$asx(this._collection$_map);
+        return J.get$isEmpty$asx(this._map);
       },
       get$isNotEmpty: function(_) {
-        return J.get$isNotEmpty$asx(this._collection$_map);
+        return J.get$isNotEmpty$asx(this._map);
       },
       get$length: function(_) {
-        return J.get$length$asx(this._collection$_map);
+        return J.get$length$asx(this._map);
       },
       toString$0: function(_) {
-        return J.toString$0$(this._collection$_map);
+        return J.toString$0$(this._map);
       },
       $isMap: 1
     },
     UnmodifiableMapView: {
-      "^": "MapView+_UnmodifiableMapMixin;_collection$_map",
+      "^": "MapView+_UnmodifiableMapMixin;_map,$ti",
+      $asMap: null,
       $isMap: 1
     },
     Maps_mapToString_closure: {
@@ -8572,7 +8541,7 @@
       }
     },
     ListQueue: {
-      "^": "ListIterable;_table,_head,_tail,_modificationCount",
+      "^": "ListIterable;_table,_head,_tail,_modificationCount,$ti",
       get$iterator: function(_) {
         return new P._ListQueueIterator(this, this._tail, this._modificationCount, this._head, null);
       },
@@ -8659,7 +8628,7 @@
         var t1, newTable, t2, split;
         t1 = new Array(this._table.length * 2);
         t1.fixed$length = Array;
-        newTable = H.setRuntimeTypeInfo(t1, [H.getTypeArgumentByIndex(this, 0)]);
+        newTable = H.setRuntimeTypeInfo(t1, this.$ti);
         t1 = this._table;
         t2 = this._head;
         split = t1.length - t2;
@@ -8677,7 +8646,7 @@
       $isEfficientLength: 1,
       static: {
         ListQueue$: function(initialCapacity, $E) {
-          var t1 = H.setRuntimeTypeInfo(new P.ListQueue(null, 0, 0, 0), [$E]);
+          var t1 = new P.ListQueue(null, 0, 0, 0, [$E]);
           t1.ListQueue$1(initialCapacity, $E);
           return t1;
         }
@@ -8708,7 +8677,7 @@
       }
     },
     SetMixin: {
-      "^": "Object;",
+      "^": "Object;$ti",
       get$isEmpty: function(_) {
         return this._collection$_length === 0;
       },
@@ -8716,7 +8685,7 @@
         return this._collection$_length !== 0;
       },
       map$1: function(_, f) {
-        return H.setRuntimeTypeInfo(new H.EfficientLengthMappedIterable(this, f), [H.getTypeArgumentByIndex(this, 0), null]);
+        return new H.EfficientLengthMappedIterable(this, f, [H.getTypeArgumentByIndex(this, 0), null]);
       },
       toString$0: function(_) {
         return P.IterableBase_iterableToFullString(this, "{", "}");
@@ -8729,7 +8698,7 @@
       $isEfficientLength: 1
     },
     SetBase: {
-      "^": "SetMixin;"
+      "^": "SetMixin;$ti"
     }
   }], ["dart.convert", "dart:convert",, P, {
     "^": "",
@@ -8746,9 +8715,8 @@
       return object;
     },
     _parseJson: function(source, reviver) {
-      var parsed, e, t1, exception;
-      t1 = source;
-      if (typeof t1 !== "string")
+      var parsed, e, exception, t1;
+      if (typeof source !== "string")
         throw H.wrapException(H.argumentErrorValue(source));
       parsed = null;
       try {
@@ -9226,14 +9194,14 @@
     _Utf8Encoder: {
       "^": "Object;_carry,_bufferIndex,_buffer",
       _writeSurrogate$2: function(leadingSurrogate, nextCodeUnit) {
-        var t1, t2, rune, t3, t4;
+        var t1, t2, t3, t4, rune;
         t1 = this._buffer;
         t2 = this._bufferIndex;
+        t3 = t2 + 1;
+        t4 = t1.length;
         if ((nextCodeUnit & 64512) === 56320) {
           rune = 65536 + ((leadingSurrogate & 1023) << 10 >>> 0) | nextCodeUnit & 1023;
-          t3 = t2 + 1;
           this._bufferIndex = t3;
-          t4 = t1.length;
           if (t2 >= t4)
             return H.ioore(t1, t2);
           t1[t2] = (240 | rune >>> 18) >>> 0;
@@ -9253,9 +9221,7 @@
           t1[t3] = 128 | rune & 63;
           return true;
         } else {
-          t3 = t2 + 1;
           this._bufferIndex = t3;
-          t4 = t1.length;
           if (t2 >= t4)
             return H.ioore(t1, t2);
           t1[t2] = 224 | leadingSurrogate >>> 12;
@@ -9581,7 +9547,7 @@
       t1 = start + 5;
       t2 = J.getInterceptor$n(end);
       if (t2.$ge(end, t1)) {
-        delta = ((J.getInterceptor$s(uri).codeUnitAt$1(uri, start + 4) ^ 58) * 3 | C.JSString_methods.codeUnitAt$1(uri, start) ^ 100 | C.JSString_methods.codeUnitAt$1(uri, start + 1) ^ 97 | C.JSString_methods.codeUnitAt$1(uri, start + 2) ^ 116 | C.JSString_methods.codeUnitAt$1(uri, start + 3) ^ 97) >>> 0;
+        delta = ((J.codeUnitAt$1$s(uri, start + 4) ^ 58) * 3 | C.JSString_methods.codeUnitAt$1(uri, start) ^ 100 | C.JSString_methods.codeUnitAt$1(uri, start + 1) ^ 97 | C.JSString_methods.codeUnitAt$1(uri, start + 2) ^ 116 | C.JSString_methods.codeUnitAt$1(uri, start + 3) ^ 97) >>> 0;
         if (delta === 0)
           return P.UriData__parse(start > 0 || t2.$lt(end, uri.length) ? C.JSString_methods.substring$2(uri, start, end) : uri, 5, null).get$uri();
         else if (delta === 32)
@@ -9641,7 +9607,7 @@
               isSimple = false;
             } else {
               if (t3.$eq(schemeEnd, start + 4))
-                if (J.getInterceptor$s(uri).startsWith$2(uri, "file", start)) {
+                if (J.startsWith$2$s(uri, "file", start)) {
                   if (t5.$le(hostStart, start)) {
                     if (!C.JSString_methods.startsWith$2(uri, "/", pathStart)) {
                       schemeAuth = "file:///";
@@ -10167,7 +10133,7 @@
       }
     },
     Duration_toString_sixDigits: {
-      "^": "Closure:21;",
+      "^": "Closure:20;",
       call$1: function(n) {
         if (n >= 100000)
           return "" + n;
@@ -10183,7 +10149,7 @@
       }
     },
     Duration_toString_twoDigits: {
-      "^": "Closure:21;",
+      "^": "Closure:20;",
       call$1: function(n) {
         if (n >= 10)
           return "" + n;
@@ -10516,12 +10482,12 @@
     },
     "+int": 0,
     Iterable: {
-      "^": "Object;",
+      "^": "Object;$ti",
       map$1: function(_, f) {
         return H.MappedIterable_MappedIterable(this, f, H.getRuntimeTypeArgument(this, "Iterable", 0), null);
       },
       where$1: ["super$Iterable$where", function(_, test) {
-        return H.setRuntimeTypeInfo(new H.WhereIterable(this, test), [H.getRuntimeTypeArgument(this, "Iterable", 0)]);
+        return new H.WhereIterable(this, test, [H.getRuntimeTypeArgument(this, "Iterable", 0)]);
       }],
       contains$1: function(_, element) {
         var t1;
@@ -10555,7 +10521,7 @@
         return !this.get$isEmpty(this);
       },
       skipWhile$1: ["super$Iterable$skipWhile", function(_, test) {
-        return H.setRuntimeTypeInfo(new H.SkipWhileIterable(this, test), [H.getRuntimeTypeArgument(this, "Iterable", 0)]);
+        return new H.SkipWhileIterable(this, test, [H.getRuntimeTypeArgument(this, "Iterable", 0)]);
       }],
       get$first: function(_) {
         var it = this.get$iterator(this);
@@ -10595,13 +10561,13 @@
       "^": "Object;"
     },
     List: {
-      "^": "Object;",
+      "^": "Object;$ti",
       $asList: null,
       $isEfficientLength: 1
     },
     "+List": 0,
     Map: {
-      "^": "Object;"
+      "^": "Object;$ti"
     },
     Null: {
       "^": "Object;",
@@ -10762,16 +10728,19 @@
         pathToSplit = this._path;
         if (pathToSplit.length !== 0 && C.JSString_methods.codeUnitAt$1(pathToSplit, 0) === 47)
           pathToSplit = C.JSString_methods.substring$1(pathToSplit, 1);
-        result = pathToSplit === "" ? C.List_empty : P.List_List$unmodifiable(H.setRuntimeTypeInfo(new H.MappedListIterable(pathToSplit.split("/"), P.core_Uri_decodeComponent$closure()), [null, null]), P.String);
+        result = pathToSplit === "" ? C.List_empty : P.List_List$unmodifiable(new H.MappedListIterable(pathToSplit.split("/"), P.core_Uri_decodeComponent$closure(), [null, null]), P.String);
         this._pathSegments = result;
         return result;
       },
       get$queryParameters: function() {
-        var t1 = this._queryParameters;
+        var t1, t2;
+        t1 = this._queryParameters;
         if (t1 == null) {
           t1 = this._query;
-          t1 = H.setRuntimeTypeInfo(new P.UnmodifiableMapView(P.Uri_splitQueryString(t1 == null ? "" : t1, C.Utf8Codec_false)), [P.String, P.String]);
-          this._queryParameters = t1;
+          t2 = P.String;
+          t2 = new P.UnmodifiableMapView(P.Uri_splitQueryString(t1 == null ? "" : t1, C.Utf8Codec_false), [t2, t2]);
+          this._queryParameters = t2;
+          t1 = t2;
         }
         return t1;
       },
@@ -11352,7 +11321,7 @@
             result = P._Uri__normalize(path, start, end, C.List_qg4);
           else {
             pathSegments.toString;
-            result = H.setRuntimeTypeInfo(new H.MappedListIterable(pathSegments, new P._Uri__makePath_closure()), [null, null]).join$1(0, "/");
+            result = new H.MappedListIterable(pathSegments, new P._Uri__makePath_closure(), [null, null]).join$1(0, "/");
           }
           if (result.length === 0) {
             if (isFile)
@@ -11999,7 +11968,8 @@
       get$queryParameters: function() {
         if (!J.$lt$n(this._queryStart, this._fragmentStart))
           return C.Map_empty;
-        return H.setRuntimeTypeInfo(new P.UnmodifiableMapView(P.Uri_splitQueryString(this.get$query(this), C.Utf8Codec_false)), [P.String, P.String]);
+        var t1 = P.String;
+        return new P.UnmodifiableMapView(P.Uri_splitQueryString(this.get$query(this), C.Utf8Codec_false), [t1, t1]);
       },
       _isPort$1: function(port) {
         var portDigitStart = J.$add$ns(this._portStart, 1);
@@ -12023,7 +11993,7 @@
         return this._toNonSimple$0().resolveUri$1(reference);
       },
       _simpleMerge$2: function(base, ref) {
-        var t1, t2, t3, t4, t5, t6, isSimple, delta, refStart, baseEnd, backCount, insert;
+        var t1, t2, t3, t4, t5, t6, isSimple, delta, refStart, baseStart, baseEnd, baseUri, baseStart0, backCount, insert;
         t1 = ref._schemeEnd;
         t2 = J.getInterceptor$n(t1);
         if (t2.$gt(t1, 0))
@@ -12073,42 +12043,44 @@
           delta = J.$sub$n(t3, refStart);
           return new P._SimpleUri(J.substring$2$s(base._uri, 0, t3) + C.JSString_methods.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, t3, J.$add$ns(t1, delta), J.$add$ns(ref._fragmentStart, delta), base._schemeCache, null);
         }
-        t3 = base._pathStart;
+        baseStart = base._pathStart;
         baseEnd = base._queryStart;
-        t4 = J.getInterceptor(t3);
-        if (t4.$eq(t3, baseEnd) && J.$gt$n(base._hostStart, 0)) {
+        t3 = J.getInterceptor(baseStart);
+        if (t3.$eq(baseStart, baseEnd) && J.$gt$n(base._hostStart, 0)) {
           for (; C.JSString_methods.startsWith$2(t2, "../", refStart);)
             refStart = J.$add$ns(refStart, 3);
-          delta = J.$add$ns(t4.$sub(t3, refStart), 1);
-          return new P._SimpleUri(J.substring$2$s(base._uri, 0, t3) + "/" + C.JSString_methods.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, t3, J.$add$ns(t1, delta), J.$add$ns(ref._fragmentStart, delta), base._schemeCache, null);
+          delta = J.$add$ns(t3.$sub(baseStart, refStart), 1);
+          return new P._SimpleUri(J.substring$2$s(base._uri, 0, baseStart) + "/" + C.JSString_methods.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, baseStart, J.$add$ns(t1, delta), J.$add$ns(ref._fragmentStart, delta), base._schemeCache, null);
         }
-        t4 = base._uri;
-        if (J.getInterceptor$s(t4).startsWith$2(t4, "../", t3))
-          return this._toNonSimple$0().resolveUri$1(ref);
-        backCount = 1;
+        baseUri = base._uri;
+        for (t3 = J.getInterceptor$s(baseUri), baseStart0 = baseStart; t3.startsWith$2(baseUri, "../", baseStart0);)
+          baseStart0 = J.$add$ns(baseStart0, 3);
+        backCount = 0;
         while (true) {
-          t5 = J.getInterceptor$ns(refStart);
-          if (!(J.$le$n(t5.$add(refStart, 3), t1) && C.JSString_methods.startsWith$2(t2, "../", refStart)))
+          t3 = J.getInterceptor$ns(refStart);
+          if (!(J.$le$n(t3.$add(refStart, 3), t1) && C.JSString_methods.startsWith$2(t2, "../", refStart)))
             break;
-          refStart = t5.$add(refStart, 3);
+          refStart = t3.$add(refStart, 3);
           ++backCount;
         }
-        for (insert = ""; t5 = J.getInterceptor$n(baseEnd), t5.$gt(baseEnd, t3);) {
-          baseEnd = t5.$sub(baseEnd, 1);
-          if (C.JSString_methods.codeUnitAt$1(t4, baseEnd) === 47) {
-            --backCount;
+        for (insert = ""; t4 = J.getInterceptor$n(baseEnd), t4.$gt(baseEnd, baseStart0);) {
+          baseEnd = t4.$sub(baseEnd, 1);
+          if (C.JSString_methods.codeUnitAt$1(baseUri, baseEnd) === 47) {
             if (backCount === 0) {
               insert = "/";
               break;
             }
+            --backCount;
             insert = "/";
           }
         }
-        t5 = J.getInterceptor(baseEnd);
-        if (t5.$eq(baseEnd, 0) && !C.JSString_methods.startsWith$2(t4, "/", t3))
+        t4 = J.getInterceptor(baseEnd);
+        if (t4.$eq(baseEnd, baseStart0) && !J.$gt$n(base._schemeEnd, 0) && !C.JSString_methods.startsWith$2(baseUri, "/", baseStart)) {
+          refStart = t3.$sub(refStart, backCount * 3);
           insert = "";
-        delta = J.$add$ns(t5.$sub(baseEnd, refStart), insert.length);
-        return new P._SimpleUri(C.JSString_methods.substring$2(t4, 0, baseEnd) + insert + C.JSString_methods.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, t3, J.$add$ns(t1, delta), J.$add$ns(ref._fragmentStart, delta), base._schemeCache, null);
+        }
+        delta = J.$add$ns(t4.$sub(baseEnd, refStart), insert.length);
+        return new P._SimpleUri(C.JSString_methods.substring$2(baseUri, 0, baseEnd) + insert + C.JSString_methods.substring$1(t2, refStart), base._schemeEnd, base._hostStart, base._portStart, baseStart, J.$add$ns(t1, delta), J.$add$ns(ref._fragmentStart, delta), base._schemeCache, null);
       },
       toFilePath$1$windows: function(windows) {
         var t1, t2, t3, t4;
@@ -12185,6 +12157,9 @@
     }
   }], ["dart.dom.html", "dart:html",, W, {
     "^": "",
+    window: function() {
+      return window;
+    },
     WebSocket_WebSocket: function(url, protocols) {
       return new WebSocket(url);
     },
@@ -12360,7 +12335,7 @@
         return receiver.localName;
       },
       get$onClick: function(receiver) {
-        return H.setRuntimeTypeInfo(new W._ElementEventStreamImpl(receiver, "click", false), [H.getTypeArgumentByIndex(C.EventStreamProvider_click, 0)]);
+        return new W._ElementEventStreamImpl(receiver, "click", false, [W.MouseEvent]);
       },
       $isElement: 1,
       $isNode: 1,
@@ -12444,18 +12419,18 @@
     },
     Interceptor_ListMixin: {
       "^": "Interceptor+ListMixin;",
-      $isList: 1,
       $asList: function() {
         return [W.Node];
       },
+      $isList: 1,
       $isEfficientLength: 1
     },
     Interceptor_ListMixin_ImmutableListMixin: {
       "^": "Interceptor_ListMixin+ImmutableListMixin;",
-      $isList: 1,
       $asList: function() {
         return [W.Node];
       },
+      $isList: 1,
       $isEfficientLength: 1
     },
     IFrameElement: {
@@ -12517,7 +12492,6 @@
         t2.mustCopy = true;
         return t2.walk$1(t1);
       },
-      $isObject: 1,
       "%": "MessageEvent"
     },
     MidiMessageEvent: {
@@ -12538,11 +12512,6 @@
       "^": "EventTarget;",
       "%": "MIDIInput;MIDIPort"
     },
-    MouseEvent: {
-      "^": "UIEvent;",
-      $isObject: 1,
-      "%": "DragEvent|MouseEvent|PointerEvent|WheelEvent"
-    },
     Navigator: {
       "^": "Interceptor;",
       $isInterceptor: 1,
@@ -12608,18 +12577,18 @@
     },
     Interceptor_ListMixin0: {
       "^": "Interceptor+ListMixin;",
-      $isList: 1,
       $asList: function() {
         return [W.Node];
       },
+      $isList: 1,
       $isEfficientLength: 1
     },
     Interceptor_ListMixin_ImmutableListMixin0: {
       "^": "Interceptor_ListMixin0+ImmutableListMixin;",
-      $isList: 1,
       $asList: function() {
         return [W.Node];
       },
+      $isList: 1,
       $isEfficientLength: 1
     },
     ObjectElement: {
@@ -12679,7 +12648,7 @@
     },
     UIEvent: {
       "^": "Event;",
-      "%": "FocusEvent|SVGZoomEvent|TouchEvent;UIEvent"
+      "%": "DragEvent|FocusEvent|MouseEvent|PointerEvent|SVGZoomEvent|TouchEvent|WheelEvent;UIEvent"
     },
     WebSocket: {
       "^": "EventTarget;",
@@ -12808,28 +12777,24 @@
     },
     Interceptor_ListMixin1: {
       "^": "Interceptor+ListMixin;",
-      $isList: 1,
       $asList: function() {
         return [W.Node];
       },
+      $isList: 1,
       $isEfficientLength: 1
     },
     Interceptor_ListMixin_ImmutableListMixin1: {
       "^": "Interceptor_ListMixin1+ImmutableListMixin;",
-      $isList: 1,
       $asList: function() {
         return [W.Node];
       },
+      $isList: 1,
       $isEfficientLength: 1
     },
-    EventStreamProvider: {
-      "^": "Object;_eventType"
-    },
     _EventStream: {
-      "^": "Stream;_html$_target,_eventType,_useCapture",
+      "^": "Stream;_html$_target,_eventType,_useCapture,$ti",
       listen$4$cancelOnError$onDone$onError: function(onData, cancelOnError, onDone, onError) {
-        var t1 = new W._EventStreamSubscription(0, this._html$_target, this._eventType, W._wrapZone(onData), false);
-        t1.$builtinTypeInfo = this.$builtinTypeInfo;
+        var t1 = new W._EventStreamSubscription(0, this._html$_target, this._eventType, W._wrapZone(onData), false, this.$ti);
         t1._tryResume$0();
         return t1;
       },
@@ -12841,10 +12806,10 @@
       }
     },
     _ElementEventStreamImpl: {
-      "^": "_EventStream;_html$_target,_eventType,_useCapture"
+      "^": "_EventStream;_html$_target,_eventType,_useCapture,$ti"
     },
     _EventStreamSubscription: {
-      "^": "StreamSubscription;_pauseCount,_html$_target,_eventType,_onData,_useCapture",
+      "^": "StreamSubscription;_pauseCount,_html$_target,_eventType,_onData,_useCapture,$ti",
       cancel$0: function() {
         if (this._html$_target == null)
           return;
@@ -12892,7 +12857,7 @@
       }
     },
     ImmutableListMixin: {
-      "^": "Object;",
+      "^": "Object;$ti",
       get$iterator: function(receiver) {
         return new W.FixedSizeListIterator(receiver, this.get$length(receiver), -1, null);
       },
@@ -12913,11 +12878,11 @@
       $isEfficientLength: 1
     },
     FixedSizeListIterator: {
-      "^": "Object;_array,_html$_length,_position,_html$_current",
+      "^": "Object;_array,_length,_position,_html$_current",
       moveNext$0: function() {
         var nextPosition, t1;
         nextPosition = this._position + 1;
-        t1 = this._html$_length;
+        t1 = this._length;
         if (nextPosition < t1) {
           this._html$_current = J.$index$asx(this._array, nextPosition);
           this._position = nextPosition;
@@ -12969,9 +12934,11 @@
   }], ["html_common", "dart:html_common",, P, {
     "^": "",
     convertNativePromiseToDartFuture: function(promise) {
-      var completer = H.setRuntimeTypeInfo(new P._AsyncCompleter(H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null])), [null]);
+      var t1, completer;
+      t1 = new P._Future(0, $.Zone__current, null, [null]);
+      completer = new P._AsyncCompleter(t1, [null]);
       promise.then(H.convertDartClosureToJS(new P.convertNativePromiseToDartFuture_closure(completer), 1))["catch"](H.convertDartClosureToJS(new P.convertNativePromiseToDartFuture_closure0(completer), 1));
-      return completer.future;
+      return t1;
     },
     _StructuredClone: {
       "^": "Object;",
@@ -13340,7 +13307,7 @@
     SvgElement: {
       "^": "Element;",
       get$onClick: function(receiver) {
-        return H.setRuntimeTypeInfo(new W._ElementEventStreamImpl(receiver, "click", false), [H.getTypeArgumentByIndex(C.EventStreamProvider_click, 0)]);
+        return new W._ElementEventStreamImpl(receiver, "click", false, [W.MouseEvent]);
       },
       $isInterceptor: 1,
       "%": "SVGComponentTransferFunctionElement|SVGDescElement|SVGDiscardElement|SVGFEDistantLightElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGMetadataElement|SVGStopElement|SVGStyleElement|SVGTitleElement;SVGElement"
@@ -13417,14 +13384,14 @@
   }], ["", "package:async/src/null_stream_sink.dart",, S, {
     "^": "",
     NullStreamSink: {
-      "^": "Object;done,_null_stream_sink$_closed,_addingStream",
+      "^": "Object;done,_null_stream_sink$_closed,_addingStream,$ti",
       addStream$1: function(stream) {
         var future;
         this._checkEventAllowed$0();
         this._addingStream = true;
         future = stream.listen$1(null).cancel$0();
         if (future == null) {
-          future = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null]);
+          future = new P._Future(0, $.Zone__current, null, [null]);
           future._asyncComplete$1(null);
         }
         return future.whenComplete$1(new S.NullStreamSink_addStream_closure(this));
@@ -13446,7 +13413,7 @@
         this.$this._addingStream = false;
       }
     }
-  }], ["path", "package:path/path.dart",, B, {
+  }], ["", "package:path/path.dart",, D, {
     "^": "",
     current: function() {
       var uri, t1, t2, path;
@@ -13467,10 +13434,10 @@
         return t1;
       }
     }
-  }], ["path.context", "package:path/src/context.dart",, F, {
+  }], ["", "package:path/src/context.dart",, M, {
     "^": "",
     _validateArgList: function(method, args) {
-      var numArgs, i, numArgs0, message, t1, t2, t3, t4, t5;
+      var numArgs, i, numArgs0, message, t1, t2;
       for (numArgs = args.length, i = 1; i < numArgs; ++i) {
         if (args[i] == null || args[i - 1] != null)
           continue;
@@ -13482,19 +13449,12 @@
         message = new P.StringBuffer("");
         t1 = method + "(";
         message._contents = t1;
-        t2 = H.setRuntimeTypeInfo(new H.SubListIterable(args, 0, numArgs), [H.getTypeArgumentByIndex(args, 0)]);
-        t3 = t2.__internal$_start;
-        t4 = J.getInterceptor$n(t3);
-        if (t4.$lt(t3, 0))
-          H.throwExpression(P.RangeError$range(t3, 0, null, "start", null));
-        t5 = t2._endOrLength;
-        if (t5 != null) {
-          if (J.$lt$n(t5, 0))
-            H.throwExpression(P.RangeError$range(t5, 0, null, "end", null));
-          if (t4.$gt(t3, t5))
-            H.throwExpression(P.RangeError$range(t3, 0, t5, "start", null));
-        }
-        t1 += H.setRuntimeTypeInfo(new H.MappedListIterable(t2, new F._validateArgList_closure()), [H.getRuntimeTypeArgument(t2, "ListIterable", 0), null]).join$1(0, ", ");
+        t2 = H.getTypeArgumentByIndex(args, 0);
+        if (numArgs < 0)
+          H.throwExpression(P.RangeError$range(numArgs, 0, null, "end", null));
+        if (0 > numArgs)
+          H.throwExpression(P.RangeError$range(0, 0, numArgs, "start", null));
+        t1 += new H.MappedListIterable(new H.SubListIterable(args, 0, numArgs, [t2]), new M._validateArgList_closure(), [t2, null]).join$1(0, ", ");
         message._contents = t1;
         message._contents = t1 + ("): part " + (i - 1) + " was null, but part " + i + " was not.");
         throw H.wrapException(P.ArgumentError$(message.toString$0(0)));
@@ -13504,21 +13464,21 @@
       "^": "Object;style,_context$_current",
       absolute$7: function(_, part1, part2, part3, part4, part5, part6, part7) {
         var t1;
-        F._validateArgList("absolute", [part1, part2, part3, part4, part5, part6, part7]);
+        M._validateArgList("absolute", [part1, part2, part3, part4, part5, part6, part7]);
         t1 = this.style;
         t1 = t1.rootLength$1(part1) > 0 && !t1.isRootRelative$1(part1);
         if (t1)
           return part1;
         t1 = this._context$_current;
-        return this.join$8(0, t1 != null ? t1 : B.current(), part1, part2, part3, part4, part5, part6, part7);
+        return this.join$8(0, t1 != null ? t1 : D.current(), part1, part2, part3, part4, part5, part6, part7);
       },
       absolute$1: function($receiver, part1) {
         return this.absolute$7($receiver, part1, null, null, null, null, null, null);
       },
       join$8: function(_, part1, part2, part3, part4, part5, part6, part7, part8) {
         var parts = H.setRuntimeTypeInfo([part1, part2, part3, part4, part5, part6, part7, part8], [P.String]);
-        F._validateArgList("join", parts);
-        return this.joinAll$1(H.setRuntimeTypeInfo(new H.WhereIterable(parts, new F.Context_join_closure()), [H.getTypeArgumentByIndex(parts, 0)]));
+        M._validateArgList("join", parts);
+        return this.joinAll$1(new H.WhereIterable(parts, new M.Context_join_closure(), [H.getTypeArgumentByIndex(parts, 0)]));
       },
       join$2: function($receiver, part1, part2) {
         return this.join$8($receiver, part1, part2, null, null, null, null, null, null);
@@ -13526,56 +13486,56 @@
       joinAll$1: function(parts) {
         var buffer, t1, t2, t3, needsSeparator, isAbsoluteAndNotRootRelative, part, parsed, t4, t5;
         buffer = new P.StringBuffer("");
-        for (t1 = H.setRuntimeTypeInfo(new H.WhereIterable(parts, new F.Context_joinAll_closure()), [H.getRuntimeTypeArgument(parts, "Iterable", 0)]), t1 = H.setRuntimeTypeInfo(new H.WhereIterator(J.get$iterator$ax(t1._iterable), t1._f), [H.getTypeArgumentByIndex(t1, 0)]), t2 = this.style, t3 = t1._iterator, needsSeparator = false, isAbsoluteAndNotRootRelative = false; t1.moveNext$0();) {
-          part = t3.get$current();
-          if (t2.isRootRelative$1(part) && isAbsoluteAndNotRootRelative) {
-            parsed = Q.ParsedPath_ParsedPath$parse(part, t2);
+        for (t1 = parts.get$iterator(parts), t2 = new H.WhereIterator(t1, new M.Context_joinAll_closure(), [H.getTypeArgumentByIndex(parts, 0)]), t3 = this.style, needsSeparator = false, isAbsoluteAndNotRootRelative = false; t2.moveNext$0();) {
+          part = t1.get$current();
+          if (t3.isRootRelative$1(part) && isAbsoluteAndNotRootRelative) {
+            parsed = X.ParsedPath_ParsedPath$parse(part, t3);
             t4 = buffer._contents;
             t4 = t4.charCodeAt(0) == 0 ? t4 : t4;
-            t4 = C.JSString_methods.substring$2(t4, 0, t2.rootLength$1(t4));
+            t4 = C.JSString_methods.substring$2(t4, 0, t3.rootLength$1(t4));
             parsed.root = t4;
-            if (t2.needsSeparator$1(t4)) {
+            if (t3.needsSeparator$1(t4)) {
               t4 = parsed.separators;
-              t5 = t2.get$separator();
+              t5 = t3.get$separator();
               if (0 >= t4.length)
                 return H.ioore(t4, 0);
               t4[0] = t5;
             }
             buffer._contents = "";
             buffer._contents += parsed.toString$0(0);
-          } else if (t2.rootLength$1(part) > 0) {
-            isAbsoluteAndNotRootRelative = !t2.isRootRelative$1(part);
+          } else if (t3.rootLength$1(part) > 0) {
+            isAbsoluteAndNotRootRelative = !t3.isRootRelative$1(part);
             buffer._contents = "";
             buffer._contents += H.S(part);
           } else {
             t4 = J.getInterceptor$asx(part);
-            if (!(J.$gt$n(t4.get$length(part), 0) && t2.containsSeparator$1(t4.$index(part, 0)) === true))
+            if (!(J.$gt$n(t4.get$length(part), 0) && t3.containsSeparator$1(t4.$index(part, 0)) === true))
               if (needsSeparator)
-                buffer._contents += t2.get$separator();
+                buffer._contents += t3.get$separator();
             buffer._contents += H.S(part);
           }
-          needsSeparator = t2.needsSeparator$1(part);
+          needsSeparator = t3.needsSeparator$1(part);
         }
         t1 = buffer._contents;
         return t1.charCodeAt(0) == 0 ? t1 : t1;
       },
       split$1: function(_, path) {
         var parsed, t1, t2;
-        parsed = Q.ParsedPath_ParsedPath$parse(path, this.style);
+        parsed = X.ParsedPath_ParsedPath$parse(path, this.style);
         t1 = parsed.parts;
-        t1 = H.setRuntimeTypeInfo(new H.WhereIterable(t1, new F.Context_split_closure()), [H.getTypeArgumentByIndex(t1, 0)]);
-        t1 = P.List_List$from(t1, true, H.getRuntimeTypeArgument(t1, "Iterable", 0));
-        parsed.parts = t1;
-        t2 = parsed.root;
-        if (t2 != null)
-          C.JSArray_methods.insert$2(t1, 0, t2);
+        t2 = H.getTypeArgumentByIndex(t1, 0);
+        t2 = P.List_List$from(new H.WhereIterable(t1, new M.Context_split_closure(), [t2]), true, t2);
+        parsed.parts = t2;
+        t1 = parsed.root;
+        if (t1 != null)
+          C.JSArray_methods.insert$2(t2, 0, t1);
         return parsed.parts;
       },
       normalize$1: function(path) {
         var parsed;
         if (!this._needsNormalization$1(path))
           return path;
-        parsed = Q.ParsedPath_ParsedPath$parse(path, this.style);
+        parsed = X.ParsedPath_ParsedPath$parse(path, this.style);
         parsed.normalize$0();
         return parsed.toString$0(0);
       },
@@ -13627,33 +13587,24 @@
         if (this.style.rootLength$1(path) <= 0)
           return this.normalize$1(path);
         t1 = this._context$_current;
-        from = t1 != null ? t1 : B.current();
+        from = t1 != null ? t1 : D.current();
         t1 = this.style;
         if (t1.rootLength$1(from) <= 0 && t1.rootLength$1(path) > 0)
           return this.normalize$1(path);
         if (t1.rootLength$1(path) <= 0 || t1.isRootRelative$1(path))
           path = this.absolute$1(0, path);
         if (t1.rootLength$1(path) <= 0 && t1.rootLength$1(from) > 0)
-          throw H.wrapException(new E.PathException('Unable to find a path to "' + H.S(path) + '" from "' + H.S(from) + '".'));
-        fromParsed = Q.ParsedPath_ParsedPath$parse(from, t1);
+          throw H.wrapException(new X.PathException('Unable to find a path to "' + H.S(path) + '" from "' + H.S(from) + '".'));
+        fromParsed = X.ParsedPath_ParsedPath$parse(from, t1);
         fromParsed.normalize$0();
-        pathParsed = Q.ParsedPath_ParsedPath$parse(path, t1);
+        pathParsed = X.ParsedPath_ParsedPath$parse(path, t1);
         pathParsed.normalize$0();
         t2 = fromParsed.parts;
         if (t2.length > 0 && J.$eq$(t2[0], "."))
           return pathParsed.toString$0(0);
         if (!J.$eq$(fromParsed.root, pathParsed.root)) {
           t2 = fromParsed.root;
-          if (!(t2 == null || pathParsed.root == null)) {
-            t2 = J.toLowerCase$0$s(t2);
-            H.checkString("\\");
-            t2 = H.stringReplaceAllUnchecked(t2, "/", "\\");
-            t3 = J.toLowerCase$0$s(pathParsed.root);
-            H.checkString("\\");
-            t3 = t2 !== H.stringReplaceAllUnchecked(t3, "/", "\\");
-            t2 = t3;
-          } else
-            t2 = true;
+          t2 = t2 == null || pathParsed.root == null || !t1.pathsEqual$2(t2, pathParsed.root);
         } else
           t2 = false;
         if (t2)
@@ -13662,7 +13613,7 @@
           t2 = fromParsed.parts;
           if (t2.length > 0) {
             t3 = pathParsed.parts;
-            t2 = t3.length > 0 && J.$eq$(t2[0], t3[0]);
+            t2 = t3.length > 0 && t1.pathsEqual$2(t2[0], t3[0]);
           } else
             t2 = false;
           if (!t2)
@@ -13674,7 +13625,7 @@
         }
         t2 = fromParsed.parts;
         if (t2.length > 0 && J.$eq$(t2[0], ".."))
-          throw H.wrapException(new E.PathException('Unable to find a path to "' + H.S(path) + '" from "' + H.S(from) + '".'));
+          throw H.wrapException(new X.PathException('Unable to find a path to "' + H.S(path) + '" from "' + H.S(from) + '".'));
         C.JSArray_methods.insertAll$2(pathParsed.parts, 0, P.List_List$filled(fromParsed.parts.length, "..", false, null));
         t2 = pathParsed.separators;
         if (0 >= t2.length)
@@ -13709,7 +13660,7 @@
           return t1.relativePathToUri$1(path);
         else {
           t2 = this._context$_current;
-          return t1.absolutePathToUri$1(this.join$2(0, t2 != null ? t2 : B.current(), path));
+          return t1.absolutePathToUri$1(this.join$2(0, t2 != null ? t2 : D.current(), path));
         }
       },
       prettyUri$1: function(uri) {
@@ -13741,10 +13692,10 @@
       },
       static: {
         Context_Context: function(current, style) {
-          current = style == null ? B.current() : ".";
+          current = style == null ? D.current() : ".";
           if (style == null)
             style = $.$get$Style_platform();
-          return new F.Context(style, current);
+          return new M.Context(style, current);
         }
       }
     },
@@ -13772,7 +13723,7 @@
         return arg == null ? "null" : '"' + H.S(arg) + '"';
       }
     }
-  }], ["path.internal_style", "package:path/src/internal_style.dart",, E, {
+  }], ["", "package:path/src/internal_style.dart",, B, {
     "^": "",
     InternalStyle: {
       "^": "Style;",
@@ -13784,14 +13735,17 @@
       },
       relativePathToUri$1: function(path) {
         var segments, t1;
-        segments = F.Context_Context(null, this).split$1(0, path);
+        segments = M.Context_Context(null, this).split$1(0, path);
         t1 = J.getInterceptor$asx(path);
         if (this.isSeparator$1(t1.codeUnitAt$1(path, J.$sub$n(t1.get$length(path), 1))))
           C.JSArray_methods.add$1(segments, "");
         return P._Uri__Uri(null, null, null, segments, null, null, null, null, null);
+      },
+      pathsEqual$2: function(path1, path2) {
+        return J.$eq$(path1, path2);
       }
     }
-  }], ["path.parsed_path", "package:path/src/parsed_path.dart",, Q, {
+  }], ["", "package:path/src/parsed_path.dart",, X, {
     "^": "",
     ParsedPath: {
       "^": "Object;style,root,isRootRelative,parts,separators",
@@ -13817,14 +13771,15 @@
         if (t2 > 0)
           t1[t2 - 1] = "";
       },
-      normalize$0: function() {
-        var newParts, t1, t2, leadingDoubles, _i, part, t3, newSeparators;
-        newParts = H.setRuntimeTypeInfo([], [P.String]);
-        for (t1 = this.parts, t2 = t1.length, leadingDoubles = 0, _i = 0; _i < t1.length; t1.length === t2 || (0, H.throwConcurrentModificationError)(t1), ++_i) {
-          part = t1[_i];
-          t3 = J.getInterceptor(part);
-          if (!(t3.$eq(part, ".") || t3.$eq(part, "")))
-            if (t3.$eq(part, ".."))
+      normalize$1$canonicalize: function(canonicalize) {
+        var t1, newParts, t2, t3, leadingDoubles, _i, part, t4, newSeparators;
+        t1 = P.String;
+        newParts = H.setRuntimeTypeInfo([], [t1]);
+        for (t2 = this.parts, t3 = t2.length, leadingDoubles = 0, _i = 0; _i < t2.length; t2.length === t3 || (0, H.throwConcurrentModificationError)(t2), ++_i) {
+          part = t2[_i];
+          t4 = J.getInterceptor(part);
+          if (!(t4.$eq(part, ".") || t4.$eq(part, "")))
+            if (t4.$eq(part, ".."))
               if (newParts.length > 0)
                 newParts.pop();
               else
@@ -13836,7 +13791,7 @@
           C.JSArray_methods.insertAll$2(newParts, 0, P.List_List$filled(leadingDoubles, "..", false, null));
         if (newParts.length === 0 && this.root == null)
           newParts.push(".");
-        newSeparators = P.List_List$generate(newParts.length, new Q.ParsedPath_normalize_closure(this), true, P.String);
+        newSeparators = P.List_List$generate(newParts.length, new X.ParsedPath_normalize_closure(this), true, t1);
         t1 = this.root;
         C.JSArray_methods.insert$2(newSeparators, 0, t1 != null && newParts.length > 0 && this.style.needsSeparator$1(t1) ? this.style.get$separator() : "");
         this.parts = newParts;
@@ -13846,6 +13801,9 @@
           this.root = J.replaceAll$2$s(t1, "/", "\\");
         this.removeTrailingSeparators$0();
       },
+      normalize$0: function() {
+        return this.normalize$1$canonicalize(false);
+      },
       toString$0: function(_) {
         var builder, t1, i;
         builder = new P.StringBuffer("");
@@ -13867,13 +13825,14 @@
       },
       static: {
         ParsedPath_ParsedPath$parse: function(path, style) {
-          var root, isRootRelative, parts, separators, t1, start, i, t2;
+          var root, isRootRelative, t1, parts, separators, start, i, t2;
           root = style.getRoot$1(path);
           isRootRelative = style.isRootRelative$1(path);
           if (root != null)
             path = J.substring$1$s(path, J.get$length$asx(root));
-          parts = H.setRuntimeTypeInfo([], [P.String]);
-          separators = H.setRuntimeTypeInfo([], [P.String]);
+          t1 = [P.String];
+          parts = H.setRuntimeTypeInfo([], t1);
+          separators = H.setRuntimeTypeInfo([], t1);
           t1 = J.getInterceptor$asx(path);
           if (t1.get$isNotEmpty(path) && style.isSeparator$1(t1.codeUnitAt$1(path, 0))) {
             separators.push(t1.$index(path, 0));
@@ -13905,7 +13864,7 @@
             parts.push(t1.substring$1(path, start));
             separators.push("");
           }
-          return new Q.ParsedPath(style, root, isRootRelative, parts, separators);
+          return new X.ParsedPath(style, root, isRootRelative, parts, separators);
         }
       }
     },
@@ -13915,7 +13874,7 @@
         return this.$this.style.get$separator();
       }
     }
-  }], ["path.path_exception", "package:path/src/path_exception.dart",, E, {
+  }], ["", "package:path/src/path_exception.dart",, X, {
     "^": "",
     PathException: {
       "^": "Object;message>",
@@ -13923,7 +13882,7 @@
         return "PathException: " + this.message;
       }
     }
-  }], ["path.style", "package:path/src/style.dart",, S, {
+  }], ["", "package:path/src/style.dart",, O, {
     "^": "",
     Style__getPlatformStyle: function() {
       if (P.Uri_base().get$scheme() !== "file")
@@ -13941,7 +13900,7 @@
         return this.get$name(this);
       }
     }
-  }], ["path.style.posix", "package:path/src/style/posix.dart",, Z, {
+  }], ["", "package:path/src/style/posix.dart",, E, {
     "^": "",
     PosixStyle: {
       "^": "InternalStyle;name>,separator<,separators,separatorPattern,needsSeparatorPattern,rootPattern,relativeRootPattern",
@@ -13974,7 +13933,7 @@
       },
       absolutePathToUri$1: function(path) {
         var parsed, t1;
-        parsed = Q.ParsedPath_ParsedPath$parse(path, this);
+        parsed = X.ParsedPath_ParsedPath$parse(path, this);
         t1 = parsed.parts;
         if (t1.length === 0)
           C.JSArray_methods.addAll$1(t1, ["", ""]);
@@ -13983,7 +13942,7 @@
         return P._Uri__Uri(null, null, null, parsed.parts, null, null, null, "file", null);
       }
     }
-  }], ["path.style.url", "package:path/src/style/url.dart",, E, {
+  }], ["", "package:path/src/style/url.dart",, F, {
     "^": "",
     UrlStyle: {
       "^": "InternalStyle;name>,separator<,separators,separatorPattern,needsSeparatorPattern,rootPattern,relativeRootPattern",
@@ -14031,7 +13990,7 @@
         return P.Uri_parse(path, 0, null);
       }
     }
-  }], ["path.style.windows", "package:path/src/style/windows.dart",, T, {
+  }], ["", "package:path/src/style/windows.dart",, L, {
     "^": "",
     WindowsStyle: {
       "^": "InternalStyle;name>,separator<,separators,separatorPattern,needsSeparatorPattern,rootPattern,relativeRootPattern",
@@ -14102,10 +14061,10 @@
       },
       absolutePathToUri$1: function(path) {
         var parsed, t1, rootParts, t2;
-        parsed = Q.ParsedPath_ParsedPath$parse(path, this);
+        parsed = X.ParsedPath_ParsedPath$parse(path, this);
         if (J.startsWith$1$s(parsed.root, "\\\\")) {
           t1 = J.split$1$s(parsed.root, "\\");
-          rootParts = H.setRuntimeTypeInfo(new H.WhereIterable(t1, new T.WindowsStyle_absolutePathToUri_closure()), [H.getTypeArgumentByIndex(t1, 0)]);
+          rootParts = new H.WhereIterable(t1, new L.WindowsStyle_absolutePathToUri_closure(), [H.getTypeArgumentByIndex(t1, 0)]);
           C.JSArray_methods.insert$2(parsed.parts, 0, rootParts.get$last(rootParts));
           if (parsed.get$hasTrailingSeparator())
             C.JSArray_methods.add$1(parsed.parts, "");
@@ -14119,6 +14078,40 @@
           C.JSArray_methods.insert$2(t1, 0, H.stringReplaceAllUnchecked(t2, "\\", ""));
           return P._Uri__Uri(null, null, null, parsed.parts, null, null, null, "file", null);
         }
+      },
+      codeUnitsEqual$2: function(codeUnit1, codeUnit2) {
+        var upperCase1;
+        if (codeUnit1 === codeUnit2)
+          return true;
+        if (codeUnit1 === 47)
+          return codeUnit2 === 92;
+        if (codeUnit1 === 92)
+          return codeUnit2 === 47;
+        if ((codeUnit1 ^ codeUnit2) !== 32)
+          return false;
+        upperCase1 = codeUnit1 | 32;
+        return upperCase1 >= 97 && upperCase1 <= 122;
+      },
+      pathsEqual$2: function(path1, path2) {
+        var t1, t2, i, t3;
+        if (path1 == null ? path2 == null : path1 === path2)
+          return true;
+        t1 = J.getInterceptor$asx(path1);
+        t2 = J.getInterceptor$asx(path2);
+        if (!J.$eq$(t1.get$length(path1), t2.get$length(path2)))
+          return false;
+        i = 0;
+        while (true) {
+          t3 = t1.get$length(path1);
+          if (typeof t3 !== "number")
+            return H.iae(t3);
+          if (!(i < t3))
+            break;
+          if (!this.codeUnitsEqual$2(t1.codeUnitAt$1(path1, i), t2.codeUnitAt$1(path2, i)))
+            return false;
+          ++i;
+        }
+        return true;
       }
     },
     WindowsStyle_absolutePathToUri_closure: {
@@ -14136,19 +14129,21 @@
       },
       foldFrames$2$terse: function(predicate, terse) {
         var foldedTraces, nonEmptyTraces;
-        foldedTraces = H.setRuntimeTypeInfo(new H.MappedListIterable(this.traces, new U.Chain_foldFrames_closure(predicate, true)), [null, null]);
-        nonEmptyTraces = foldedTraces.super$Iterable$where(foldedTraces, new U.Chain_foldFrames_closure0(true));
+        foldedTraces = new H.MappedListIterable(this.traces, new U.Chain_foldFrames_closure(predicate, true), [null, null]);
+        nonEmptyTraces = foldedTraces.super$Iterable$where(0, new U.Chain_foldFrames_closure0(true));
         if (!nonEmptyTraces.get$iterator(nonEmptyTraces).moveNext$0() && !foldedTraces.get$isEmpty(foldedTraces))
           return new U.Chain(P.List_List$unmodifiable([foldedTraces.get$last(foldedTraces)], Y.Trace));
         return new U.Chain(P.List_List$unmodifiable(nonEmptyTraces, Y.Trace));
       },
       toTrace$0: function() {
         var t1 = this.traces;
-        return new Y.Trace(P.List_List$unmodifiable(H.setRuntimeTypeInfo(new H.ExpandIterable(t1, new U.Chain_toTrace_closure()), [H.getTypeArgumentByIndex(t1, 0), null]), A.Frame));
+        return new Y.Trace(P.List_List$unmodifiable(new H.ExpandIterable(t1, new U.Chain_toTrace_closure(), [H.getTypeArgumentByIndex(t1, 0), null]), A.Frame));
       },
       toString$0: function(_) {
-        var t1 = this.traces;
-        return H.setRuntimeTypeInfo(new H.MappedListIterable(t1, new U.Chain_toString_closure(H.setRuntimeTypeInfo(new H.MappedListIterable(t1, new U.Chain_toString_closure0()), [null, null]).fold$2(0, 0, P.math__max$closure()))), [null, null]).join$1(0, "===== asynchronous gap ===========================\n");
+        var t1, t2;
+        t1 = this.traces;
+        t2 = [null, null];
+        return new H.MappedListIterable(t1, new U.Chain_toString_closure(new H.MappedListIterable(t1, new U.Chain_toString_closure0(), t2).fold$2(0, 0, P.math__max$closure())), t2).join$1(0, "===== asynchronous gap ===========================\n");
       },
       static: {
         Chain_Chain$parse: function(chain) {
@@ -14157,7 +14152,7 @@
             return new U.Chain(P.List_List$unmodifiable([], Y.Trace));
           if (t1.contains$1(chain, "===== asynchronous gap ===========================\n") !== true)
             return new U.Chain(P.List_List$unmodifiable([Y.Trace_Trace$parse(chain)], Y.Trace));
-          return new U.Chain(P.List_List$unmodifiable(H.setRuntimeTypeInfo(new H.MappedListIterable(t1.split$1(chain, "===== asynchronous gap ===========================\n"), new U.closure3()), [null, null]), Y.Trace));
+          return new U.Chain(P.List_List$unmodifiable(new H.MappedListIterable(t1.split$1(chain, "===== asynchronous gap ===========================\n"), new U.closure3(), [null, null]), Y.Trace));
         }
       }
     },
@@ -14200,7 +14195,7 @@
     Chain_toString_closure0: {
       "^": "Closure:0;",
       call$1: function(trace) {
-        return H.setRuntimeTypeInfo(new H.MappedListIterable(trace.get$frames(), new U.Chain_toString__closure0()), [null, null]).fold$2(0, 0, P.math__max$closure());
+        return new H.MappedListIterable(trace.get$frames(), new U.Chain_toString__closure0(), [null, null]).fold$2(0, 0, P.math__max$closure());
       }
     },
     Chain_toString__closure0: {
@@ -14212,13 +14207,13 @@
     Chain_toString_closure: {
       "^": "Closure:0;longest",
       call$1: function(trace) {
-        return H.setRuntimeTypeInfo(new H.MappedListIterable(trace.get$frames(), new U.Chain_toString__closure(this.longest)), [null, null]).join$0(0);
+        return new H.MappedListIterable(trace.get$frames(), new U.Chain_toString__closure(this.longest), [null, null]).join$0(0);
       }
     },
     Chain_toString__closure: {
       "^": "Closure:0;longest",
       call$1: function(frame) {
-        return H.S(B.padRight(J.get$location$x(frame), this.longest)) + "  " + H.S(frame.get$member()) + "\n";
+        return J.padRight$1$s(J.get$location$x(frame), this.longest) + "  " + H.S(frame.get$member()) + "\n";
       }
     }
   }], ["", "package:stack_trace/src/frame.dart",, A, {
@@ -14496,26 +14491,29 @@
         return this.foldFrames$2$terse(new Y.Trace_terse_closure(), true);
       },
       foldFrames$2$terse: function(predicate, terse) {
-        var t1, newFrames, t2, frame;
+        var t1, t2, newFrames, t3, frame;
         t1 = {};
         t1.predicate = predicate;
         t1.predicate = new Y.Trace_foldFrames_closure(predicate);
-        newFrames = H.setRuntimeTypeInfo([], [A.Frame]);
-        for (t2 = this.frames, t2 = H.setRuntimeTypeInfo(new H.ReversedListIterable(t2), [H.getTypeArgumentByIndex(t2, 0)]), t2 = new H.ListIterator(t2, t2.get$length(t2), 0, null); t2.moveNext$0();) {
-          frame = t2._current;
+        t2 = A.Frame;
+        newFrames = H.setRuntimeTypeInfo([], [t2]);
+        for (t3 = this.frames, t3 = new H.ReversedListIterable(t3, [H.getTypeArgumentByIndex(t3, 0)]), t3 = new H.ListIterator(t3, t3.get$length(t3), 0, null); t3.moveNext$0();) {
+          frame = t3._current;
           if (frame instanceof N.UnparsedFrame || t1.predicate.call$1(frame) !== true)
             newFrames.push(frame);
           else if (newFrames.length === 0 || t1.predicate.call$1(C.JSArray_methods.get$last(newFrames)) !== true)
             newFrames.push(new A.Frame(frame.get$uri(), frame.get$line(), frame.get$column(), frame.get$member()));
         }
-        newFrames = H.setRuntimeTypeInfo(new H.MappedListIterable(newFrames, new Y.Trace_foldFrames_closure0(t1)), [null, null]).toList$0(0);
+        newFrames = new H.MappedListIterable(newFrames, new Y.Trace_foldFrames_closure0(t1), [null, null]).toList$0(0);
         if (newFrames.length > 1 && C.JSArray_methods.get$first(newFrames).get$isCore())
           C.JSArray_methods.removeAt$1(newFrames, 0);
-        return new Y.Trace(P.List_List$unmodifiable(H.setRuntimeTypeInfo(new H.ReversedListIterable(newFrames), [H.getTypeArgumentByIndex(newFrames, 0)]), A.Frame));
+        return new Y.Trace(P.List_List$unmodifiable(new H.ReversedListIterable(newFrames, [H.getTypeArgumentByIndex(newFrames, 0)]), t2));
       },
       toString$0: function(_) {
-        var t1 = this.frames;
-        return H.setRuntimeTypeInfo(new H.MappedListIterable(t1, new Y.Trace_toString_closure(H.setRuntimeTypeInfo(new H.MappedListIterable(t1, new Y.Trace_toString_closure0()), [null, null]).fold$2(0, 0, P.math__max$closure()))), [null, null]).join$0(0);
+        var t1, t2;
+        t1 = this.frames;
+        t2 = [null, null];
+        return new H.MappedListIterable(t1, new Y.Trace_toString_closure(new H.MappedListIterable(t1, new Y.Trace_toString_closure0(), t2).fold$2(0, 0, P.math__max$closure())), t2).join$0(0);
       },
       $isStackTrace: 1,
       static: {
@@ -14533,27 +14531,29 @@
         Trace_Trace$parse: function(trace) {
           var error, t1, exception;
           try {
-            if (J.get$isEmpty$asx(trace) === true) {
-              t1 = P.List_List$unmodifiable(H.setRuntimeTypeInfo([], [A.Frame]), A.Frame);
+            t1 = J.getInterceptor$asx(trace);
+            if (t1.get$isEmpty(trace) === true) {
+              t1 = A.Frame;
+              t1 = P.List_List$unmodifiable(H.setRuntimeTypeInfo([], [t1]), t1);
               return new Y.Trace(t1);
             }
-            if (J.contains$1$asx(trace, $.$get$_v8Trace()) === true) {
+            if (t1.contains$1(trace, $.$get$_v8Trace()) === true) {
               t1 = Y.Trace$parseV8(trace);
               return t1;
             }
-            if (J.contains$1$asx(trace, "\tat ") === true) {
+            if (t1.contains$1(trace, "\tat ") === true) {
               t1 = Y.Trace$parseJSCore(trace);
               return t1;
             }
-            if (J.contains$1$asx(trace, $.$get$_firefoxSafariTrace()) === true) {
+            if (t1.contains$1(trace, $.$get$_firefoxSafariTrace()) === true) {
               t1 = Y.Trace$parseFirefox(trace);
               return t1;
             }
-            if (J.contains$1$asx(trace, "===== asynchronous gap ===========================\n") === true) {
+            if (t1.contains$1(trace, "===== asynchronous gap ===========================\n") === true) {
               t1 = U.Chain_Chain$parse(trace).toTrace$0();
               return t1;
             }
-            if (J.contains$1$asx(trace, $.$get$_friendlyTrace()) === true) {
+            if (t1.contains$1(trace, $.$get$_friendlyTrace()) === true) {
               t1 = Y.Trace$parseFriendly(trace);
               return t1;
             }
@@ -14572,35 +14572,38 @@
           var lines, t1, $frames;
           lines = J.trim$0$s(trace).split("\n");
           t1 = H.SubListIterable$(lines, 0, lines.length - 1, H.getTypeArgumentByIndex(lines, 0));
-          $frames = H.setRuntimeTypeInfo(new H.MappedListIterable(t1, new Y.Trace__parseVM_closure()), [H.getRuntimeTypeArgument(t1, "ListIterable", 0), null]).toList$0(0);
+          $frames = new H.MappedListIterable(t1, new Y.Trace__parseVM_closure(), [H.getTypeArgumentByIndex(t1, 0), null]).toList$0(0);
           if (!J.endsWith$1$s(C.JSArray_methods.get$last(lines), ".da"))
             C.JSArray_methods.add$1($frames, A.Frame_Frame$parseVM(C.JSArray_methods.get$last(lines)));
           return $frames;
         },
         Trace$parseV8: function(trace) {
           var t1 = J.split$1$s(trace, "\n");
-          t1 = H.SubListIterable$(t1, 1, null, H.getTypeArgumentByIndex(t1, 0));
-          t1 = t1.super$Iterable$skipWhile(t1, new Y.Trace$parseV8_closure());
-          return new Y.Trace(P.List_List$unmodifiable(H.MappedIterable_MappedIterable(t1, new Y.Trace$parseV8_closure0(), H.getRuntimeTypeArgument(t1, "Iterable", 0), null), A.Frame));
+          t1 = H.SubListIterable$(t1, 1, null, H.getTypeArgumentByIndex(t1, 0)).super$Iterable$skipWhile(0, new Y.Trace$parseV8_closure());
+          return new Y.Trace(P.List_List$unmodifiable(H.MappedIterable_MappedIterable(t1, new Y.Trace$parseV8_closure0(), H.getTypeArgumentByIndex(t1, 0), null), A.Frame));
         },
         Trace$parseJSCore: function(trace) {
-          var t1 = J.split$1$s(trace, "\n");
-          t1 = H.setRuntimeTypeInfo(new H.WhereIterable(t1, new Y.Trace$parseJSCore_closure()), [H.getTypeArgumentByIndex(t1, 0)]);
-          return new Y.Trace(P.List_List$unmodifiable(H.MappedIterable_MappedIterable(t1, new Y.Trace$parseJSCore_closure0(), H.getRuntimeTypeArgument(t1, "Iterable", 0), null), A.Frame));
+          var t1, t2;
+          t1 = J.split$1$s(trace, "\n");
+          t2 = H.getTypeArgumentByIndex(t1, 0);
+          return new Y.Trace(P.List_List$unmodifiable(new H.MappedIterable(new H.WhereIterable(t1, new Y.Trace$parseJSCore_closure(), [t2]), new Y.Trace$parseJSCore_closure0(), [t2, null]), A.Frame));
         },
         Trace$parseFirefox: function(trace) {
-          var t1 = J.trim$0$s(trace).split("\n");
-          t1 = H.setRuntimeTypeInfo(new H.WhereIterable(t1, new Y.Trace$parseFirefox_closure()), [H.getTypeArgumentByIndex(t1, 0)]);
-          return new Y.Trace(P.List_List$unmodifiable(H.MappedIterable_MappedIterable(t1, new Y.Trace$parseFirefox_closure0(), H.getRuntimeTypeArgument(t1, "Iterable", 0), null), A.Frame));
+          var t1, t2;
+          t1 = J.trim$0$s(trace).split("\n");
+          t2 = H.getTypeArgumentByIndex(t1, 0);
+          return new Y.Trace(P.List_List$unmodifiable(new H.MappedIterable(new H.WhereIterable(t1, new Y.Trace$parseFirefox_closure(), [t2]), new Y.Trace$parseFirefox_closure0(), [t2, null]), A.Frame));
         },
         Trace$parseFriendly: function(trace) {
-          var t1 = J.getInterceptor$asx(trace);
+          var t1, t2;
+          t1 = J.getInterceptor$asx(trace);
           if (t1.get$isEmpty(trace) === true)
             t1 = [];
           else {
             t1 = t1.trim$0(trace).split("\n");
-            t1 = H.setRuntimeTypeInfo(new H.WhereIterable(t1, new Y.Trace$parseFriendly_closure()), [H.getTypeArgumentByIndex(t1, 0)]);
-            t1 = H.MappedIterable_MappedIterable(t1, new Y.Trace$parseFriendly_closure0(), H.getRuntimeTypeArgument(t1, "Iterable", 0), null);
+            t2 = H.getTypeArgumentByIndex(t1, 0);
+            t2 = new H.MappedIterable(new H.WhereIterable(t1, new Y.Trace$parseFriendly_closure(), [t2]), new Y.Trace$parseFriendly_closure0(), [t2, null]);
+            t1 = t2;
           }
           return new Y.Trace(P.List_List$unmodifiable(t1, A.Frame));
         }
@@ -14707,7 +14710,7 @@
         var t1 = J.getInterceptor(frame);
         if (!!t1.$isUnparsedFrame)
           return H.S(frame) + "\n";
-        return H.S(B.padRight(t1.get$location(frame), this.longest)) + "  " + H.S(frame.get$member()) + "\n";
+        return J.padRight$1$s(t1.get$location(frame), this.longest) + "  " + H.S(frame.get$member()) + "\n";
       }
     }
   }], ["", "package:stack_trace/src/unparsed_frame.dart",, N, {
@@ -14718,42 +14721,19 @@
         return this.member;
       }
     }
-  }], ["", "package:stack_trace/src/utils.dart",, B, {
-    "^": "",
-    padRight: function(string, $length) {
-      var t1, result, t2, i, t3;
-      t1 = J.getInterceptor$asx(string);
-      if (J.$ge$n(t1.get$length(string), $length))
-        return string;
-      result = new P.StringBuffer("");
-      result._contents = H.S(string);
-      t2 = J.getInterceptor$n($length);
-      i = 0;
-      while (true) {
-        t3 = t2.$sub($length, t1.get$length(string));
-        if (typeof t3 !== "number")
-          return H.iae(t3);
-        if (!(i < t3))
-          break;
-        result._contents += " ";
-        ++i;
-      }
-      t1 = result._contents;
-      return t1.charCodeAt(0) == 0 ? t1 : t1;
-    }
   }], ["", "package:stream_channel/src/guarantee_channel.dart",, K, {
     "^": "",
     GuaranteeChannel: {
-      "^": "StreamChannelMixin;_sink,_streamController,_guarantee_channel$_subscription,_disconnected",
+      "^": "StreamChannelMixin;_sink,_streamController,_subscription,_disconnected,$ti",
       _onSinkDisconnected$0: function() {
         this._disconnected = true;
-        var t1 = this._guarantee_channel$_subscription;
+        var t1 = this._subscription;
         if (t1 != null)
           t1.cancel$0();
         this._streamController.close$0(0);
       },
       GuaranteeChannel$3$allowSinkErrors: function(innerSink, allowSinkErrors, _box_0, $T) {
-        this._sink = H.setRuntimeTypeInfo(new K._GuaranteeSink(innerSink, this, H.setRuntimeTypeInfo(new P._AsyncCompleter(H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null])), [null]), false, false, null, null, true), [$T]);
+        this._sink = new K._GuaranteeSink(innerSink, this, new P._AsyncCompleter(new P._Future(0, $.Zone__current, null, [null]), [null]), false, false, null, null, true, [$T]);
         this._streamController = P.StreamController_StreamController(null, new K.GuaranteeChannel_closure(_box_0, this), null, null, true, $T);
       },
       static: {
@@ -14761,7 +14741,7 @@
           var t1, t2;
           t1 = {};
           t1.innerStream = innerStream;
-          t2 = H.setRuntimeTypeInfo(new K.GuaranteeChannel(null, null, null, false), [$T]);
+          t2 = new K.GuaranteeChannel(null, null, null, false, [$T]);
           t2.GuaranteeChannel$3$allowSinkErrors(innerSink, true, t1, $T);
           return t2;
         }
@@ -14776,7 +14756,7 @@
           return;
         t2 = this._box_0.innerStream;
         t3 = t1._streamController;
-        t1._guarantee_channel$_subscription = t2.listen$3$onDone$onError(t3.get$add(t3), new K.GuaranteeChannel__closure(t1), t1._streamController.get$addError());
+        t1._subscription = t2.listen$3$onDone$onError(t3.get$add(t3), new K.GuaranteeChannel__closure(t1), t1._streamController.get$addError());
       }
     },
     GuaranteeChannel__closure: {
@@ -14788,7 +14768,7 @@
       }
     },
     _GuaranteeSink: {
-      "^": "Object;_guarantee_channel$_inner,_channel,_doneCompleter,_disconnected,_closed,_addStreamSubscription,_addStreamCompleter,_allowErrors",
+      "^": "Object;_guarantee_channel$_inner,_channel,_doneCompleter,_disconnected,_closed,_addStreamSubscription,_addStreamCompleter,_allowErrors,$ti",
       add$1: function(_, data) {
         var t1;
         if (this._closed)
@@ -14826,11 +14806,11 @@
         if (this._addStreamSubscription != null)
           throw H.wrapException(new P.StateError("Cannot add stream while adding stream."));
         if (this._disconnected) {
-          t1 = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null]);
+          t1 = new P._Future(0, $.Zone__current, null, [null]);
           t1._asyncComplete$1(null);
           return t1;
         }
-        this._addStreamCompleter = H.setRuntimeTypeInfo(new P._SyncCompleter(H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null])), [null]);
+        this._addStreamCompleter = new P._SyncCompleter(new P._Future(0, $.Zone__current, null, [null]), [null]);
         t1 = this._guarantee_channel$_inner;
         t1 = t1.get$add(t1);
         t2 = this.get$_addError();
@@ -14893,10 +14873,9 @@
           t2 = inputId;
         }
         if (this._multi_channel$_inner == null) {
-          t1 = H.setRuntimeTypeInfo(new P._EmptyStream(), [null]);
-          t3 = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null]);
-          t3._asyncComplete$1(null);
-          return new D.VirtualChannel(this, t2, t1, H.setRuntimeTypeInfo(new S.NullStreamSink(t3, false, false), [null]));
+          t1 = new P._Future(0, $.Zone__current, null, [null]);
+          t1._asyncComplete$1(null);
+          return new D.VirtualChannel(this, t2, new P._EmptyStream([null]), new S.NullStreamSink(t1, false, false, [null]));
         }
         t3 = this._controllers;
         if (t3.containsKey$1(t2))
@@ -14905,11 +14884,12 @@
         t3.$indexSet(0, t2, controller);
         t2 = controller._local._streamController;
         t2.toString;
-        H.setRuntimeTypeInfo(new P._ControllerStream(t2), [H.getTypeArgumentByIndex(t2, 0)]).listen$2$onDone(new D._MultiChannel_virtualChannel_closure(t1, this), new D._MultiChannel_virtualChannel_closure0(t1, this));
+        new P._ControllerStream(t2, [H.getTypeArgumentByIndex(t2, 0)]).listen$2$onDone(new D._MultiChannel_virtualChannel_closure(t1, this), new D._MultiChannel_virtualChannel_closure0(t1, this));
         t1 = t1.outputId;
-        t2 = controller._foreign._streamController;
-        t2.toString;
-        return new D.VirtualChannel(this, t1, H.setRuntimeTypeInfo(new P._ControllerStream(t2), [H.getTypeArgumentByIndex(t2, 0)]), controller._foreign._sink);
+        t2 = controller._foreign;
+        t3 = t2._streamController;
+        t3.toString;
+        return new D.VirtualChannel(this, t1, new P._ControllerStream(t3, [H.getTypeArgumentByIndex(t3, 0)]), t2._sink);
       },
       _closeChannel$2: function(inputId, outputId) {
         var t1, t2;
@@ -14937,10 +14917,10 @@
         this._controllers.$indexSet(0, 0, t1);
         t2 = t1._local._streamController;
         t2.toString;
-        H.setRuntimeTypeInfo(new P._ControllerStream(t2), [H.getTypeArgumentByIndex(t2, 0)]).listen$2$onDone(new D._MultiChannel_closure(this), new D._MultiChannel_closure0(this));
+        new P._ControllerStream(t2, [H.getTypeArgumentByIndex(t2, 0)]).listen$2$onDone(new D._MultiChannel_closure(this), new D._MultiChannel_closure0(this));
         t2 = this._multi_channel$_inner._streamController;
         t2.toString;
-        this._innerStreamSubscription = H.setRuntimeTypeInfo(new P._ControllerStream(t2), [H.getTypeArgumentByIndex(t2, 0)]).listen$3$onDone$onError(new D._MultiChannel_closure1(this), this.get$_closeInnerChannel(), t1._local._sink.get$addError());
+        this._innerStreamSubscription = new P._ControllerStream(t2, [H.getTypeArgumentByIndex(t2, 0)]).listen$3$onDone$onError(new D._MultiChannel_closure1(this), this.get$_closeInnerChannel(), t1._local._sink.get$addError());
       },
       static: {
         _MultiChannel$: function(_inner) {
@@ -14996,20 +14976,22 @@
   }], ["", "package:stream_channel/src/stream_channel_controller.dart",, B, {
     "^": "",
     StreamChannelController: {
-      "^": "Object;_local,_foreign",
+      "^": "Object;_local,_foreign,$ti",
       get$local: function() {
         return this._local;
       },
       StreamChannelController$2$allowForeignErrors$sync: function(allowForeignErrors, sync, $T) {
-        var localToForeignController, foreignToLocalController;
+        var localToForeignController, foreignToLocalController, t1, t2;
         localToForeignController = P.StreamController_StreamController(null, null, null, null, true, $T);
         foreignToLocalController = P.StreamController_StreamController(null, null, null, null, true, $T);
-        this._local = K.GuaranteeChannel$(H.setRuntimeTypeInfo(new P._ControllerStream(foreignToLocalController), [H.getTypeArgumentByIndex(foreignToLocalController, 0)]), H.setRuntimeTypeInfo(new P._StreamSinkWrapper(localToForeignController), [H.getTypeArgumentByIndex(localToForeignController, 0)]), true, null);
-        this._foreign = K.GuaranteeChannel$(H.setRuntimeTypeInfo(new P._ControllerStream(localToForeignController), [H.getTypeArgumentByIndex(localToForeignController, 0)]), H.setRuntimeTypeInfo(new P._StreamSinkWrapper(foreignToLocalController), [H.getTypeArgumentByIndex(foreignToLocalController, 0)]), true, null);
+        t1 = H.getTypeArgumentByIndex(foreignToLocalController, 0);
+        t2 = H.getTypeArgumentByIndex(localToForeignController, 0);
+        this._local = K.GuaranteeChannel$(new P._ControllerStream(foreignToLocalController, [t1]), new P._StreamSinkWrapper(localToForeignController, [t2]), true, null);
+        this._foreign = K.GuaranteeChannel$(new P._ControllerStream(localToForeignController, [t2]), new P._StreamSinkWrapper(foreignToLocalController, [t1]), true, null);
       },
       static: {
         StreamChannelController$: function(allowForeignErrors, sync, $T) {
-          var t1 = H.setRuntimeTypeInfo(new B.StreamChannelController(null, null), [$T]);
+          var t1 = new B.StreamChannelController(null, null, [$T]);
           t1.StreamChannelController$2$allowForeignErrors$sync(true, true, $T);
           return t1;
         }
@@ -15026,17 +15008,21 @@
       var t1 = self.testRunner;
       if (!(t1 == null))
         J.waitUntilDone$0$x(t1);
+      if (J.$eq$($.$get$_currentUrl().get$queryParameters().$index(0, "debug"), "true")) {
+        t1 = document.body;
+        t1.toString;
+        W._ElementCssClassSet__add(t1, "debug");
+      }
       P.runZoned(new M.main_closure(), new M.main_closure0(), null, null);
     }, "call$0", "host__main$closure", 0, 0, 2],
     _connectToServer: function() {
       var webSocket, controller, t1;
-      webSocket = W.WebSocket_WebSocket(P.Uri_parse(window.location.href, 0, null).get$queryParameters().$index(0, "managerUrl"), null);
+      webSocket = W.WebSocket_WebSocket($.$get$_currentUrl().get$queryParameters().$index(0, "managerUrl"), null);
       controller = B.StreamChannelController$(true, true, null);
-      t1 = H.setRuntimeTypeInfo(new W._EventStream(webSocket, "message", false), [H.getTypeArgumentByIndex(C.EventStreamProvider_message, 0)]);
-      H.setRuntimeTypeInfo(new W._EventStreamSubscription(0, t1._html$_target, t1._eventType, W._wrapZone(new M._connectToServer_closure(controller)), false), [H.getTypeArgumentByIndex(t1, 0)])._tryResume$0();
+      new W._EventStreamSubscription(0, webSocket, "message", W._wrapZone(new M._connectToServer_closure(controller)), false, [W.MessageEvent])._tryResume$0();
       t1 = controller._local._streamController;
       t1.toString;
-      H.setRuntimeTypeInfo(new P._ControllerStream(t1), [H.getTypeArgumentByIndex(t1, 0)]).listen$1(new M._connectToServer_closure0(webSocket));
+      new P._ControllerStream(t1, [H.getTypeArgumentByIndex(t1, 0)]).listen$1(new M._connectToServer_closure0(webSocket));
       return D._MultiChannel$(controller._foreign);
     },
     _connectToIframe: function(url, id) {
@@ -15047,12 +15033,11 @@
       J.set$src$x(iframe, url);
       document.body.appendChild(iframe);
       controller = B.StreamChannelController$(true, true, null);
-      readyCompleter = H.setRuntimeTypeInfo(new P._AsyncCompleter(H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null])), [null]);
-      t1 = H.setRuntimeTypeInfo(new W._EventStream(window, "message", false), [H.getTypeArgumentByIndex(C.EventStreamProvider_message, 0)]);
-      H.setRuntimeTypeInfo(new W._EventStreamSubscription(0, t1._html$_target, t1._eventType, W._wrapZone(new M._connectToIframe_closure(iframe, controller, readyCompleter)), false), [H.getTypeArgumentByIndex(t1, 0)])._tryResume$0();
+      readyCompleter = new P._AsyncCompleter(new P._Future(0, $.Zone__current, null, [null]), [null]);
+      new W._EventStreamSubscription(0, window, "message", W._wrapZone(new M._connectToIframe_closure(iframe, controller, readyCompleter)), false, [W.MessageEvent])._tryResume$0();
       t1 = controller._local._streamController;
       t1.toString;
-      H.setRuntimeTypeInfo(new P._ControllerStream(t1), [H.getTypeArgumentByIndex(t1, 0)]).listen$1(new M._connectToIframe_closure0(iframe, readyCompleter));
+      new P._ControllerStream(t1, [H.getTypeArgumentByIndex(t1, 0)]).listen$1(new M._connectToIframe_closure0(iframe, readyCompleter));
       return controller._foreign;
     },
     _TestRunner: {
@@ -15066,10 +15051,10 @@
         serverChannel = M._connectToServer();
         t1 = serverChannel._mainController._foreign._streamController;
         t1.toString;
-        H.setRuntimeTypeInfo(new P._ControllerStream(t1), [H.getTypeArgumentByIndex(t1, 0)]).listen$1(new M.main__closure(serverChannel));
+        new P._ControllerStream(t1, [H.getTypeArgumentByIndex(t1, 0)]).listen$1(new M.main__closure(serverChannel));
         P.Timer_Timer$periodic(P.Duration$(0, 0, 0, 0, 0, 1), new M.main__closure0(serverChannel));
         t1 = J.get$onClick$x(document.querySelector("#play"));
-        H.setRuntimeTypeInfo(new W._EventStreamSubscription(0, t1._html$_target, t1._eventType, W._wrapZone(new M.main__closure1(serverChannel)), false), [H.getTypeArgumentByIndex(t1, 0)])._tryResume$0();
+        new W._EventStreamSubscription(0, t1._html$_target, t1._eventType, W._wrapZone(new M.main__closure1(serverChannel)), false, [H.getTypeArgumentByIndex(t1, 0)])._tryResume$0();
       }
     },
     main__closure: {
@@ -15083,7 +15068,7 @@
           suiteChannel.stream.pipe$1(iframeChannel._sink);
           t1 = iframeChannel._streamController;
           t1.toString;
-          H.setRuntimeTypeInfo(new P._ControllerStream(t1), [H.getTypeArgumentByIndex(t1, 0)]).pipe$1(suiteChannel.sink);
+          new P._ControllerStream(t1, [H.getTypeArgumentByIndex(t1, 0)]).pipe$1(suiteChannel.sink);
         } else if (J.$eq$(t1.$index(message, "command"), "displayPause")) {
           t1 = document.body;
           t1.toString;
@@ -15168,13 +15153,13 @@
                 t2 = window.location;
                 J.postMessage$2$x(t1, message, (t2 && C.Location_methods).get$origin(t2));
                 // implicit return
-                return P._asyncHelper(null, 0, $async$completer, null);
+                return P._asyncHelper(null, 0, $async$completer);
               case 1:
                 // rethrow
                 return P._asyncHelper($async$currentError, 1, $async$completer);
             }
         });
-        return P._asyncHelper(null, $async$call$1, $async$completer, null);
+        return P._asyncHelper(null, $async$call$1, $async$completer);
       }
     }
   }, 1]];
@@ -15400,6 +15385,9 @@
   J.matchAsPrefix$2$s = function(receiver, a0, a1) {
     return J.getInterceptor$s(receiver).matchAsPrefix$2(receiver, a0, a1);
   };
+  J.padRight$1$s = function(receiver, a0) {
+    return J.getInterceptor$s(receiver).padRight$1(receiver, a0);
+  };
   J.postMessage$2$x = function(receiver, a0, a1) {
     return J.getInterceptor$x(receiver).postMessage$2(receiver, a0, a1);
   };
@@ -15433,9 +15421,6 @@
   J.substring$2$s = function(receiver, a0, a1) {
     return J.getInterceptor$s(receiver).substring$2(receiver, a0, a1);
   };
-  J.toLowerCase$0$s = function(receiver) {
-    return J.getInterceptor$s(receiver).toLowerCase$0(receiver);
-  };
   J.toRadixString$1$n = function(receiver, a0) {
     return J.getInterceptor$n(receiver).toRadixString$1(receiver, a0);
   };
@@ -15474,6 +15459,7 @@
   C.NativeUint8List_methods = H.NativeUint8List.prototype;
   C.PlainJavaScriptObject_methods = J.PlainJavaScriptObject.prototype;
   C.UnknownJavaScriptObject_methods = J.UnknownJavaScriptObject.prototype;
+  C.Window_methods = W.Window.prototype;
   C.C_DynamicRuntimeType = new H.DynamicRuntimeType();
   C.C_EmptyIterator = new H.EmptyIterator();
   C.C_OutOfMemoryError = new P.OutOfMemoryError();
@@ -15481,8 +15467,6 @@
   C.C__DelayedDone = new P._DelayedDone();
   C.C__RootZone = new P._RootZone();
   C.Duration_0 = new P.Duration(0);
-  C.EventStreamProvider_click = H.setRuntimeTypeInfo(new W.EventStreamProvider("click"), [W.MouseEvent]);
-  C.EventStreamProvider_message = H.setRuntimeTypeInfo(new W.EventStreamProvider("message"), [W.MessageEvent]);
   C.JS_CONST_0 = function(hooks) {
   if (typeof dartExperimentalFixupGetTag != "function") return hooks;
   hooks.getTag = dartExperimentalFixupGetTag(hooks.getTag);
@@ -15632,7 +15616,7 @@
   C.List_qNA = Isolate.makeConstantList([0, 0, 32754, 11263, 65534, 34815, 65534, 18431]);
   C.List_qg40 = Isolate.makeConstantList([0, 0, 32722, 12287, 65535, 34815, 65534, 18431]);
   C.List_qg4 = Isolate.makeConstantList([0, 0, 65490, 12287, 65535, 34815, 65534, 18431]);
-  C.Map_empty = H.setRuntimeTypeInfo(new H.ConstantStringMap(0, {}, C.List_empty), [P.String, P.String]);
+  C.Map_empty = new H.ConstantStringMap(0, {}, C.List_empty, [P.String, P.String]);
   C.Utf8Codec_false = new P.Utf8Codec(false);
   C._ZoneFunction_3bB = new P._ZoneFunction(C.C__RootZone, P.async___rootCreatePeriodicTimer$closure());
   C._ZoneFunction_7G2 = new P._ZoneFunction(C.C__RootZone, P.async___rootRegisterBinaryCallback$closure());
@@ -15772,17 +15756,17 @@
   }, "_Uri__needsNoEncoding", "_scannerTables", "$get$_scannerTables", function() {
     return P._createTables();
   }, "_scannerTables", "windows", "$get$windows", function() {
-    return F.Context_Context(null, $.$get$Style_windows());
+    return M.Context_Context(null, $.$get$Style_windows());
   }, "windows", "context", "$get$context", function() {
-    return new F.Context($.$get$Style_platform(), null);
+    return new M.Context($.$get$Style_platform(), null);
   }, "context", "Style_posix", "$get$Style_posix", function() {
-    return new Z.PosixStyle("posix", "/", C.List_cSk, P.RegExp_RegExp("/", true, false), P.RegExp_RegExp("[^/]$", true, false), P.RegExp_RegExp("^/", true, false), null);
+    return new E.PosixStyle("posix", "/", C.List_cSk, P.RegExp_RegExp("/", true, false), P.RegExp_RegExp("[^/]$", true, false), P.RegExp_RegExp("^/", true, false), null);
   }, "Style_posix", "Style_windows", "$get$Style_windows", function() {
-    return new T.WindowsStyle("windows", "\\", C.List_WnV, P.RegExp_RegExp("[/\\\\]", true, false), P.RegExp_RegExp("[^/\\\\]$", true, false), P.RegExp_RegExp("^(\\\\\\\\[^\\\\]+\\\\[^\\\\/]+|[a-zA-Z]:[/\\\\])", true, false), P.RegExp_RegExp("^[/\\\\](?![/\\\\])", true, false));
+    return new L.WindowsStyle("windows", "\\", C.List_WnV, P.RegExp_RegExp("[/\\\\]", true, false), P.RegExp_RegExp("[^/\\\\]$", true, false), P.RegExp_RegExp("^(\\\\\\\\[^\\\\]+\\\\[^\\\\/]+|[a-zA-Z]:[/\\\\])", true, false), P.RegExp_RegExp("^[/\\\\](?![/\\\\])", true, false));
   }, "Style_windows", "Style_url", "$get$Style_url", function() {
-    return new E.UrlStyle("url", "/", C.List_cSk, P.RegExp_RegExp("/", true, false), P.RegExp_RegExp("(^[a-zA-Z][-+.a-zA-Z\\d]*://|[^/])$", true, false), P.RegExp_RegExp("[a-zA-Z][-+.a-zA-Z\\d]*://[^/]*", true, false), P.RegExp_RegExp("^/", true, false));
+    return new F.UrlStyle("url", "/", C.List_cSk, P.RegExp_RegExp("/", true, false), P.RegExp_RegExp("(^[a-zA-Z][-+.a-zA-Z\\d]*://|[^/])$", true, false), P.RegExp_RegExp("[a-zA-Z][-+.a-zA-Z\\d]*://[^/]*", true, false), P.RegExp_RegExp("^/", true, false));
   }, "Style_url", "Style_platform", "$get$Style_platform", function() {
-    return S.Style__getPlatformStyle();
+    return O.Style__getPlatformStyle();
   }, "Style_platform", "_vmFrame", "$get$_vmFrame", function() {
     return P.RegExp_RegExp("^#\\d+\\s+(\\S.*) \\((.+?)((?::\\d+){0,2})\\)$", true, false);
   }, "_vmFrame", "_v8Frame", "$get$_v8Frame", function() {
@@ -15815,11 +15799,13 @@
     return P.RegExp_RegExp("^[^\\s]+( \\d+(:\\d+)?)?[ \\t]+[^\\s]+$", true, true);
   }, "_friendlyTrace", "_iframes", "$get$_iframes", function() {
     return H.JsLinkedHashMap_JsLinkedHashMap$es6(P.$int, W.IFrameElement);
-  }, "_iframes"]);
+  }, "_iframes", "_currentUrl", "$get$_currentUrl", function() {
+    return P.Uri_parse(C.Window_methods.get$location(W.window()).href, 0, null);
+  }, "_currentUrl"]);
   Isolate = Isolate.$finishIsolateConstructor(Isolate);
   $ = new Isolate();
   init.metadata = [null, 0];
-  init.types = [{func: 1, args: [,]}, {func: 1}, {func: 1, v: true}, {func: 1, args: [,,]}, {func: 1, v: true, args: [{func: 1, v: true}]}, {func: 1, args: [, P.StackTrace]}, {func: 1, v: true, args: [,], opt: [P.StackTrace]}, {func: 1, v: true, args: [P.String]}, {func: 1, v: true, args: [P.Uint8List, P.String, P.$int]}, {func: 1, ret: {func: 1, args: [,]}, args: [{func: 1, args: [,]}]}, {func: 1, v: true, args: [P.Object], opt: [P.StackTrace]}, {func: 1, ret: P.Zone, named: {specification: P.ZoneSpecification, zoneValues: P.Map}}, {func: 1, args: [{func: 1}]}, {func: 1, args: [{func: 1, args: [,]},,]}, {func: 1, args: [{func: 1, args: [,,]},,,]}, {func: 1, ret: {func: 1}, args: [{func: 1}]}, {func: 1, ret: {func: 1, args: [,,]}, args: [{func: 1, args: [,,]}]}, {func: 1, ret: P.AsyncError, args: [P.Object, P.StackTrace]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone,, P.StackTrace]}, {func: 1, ret: P.String, args: [P.$int]}, {func: 1, v: true, args: [P.Zone, {func: 1}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, v: true, args: [P.Zone, P.String]}, {func: 1, ret: P.Zone, args: [P.Zone, P.ZoneSpecification, P.Map]}, {func: 1, v: true, opt: [,]}, {func: 1, args: [P.String]}, {func: 1, args: [{func: 1, v: true}]}, {func: 1, args: [P.bool]}, {func: 1, args: [, P.String]}, {func: 1, args: [,], opt: [,]}, {func: 1, v: true, args: [, P.StackTrace]}, {func: 1, args: [P.Zone,, P.StackTrace]}, {func: 1, args: [P.Zone, {func: 1}]}, {func: 1, args: [P.Zone, {func: 1, args: [,]},,]}, {func: 1, args: [P.Zone, {func: 1, args: [,,]},,,]}, {func: 1, ret: {func: 1}, args: [P.Zone, {func: 1}]}, {func: 1, ret: {func: 1, args: [,]}, args: [P.Zone, {func: 1, args: [,]}]}, {func: 1, ret: {func: 1, args: [,,]}, args: [P.Zone, {func: 1, args: [,,]}]}, {func: 1, ret: P.$int, args: [, P.$int]}, {func: 1, ret: P.num, args: [P.num, P.num]}, {func: 1, ret: P.AsyncError, args: [P.Zone, P.Object, P.StackTrace]}, {func: 1, v: true, args: [P.String, P.$int]}, {func: 1, v: true, args: [P.String], opt: [,]}, {func: 1, ret: P.$int, args: [P.$int, P.$int]}, {func: 1, ret: P.Uint8List, args: [,,]}, {func: 1, args: [P.$int,,]}, {func: 1, ret: P.Future, args: [,]}, {func: 1, v: true, args: [,]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,]},,]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,,]},,,]}, {func: 1, ret: {func: 1}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, ret: {func: 1, args: [,]}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,]}]}, {func: 1, ret: {func: 1, args: [,,]}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,,]}]}, {func: 1, ret: P.AsyncError, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Object, P.StackTrace]}, {func: 1, v: true, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, v: true, args: [P.Zone, P.ZoneDelegate, P.Zone, P.String]}, {func: 1, ret: P.Zone, args: [P.Zone, P.ZoneDelegate, P.Zone, P.ZoneSpecification, P.Map]}, {func: 1, ret: P.String, args: [P.String]}, {func: 1, v: true, args: [P.$int, P.$int]}];
+  init.types = [{func: 1, args: [,]}, {func: 1}, {func: 1, v: true}, {func: 1, args: [,,]}, {func: 1, v: true, args: [{func: 1, v: true}]}, {func: 1, args: [, P.StackTrace]}, {func: 1, v: true, args: [,], opt: [P.StackTrace]}, {func: 1, v: true, args: [P.String]}, {func: 1, v: true, args: [P.Uint8List, P.String, P.$int]}, {func: 1, ret: {func: 1, args: [,]}, args: [{func: 1, args: [,]}]}, {func: 1, ret: P.Zone, named: {specification: P.ZoneSpecification, zoneValues: P.Map}}, {func: 1, args: [{func: 1}]}, {func: 1, args: [{func: 1, args: [,]},,]}, {func: 1, args: [{func: 1, args: [,,]},,,]}, {func: 1, ret: {func: 1}, args: [{func: 1}]}, {func: 1, ret: {func: 1, args: [,,]}, args: [{func: 1, args: [,,]}]}, {func: 1, ret: P.AsyncError, args: [P.Object, P.StackTrace]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone,, P.StackTrace]}, {func: 1, ret: P.String, args: [P.$int]}, {func: 1, v: true, args: [P.Zone, {func: 1}]}, {func: 1, args: [, P.String]}, {func: 1, ret: P.Timer, args: [P.Zone, P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, v: true, args: [P.Zone, P.String]}, {func: 1, ret: P.Zone, args: [P.Zone, P.ZoneSpecification, P.Map]}, {func: 1, args: [P.$int,,]}, {func: 1, v: true, opt: [,]}, {func: 1, args: [P.String]}, {func: 1, args: [{func: 1, v: true}]}, {func: 1, args: [P.bool]}, {func: 1, args: [,], opt: [,]}, {func: 1, v: true, args: [P.Object], opt: [P.StackTrace]}, {func: 1, v: true, args: [, P.StackTrace]}, {func: 1, args: [P.Zone,, P.StackTrace]}, {func: 1, args: [P.Zone, {func: 1}]}, {func: 1, args: [P.Zone, {func: 1, args: [,]},,]}, {func: 1, args: [P.Zone, {func: 1, args: [,,]},,,]}, {func: 1, ret: {func: 1}, args: [P.Zone, {func: 1}]}, {func: 1, ret: {func: 1, args: [,]}, args: [P.Zone, {func: 1, args: [,]}]}, {func: 1, ret: P.$int, args: [, P.$int]}, {func: 1, ret: P.num, args: [P.num, P.num]}, {func: 1, ret: {func: 1, args: [,,]}, args: [P.Zone, {func: 1, args: [,,]}]}, {func: 1, v: true, args: [P.String, P.$int]}, {func: 1, v: true, args: [P.String], opt: [,]}, {func: 1, ret: P.$int, args: [P.$int, P.$int]}, {func: 1, ret: P.Uint8List, args: [,,]}, {func: 1, ret: P.AsyncError, args: [P.Zone, P.Object, P.StackTrace]}, {func: 1, ret: P.Future, args: [,]}, {func: 1, v: true, args: [,]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,]},,]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,,]},,,]}, {func: 1, ret: {func: 1}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, ret: {func: 1, args: [,]}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,]}]}, {func: 1, ret: {func: 1, args: [,,]}, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1, args: [,,]}]}, {func: 1, ret: P.AsyncError, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Object, P.StackTrace]}, {func: 1, v: true, args: [P.Zone, P.ZoneDelegate, P.Zone, {func: 1}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.Timer, args: [P.Zone, P.ZoneDelegate, P.Zone, P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, v: true, args: [P.Zone, P.ZoneDelegate, P.Zone, P.String]}, {func: 1, ret: P.Zone, args: [P.Zone, P.ZoneDelegate, P.Zone, P.ZoneSpecification, P.Map]}, {func: 1, ret: P.String, args: [P.String]}, {func: 1, v: true, args: [P.$int, P.$int]}];
   function convertToFastObject(properties) {
     function MyClass() {
     }
diff --git a/lib/src/runner/browser/static/index.html b/lib/src/runner/browser/static/index.html
index c0da83e..69617fa 100644
--- a/lib/src/runner/browser/static/index.html
+++ b/lib/src/runner/browser/static/index.html
@@ -5,8 +5,7 @@
   <link rel="stylesheet" type="text/css" href="host.css" />
 </head>
 <body>
-  <svg version="1.1" x="0px" y="0px" width="400px" height="400px"
-      viewBox="0 0 400 400">
+  <svg id="dart" version="1.1" x="0px" y="0px" width="400px" height="400px" viewBox="0 0 400 400">
     <path id="right-flank" fill="#0083C9" d="M249.379,226.486l-6.676,15.572L166.174,166h58.82c0,0,2.807-0.409,3.645,1.966L249.379,226.486z"/>
     <path id="right-ear"   fill="#00D2B8" d="M201.84,141.906L166.174,166h58.82c0,0,2.168-0.25,2.645,0.566l-2.694-8.848l-15.024-14.68C207.555,140.329,203.578,140.744,201.84,141.906z"/>
     <path id="left-flank"  fill="#00D2B8" d="M242.616,241.856l-15.022,6.799l-60.493-21.429c-1.035-0.395-1.101-3.696-1.101-3.696v-57.932L242.616,241.856z"/>
diff --git a/pubspec.yaml b/pubspec.yaml
index b39ae02..4e0529d 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -1,5 +1,5 @@
 name: test
-version: 0.12.15+10
+version: 0.12.15+11
 author: Dart Team <misc@dartlang.org>
 description: A library for writing dart unit tests.
 homepage: https://github.com/dart-lang/test