| Index: lib/src/runner/browser/static/host.dart.js
 | 
| diff --git a/lib/src/runner/browser/static/host.dart.js b/lib/src/runner/browser/static/host.dart.js
 | 
| index b0d1248f7a05217a30daafe940bdb9b6679bda26..44b140114a1aaddadf4077e4579dddc2af617cca 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.14.0-edge.f887b03b5b21735a292ef599d132568b661ce29b.
 | 
| +// Generated by dart2js, the Dart to JavaScript compiler version: 1.18.1.
 | 
|  // The code supports the following hooks:
 | 
|  // dartPrint(message):
 | 
|  //    if this function is defined it is called instead of the Dart [print]
 | 
| @@ -21,7 +21,19 @@
 | 
|      };
 | 
|      cls.prototype = {p: {}};
 | 
|      var object = new cls();
 | 
| -    return object.__proto__ && object.__proto__.p === cls.prototype.p;
 | 
| +    if (!(object.__proto__ && object.__proto__.p === cls.prototype.p))
 | 
| +      return false;
 | 
| +    try {
 | 
| +      if (typeof navigator != "undefined" && typeof navigator.userAgent == "string" && navigator.userAgent.indexOf("Chrome/") >= 0)
 | 
| +        return true;
 | 
| +      if (typeof version == "function" && version.length == 0) {
 | 
| +        var v = version();
 | 
| +        if (/^\d+\.\d+\.\d+\.\d+$/.test(v))
 | 
| +          return true;
 | 
| +      }
 | 
| +    } catch (_) {
 | 
| +    }
 | 
| +    return false;
 | 
|    }();
 | 
|    function map(x) {
 | 
|      x = Object.create(null);
 | 
| @@ -585,8 +597,8 @@
 | 
|        }],
 | 
|        noSuchMethod$1: ["super$Interceptor$noSuchMethod", function(receiver, invocation) {
 | 
|          throw H.wrapException(P.NoSuchMethodError$(receiver, invocation.get$memberName(), invocation.get$positionalArguments(), invocation.get$namedArguments(), null));
 | 
| -      }, null, "get$noSuchMethod", 2, 0, null, 24],
 | 
| -      "%": "MediaError|MediaKeyError|SVGAnimatedLength|SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedString|SVGAnimatedTransformList"
 | 
| +      }],
 | 
| +      "%": "MediaError|MediaKeyError|PushMessageData|SVGAnimatedLength|SVGAnimatedLengthList|SVGAnimatedNumber|SVGAnimatedNumberList|SVGAnimatedString|SVGAnimatedTransformList"
 | 
|      },
 | 
|      JSBool: {
 | 
|        "^": "Interceptor;",
 | 
| @@ -609,9 +621,9 @@
 | 
|        get$hashCode: function(receiver) {
 | 
|          return 0;
 | 
|        },
 | 
| -      noSuchMethod$1: [function(receiver, invocation) {
 | 
| +      noSuchMethod$1: function(receiver, invocation) {
 | 
|          return this.super$Interceptor$noSuchMethod(receiver, invocation);
 | 
| -      }, null, "get$noSuchMethod", 2, 0, null, 24]
 | 
| +      }
 | 
|      },
 | 
|      JavaScriptObject: {
 | 
|        "^": "Interceptor;",
 | 
| @@ -635,7 +647,10 @@
 | 
|          var dartClosure = receiver[$.$get$DART_CLOSURE_PROPERTY_NAME()];
 | 
|          return dartClosure == null ? this.super$JavaScriptObject$toString(receiver) : J.toString$0$(dartClosure);
 | 
|        },
 | 
| -      $isFunction: 1
 | 
| +      $isFunction: 1,
 | 
| +      $signature: function() {
 | 
| +        return {func: 1, opt: [,,,,,,,,,,,,,,,,]};
 | 
| +      }
 | 
|      },
 | 
|      JSArray: {
 | 
|        "^": "Interceptor;",
 | 
| @@ -757,6 +772,17 @@
 | 
|            return receiver[t1 - 1];
 | 
|          throw H.wrapException(H.IterableElementError_noElement());
 | 
|        },
 | 
| +      get$single: function(receiver) {
 | 
| +        var t1 = receiver.length;
 | 
| +        if (t1 === 1) {
 | 
| +          if (0 >= t1)
 | 
| +            return H.ioore(receiver, 0);
 | 
| +          return receiver[0];
 | 
| +        }
 | 
| +        if (t1 === 0)
 | 
| +          throw H.wrapException(H.IterableElementError_noElement());
 | 
| +        throw H.wrapException(H.IterableElementError_tooMany());
 | 
| +      },
 | 
|        setRange$4: function(receiver, start, end, iterable, skipCount) {
 | 
|          var $length, i, t1;
 | 
|          this.checkMutable$1(receiver, "set range");
 | 
| @@ -811,14 +837,13 @@
 | 
|          }
 | 
|        },
 | 
|        indexOf$2: function(receiver, element, start) {
 | 
| -        var t1, i;
 | 
| -        t1 = J.getInterceptor$n(start);
 | 
| -        if (t1.$ge(start, receiver.length))
 | 
| +        var i, t1;
 | 
| +        if (start >= receiver.length)
 | 
|            return -1;
 | 
| -        if (t1.$lt(start, 0))
 | 
| +        if (start < 0)
 | 
|            start = 0;
 | 
| -        for (i = start; J.$lt$n(i, receiver.length); ++i) {
 | 
| -          if (i >>> 0 !== i || i >= receiver.length)
 | 
| +        for (i = start; t1 = receiver.length, i < t1; ++i) {
 | 
| +          if (i >>> 0 !== i || i >= t1)
 | 
|              return H.ioore(receiver, i);
 | 
|            if (J.$eq$(receiver[i], element))
 | 
|              return i;
 | 
| @@ -844,12 +869,6 @@
 | 
|        toString$0: function(receiver) {
 | 
|          return P.IterableBase_iterableToFullString(receiver, "[", "]");
 | 
|        },
 | 
| -      toList$1$growable: function(receiver, growable) {
 | 
| -        return H.setRuntimeTypeInfo(receiver.slice(), [H.getTypeArgumentByIndex(receiver, 0)]);
 | 
| -      },
 | 
| -      toList$0: function($receiver) {
 | 
| -        return this.toList$1$growable($receiver, true);
 | 
| -      },
 | 
|        get$iterator: function(receiver) {
 | 
|          return new J.ArrayIterator(receiver, receiver.length, 0, null);
 | 
|        },
 | 
| @@ -884,10 +903,12 @@
 | 
|          receiver[index] = value;
 | 
|        },
 | 
|        $isJSIndexable: 1,
 | 
| +      $asJSIndexable: Isolate.functionThatReturnsNull,
 | 
|        $isList: 1,
 | 
|        $asList: null,
 | 
|        $isEfficientLength: 1,
 | 
| -      static: {JSArray_JSArray$fixed: function($length, $E) {
 | 
| +      static: {
 | 
| +        JSArray_JSArray$fixed: function($length, $E) {
 | 
|            var t1;
 | 
|            if (typeof $length !== "number" || Math.floor($length) !== $length)
 | 
|              throw H.wrapException(P.ArgumentError$value($length, "length", "is not an integer"));
 | 
| @@ -896,23 +917,25 @@
 | 
|            t1 = H.setRuntimeTypeInfo(new Array($length), [$E]);
 | 
|            t1.fixed$length = Array;
 | 
|            return t1;
 | 
| -        }, JSArray_markUnmodifiableList: function(list) {
 | 
| +        },
 | 
| +        JSArray_markUnmodifiableList: function(list) {
 | 
|            list.fixed$length = Array;
 | 
|            list.immutable$list = Array;
 | 
|            return list;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      JSUnmodifiableArray: {
 | 
|        "^": "JSArray;"
 | 
|      },
 | 
|      ArrayIterator: {
 | 
| -      "^": "Object;_iterable,__interceptors$_length,_index,__interceptors$_current",
 | 
| +      "^": "Object;__interceptors$_iterable,__interceptors$_length,_index,__interceptors$_current",
 | 
|        get$current: function() {
 | 
|          return this.__interceptors$_current;
 | 
|        },
 | 
|        moveNext$0: function() {
 | 
|          var t1, $length, t2;
 | 
| -        t1 = this._iterable;
 | 
| +        t1 = this.__interceptors$_iterable;
 | 
|          $length = t1.length;
 | 
|          if (this.__interceptors$_length !== $length)
 | 
|            throw H.wrapException(H.throwConcurrentModificationError(t1));
 | 
| @@ -944,14 +967,6 @@
 | 
|          }
 | 
|          throw H.wrapException(new P.UnsupportedError("" + receiver));
 | 
|        },
 | 
| -      round$0: function(receiver) {
 | 
| -        if (receiver > 0) {
 | 
| -          if (receiver !== 1 / 0)
 | 
| -            return Math.round(receiver);
 | 
| -        } else if (receiver > -1 / 0)
 | 
| -          return 0 - Math.round(0 - receiver);
 | 
| -        throw H.wrapException(new P.UnsupportedError("" + receiver));
 | 
| -      },
 | 
|        toRadixString$1: function(receiver, radix) {
 | 
|          var result, match, t1, exponent;
 | 
|          H.checkInt(radix);
 | 
| @@ -1111,15 +1126,14 @@
 | 
|          return this.allMatches$2($receiver, string, 0);
 | 
|        },
 | 
|        matchAsPrefix$2: function(receiver, string, start) {
 | 
| -        var t1, t2, i;
 | 
| -        t1 = J.getInterceptor$n(start);
 | 
| -        if (t1.$lt(start, 0) || t1.$gt(start, string.length))
 | 
| +        var t1, i;
 | 
| +        if (start < 0 || start > string.length)
 | 
|            throw H.wrapException(P.RangeError$range(start, 0, string.length, null, null));
 | 
| -        t2 = receiver.length;
 | 
| -        if (J.$gt$n(t1.$add(start, t2), string.length))
 | 
| +        t1 = receiver.length;
 | 
| +        if (start + t1 > string.length)
 | 
|            return;
 | 
| -        for (i = 0; i < t2; ++i)
 | 
| -          if (this.codeUnitAt$1(string, t1.$add(start, i)) !== this.codeUnitAt$1(receiver, i))
 | 
| +        for (i = 0; i < t1; ++i)
 | 
| +          if (this.codeUnitAt$1(string, start + i) !== this.codeUnitAt$1(receiver, i))
 | 
|              return;
 | 
|          return new H.StringMatch(start, string, receiver);
 | 
|        },
 | 
| @@ -1161,14 +1175,13 @@
 | 
|          return H.stringReplaceRangeUnchecked(receiver, start, end, replacement);
 | 
|        },
 | 
|        startsWith$2: function(receiver, pattern, index) {
 | 
| -        var t1, endIndex;
 | 
| +        var endIndex;
 | 
|          H.checkInt(index);
 | 
| -        t1 = J.getInterceptor$n(index);
 | 
| -        if (t1.$lt(index, 0) || t1.$gt(index, receiver.length))
 | 
| +        if (index < 0 || index > receiver.length)
 | 
|            throw H.wrapException(P.RangeError$range(index, 0, receiver.length, null, null));
 | 
|          if (typeof pattern === "string") {
 | 
| -          endIndex = t1.$add(index, pattern.length);
 | 
| -          if (J.$gt$n(endIndex, receiver.length))
 | 
| +          endIndex = index + pattern.length;
 | 
| +          if (endIndex > receiver.length)
 | 
|              return false;
 | 
|            return pattern === receiver.substring(index, endIndex);
 | 
|          }
 | 
| @@ -1306,8 +1319,10 @@
 | 
|          return receiver[index];
 | 
|        },
 | 
|        $isJSIndexable: 1,
 | 
| +      $asJSIndexable: Isolate.functionThatReturnsNull,
 | 
|        $isString: 1,
 | 
| -      static: {JSString__isWhitespace: function(codeUnit) {
 | 
| +      static: {
 | 
| +        JSString__isWhitespace: function(codeUnit) {
 | 
|            if (codeUnit < 256)
 | 
|              switch (codeUnit) {
 | 
|                case 9:
 | 
| @@ -1346,7 +1361,8 @@
 | 
|              default:
 | 
|                return false;
 | 
|            }
 | 
| -        }, JSString__skipLeadingWhitespace: function(string, index) {
 | 
| +        },
 | 
| +        JSString__skipLeadingWhitespace: function(string, index) {
 | 
|            var t1, codeUnit;
 | 
|            for (t1 = string.length; index < t1;) {
 | 
|              codeUnit = C.JSString_methods.codeUnitAt$1(string, index);
 | 
| @@ -1355,7 +1371,8 @@
 | 
|              ++index;
 | 
|            }
 | 
|            return index;
 | 
| -        }, JSString__skipTrailingWhitespace: function(string, index) {
 | 
| +        },
 | 
| +        JSString__skipTrailingWhitespace: function(string, index) {
 | 
|            var index0, codeUnit;
 | 
|            for (; index > 0; index = index0) {
 | 
|              index0 = index - 1;
 | 
| @@ -1364,7 +1381,8 @@
 | 
|                break;
 | 
|            }
 | 
|            return index;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      }
 | 
|    }], ["_isolate_helper", "dart:_isolate_helper",, H, {
 | 
|      "^": "",
 | 
| @@ -1471,7 +1489,7 @@
 | 
|        matches = stack.match(new RegExp("^[^@]*@(.*):[0-9]*$", "m"));
 | 
|        if (matches != null)
 | 
|          return matches[1];
 | 
| -      throw H.wrapException(new P.UnsupportedError("Cannot extract URI from \"" + H.S(stack) + "\""));
 | 
| +      throw H.wrapException(new P.UnsupportedError('Cannot extract URI from "' + H.S(stack) + '"'));
 | 
|      },
 | 
|      IsolateNatives__processWorkerMessage: [function(sender, e) {
 | 
|        var msg, t1, functionName, entryPoint, args, message, isSpawnUri, startPaused, replyTo, t2, t3, t4, context;
 | 
| @@ -1526,7 +1544,7 @@
 | 
|          case "error":
 | 
|            throw H.wrapException(t1.$index(msg, "msg"));
 | 
|        }
 | 
| -    }, null, null, 4, 0, null, 32, 33],
 | 
| +    }, null, null, 4, 0, null, 35, 33],
 | 
|      IsolateNatives__log: function(msg) {
 | 
|        var trace, t1, t2, exception;
 | 
|        if (init.globalState.isWorker === true) {
 | 
| @@ -1578,10 +1596,12 @@
 | 
|      },
 | 
|      _Manager: {
 | 
|        "^": "Object;nextIsolateId,currentManagerId,nextManagerId,currentContext,rootContext,topEventLoop,fromCommandLine,isWorker,supportsWorkers,isolates,mainManager,managers,entry",
 | 
| -      static: {_Manager__serializePrintMessage: [function(object) {
 | 
| +      static: {
 | 
| +        _Manager__serializePrintMessage: [function(object) {
 | 
|            var t1 = P.LinkedHashMap__makeLiteral(["command", "print", "msg", object]);
 | 
|            return new H._Serializer(true, P._LinkedIdentityHashMap__LinkedIdentityHashMap$es6(null, P.$int)).serialize$1(t1);
 | 
| -        }, null, null, 2, 0, null, 19]}
 | 
| +        }, null, null, 2, 0, null, 25]
 | 
| +      }
 | 
|      },
 | 
|      _IsolateContext: {
 | 
|        "^": "Object;id,ports,weakPorts,isolateStatics<,controlPort<,pauseCapability,terminateCapability,initialized?,isPaused<,delayedEvents<,pauseTokens,doneHandlers,_scheduledControlEvents,_isExecutingEvent,errorsAreFatal,errorPorts",
 | 
| @@ -1715,7 +1735,7 @@
 | 
|          message[1] = stackTrace == null ? null : J.toString$0$(stackTrace);
 | 
|          for (t2 = new P._LinkedHashSetIterator(t1, t1._collection$_modifications, null, null), t2._collection$_cell = t1._collection$_first; t2.moveNext$0();)
 | 
|            J.send$1$x(t2._collection$_current, message);
 | 
| -      }, "call$2", "get$handleUncaughtError", 4, 0, 11],
 | 
| +      }, "call$2", "get$handleUncaughtError", 4, 0, 10],
 | 
|        eval$1: function(code) {
 | 
|          var old, result, oldIsExecutingEvent, e, s, exception, t1;
 | 
|          old = init.globalState.currentContext;
 | 
| @@ -1952,7 +1972,7 @@
 | 
|      _NativeJsSendPort: {
 | 
|        "^": "_BaseSendPort;_receivePort,_isolateId",
 | 
|        send$1: function(_, message) {
 | 
| -        var isolate, t1, msg, t2;
 | 
| +        var isolate, t1, msg;
 | 
|          isolate = init.globalState.isolates.$index(0, this._isolateId);
 | 
|          if (isolate == null)
 | 
|            return;
 | 
| @@ -1964,9 +1984,7 @@
 | 
|            isolate.handleControlMessage$1(msg);
 | 
|            return;
 | 
|          }
 | 
| -        t1 = init.globalState.topEventLoop;
 | 
| -        t2 = "receive " + H.S(message);
 | 
| -        t1.events._add$1(new H._IsolateEvent(isolate, new H._NativeJsSendPort_send_closure(this, msg), t2));
 | 
| +        init.globalState.topEventLoop.events._add$1(new H._IsolateEvent(isolate, new H._NativeJsSendPort_send_closure(this, msg), "receive"));
 | 
|        },
 | 
|        $eq: function(_, other) {
 | 
|          if (other == null)
 | 
| @@ -2058,15 +2076,18 @@
 | 
|          } else
 | 
|            throw H.wrapException(new P.UnsupportedError("Timer greater than 0."));
 | 
|        },
 | 
| -      static: {TimerImpl$: function(milliseconds, callback) {
 | 
| +      static: {
 | 
| +        TimerImpl$: function(milliseconds, callback) {
 | 
|            var t1 = new H.TimerImpl(true, false, null);
 | 
|            t1.TimerImpl$2(milliseconds, callback);
 | 
|            return t1;
 | 
| -        }, TimerImpl$periodic: function(milliseconds, callback) {
 | 
| +        },
 | 
| +        TimerImpl$periodic: function(milliseconds, callback) {
 | 
|            var t1 = new H.TimerImpl(false, false, null);
 | 
|            t1.TimerImpl$periodic$2(milliseconds, callback);
 | 
|            return t1;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      TimerImpl_internalCallback: {
 | 
|        "^": "Closure:2;$this,callback",
 | 
| @@ -2167,7 +2188,7 @@
 | 
|          if (!(x instanceof P.Object))
 | 
|            this.unsupported$1(x);
 | 
|          return ["dart", init.classIdExtractor(x), this.serializeArrayInPlace$1(init.classFieldsExtractor(x))];
 | 
| -      }, "call$1", "get$serialize", 2, 0, 0, 25],
 | 
| +      }, "call$1", "get$serialize", 2, 0, 0, 21],
 | 
|        unsupported$2: function(x, message) {
 | 
|          throw H.wrapException(new P.UnsupportedError(H.S(message == null ? "Can't transmit:" : message) + " " + H.S(x)));
 | 
|        },
 | 
| @@ -2324,7 +2345,7 @@
 | 
|            default:
 | 
|              throw H.wrapException("couldn't deserialize: " + H.S(x));
 | 
|          }
 | 
| -      }, "call$1", "get$deserialize", 2, 0, 0, 25],
 | 
| +      }, "call$1", "get$deserialize", 2, 0, 0, 21],
 | 
|        deserializeArrayInPlace$1: function(x) {
 | 
|          var t1, i, t2;
 | 
|          t1 = J.getInterceptor$asx(x);
 | 
| @@ -2412,6 +2433,9 @@
 | 
|      ConstantMap__throwUnmodifiable: function() {
 | 
|        throw H.wrapException(new P.UnsupportedError("Cannot modify unmodifiable Map"));
 | 
|      },
 | 
| +    jsConstructorNameToRti: function(constructorName) {
 | 
| +      return init.getTypeFromName(constructorName);
 | 
| +    },
 | 
|      getType: function(index) {
 | 
|        return init.types[index];
 | 
|      },
 | 
| @@ -2483,7 +2507,7 @@
 | 
|        return parseInt(source, radix);
 | 
|      },
 | 
|      Primitives_objectTypeName: function(object) {
 | 
| -      var interceptor, interceptorConstructor, interceptorConstructorName, $name, dispatchName, objectConstructor, decompiledName;
 | 
| +      var interceptor, interceptorConstructor, interceptorConstructorName, $name, dispatchName, objectConstructor, match, decompiledName;
 | 
|        interceptor = J.getInterceptor(object);
 | 
|        interceptorConstructor = interceptor.constructor;
 | 
|        if (typeof interceptorConstructor == "function") {
 | 
| @@ -2496,7 +2520,8 @@
 | 
|          if (dispatchName === "Object") {
 | 
|            objectConstructor = object.constructor;
 | 
|            if (typeof objectConstructor == "function") {
 | 
| -            decompiledName = String(objectConstructor).match(/^\s*function\s*([\w$]*)\s*\(/)[1];
 | 
| +            match = String(objectConstructor).match(/^\s*function\s*([\w$]*)\s*\(/);
 | 
| +            decompiledName = match == null ? null : match[1];
 | 
|              if (typeof decompiledName === "string" && /^\w+$/.test(decompiledName))
 | 
|                $name = decompiledName;
 | 
|            }
 | 
| @@ -2565,9 +2590,8 @@
 | 
|        return H.Primitives__fromCharCodeApply(charCodes);
 | 
|      },
 | 
|      Primitives_stringFromNativeUint8List: function(charCodes, start, end) {
 | 
| -      var t1, i, result, i0, chunkEnd;
 | 
| -      t1 = J.getInterceptor$n(end);
 | 
| -      if (t1.$le(end, 500) && start === 0 && t1.$eq(end, charCodes.length))
 | 
| +      var i, result, i0, chunkEnd;
 | 
| +      if (J.$le$n(end, 500) && start === 0 && end === charCodes.length)
 | 
|          return String.fromCharCode.apply(null, charCodes);
 | 
|        if (typeof end !== "number")
 | 
|          return H.iae(end);
 | 
| @@ -2638,9 +2662,15 @@
 | 
|        } else if (t1 === 2) {
 | 
|          if (!!$function.call$2)
 | 
|            return $function.call$2($arguments[0], $arguments[1]);
 | 
| -      } else if (t1 === 3)
 | 
| +      } else if (t1 === 3) {
 | 
|          if (!!$function.call$3)
 | 
|            return $function.call$3($arguments[0], $arguments[1], $arguments[2]);
 | 
| +      } else if (t1 === 4) {
 | 
| +        if (!!$function.call$4)
 | 
| +          return $function.call$4($arguments[0], $arguments[1], $arguments[2], $arguments[3]);
 | 
| +      } else if (t1 === 5)
 | 
| +        if (!!$function.call$5)
 | 
| +          return $function.call$5($arguments[0], $arguments[1], $arguments[2], $arguments[3], $arguments[4]);
 | 
|        return H.Primitives__genericApplyFunctionWithPositionalArguments($function, $arguments);
 | 
|      },
 | 
|      Primitives__genericApplyFunctionWithPositionalArguments: function($function, $arguments) {
 | 
| @@ -2856,20 +2886,20 @@
 | 
|        return result;
 | 
|      },
 | 
|      invokeClosure: [function(closure, isolate, numberOfArguments, arg1, arg2, arg3, arg4) {
 | 
| -      var t1 = J.getInterceptor(numberOfArguments);
 | 
| -      if (t1.$eq(numberOfArguments, 0))
 | 
| -        return H._callInIsolate(isolate, new H.invokeClosure_closure(closure));
 | 
| -      else if (t1.$eq(numberOfArguments, 1))
 | 
| -        return H._callInIsolate(isolate, new H.invokeClosure_closure0(closure, arg1));
 | 
| -      else if (t1.$eq(numberOfArguments, 2))
 | 
| -        return H._callInIsolate(isolate, new H.invokeClosure_closure1(closure, arg1, arg2));
 | 
| -      else if (t1.$eq(numberOfArguments, 3))
 | 
| -        return H._callInIsolate(isolate, new H.invokeClosure_closure2(closure, arg1, arg2, arg3));
 | 
| -      else if (t1.$eq(numberOfArguments, 4))
 | 
| -        return H._callInIsolate(isolate, new H.invokeClosure_closure3(closure, arg1, arg2, arg3, arg4));
 | 
| -      else
 | 
| -        throw H.wrapException(P.Exception_Exception("Unsupported number of arguments for wrapped closure"));
 | 
| -    }, null, null, 14, 0, null, 43, 44, 27, 20, 21, 28, 29],
 | 
| +      switch (numberOfArguments) {
 | 
| +        case 0:
 | 
| +          return H._callInIsolate(isolate, new H.invokeClosure_closure(closure));
 | 
| +        case 1:
 | 
| +          return H._callInIsolate(isolate, new H.invokeClosure_closure0(closure, arg1));
 | 
| +        case 2:
 | 
| +          return H._callInIsolate(isolate, new H.invokeClosure_closure1(closure, arg1, arg2));
 | 
| +        case 3:
 | 
| +          return H._callInIsolate(isolate, new H.invokeClosure_closure2(closure, arg1, arg2, arg3));
 | 
| +        case 4:
 | 
| +          return H._callInIsolate(isolate, new H.invokeClosure_closure3(closure, arg1, arg2, arg3, arg4));
 | 
| +      }
 | 
| +      throw H.wrapException(P.Exception_Exception("Unsupported number of arguments for wrapped closure"));
 | 
| +    }, null, null, 14, 0, null, 30, 29, 28, 23, 19, 27, 26],
 | 
|      convertDartClosureToJS: function(closure, arity) {
 | 
|        var $function;
 | 
|        if (closure == null)
 | 
| @@ -2903,7 +2933,7 @@
 | 
|        else {
 | 
|          t1 = $.Closure_functionCounter;
 | 
|          $.Closure_functionCounter = J.$add$ns(t1, 1);
 | 
| -        t1 = new Function("a,b,c,d", "this.$initialize(a,b,c,d);" + t1);
 | 
| +        t1 = new Function("a,b,c,d" + t1, "this.$initialize(a,b,c,d" + t1 + ")");
 | 
|          $constructor = t1;
 | 
|        }
 | 
|        $prototype.constructor = $constructor;
 | 
| @@ -2996,7 +3026,7 @@
 | 
|        }
 | 
|      },
 | 
|      Closure_forwardCallTo: function(receiver, $function, isIntercepted) {
 | 
| -      var stubName, arity, lookedUpFunction, t1, t2, $arguments;
 | 
| +      var stubName, arity, lookedUpFunction, t1, t2, selfName, $arguments;
 | 
|        if (isIntercepted)
 | 
|          return H.Closure_forwardInterceptedCallTo(receiver, $function);
 | 
|        stubName = $function.$stubName;
 | 
| @@ -3007,27 +3037,28 @@
 | 
|        if (t2)
 | 
|          return H.Closure_cspForwardCall(arity, !t1, stubName, $function);
 | 
|        if (arity === 0) {
 | 
| -        t1 = $.BoundClosure_selfFieldNameCache;
 | 
| -        if (t1 == null) {
 | 
| -          t1 = H.BoundClosure_computeFieldNamed("self");
 | 
| -          $.BoundClosure_selfFieldNameCache = t1;
 | 
| +        t1 = $.Closure_functionCounter;
 | 
| +        $.Closure_functionCounter = J.$add$ns(t1, 1);
 | 
| +        selfName = "self" + H.S(t1);
 | 
| +        t1 = "return function(){var " + selfName + " = this.";
 | 
| +        t2 = $.BoundClosure_selfFieldNameCache;
 | 
| +        if (t2 == null) {
 | 
| +          t2 = H.BoundClosure_computeFieldNamed("self");
 | 
| +          $.BoundClosure_selfFieldNameCache = t2;
 | 
|          }
 | 
| -        t1 = "return function(){return this." + H.S(t1) + "." + H.S(stubName) + "();";
 | 
| -        t2 = $.Closure_functionCounter;
 | 
| -        $.Closure_functionCounter = J.$add$ns(t2, 1);
 | 
| -        return new Function(t1 + H.S(t2) + "}")();
 | 
| +        return new Function(t1 + H.S(t2) + ";return " + selfName + "." + H.S(stubName) + "();}")();
 | 
|        }
 | 
|        $arguments = "abcdefghijklmnopqrstuvwxyz".split("").splice(0, arity).join(",");
 | 
| +      t1 = $.Closure_functionCounter;
 | 
| +      $.Closure_functionCounter = J.$add$ns(t1, 1);
 | 
| +      $arguments += H.S(t1);
 | 
|        t1 = "return function(" + $arguments + "){return this.";
 | 
|        t2 = $.BoundClosure_selfFieldNameCache;
 | 
|        if (t2 == null) {
 | 
|          t2 = H.BoundClosure_computeFieldNamed("self");
 | 
|          $.BoundClosure_selfFieldNameCache = t2;
 | 
|        }
 | 
| -      t2 = t1 + H.S(t2) + "." + H.S(stubName) + "(" + $arguments + ");";
 | 
| -      t1 = $.Closure_functionCounter;
 | 
| -      $.Closure_functionCounter = J.$add$ns(t1, 1);
 | 
| -      return new Function(t2 + H.S(t1) + "}")();
 | 
| +      return new Function(t1 + H.S(t2) + "." + H.S(stubName) + "(" + $arguments + ");}")();
 | 
|      },
 | 
|      Closure_cspForwardInterceptedCall: function(arity, isSuperCall, $name, $function) {
 | 
|        var getSelf, getReceiver;
 | 
| @@ -3130,6 +3161,12 @@
 | 
|      buildFunctionType: function(returnType, parameterTypes, optionalParameterTypes) {
 | 
|        return new H.RuntimeFunctionType(returnType, parameterTypes, optionalParameterTypes, null);
 | 
|      },
 | 
| +    buildInterfaceType: function(rti, typeArguments) {
 | 
| +      var jsConstructorName = rti.builtin$cls;
 | 
| +      if (typeArguments == null || typeArguments.length === 0)
 | 
| +        return new H.RuntimeTypePlain(jsConstructorName);
 | 
| +      return new H.RuntimeTypeGeneric(jsConstructorName, typeArguments, null);
 | 
| +    },
 | 
|      getDynamicRuntimeType: function() {
 | 
|        return C.C_DynamicRuntimeType;
 | 
|      },
 | 
| @@ -3200,16 +3237,6 @@
 | 
|        }
 | 
|        return $arguments;
 | 
|      },
 | 
| -    checkSubtype: function(object, isField, checks, asField) {
 | 
| -      var $arguments, interceptor;
 | 
| -      if (object == null)
 | 
| -        return false;
 | 
| -      $arguments = H.getRuntimeTypeInfo(object);
 | 
| -      interceptor = J.getInterceptor(object);
 | 
| -      if (interceptor[isField] == null)
 | 
| -        return false;
 | 
| -      return H.areSubtypes(H.substitute(interceptor[asField], $arguments), checks);
 | 
| -    },
 | 
|      areSubtypes: function(s, t) {
 | 
|        var len, i;
 | 
|        if (s == null || t == null)
 | 
| @@ -3536,7 +3563,7 @@
 | 
|              return t1.charCodeAt(0) == 0 ? t1 : t1;
 | 
|            }
 | 
|          else
 | 
| -          return receiver.replace(new RegExp(pattern.replace(new RegExp("[[\\]{}()*+?.\\\\^$|]", 'g'), "\\$&"), 'g'), replacement.replace(/\$/g, "$$$$"));
 | 
| +          return receiver.replace(new RegExp(pattern.replace(/[[\]{}()*+?.\\^$|]/g, "\\$&"), 'g'), replacement.replace(/\$/g, "$$$$"));
 | 
|        else if (pattern instanceof H.JSSyntaxRegExp) {
 | 
|          nativeRegexp = pattern.get$_nativeGlobalVersion();
 | 
|          nativeRegexp.lastIndex = 0;
 | 
| @@ -3582,10 +3609,10 @@
 | 
|      ConstantMap: {
 | 
|        "^": "Object;",
 | 
|        get$isEmpty: function(_) {
 | 
| -        return J.$eq$(this.get$length(this), 0);
 | 
| +        return this.get$length(this) === 0;
 | 
|        },
 | 
|        get$isNotEmpty: function(_) {
 | 
| -        return !J.$eq$(this.get$length(this), 0);
 | 
| +        return this.get$length(this) !== 0;
 | 
|        },
 | 
|        toString$0: function(_) {
 | 
|          return P.Maps_mapToString(this);
 | 
| @@ -3596,7 +3623,10 @@
 | 
|        $isMap: 1
 | 
|      },
 | 
|      ConstantStringMap: {
 | 
| -      "^": "ConstantMap;length>,__js_helper$_jsObject,__js_helper$_keys",
 | 
| +      "^": "ConstantMap;__js_helper$_length,__js_helper$_jsObject,__js_helper$_keys",
 | 
| +      get$length: function(_) {
 | 
| +        return this.__js_helper$_length;
 | 
| +      },
 | 
|        containsKey$1: function(key) {
 | 
|          if (typeof key !== "string")
 | 
|            return false;
 | 
| @@ -3613,9 +3643,9 @@
 | 
|          return this.__js_helper$_jsObject[key];
 | 
|        },
 | 
|        forEach$1: function(_, f) {
 | 
| -        var keys, i, key;
 | 
| +        var keys, t1, i, key;
 | 
|          keys = this.__js_helper$_keys;
 | 
| -        for (i = 0; i < keys.length; ++i) {
 | 
| +        for (t1 = keys.length, i = 0; i < t1; ++i) {
 | 
|            key = keys[i];
 | 
|            f.call$2(key, this._fetch$1(key));
 | 
|          }
 | 
| @@ -3675,7 +3705,8 @@
 | 
|            return;
 | 
|          return this.data[3 + parameter - t1];
 | 
|        },
 | 
| -      static: {ReflectionInfo_ReflectionInfo: function(jsFunction) {
 | 
| +      static: {
 | 
| +        ReflectionInfo_ReflectionInfo: function(jsFunction) {
 | 
|            var data, requiredParametersInfo, optionalParametersInfo;
 | 
|            data = jsFunction.$reflectionInfo;
 | 
|            if (data == null)
 | 
| @@ -3685,10 +3716,11 @@
 | 
|            requiredParametersInfo = data[0];
 | 
|            optionalParametersInfo = data[1];
 | 
|            return new H.ReflectionInfo(jsFunction, data, (requiredParametersInfo & 1) === 1, requiredParametersInfo >> 1, optionalParametersInfo >> 1, (optionalParametersInfo & 1) === 1, data[2], null);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      Primitives_functionNoSuchMethod_closure: {
 | 
| -      "^": "Closure:42;_box_0,$arguments,namedArgumentList",
 | 
| +      "^": "Closure:40;_box_0,$arguments,namedArgumentList",
 | 
|        call$2: function($name, argument) {
 | 
|          var t1 = this._box_0;
 | 
|          t1.names = t1.names + "$" + H.S($name);
 | 
| @@ -3722,9 +3754,10 @@
 | 
|            result.receiver = match[t1 + 1];
 | 
|          return result;
 | 
|        },
 | 
| -      static: {TypeErrorDecoder_extractPattern: function(message) {
 | 
| +      static: {
 | 
| +        TypeErrorDecoder_extractPattern: function(message) {
 | 
|            var match, $arguments, argumentsExpr, expr, method, receiver;
 | 
| -          message = message.replace(String({}), '$receiver$').replace(new RegExp("[[\\]{}()*+?.\\\\^$|]", 'g'), '\\$&');
 | 
| +          message = message.replace(String({}), '$receiver$').replace(/[[\]{}()*+?.\\^$|]/g, "\\$&");
 | 
|            match = message.match(/\\\$[a-zA-Z]+\\\$/g);
 | 
|            if (match == null)
 | 
|              match = [];
 | 
| @@ -3733,8 +3766,9 @@
 | 
|            expr = match.indexOf("\\$expr\\$");
 | 
|            method = match.indexOf("\\$method\\$");
 | 
|            receiver = match.indexOf("\\$receiver\\$");
 | 
| -          return new H.TypeErrorDecoder(message.replace('\\$arguments\\$', '((?:x|[^x])*)').replace('\\$argumentsExpr\\$', '((?:x|[^x])*)').replace('\\$expr\\$', '((?:x|[^x])*)').replace('\\$method\\$', '((?:x|[^x])*)').replace('\\$receiver\\$', '((?:x|[^x])*)'), $arguments, argumentsExpr, expr, method, receiver);
 | 
| -        }, TypeErrorDecoder_provokeCallErrorOn: function(expression) {
 | 
| +          return new H.TypeErrorDecoder(message.replace(new RegExp('\\\\\\$arguments\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\$argumentsExpr\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\$expr\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\$method\\\\\\$', 'g'), '((?:x|[^x])*)').replace(new RegExp('\\\\\\$receiver\\\\\\$', 'g'), '((?:x|[^x])*)'), $arguments, argumentsExpr, expr, method, receiver);
 | 
| +        },
 | 
| +        TypeErrorDecoder_provokeCallErrorOn: function(expression) {
 | 
|            return function($expr$) {
 | 
|              var $argumentsExpr$ = '$arguments$';
 | 
|              try {
 | 
| @@ -3743,7 +3777,8 @@
 | 
|                return e.message;
 | 
|              }
 | 
|            }(expression);
 | 
| -        }, TypeErrorDecoder_provokePropertyErrorOn: function(expression) {
 | 
| +        },
 | 
| +        TypeErrorDecoder_provokePropertyErrorOn: function(expression) {
 | 
|            return function($expr$) {
 | 
|              try {
 | 
|                $expr$.$method$;
 | 
| @@ -3751,7 +3786,8 @@
 | 
|                return e.message;
 | 
|              }
 | 
|            }(expression);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      NullError: {
 | 
|        "^": "Error;_message,_method",
 | 
| @@ -3774,12 +3810,14 @@
 | 
|            return "NoSuchMethodError: method not found: '" + H.S(t1) + "' (" + H.S(this._message) + ")";
 | 
|          return "NoSuchMethodError: method not found: '" + H.S(t1) + "' on '" + H.S(t2) + "' (" + H.S(this._message) + ")";
 | 
|        },
 | 
| -      static: {JsNoSuchMethodError$: function(_message, match) {
 | 
| +      static: {
 | 
| +        JsNoSuchMethodError$: function(_message, match) {
 | 
|            var t1, t2;
 | 
|            t1 = match == null;
 | 
|            t2 = t1 ? null : match.method;
 | 
|            return new H.JsNoSuchMethodError(_message, t2, t1 ? null : match.receiver);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      UnknownJsTypeError: {
 | 
|        "^": "Error;_message",
 | 
| @@ -3895,18 +3933,22 @@
 | 
|            receiver = this._self;
 | 
|          return "Closure '" + H.S(this._name) + "' of " + H.Primitives_objectToHumanReadableString(receiver);
 | 
|        },
 | 
| -      static: {BoundClosure_selfOf: function(closure) {
 | 
| +      static: {
 | 
| +        BoundClosure_selfOf: function(closure) {
 | 
|            return closure._self;
 | 
| -        }, BoundClosure_receiverOf: function(closure) {
 | 
| +        },
 | 
| +        BoundClosure_receiverOf: function(closure) {
 | 
|            return closure._receiver;
 | 
| -        }, BoundClosure_selfFieldName: function() {
 | 
| +        },
 | 
| +        BoundClosure_selfFieldName: function() {
 | 
|            var t1 = $.BoundClosure_selfFieldNameCache;
 | 
|            if (t1 == null) {
 | 
|              t1 = H.BoundClosure_computeFieldNamed("self");
 | 
|              $.BoundClosure_selfFieldNameCache = t1;
 | 
|            }
 | 
|            return t1;
 | 
| -        }, BoundClosure_computeFieldNamed: function(fieldName) {
 | 
| +        },
 | 
| +        BoundClosure_computeFieldNamed: function(fieldName) {
 | 
|            var template, t1, names, i, $name;
 | 
|            template = new H.BoundClosure("self", "target", "receiver", "name");
 | 
|            t1 = Object.getOwnPropertyNames(template);
 | 
| @@ -3917,16 +3959,19 @@
 | 
|              if (template[$name] === fieldName)
 | 
|                return $name;
 | 
|            }
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      CastErrorImplementation: {
 | 
|        "^": "Error;message>",
 | 
|        toString$0: function(_) {
 | 
|          return this.message;
 | 
|        },
 | 
| -      static: {CastErrorImplementation$: function(actualType, expectedType) {
 | 
| +      static: {
 | 
| +        CastErrorImplementation$: function(actualType, expectedType) {
 | 
|            return new H.CastErrorImplementation("CastError: Casting value of type " + H.S(actualType) + " to incompatible type " + H.S(expectedType));
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      RuntimeError: {
 | 
|        "^": "Error;message>",
 | 
| @@ -4014,14 +4059,16 @@
 | 
|          }
 | 
|          return result + (") -> " + H.S(this.returnType));
 | 
|        },
 | 
| -      static: {RuntimeFunctionType_listToRti: function(list) {
 | 
| +      static: {
 | 
| +        RuntimeFunctionType_listToRti: function(list) {
 | 
|            var result, t1, i;
 | 
|            list = list;
 | 
|            result = [];
 | 
|            for (t1 = list.length, i = 0; i < t1; ++i)
 | 
|              result.push(list[i].toRti$0());
 | 
|            return result;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      DynamicRuntimeType: {
 | 
|        "^": "RuntimeType;",
 | 
| @@ -4032,6 +4079,43 @@
 | 
|          return;
 | 
|        }
 | 
|      },
 | 
| +    RuntimeTypePlain: {
 | 
| +      "^": "RuntimeType;_jsConstructorName",
 | 
| +      toRti$0: function() {
 | 
| +        var t1, rti;
 | 
| +        t1 = this._jsConstructorName;
 | 
| +        rti = H.jsConstructorNameToRti(t1);
 | 
| +        if (rti == null)
 | 
| +          throw H.wrapException("no type for '" + t1 + "'");
 | 
| +        return rti;
 | 
| +      },
 | 
| +      toString$0: function(_) {
 | 
| +        return this._jsConstructorName;
 | 
| +      }
 | 
| +    },
 | 
| +    RuntimeTypeGeneric: {
 | 
| +      "^": "RuntimeType;_jsConstructorName,$arguments,rti",
 | 
| +      toRti$0: function() {
 | 
| +        var t1, result, t2, _i;
 | 
| +        t1 = this.rti;
 | 
| +        if (t1 != null)
 | 
| +          return t1;
 | 
| +        t1 = this._jsConstructorName;
 | 
| +        result = [H.jsConstructorNameToRti(t1)];
 | 
| +        if (0 >= result.length)
 | 
| +          return H.ioore(result, 0);
 | 
| +        if (result[0] == null)
 | 
| +          throw H.wrapException("no type for '" + t1 + "<...>'");
 | 
| +        for (t1 = this.$arguments, t2 = t1.length, _i = 0; _i < t1.length; t1.length === t2 || (0, H.throwConcurrentModificationError)(t1), ++_i)
 | 
| +          result.push(t1[_i].toRti$0());
 | 
| +        this.rti = result;
 | 
| +        return result;
 | 
| +      },
 | 
| +      toString$0: function(_) {
 | 
| +        var t1 = this.$arguments;
 | 
| +        return this._jsConstructorName + "<" + (t1 && C.JSArray_methods).join$1(t1, ", ") + ">";
 | 
| +      }
 | 
| +    },
 | 
|      JsLinkedHashMap: {
 | 
|        "^": "Object;__js_helper$_length,_strings,_nums,_rest,_first,_last,_modifications",
 | 
|        get$length: function(_) {
 | 
| @@ -4068,7 +4152,7 @@
 | 
|          var rest = this._rest;
 | 
|          if (rest == null)
 | 
|            return false;
 | 
| -        return this.internalFindBucketIndex$2(this._getTableEntry$2(rest, this.internalComputeHashCode$1(key)), key) >= 0;
 | 
| +        return this.internalFindBucketIndex$2(this._getTableBucket$2(rest, this.internalComputeHashCode$1(key)), key) >= 0;
 | 
|        },
 | 
|        $index: function(_, key) {
 | 
|          var strings, cell, nums;
 | 
| @@ -4076,13 +4160,13 @@
 | 
|            strings = this._strings;
 | 
|            if (strings == null)
 | 
|              return;
 | 
| -          cell = this._getTableEntry$2(strings, key);
 | 
| +          cell = this._getTableCell$2(strings, key);
 | 
|            return cell == null ? null : cell.get$hashMapCellValue();
 | 
|          } else if (typeof key === "number" && (key & 0x3ffffff) === key) {
 | 
|            nums = this._nums;
 | 
|            if (nums == null)
 | 
|              return;
 | 
| -          cell = this._getTableEntry$2(nums, key);
 | 
| +          cell = this._getTableCell$2(nums, key);
 | 
|            return cell == null ? null : cell.get$hashMapCellValue();
 | 
|          } else
 | 
|            return this.internalGet$1(key);
 | 
| @@ -4092,7 +4176,7 @@
 | 
|          rest = this._rest;
 | 
|          if (rest == null)
 | 
|            return;
 | 
| -        bucket = this._getTableEntry$2(rest, this.internalComputeHashCode$1(key));
 | 
| +        bucket = this._getTableBucket$2(rest, this.internalComputeHashCode$1(key));
 | 
|          index = this.internalFindBucketIndex$2(bucket, key);
 | 
|          if (index < 0)
 | 
|            return;
 | 
| @@ -4121,7 +4205,7 @@
 | 
|              this._rest = rest;
 | 
|            }
 | 
|            hash = this.internalComputeHashCode$1(key);
 | 
| -          bucket = this._getTableEntry$2(rest, hash);
 | 
| +          bucket = this._getTableBucket$2(rest, hash);
 | 
|            if (bucket == null)
 | 
|              this._setTableEntry$3(rest, hash, [this._newLinkedCell$2(key, value)]);
 | 
|            else {
 | 
| @@ -4146,7 +4230,7 @@
 | 
|          rest = this._rest;
 | 
|          if (rest == null)
 | 
|            return;
 | 
| -        bucket = this._getTableEntry$2(rest, this.internalComputeHashCode$1(key));
 | 
| +        bucket = this._getTableBucket$2(rest, this.internalComputeHashCode$1(key));
 | 
|          index = this.internalFindBucketIndex$2(bucket, key);
 | 
|          if (index < 0)
 | 
|            return;
 | 
| @@ -4177,7 +4261,7 @@
 | 
|          }
 | 
|        },
 | 
|        _addHashTableEntry$3: function(table, key, value) {
 | 
| -        var cell = this._getTableEntry$2(table, key);
 | 
| +        var cell = this._getTableCell$2(table, key);
 | 
|          if (cell == null)
 | 
|            this._setTableEntry$3(table, key, this._newLinkedCell$2(key, value));
 | 
|          else
 | 
| @@ -4187,7 +4271,7 @@
 | 
|          var cell;
 | 
|          if (table == null)
 | 
|            return;
 | 
| -        cell = this._getTableEntry$2(table, key);
 | 
| +        cell = this._getTableCell$2(table, key);
 | 
|          if (cell == null)
 | 
|            return;
 | 
|          this._unlinkCell$1(cell);
 | 
| @@ -4241,7 +4325,10 @@
 | 
|        toString$0: function(_) {
 | 
|          return P.Maps_mapToString(this);
 | 
|        },
 | 
| -      _getTableEntry$2: function(table, key) {
 | 
| +      _getTableCell$2: function(table, key) {
 | 
| +        return table[key];
 | 
| +      },
 | 
| +      _getTableBucket$2: function(table, key) {
 | 
|          return table[key];
 | 
|        },
 | 
|        _setTableEntry$3: function(table, key, value) {
 | 
| @@ -4251,7 +4338,7 @@
 | 
|          delete table[key];
 | 
|        },
 | 
|        _containsTableEntry$2: function(table, key) {
 | 
| -        return this._getTableEntry$2(table, key) != null;
 | 
| +        return this._getTableCell$2(table, key) != null;
 | 
|        },
 | 
|        _newHashTable$0: function() {
 | 
|          var table = Object.create(null);
 | 
| @@ -4261,15 +4348,17 @@
 | 
|        },
 | 
|        $isInternalMap: 1,
 | 
|        $isMap: 1,
 | 
| -      static: {JsLinkedHashMap_JsLinkedHashMap$es6: function($K, $V) {
 | 
| +      static: {
 | 
| +        JsLinkedHashMap_JsLinkedHashMap$es6: function($K, $V) {
 | 
|            return H.setRuntimeTypeInfo(new H.JsLinkedHashMap(0, null, null, null, null, null, 0), [$K, $V]);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      JsLinkedHashMap_values_closure: {
 | 
|        "^": "Closure:0;$this",
 | 
|        call$1: [function(each) {
 | 
|          return this.$this.$index(0, each);
 | 
| -      }, null, null, 2, 0, null, 22, "call"]
 | 
| +      }, null, null, 2, 0, null, 18, "call"]
 | 
|      },
 | 
|      LinkedHashMapCell: {
 | 
|        "^": "Object;hashMapCellKey<,hashMapCellValue@,_next<,_previous<"
 | 
| @@ -4335,13 +4424,13 @@
 | 
|        }
 | 
|      },
 | 
|      initHooks_closure0: {
 | 
| -      "^": "Closure:29;getUnknownTag",
 | 
| +      "^": "Closure:22;getUnknownTag",
 | 
|        call$2: function(o, tag) {
 | 
|          return this.getUnknownTag(o, tag);
 | 
|        }
 | 
|      },
 | 
|      initHooks_closure1: {
 | 
| -      "^": "Closure:37;prototypeForTag",
 | 
| +      "^": "Closure:36;prototypeForTag",
 | 
|        call$1: function(tag) {
 | 
|          return this.prototypeForTag(tag);
 | 
|        }
 | 
| @@ -4411,13 +4500,13 @@
 | 
|          return new H._MatchImplementation(this, match);
 | 
|        },
 | 
|        matchAsPrefix$2: function(_, string, start) {
 | 
| -        var t1 = J.getInterceptor$n(start);
 | 
| -        if (t1.$lt(start, 0) || t1.$gt(start, string.length))
 | 
| +        if (start < 0 || start > string.length)
 | 
|            throw H.wrapException(P.RangeError$range(start, 0, string.length, null, null));
 | 
|          return this._execAnchored$2(string, start);
 | 
|        },
 | 
|        $isRegExp: 1,
 | 
| -      static: {JSSyntaxRegExp_makeNative: function(source, multiLine, caseSensitive, global) {
 | 
| +      static: {
 | 
| +        JSSyntaxRegExp_makeNative: function(source, multiLine, caseSensitive, global) {
 | 
|            var m, i, g, regexp;
 | 
|            H.checkString(source);
 | 
|            m = multiLine ? "m" : "";
 | 
| @@ -4433,7 +4522,8 @@
 | 
|            if (regexp instanceof RegExp)
 | 
|              return regexp;
 | 
|            throw H.wrapException(new P.FormatException("Illegal RegExp pattern (" + String(regexp) + ")", source, null));
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      _MatchImplementation: {
 | 
|        "^": "Object;pattern,_match",
 | 
| @@ -4505,7 +4595,7 @@
 | 
|      StringMatch: {
 | 
|        "^": "Object;start>,input,pattern",
 | 
|        get$end: function() {
 | 
| -        return J.$add$ns(this.start, this.pattern.length);
 | 
| +        return this.start + this.pattern.length;
 | 
|        },
 | 
|        $index: function(_, g) {
 | 
|          if (g !== 0)
 | 
| @@ -4525,23 +4615,27 @@
 | 
|      _StringAllMatchesIterator: {
 | 
|        "^": "Object;_input,_pattern,__js_helper$_index,__js_helper$_current",
 | 
|        moveNext$0: function() {
 | 
| -        var t1, t2, t3, t4, index, end;
 | 
| -        t1 = this._pattern;
 | 
| -        t2 = t1.length;
 | 
| -        t3 = this._input;
 | 
| -        t4 = J.getInterceptor$asx(t3);
 | 
| -        if (J.$gt$n(J.$add$ns(this.__js_helper$_index, t2), t4.get$length(t3))) {
 | 
| +        var t1, t2, t3, t4, t5, t6, index, end;
 | 
| +        t1 = this.__js_helper$_index;
 | 
| +        t2 = this._pattern;
 | 
| +        t3 = t2.length;
 | 
| +        t4 = this._input;
 | 
| +        t5 = J.getInterceptor$asx(t4);
 | 
| +        t6 = t5.get$length(t4);
 | 
| +        if (typeof t6 !== "number")
 | 
| +          return H.iae(t6);
 | 
| +        if (t1 + t3 > t6) {
 | 
|            this.__js_helper$_current = null;
 | 
|            return false;
 | 
|          }
 | 
| -        index = t3.indexOf(t1, this.__js_helper$_index);
 | 
| +        index = t4.indexOf(t2, this.__js_helper$_index);
 | 
|          if (index < 0) {
 | 
| -          this.__js_helper$_index = J.$add$ns(t4.get$length(t3), 1);
 | 
| +          this.__js_helper$_index = J.$add$ns(t5.get$length(t4), 1);
 | 
|            this.__js_helper$_current = null;
 | 
|            return false;
 | 
|          }
 | 
| -        end = index + t2;
 | 
| -        this.__js_helper$_current = new H.StringMatch(index, t3, t1);
 | 
| +        end = index + t3;
 | 
| +        this.__js_helper$_current = new H.StringMatch(index, t4, t2);
 | 
|          this.__js_helper$_index = end === this.__js_helper$_index ? end + 1 : end;
 | 
|          return true;
 | 
|        },
 | 
| @@ -4549,40 +4643,99 @@
 | 
|          return this.__js_helper$_current;
 | 
|        }
 | 
|      }
 | 
| -  }], ["async.null_stream_sink", "package:async/src/null_stream_sink.dart",, N, {
 | 
| +  }], ["", "package:stack_trace/src/chain.dart",, U, {
 | 
|      "^": "",
 | 
| -    NullStreamSink: {
 | 
| -      "^": "Object;done,_null_stream_sink$_closed,_addingStream",
 | 
| -      add$1: function(_, data) {
 | 
| -        this._checkEventAllowed$0();
 | 
| +    Chain: {
 | 
| +      "^": "Object;traces",
 | 
| +      get$terse: function() {
 | 
| +        return this.foldFrames$2$terse(new U.Chain_terse_closure(), true);
 | 
|        },
 | 
| -      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._asyncComplete$1(null);
 | 
| -        }
 | 
| -        return future.whenComplete$1(new N.NullStreamSink_addStream_closure(this));
 | 
| +      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));
 | 
| +        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));
 | 
|        },
 | 
| -      _checkEventAllowed$0: function() {
 | 
| -        if (this._null_stream_sink$_closed)
 | 
| -          throw H.wrapException(new P.StateError("Cannot add to a closed sink."));
 | 
| -        if (this._addingStream)
 | 
| -          throw H.wrapException(new P.StateError("Cannot add to a sink while adding a stream."));
 | 
| +      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));
 | 
|        },
 | 
| -      close$0: function(_) {
 | 
| -        this._null_stream_sink$_closed = true;
 | 
| -        return this.done;
 | 
| +      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");
 | 
| +      },
 | 
| +      static: {
 | 
| +        Chain_Chain$parse: function(chain) {
 | 
| +          var t1 = J.getInterceptor$asx(chain);
 | 
| +          if (t1.get$isEmpty(chain) === true)
 | 
| +            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.closure2()), [null, null]), Y.Trace));
 | 
| +        }
 | 
|        }
 | 
|      },
 | 
| -    NullStreamSink_addStream_closure: {
 | 
| -      "^": "Closure:1;$this",
 | 
| -      call$0: [function() {
 | 
| -        this.$this._addingStream = false;
 | 
| -      }, null, null, 0, 0, null, "call"]
 | 
| +    closure2: {
 | 
| +      "^": "Closure:0;",
 | 
| +      call$1: [function(trace) {
 | 
| +        return Y.Trace$parseFriendly(trace);
 | 
| +      }, null, null, 2, 0, null, 14, "call"]
 | 
| +    },
 | 
| +    Chain_terse_closure: {
 | 
| +      "^": "Closure:0;",
 | 
| +      call$1: function(_) {
 | 
| +        return false;
 | 
| +      }
 | 
| +    },
 | 
| +    Chain_foldFrames_closure: {
 | 
| +      "^": "Closure:0;predicate,terse",
 | 
| +      call$1: [function(trace) {
 | 
| +        return trace.foldFrames$2$terse(this.predicate, this.terse);
 | 
| +      }, null, null, 2, 0, null, 14, "call"]
 | 
| +    },
 | 
| +    Chain_foldFrames_closure0: {
 | 
| +      "^": "Closure:0;terse",
 | 
| +      call$1: function(trace) {
 | 
| +        if (trace.get$frames().length > 1)
 | 
| +          return true;
 | 
| +        if (trace.get$frames().length === 0)
 | 
| +          return false;
 | 
| +        if (!this.terse)
 | 
| +          return false;
 | 
| +        return C.JSArray_methods.get$single(trace.get$frames()).get$line() != null;
 | 
| +      }
 | 
| +    },
 | 
| +    Chain_toTrace_closure: {
 | 
| +      "^": "Closure:0;",
 | 
| +      call$1: function(trace) {
 | 
| +        return trace.get$frames();
 | 
| +      }
 | 
| +    },
 | 
| +    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());
 | 
| +      }, null, null, 2, 0, null, 14, "call"]
 | 
| +    },
 | 
| +    Chain_toString__closure0: {
 | 
| +      "^": "Closure:0;",
 | 
| +      call$1: [function(frame) {
 | 
| +        return J.get$length$asx(J.get$location$x(frame));
 | 
| +      }, null, null, 2, 0, null, 11, "call"]
 | 
| +    },
 | 
| +    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);
 | 
| +      }, null, null, 2, 0, null, 14, "call"]
 | 
| +    },
 | 
| +    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";
 | 
| +      }, null, null, 2, 0, null, 11, "call"]
 | 
|      }
 | 
|    }], ["dart._internal", "dart:_internal",, H, {
 | 
|      "^": "",
 | 
| @@ -4679,7 +4832,7 @@
 | 
|          return this.join$1($receiver, "");
 | 
|        },
 | 
|        map$1: function(_, f) {
 | 
| -        return H.setRuntimeTypeInfo(new H.MappedListIterable(this, f), [null, null]);
 | 
| +        return H.setRuntimeTypeInfo(new H.MappedListIterable(this, f), [H.getRuntimeTypeArgument(this, "ListIterable", 0), null]);
 | 
|        },
 | 
|        fold$2: function(_, initialValue, combine) {
 | 
|          var $length, value, i;
 | 
| @@ -4709,10 +4862,10 @@
 | 
|        $isEfficientLength: 1
 | 
|      },
 | 
|      SubListIterable: {
 | 
| -      "^": "ListIterable;__internal$_iterable,__internal$_start,_endOrLength",
 | 
| +      "^": "ListIterable;_iterable,__internal$_start,_endOrLength",
 | 
|        get$_endIndex: function() {
 | 
|          var $length, t1, t2;
 | 
| -        $length = J.get$length$asx(this.__internal$_iterable);
 | 
| +        $length = J.get$length$asx(this._iterable);
 | 
|          t1 = this._endOrLength;
 | 
|          if (t1 != null) {
 | 
|            if (typeof t1 !== "number")
 | 
| @@ -4726,7 +4879,7 @@
 | 
|        },
 | 
|        get$_startIndex: function() {
 | 
|          var $length, t1;
 | 
| -        $length = J.get$length$asx(this.__internal$_iterable);
 | 
| +        $length = J.get$length$asx(this._iterable);
 | 
|          t1 = this.__internal$_start;
 | 
|          if (t1 > $length)
 | 
|            return $length;
 | 
| @@ -4734,7 +4887,7 @@
 | 
|        },
 | 
|        get$length: function(_) {
 | 
|          var $length, t1, t2, t3;
 | 
| -        $length = J.get$length$asx(this.__internal$_iterable);
 | 
| +        $length = J.get$length$asx(this._iterable);
 | 
|          t1 = this.__internal$_start;
 | 
|          if (t1 >= $length)
 | 
|            return 0;
 | 
| @@ -4752,9 +4905,12 @@
 | 
|          return t2 - t1;
 | 
|        },
 | 
|        elementAt$1: function(_, index) {
 | 
| -        var realIndex, t1;
 | 
| -        realIndex = this.get$_startIndex() + index;
 | 
| -        if (index >= 0) {
 | 
| +        var t1, realIndex;
 | 
| +        t1 = this.get$_startIndex();
 | 
| +        if (typeof index !== "number")
 | 
| +          return H.iae(index);
 | 
| +        realIndex = t1 + index;
 | 
| +        if (!(index < 0)) {
 | 
|            t1 = this.get$_endIndex();
 | 
|            if (typeof t1 !== "number")
 | 
|              return H.iae(t1);
 | 
| @@ -4763,7 +4919,7 @@
 | 
|            t1 = true;
 | 
|          if (t1)
 | 
|            throw H.wrapException(P.IndexError$(index, this, "index", null, null));
 | 
| -        return J.elementAt$1$ax(this.__internal$_iterable, realIndex);
 | 
| +        return J.elementAt$1$ax(this._iterable, realIndex);
 | 
|        },
 | 
|        take$1: function(_, count) {
 | 
|          var t1, t2, newEnd;
 | 
| @@ -4772,20 +4928,20 @@
 | 
|          t1 = this._endOrLength;
 | 
|          t2 = this.__internal$_start;
 | 
|          if (t1 == null)
 | 
| -          return H.SubListIterable$(this.__internal$_iterable, t2, t2 + count, H.getTypeArgumentByIndex(this, 0));
 | 
| +          return H.SubListIterable$(this._iterable, t2, t2 + count, H.getTypeArgumentByIndex(this, 0));
 | 
|          else {
 | 
|            newEnd = t2 + count;
 | 
|            if (typeof t1 !== "number")
 | 
|              return t1.$lt();
 | 
|            if (t1 < newEnd)
 | 
|              return this;
 | 
| -          return H.SubListIterable$(this.__internal$_iterable, t2, newEnd, H.getTypeArgumentByIndex(this, 0));
 | 
| +          return H.SubListIterable$(this._iterable, t2, newEnd, H.getTypeArgumentByIndex(this, 0));
 | 
|          }
 | 
|        },
 | 
|        toList$1$growable: function(_, growable) {
 | 
|          var start, t1, t2, end, end0, t3, $length, result, i;
 | 
|          start = this.__internal$_start;
 | 
| -        t1 = this.__internal$_iterable;
 | 
| +        t1 = this._iterable;
 | 
|          t2 = J.getInterceptor$asx(t1);
 | 
|          end = t2.get$length(t1);
 | 
|          end0 = this._endOrLength;
 | 
| @@ -4828,20 +4984,22 @@
 | 
|              throw H.wrapException(P.RangeError$range(t1, 0, t2, "start", null));
 | 
|          }
 | 
|        },
 | 
| -      static: {SubListIterable$: function(_iterable, _start, _endOrLength, $E) {
 | 
| +      static: {
 | 
| +        SubListIterable$: function(_iterable, _start, _endOrLength, $E) {
 | 
|            var t1 = H.setRuntimeTypeInfo(new H.SubListIterable(_iterable, _start, _endOrLength), [$E]);
 | 
|            t1.SubListIterable$3(_iterable, _start, _endOrLength, $E);
 | 
|            return t1;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      ListIterator: {
 | 
| -      "^": "Object;__internal$_iterable,__internal$_length,__internal$_index,_current",
 | 
| +      "^": "Object;_iterable,__internal$_length,__internal$_index,_current",
 | 
|        get$current: function() {
 | 
|          return this._current;
 | 
|        },
 | 
|        moveNext$0: function() {
 | 
|          var t1, t2, $length, t3;
 | 
| -        t1 = this.__internal$_iterable;
 | 
| +        t1 = this._iterable;
 | 
|          t2 = J.getInterceptor$asx(t1);
 | 
|          $length = t2.get$length(t1);
 | 
|          if (this.__internal$_length !== $length)
 | 
| @@ -4857,20 +5015,20 @@
 | 
|        }
 | 
|      },
 | 
|      MappedIterable: {
 | 
| -      "^": "Iterable;__internal$_iterable,_f",
 | 
| +      "^": "Iterable;_iterable,_f",
 | 
|        get$iterator: function(_) {
 | 
| -        var t1 = new H.MappedIterator(null, J.get$iterator$ax(this.__internal$_iterable), this._f);
 | 
| +        var t1 = new H.MappedIterator(null, J.get$iterator$ax(this._iterable), this._f);
 | 
|          t1.$builtinTypeInfo = this.$builtinTypeInfo;
 | 
|          return t1;
 | 
|        },
 | 
|        get$length: function(_) {
 | 
| -        return J.get$length$asx(this.__internal$_iterable);
 | 
| +        return J.get$length$asx(this._iterable);
 | 
|        },
 | 
|        get$isEmpty: function(_) {
 | 
| -        return J.get$isEmpty$asx(this.__internal$_iterable);
 | 
| +        return J.get$isEmpty$asx(this._iterable);
 | 
|        },
 | 
|        get$last: function(_) {
 | 
| -        return this._f$1(J.get$last$ax(this.__internal$_iterable));
 | 
| +        return this._f$1(J.get$last$ax(this._iterable));
 | 
|        },
 | 
|        _f$1: function(arg0) {
 | 
|          return this._f.call$1(arg0);
 | 
| @@ -4878,14 +5036,16 @@
 | 
|        $asIterable: function($S, $T) {
 | 
|          return [$T];
 | 
|        },
 | 
| -      static: {MappedIterable_MappedIterable: function(iterable, $function, $S, $T) {
 | 
| +      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]);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      EfficientLengthMappedIterable: {
 | 
| -      "^": "MappedIterable;__internal$_iterable,_f",
 | 
| +      "^": "MappedIterable;_iterable,_f",
 | 
|        $isEfficientLength: 1
 | 
|      },
 | 
|      MappedIterator: {
 | 
| @@ -4926,9 +5086,9 @@
 | 
|        $isEfficientLength: 1
 | 
|      },
 | 
|      WhereIterable: {
 | 
| -      "^": "Iterable;__internal$_iterable,_f",
 | 
| +      "^": "Iterable;_iterable,_f",
 | 
|        get$iterator: function(_) {
 | 
| -        var t1 = new H.WhereIterator(J.get$iterator$ax(this.__internal$_iterable), this._f);
 | 
| +        var t1 = new H.WhereIterator(J.get$iterator$ax(this._iterable), this._f);
 | 
|          t1.$builtinTypeInfo = this.$builtinTypeInfo;
 | 
|          return t1;
 | 
|        }
 | 
| @@ -4948,10 +5108,45 @@
 | 
|          return this._f.call$1(arg0);
 | 
|        }
 | 
|      },
 | 
| +    ExpandIterable: {
 | 
| +      "^": "Iterable;_iterable,_f",
 | 
| +      get$iterator: function(_) {
 | 
| +        return new H.ExpandIterator(J.get$iterator$ax(this._iterable), this._f, C.C_EmptyIterator, null);
 | 
| +      },
 | 
| +      $asIterable: function($S, $T) {
 | 
| +        return [$T];
 | 
| +      }
 | 
| +    },
 | 
| +    ExpandIterator: {
 | 
| +      "^": "Object;_iterator,_f,_currentExpansion,_current",
 | 
| +      get$current: function() {
 | 
| +        return this._current;
 | 
| +      },
 | 
| +      moveNext$0: function() {
 | 
| +        var t1, t2;
 | 
| +        t1 = this._currentExpansion;
 | 
| +        if (t1 == null)
 | 
| +          return false;
 | 
| +        for (t2 = this._iterator; !t1.moveNext$0();) {
 | 
| +          this._current = null;
 | 
| +          if (t2.moveNext$0()) {
 | 
| +            this._currentExpansion = null;
 | 
| +            t1 = J.get$iterator$ax(this._f$1(t2.get$current()));
 | 
| +            this._currentExpansion = t1;
 | 
| +          } else
 | 
| +            return false;
 | 
| +        }
 | 
| +        this._current = this._currentExpansion.get$current();
 | 
| +        return true;
 | 
| +      },
 | 
| +      _f$1: function(arg0) {
 | 
| +        return this._f.call$1(arg0);
 | 
| +      }
 | 
| +    },
 | 
|      SkipWhileIterable: {
 | 
| -      "^": "Iterable;__internal$_iterable,_f",
 | 
| +      "^": "Iterable;_iterable,_f",
 | 
|        get$iterator: function(_) {
 | 
| -        var t1 = new H.SkipWhileIterator(J.get$iterator$ax(this.__internal$_iterable), this._f, false);
 | 
| +        var t1 = new H.SkipWhileIterator(J.get$iterator$ax(this._iterable), this._f, false);
 | 
|          t1.$builtinTypeInfo = this.$builtinTypeInfo;
 | 
|          return t1;
 | 
|        }
 | 
| @@ -4974,6 +5169,15 @@
 | 
|          return this._f.call$1(arg0);
 | 
|        }
 | 
|      },
 | 
| +    EmptyIterator: {
 | 
| +      "^": "Object;",
 | 
| +      moveNext$0: function() {
 | 
| +        return false;
 | 
| +      },
 | 
| +      get$current: function() {
 | 
| +        return;
 | 
| +      }
 | 
| +    },
 | 
|      FixedLengthListMixin: {
 | 
|        "^": "Object;",
 | 
|        set$length: function(receiver, newLength) {
 | 
| @@ -5022,10 +5226,13 @@
 | 
|          return J.get$length$asx(this._source);
 | 
|        },
 | 
|        elementAt$1: function(_, index) {
 | 
| -        var t1, t2;
 | 
| +        var t1, t2, t3;
 | 
|          t1 = this._source;
 | 
|          t2 = J.getInterceptor$asx(t1);
 | 
| -        return t2.elementAt$1(t1, t2.get$length(t1) - 1 - index);
 | 
| +        t3 = t2.get$length(t1);
 | 
| +        if (typeof index !== "number")
 | 
| +          return H.iae(index);
 | 
| +        return t2.elementAt$1(t1, t3 - 1 - index);
 | 
|        }
 | 
|      },
 | 
|      Symbol0: {
 | 
| @@ -5036,13 +5243,19 @@
 | 
|          return other instanceof H.Symbol0 && J.$eq$(this.__internal$_name, other.__internal$_name);
 | 
|        },
 | 
|        get$hashCode: function(_) {
 | 
| -        var t1 = J.get$hashCode$(this.__internal$_name);
 | 
| +        var hash, t1;
 | 
| +        hash = this._hashCode;
 | 
| +        if (hash != null)
 | 
| +          return hash;
 | 
| +        t1 = J.get$hashCode$(this.__internal$_name);
 | 
|          if (typeof t1 !== "number")
 | 
|            return H.iae(t1);
 | 
| -        return 536870911 & 664597 * t1;
 | 
| +        hash = 536870911 & 664597 * t1;
 | 
| +        this._hashCode = hash;
 | 
| +        return hash;
 | 
|        },
 | 
|        toString$0: function(_) {
 | 
| -        return "Symbol(\"" + H.S(this.__internal$_name) + "\")";
 | 
| +        return 'Symbol("' + H.S(this.__internal$_name) + '")';
 | 
|        }
 | 
|      }
 | 
|    }], ["dart._js_names", "dart:_js_names",, H, {
 | 
| @@ -5122,6 +5335,14 @@
 | 
|        }($function, 1);
 | 
|        return $.Zone__current.registerBinaryCallback$1(new P._wrapJsFunctionForAsync_closure($protected));
 | 
|      },
 | 
| +    _invokeErrorHandler: function(errorHandler, error, stackTrace) {
 | 
| +      var t1 = H.getDynamicRuntimeType();
 | 
| +      t1 = H.buildFunctionType(t1, [t1, t1])._isTest$1(errorHandler);
 | 
| +      if (t1)
 | 
| +        return errorHandler.call$2(error, stackTrace);
 | 
| +      else
 | 
| +        return errorHandler.call$1(error);
 | 
| +    },
 | 
|      _registerErrorHandler: function(errorHandler, zone) {
 | 
|        var t1 = H.getDynamicRuntimeType();
 | 
|        t1 = H.buildFunctionType(t1, [t1, t1])._isTest$1(errorHandler);
 | 
| @@ -5249,12 +5470,12 @@
 | 
|        }
 | 
|      },
 | 
|      _nullDataHandler: [function(value) {
 | 
| -    }, "call$1", "async___nullDataHandler$closure", 2, 0, 51, 6],
 | 
| +    }, "call$1", "async___nullDataHandler$closure", 2, 0, 51, 7],
 | 
|      _nullErrorHandler: [function(error, stackTrace) {
 | 
|        $.Zone__current.handleUncaughtError$2(error, stackTrace);
 | 
|      }, function(error) {
 | 
|        return P._nullErrorHandler(error, null);
 | 
| -    }, "call$2", "call$1", "async___nullErrorHandler$closure", 2, 2, 6, 5, 1, 2],
 | 
| +    }, "call$2", "call$1", "async___nullErrorHandler$closure", 2, 2, 6, 5, 3, 4],
 | 
|      _nullDoneHandler: [function() {
 | 
|      }, "call$0", "async___nullDoneHandler$closure", 0, 0, 2],
 | 
|      _runUserCode: function(userCode, onSuccess, onError) {
 | 
| @@ -5300,7 +5521,7 @@
 | 
|          error = error != null ? error : new P.NullThrownError();
 | 
|          stackTrace = replacement.get$stackTrace();
 | 
|        }
 | 
| -      sink._async$_addError$2(error, stackTrace);
 | 
| +      sink._addError$2(error, stackTrace);
 | 
|      },
 | 
|      Timer_Timer: function(duration, callback) {
 | 
|        var t1;
 | 
| @@ -5310,11 +5531,11 @@
 | 
|        return t1.createTimer$2(duration, t1.bindCallback$2$runGuarded(callback, true));
 | 
|      },
 | 
|      Timer_Timer$periodic: function(duration, callback) {
 | 
| -      var t1;
 | 
| +      var boundCallback;
 | 
|        if (J.$eq$($.Zone__current, C.C__RootZone))
 | 
|          return $.Zone__current.createPeriodicTimer$2(duration, callback);
 | 
| -      t1 = $.Zone__current;
 | 
| -      return t1.createPeriodicTimer$2(duration, t1.bindUnaryCallback$2$runGuarded(callback, true));
 | 
| +      boundCallback = $.Zone__current.bindUnaryCallback$2$runGuarded(callback, true);
 | 
| +      return $.Zone__current.createPeriodicTimer$2(duration, boundCallback);
 | 
|      },
 | 
|      Timer__createTimer: function(duration, callback) {
 | 
|        var milliseconds = duration.get$inMilliseconds();
 | 
| @@ -5333,7 +5554,7 @@
 | 
|        var t1 = {};
 | 
|        t1.error = error;
 | 
|        P._schedulePriorityAsyncCallback(new P._rootHandleUncaughtError_closure(t1, stackTrace));
 | 
| -    }, "call$5", "async___rootHandleUncaughtError$closure", 10, 0, 52, 0, 3, 4, 1, 2],
 | 
| +    }, "call$5", "async___rootHandleUncaughtError$closure", 10, 0, 11, 0, 2, 1, 3, 4],
 | 
|      _rootRun: [function($self, $parent, zone, f) {
 | 
|        var old, previous, t1;
 | 
|        if (J.$eq$($.Zone__current, zone))
 | 
| @@ -5347,7 +5568,7 @@
 | 
|        } finally {
 | 
|          $.Zone__current = old;
 | 
|        }
 | 
| -    }, "call$4", "async___rootRun$closure", 8, 0, 53, 0, 3, 4, 8],
 | 
| +    }, "call$4", "async___rootRun$closure", 8, 0, 52, 0, 2, 1, 9],
 | 
|      _rootRunUnary: [function($self, $parent, zone, f, arg) {
 | 
|        var old, previous, t1;
 | 
|        if (J.$eq$($.Zone__current, zone))
 | 
| @@ -5361,7 +5582,7 @@
 | 
|        } finally {
 | 
|          $.Zone__current = old;
 | 
|        }
 | 
| -    }, "call$5", "async___rootRunUnary$closure", 10, 0, 54, 0, 3, 4, 8, 13],
 | 
| +    }, "call$5", "async___rootRunUnary$closure", 10, 0, 53, 0, 2, 1, 9, 15],
 | 
|      _rootRunBinary: [function($self, $parent, zone, f, arg1, arg2) {
 | 
|        var old, previous, t1;
 | 
|        if (J.$eq$($.Zone__current, zone))
 | 
| @@ -5375,34 +5596,34 @@
 | 
|        } finally {
 | 
|          $.Zone__current = old;
 | 
|        }
 | 
| -    }, "call$6", "async___rootRunBinary$closure", 12, 0, 55, 0, 3, 4, 8, 20, 21],
 | 
| +    }, "call$6", "async___rootRunBinary$closure", 12, 0, 54, 0, 2, 1, 9, 23, 19],
 | 
|      _rootRegisterCallback: [function($self, $parent, zone, f) {
 | 
|        return f;
 | 
| -    }, "call$4", "async___rootRegisterCallback$closure", 8, 0, 56, 0, 3, 4, 8],
 | 
| +    }, "call$4", "async___rootRegisterCallback$closure", 8, 0, 55, 0, 2, 1, 9],
 | 
|      _rootRegisterUnaryCallback: [function($self, $parent, zone, f) {
 | 
|        return f;
 | 
| -    }, "call$4", "async___rootRegisterUnaryCallback$closure", 8, 0, 57, 0, 3, 4, 8],
 | 
| +    }, "call$4", "async___rootRegisterUnaryCallback$closure", 8, 0, 56, 0, 2, 1, 9],
 | 
|      _rootRegisterBinaryCallback: [function($self, $parent, zone, f) {
 | 
|        return f;
 | 
| -    }, "call$4", "async___rootRegisterBinaryCallback$closure", 8, 0, 58, 0, 3, 4, 8],
 | 
| +    }, "call$4", "async___rootRegisterBinaryCallback$closure", 8, 0, 57, 0, 2, 1, 9],
 | 
|      _rootErrorCallback: [function($self, $parent, zone, error, stackTrace) {
 | 
|        return;
 | 
| -    }, "call$5", "async___rootErrorCallback$closure", 10, 0, 59, 0, 3, 4, 1, 2],
 | 
| +    }, "call$5", "async___rootErrorCallback$closure", 10, 0, 58, 0, 2, 1, 3, 4],
 | 
|      _rootScheduleMicrotask: [function($self, $parent, zone, f) {
 | 
|        var t1 = C.C__RootZone !== zone;
 | 
|        if (t1)
 | 
|          f = zone.bindCallback$2$runGuarded(f, !(!t1 || C.C__RootZone.get$errorZone() === zone.get$errorZone()));
 | 
|        P._scheduleAsyncCallback(f);
 | 
| -    }, "call$4", "async___rootScheduleMicrotask$closure", 8, 0, 60, 0, 3, 4, 8],
 | 
| +    }, "call$4", "async___rootScheduleMicrotask$closure", 8, 0, 59, 0, 2, 1, 9],
 | 
|      _rootCreateTimer: [function($self, $parent, zone, duration, callback) {
 | 
|        return P.Timer__createTimer(duration, C.C__RootZone !== zone ? zone.bindCallback$1(callback) : callback);
 | 
| -    }, "call$5", "async___rootCreateTimer$closure", 10, 0, 61, 0, 3, 4, 18, 16],
 | 
| +    }, "call$5", "async___rootCreateTimer$closure", 10, 0, 60, 0, 2, 1, 20, 16],
 | 
|      _rootCreatePeriodicTimer: [function($self, $parent, zone, duration, callback) {
 | 
|        return P.Timer__createPeriodicTimer(duration, C.C__RootZone !== zone ? zone.bindUnaryCallback$1(callback) : callback);
 | 
| -    }, "call$5", "async___rootCreatePeriodicTimer$closure", 10, 0, 62, 0, 3, 4, 18, 16],
 | 
| +    }, "call$5", "async___rootCreatePeriodicTimer$closure", 10, 0, 61, 0, 2, 1, 20, 16],
 | 
|      _rootPrint: [function($self, $parent, zone, line) {
 | 
|        H.printString(H.S(line));
 | 
| -    }, "call$4", "async___rootPrint$closure", 8, 0, 63, 0, 3, 4, 10],
 | 
| +    }, "call$4", "async___rootPrint$closure", 8, 0, 62, 0, 2, 1, 10],
 | 
|      _printToZone: [function(line) {
 | 
|        J.print$1$x($.Zone__current, line);
 | 
|      }, "call$1", "async___printToZone$closure", 2, 0, 7],
 | 
| @@ -5444,7 +5665,7 @@
 | 
|        t1._fork = zone.get$_fork();
 | 
|        t1._handleUncaughtError = specification.get$handleUncaughtError() != null ? new P._ZoneFunction(t1, specification.get$handleUncaughtError()) : zone.get$_handleUncaughtError();
 | 
|        return t1;
 | 
| -    }, "call$5", "async___rootFork$closure", 10, 0, 64, 0, 3, 4, 30, 31],
 | 
| +    }, "call$5", "async___rootFork$closure", 10, 0, 63, 0, 2, 1, 31, 32],
 | 
|      runZoned: function(body, onError, zoneSpecification, zoneValues) {
 | 
|        var errorHandler, zone;
 | 
|        errorHandler = new P.runZoned_closure(onError);
 | 
| @@ -5461,10 +5682,10 @@
 | 
|          f = t1.storedCallback;
 | 
|          t1.storedCallback = null;
 | 
|          f.call$0();
 | 
| -      }, null, null, 2, 0, null, 9, "call"]
 | 
| +      }, null, null, 2, 0, null, 6, "call"]
 | 
|      },
 | 
|      _AsyncRun__initializeScheduleImmediate_closure: {
 | 
| -      "^": "Closure:40;_box_0,div,span",
 | 
| +      "^": "Closure:39;_box_0,div,span",
 | 
|        call$1: function(callback) {
 | 
|          var t1, t2;
 | 
|          ++init.globalState.topEventLoop._activeJsAsyncCount;
 | 
| @@ -5492,19 +5713,19 @@
 | 
|        "^": "Closure:0;bodyFunction",
 | 
|        call$1: [function(result) {
 | 
|          return this.bodyFunction.call$2(0, result);
 | 
| -      }, null, null, 2, 0, null, 14, "call"]
 | 
| +      }, null, null, 2, 0, null, 13, "call"]
 | 
|      },
 | 
|      _awaitOnObject_closure0: {
 | 
|        "^": "Closure:5;bodyFunction",
 | 
|        call$2: [function(error, stackTrace) {
 | 
|          this.bodyFunction.call$2(1, new H.ExceptionAndStackTrace(error, stackTrace));
 | 
| -      }, null, null, 4, 0, null, 1, 2, "call"]
 | 
| +      }, null, null, 4, 0, null, 3, 4, "call"]
 | 
|      },
 | 
|      _wrapJsFunctionForAsync_closure: {
 | 
| -      "^": "Closure:65;$protected",
 | 
| +      "^": "Closure:45;$protected",
 | 
|        call$2: [function(errorCode, result) {
 | 
|          this.$protected(errorCode, result);
 | 
| -      }, null, null, 4, 0, null, 45, 14, "call"]
 | 
| +      }, null, null, 4, 0, null, 34, 13, "call"]
 | 
|      },
 | 
|      Future: {
 | 
|        "^": "Object;"
 | 
| @@ -5552,7 +5773,7 @@
 | 
|          t1._complete$1(value);
 | 
|        }, function($receiver) {
 | 
|          return this.complete$1($receiver, null);
 | 
| -      }, "complete$0", "call$1", "call$0", "get$complete", 0, 2, 46, 5, 6],
 | 
| +      }, "complete$0", "call$1", "call$0", "get$complete", 0, 2, 41, 5, 7],
 | 
|        _completeError$2: function(error, stackTrace) {
 | 
|          this.future._completeError$2(error, stackTrace);
 | 
|        }
 | 
| @@ -5560,40 +5781,61 @@
 | 
|      _FutureListener: {
 | 
|        "^": "Object;_nextListener@,result>,state,callback,errorCallback<",
 | 
|        get$_zone: function() {
 | 
| -        return this.result.get$_zone();
 | 
| +        return this.result._zone;
 | 
|        },
 | 
|        get$handlesValue: function() {
 | 
|          return (this.state & 1) !== 0;
 | 
|        },
 | 
| -      get$hasErrorTest: function() {
 | 
| -        return this.state === 6;
 | 
| +      get$handlesError: function() {
 | 
| +        return (this.state & 2) !== 0;
 | 
|        },
 | 
|        get$handlesComplete: function() {
 | 
|          return this.state === 8;
 | 
|        },
 | 
| -      get$_onValue: function() {
 | 
| -        return this.callback;
 | 
| +      get$hasErrorCallback: function() {
 | 
| +        return this.errorCallback != null;
 | 
| +      },
 | 
| +      handleValue$1: function(sourceResult) {
 | 
| +        return this.result._zone.runUnary$2(this.callback, sourceResult);
 | 
|        },
 | 
| -      get$_onError: function() {
 | 
| -        return this.errorCallback;
 | 
| +      matchesErrorTest$1: function(asyncError) {
 | 
| +        if (this.state !== 6)
 | 
| +          return true;
 | 
| +        return this.result._zone.runUnary$2(this.callback, J.get$error$x(asyncError));
 | 
|        },
 | 
| -      get$_errorTest: function() {
 | 
| -        return this.callback;
 | 
| +      handleError$1: function(asyncError) {
 | 
| +        var t1, t2, t3, t4;
 | 
| +        t1 = this.errorCallback;
 | 
| +        t2 = H.getDynamicRuntimeType();
 | 
| +        t2 = H.buildFunctionType(t2, [t2, t2])._isTest$1(t1);
 | 
| +        t3 = J.getInterceptor$x(asyncError);
 | 
| +        t4 = this.result;
 | 
| +        if (t2)
 | 
| +          return t4._zone.runBinary$3(t1, t3.get$error(asyncError), asyncError.get$stackTrace());
 | 
| +        else
 | 
| +          return t4._zone.runUnary$2(t1, t3.get$error(asyncError));
 | 
|        },
 | 
| -      get$_whenCompleteAction: function() {
 | 
| -        return this.callback;
 | 
| +      handleWhenComplete$0: function() {
 | 
| +        return this.result._zone.run$1(this.callback);
 | 
|        },
 | 
|        errorCallback$2: function(arg0, arg1) {
 | 
|          return this.errorCallback.call$2(arg0, arg1);
 | 
|        }
 | 
|      },
 | 
|      _Future: {
 | 
| -      "^": "Object;_state,_zone<,_resultOrListeners",
 | 
| +      "^": "Object;_state<,_zone<,_resultOrListeners<",
 | 
| +      get$_isChained: function() {
 | 
| +        return this._state === 2;
 | 
| +      },
 | 
| +      get$_isComplete: function() {
 | 
| +        return this._state >= 4;
 | 
| +      },
 | 
|        get$_hasError: function() {
 | 
|          return this._state === 8;
 | 
|        },
 | 
| -      set$_isChained: function(value) {
 | 
| +      _setChained$1: function(source) {
 | 
|          this._state = 2;
 | 
| +        this._resultOrListeners = source;
 | 
|        },
 | 
|        then$2$onError: function(f, onError) {
 | 
|          var currentZone = $.Zone__current;
 | 
| @@ -5620,17 +5862,18 @@
 | 
|          this._addListener$1(new P._FutureListener(null, result, 8, t1 !== C.C__RootZone ? t1.registerCallback$1(action) : action, null));
 | 
|          return result;
 | 
|        },
 | 
| -      _markPendingCompletion$0: function() {
 | 
| -        if (this._state !== 0)
 | 
| -          throw H.wrapException(new P.StateError("Future already completed"));
 | 
| +      _setPendingComplete$0: function() {
 | 
|          this._state = 1;
 | 
|        },
 | 
| -      get$_async$_value: function() {
 | 
| -        return this._resultOrListeners;
 | 
| +      _clearPendingComplete$0: function() {
 | 
| +        this._state = 0;
 | 
|        },
 | 
|        get$_error: function() {
 | 
|          return this._resultOrListeners;
 | 
|        },
 | 
| +      get$_chainSource: function() {
 | 
| +        return this._resultOrListeners;
 | 
| +      },
 | 
|        _setValue$1: function(value) {
 | 
|          this._state = 4;
 | 
|          this._resultOrListeners = value;
 | 
| @@ -5639,23 +5882,66 @@
 | 
|          this._state = 8;
 | 
|          this._resultOrListeners = error;
 | 
|        },
 | 
| -      _setError$2: function(error, stackTrace) {
 | 
| -        this._state = 8;
 | 
| -        this._resultOrListeners = new P.AsyncError(error, stackTrace);
 | 
| +      _cloneResult$1: function(source) {
 | 
| +        this._state = source.get$_state();
 | 
| +        this._resultOrListeners = source.get$_resultOrListeners();
 | 
|        },
 | 
|        _addListener$1: function(listener) {
 | 
| -        if (this._state >= 4)
 | 
| -          this._zone.scheduleMicrotask$1(new P._Future__addListener_closure(this, listener));
 | 
| -        else {
 | 
| +        var t1, source;
 | 
| +        t1 = this._state;
 | 
| +        if (t1 <= 1) {
 | 
|            listener._nextListener = this._resultOrListeners;
 | 
|            this._resultOrListeners = listener;
 | 
| +        } else {
 | 
| +          if (t1 === 2) {
 | 
| +            source = this._resultOrListeners;
 | 
| +            if (!source.get$_isComplete()) {
 | 
| +              source._addListener$1(listener);
 | 
| +              return;
 | 
| +            }
 | 
| +            this._state = source.get$_state();
 | 
| +            this._resultOrListeners = source.get$_resultOrListeners();
 | 
| +          }
 | 
| +          this._zone.scheduleMicrotask$1(new P._Future__addListener_closure(this, listener));
 | 
| +        }
 | 
| +      },
 | 
| +      _prependListeners$1: function(listeners) {
 | 
| +        var t1, t2, existingListeners, cursor, source;
 | 
| +        t1 = {};
 | 
| +        t1.listeners = listeners;
 | 
| +        if (listeners == null)
 | 
| +          return;
 | 
| +        t2 = this._state;
 | 
| +        if (t2 <= 1) {
 | 
| +          existingListeners = this._resultOrListeners;
 | 
| +          this._resultOrListeners = listeners;
 | 
| +          if (existingListeners != null) {
 | 
| +            for (cursor = listeners; cursor.get$_nextListener() != null;)
 | 
| +              cursor = cursor.get$_nextListener();
 | 
| +            cursor.set$_nextListener(existingListeners);
 | 
| +          }
 | 
| +        } else {
 | 
| +          if (t2 === 2) {
 | 
| +            source = this._resultOrListeners;
 | 
| +            if (!source.get$_isComplete()) {
 | 
| +              source._prependListeners$1(listeners);
 | 
| +              return;
 | 
| +            }
 | 
| +            this._state = source.get$_state();
 | 
| +            this._resultOrListeners = source.get$_resultOrListeners();
 | 
| +          }
 | 
| +          t1.listeners = this._reverseListeners$1(listeners);
 | 
| +          this._zone.scheduleMicrotask$1(new P._Future__prependListeners_closure(t1, this));
 | 
|          }
 | 
|        },
 | 
|        _removeListeners$0: function() {
 | 
| -        var current, prev, next;
 | 
| -        current = this._resultOrListeners;
 | 
| +        var current = this._resultOrListeners;
 | 
|          this._resultOrListeners = null;
 | 
| -        for (prev = null; current != null; prev = current, current = next) {
 | 
| +        return this._reverseListeners$1(current);
 | 
| +      },
 | 
| +      _reverseListeners$1: function(listeners) {
 | 
| +        var current, prev, next;
 | 
| +        for (current = listeners, prev = null; current != null; prev = current, current = next) {
 | 
|            next = current.get$_nextListener();
 | 
|            current.set$_nextListener(prev);
 | 
|          }
 | 
| @@ -5672,12 +5958,6 @@
 | 
|            P._Future__propagateToListeners(this, listeners);
 | 
|          }
 | 
|        },
 | 
| -      _completeWithValue$1: function(value) {
 | 
| -        var listeners = this._removeListeners$0();
 | 
| -        this._state = 4;
 | 
| -        this._resultOrListeners = value;
 | 
| -        P._Future__propagateToListeners(this, listeners);
 | 
| -      },
 | 
|        _completeError$2: [function(error, stackTrace) {
 | 
|          var listeners = this._removeListeners$0();
 | 
|          this._state = 8;
 | 
| @@ -5685,31 +5965,28 @@
 | 
|          P._Future__propagateToListeners(this, listeners);
 | 
|        }, function(error) {
 | 
|          return this._completeError$2(error, null);
 | 
| -      }, "_completeError$1", "call$2", "call$1", "get$_completeError", 2, 2, 6, 5, 1, 2],
 | 
| +      }, "_completeError$1", "call$2", "call$1", "get$_completeError", 2, 2, 6, 5, 3, 4],
 | 
|        _asyncComplete$1: function(value) {
 | 
| -        var t1;
 | 
| -        if (value == null)
 | 
| -          ;
 | 
| -        else if (!!J.getInterceptor(value).$isFuture) {
 | 
| -          t1 = value._state;
 | 
| -          if (t1 >= 4 && t1 === 8) {
 | 
| -            this._markPendingCompletion$0();
 | 
| +        if (!!J.getInterceptor(value).$isFuture) {
 | 
| +          if (value._state === 8) {
 | 
| +            this._state = 1;
 | 
|              this._zone.scheduleMicrotask$1(new P._Future__asyncComplete_closure(this, value));
 | 
|            } else
 | 
|              P._Future__chainCoreFuture(value, this);
 | 
|            return;
 | 
|          }
 | 
| -        this._markPendingCompletion$0();
 | 
| +        this._state = 1;
 | 
|          this._zone.scheduleMicrotask$1(new P._Future__asyncComplete_closure0(this, value));
 | 
|        },
 | 
|        _asyncCompleteError$2: function(error, stackTrace) {
 | 
| -        this._markPendingCompletion$0();
 | 
| +        this._state = 1;
 | 
|          this._zone.scheduleMicrotask$1(new P._Future__asyncCompleteError_closure(this, error, stackTrace));
 | 
|        },
 | 
|        $isFuture: 1,
 | 
| -      static: {_Future__chainForeignFuture: function(source, target) {
 | 
| +      static: {
 | 
| +        _Future__chainForeignFuture: function(source, target) {
 | 
|            var e, s, exception, t1;
 | 
| -          target.set$_isChained(true);
 | 
| +          target._setPendingComplete$0();
 | 
|            try {
 | 
|              source.then$2$onError(new P._Future__chainForeignFuture_closure(target), new P._Future__chainForeignFuture_closure0(target));
 | 
|            } catch (exception) {
 | 
| @@ -5718,16 +5995,23 @@
 | 
|              s = H.getTraceFromException(exception);
 | 
|              P.scheduleMicrotask(new P._Future__chainForeignFuture_closure1(target, e, s));
 | 
|            }
 | 
| -        }, _Future__chainCoreFuture: function(source, target) {
 | 
| -          var listener;
 | 
| -          target.set$_isChained(true);
 | 
| -          listener = new P._FutureListener(null, target, 0, null, null);
 | 
| -          if (source._state >= 4)
 | 
| -            P._Future__propagateToListeners(source, listener);
 | 
| -          else
 | 
| -            source._addListener$1(listener);
 | 
| -        }, _Future__propagateToListeners: function(source, listeners) {
 | 
| -          var t1, t2, t3, hasError, asyncError, listeners0, sourceValue, zone, oldZone, chainSource, result;
 | 
| +        },
 | 
| +        _Future__chainCoreFuture: function(source, target) {
 | 
| +          var listeners;
 | 
| +          for (; source.get$_isChained();)
 | 
| +            source = source.get$_chainSource();
 | 
| +          if (source.get$_isComplete()) {
 | 
| +            listeners = target._removeListeners$0();
 | 
| +            target._cloneResult$1(source);
 | 
| +            P._Future__propagateToListeners(target, listeners);
 | 
| +          } else {
 | 
| +            listeners = target.get$_resultOrListeners();
 | 
| +            target._setChained$1(source);
 | 
| +            source._prependListeners$1(listeners);
 | 
| +          }
 | 
| +        },
 | 
| +        _Future__propagateToListeners: function(source, listeners) {
 | 
| +          var t1, t2, t3, hasError, asyncError, listeners0, sourceResult, zone, oldZone, t4, result;
 | 
|            t1 = {};
 | 
|            t1.source = source;
 | 
|            for (t2 = source; true;) {
 | 
| @@ -5745,10 +6029,9 @@
 | 
|                listeners.set$_nextListener(null);
 | 
|                P._Future__propagateToListeners(t1.source, listeners);
 | 
|              }
 | 
| -            t3.listenerHasValue = true;
 | 
| -            sourceValue = hasError ? null : t1.source.get$_async$_value();
 | 
| -            t3.listenerValueOrError = sourceValue;
 | 
| -            t3.isPropagationAborted = false;
 | 
| +            sourceResult = t1.source.get$_resultOrListeners();
 | 
| +            t3.listenerHasError = hasError;
 | 
| +            t3.listenerValueOrError = sourceResult;
 | 
|              t2 = !hasError;
 | 
|              if (!t2 || listeners.get$handlesValue() || listeners.get$handlesComplete()) {
 | 
|                zone = listeners.get$_zone();
 | 
| @@ -5762,51 +6045,45 @@
 | 
|                  $.Zone__current = zone;
 | 
|                else
 | 
|                  oldZone = null;
 | 
| -              if (t2) {
 | 
| -                if (listeners.get$handlesValue())
 | 
| -                  t3.listenerHasValue = new P._Future__propagateToListeners_handleValueCallback(t3, listeners, sourceValue, zone).call$0();
 | 
| -              } else
 | 
| -                new P._Future__propagateToListeners_handleError(t1, t3, listeners, zone).call$0();
 | 
|                if (listeners.get$handlesComplete())
 | 
| -                new P._Future__propagateToListeners_handleWhenCompleteCallback(t1, t3, hasError, listeners, zone).call$0();
 | 
| +                new P._Future__propagateToListeners_handleWhenCompleteCallback(t1, t3, hasError, listeners).call$0();
 | 
| +              else if (t2) {
 | 
| +                if (listeners.get$handlesValue())
 | 
| +                  new P._Future__propagateToListeners_handleValueCallback(t3, listeners, sourceResult).call$0();
 | 
| +              } else if (listeners.get$handlesError())
 | 
| +                new P._Future__propagateToListeners_handleError(t1, t3, listeners).call$0();
 | 
|                if (oldZone != null)
 | 
|                  $.Zone__current = oldZone;
 | 
| -              if (t3.isPropagationAborted)
 | 
| -                return;
 | 
| -              if (t3.listenerHasValue === true) {
 | 
| -                t2 = t3.listenerValueOrError;
 | 
| -                t2 = (sourceValue == null ? t2 != null : sourceValue !== t2) && !!J.getInterceptor(t2).$isFuture;
 | 
| -              } else
 | 
| -                t2 = false;
 | 
| -              if (t2) {
 | 
| -                chainSource = t3.listenerValueOrError;
 | 
| +              t2 = t3.listenerValueOrError;
 | 
| +              t4 = J.getInterceptor(t2);
 | 
| +              if (!!t4.$isFuture) {
 | 
|                  result = J.get$result$x(listeners);
 | 
| -                if (chainSource instanceof P._Future)
 | 
| -                  if (chainSource._state >= 4) {
 | 
| -                    result.set$_isChained(true);
 | 
| -                    t1.source = chainSource;
 | 
| -                    listeners = new P._FutureListener(null, result, 0, null, null);
 | 
| -                    t2 = chainSource;
 | 
| +                if (!!t4.$is_Future)
 | 
| +                  if (t2._state >= 4) {
 | 
| +                    listeners = result._removeListeners$0();
 | 
| +                    result._cloneResult$1(t2);
 | 
| +                    t1.source = t2;
 | 
|                      continue;
 | 
|                    } else
 | 
| -                    P._Future__chainCoreFuture(chainSource, result);
 | 
| +                    P._Future__chainCoreFuture(t2, result);
 | 
|                  else
 | 
| -                  P._Future__chainForeignFuture(chainSource, result);
 | 
| +                  P._Future__chainForeignFuture(t2, result);
 | 
|                  return;
 | 
|                }
 | 
|              }
 | 
|              result = J.get$result$x(listeners);
 | 
|              listeners = result._removeListeners$0();
 | 
| -            t2 = t3.listenerHasValue;
 | 
| +            t2 = t3.listenerHasError;
 | 
|              t3 = t3.listenerValueOrError;
 | 
| -            if (t2 === true)
 | 
| +            if (!t2)
 | 
|                result._setValue$1(t3);
 | 
|              else
 | 
|                result._setErrorObject$1(t3);
 | 
|              t1.source = result;
 | 
|              t2 = result;
 | 
|            }
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      _Future__addListener_closure: {
 | 
|        "^": "Closure:1;$this,listener",
 | 
| @@ -5814,19 +6091,27 @@
 | 
|          P._Future__propagateToListeners(this.$this, this.listener);
 | 
|        }, null, null, 0, 0, null, "call"]
 | 
|      },
 | 
| +    _Future__prependListeners_closure: {
 | 
| +      "^": "Closure:1;_box_0,$this",
 | 
| +      call$0: [function() {
 | 
| +        P._Future__propagateToListeners(this.$this, this._box_0.listeners);
 | 
| +      }, null, null, 0, 0, null, "call"]
 | 
| +    },
 | 
|      _Future__chainForeignFuture_closure: {
 | 
|        "^": "Closure:0;target",
 | 
|        call$1: [function(value) {
 | 
| -        this.target._completeWithValue$1(value);
 | 
| -      }, null, null, 2, 0, null, 6, "call"]
 | 
| +        var t1 = this.target;
 | 
| +        t1._clearPendingComplete$0();
 | 
| +        t1._complete$1(value);
 | 
| +      }, null, null, 2, 0, null, 7, "call"]
 | 
|      },
 | 
|      _Future__chainForeignFuture_closure0: {
 | 
| -      "^": "Closure:9;target",
 | 
| +      "^": "Closure:38;target",
 | 
|        call$2: [function(error, stackTrace) {
 | 
|          this.target._completeError$2(error, stackTrace);
 | 
|        }, function(error) {
 | 
|          return this.call$2(error, null);
 | 
| -      }, "call$1", null, null, null, 2, 2, null, 5, 1, 2, "call"]
 | 
| +      }, "call$1", null, null, null, 2, 2, null, 5, 3, 4, "call"]
 | 
|      },
 | 
|      _Future__chainForeignFuture_closure1: {
 | 
|        "^": "Closure:1;target,e,s",
 | 
| @@ -5841,9 +6126,14 @@
 | 
|        }, null, null, 0, 0, null, "call"]
 | 
|      },
 | 
|      _Future__asyncComplete_closure0: {
 | 
| -      "^": "Closure:1;$this,value",
 | 
| +      "^": "Closure:1;$this,typedValue",
 | 
|        call$0: [function() {
 | 
| -        this.$this._completeWithValue$1(this.value);
 | 
| +        var t1, listeners;
 | 
| +        t1 = this.$this;
 | 
| +        listeners = t1._removeListeners$0();
 | 
| +        t1._state = 4;
 | 
| +        t1._resultOrListeners = this.typedValue;
 | 
| +        P._Future__propagateToListeners(t1, listeners);
 | 
|        }, null, null, 0, 0, null, "call"]
 | 
|      },
 | 
|      _Future__asyncCompleteError_closure: {
 | 
| @@ -5852,135 +6142,97 @@
 | 
|          this.$this._completeError$2(this.error, this.stackTrace);
 | 
|        }, null, null, 0, 0, null, "call"]
 | 
|      },
 | 
| -    _Future__propagateToListeners_handleValueCallback: {
 | 
| -      "^": "Closure:39;_box_1,listener,sourceValue,zone",
 | 
| -      call$0: function() {
 | 
| -        var e, s, exception, t1;
 | 
| -        try {
 | 
| -          this._box_1.listenerValueOrError = this.zone.runUnary$2(this.listener.get$_onValue(), this.sourceValue);
 | 
| -          return true;
 | 
| -        } catch (exception) {
 | 
| -          t1 = H.unwrapException(exception);
 | 
| -          e = t1;
 | 
| -          s = H.getTraceFromException(exception);
 | 
| -          this._box_1.listenerValueOrError = new P.AsyncError(e, s);
 | 
| -          return false;
 | 
| -        }
 | 
| -      }
 | 
| -    },
 | 
| -    _Future__propagateToListeners_handleError: {
 | 
| -      "^": "Closure:2;_box_2,_box_1,listener,zone",
 | 
| -      call$0: function() {
 | 
| -        var asyncError, matchesTest, test, e, s, errorCallback, e0, s0, t1, exception, t2, listenerValueOrError, t3, t4;
 | 
| -        asyncError = this._box_2.source.get$_error();
 | 
| -        matchesTest = true;
 | 
| -        t1 = this.listener;
 | 
| -        if (t1.get$hasErrorTest()) {
 | 
| -          test = t1.get$_errorTest();
 | 
| -          try {
 | 
| -            matchesTest = this.zone.runUnary$2(test, J.get$error$x(asyncError));
 | 
| -          } catch (exception) {
 | 
| -            t1 = H.unwrapException(exception);
 | 
| -            e = t1;
 | 
| -            s = H.getTraceFromException(exception);
 | 
| -            t1 = J.get$error$x(asyncError);
 | 
| -            t2 = e;
 | 
| -            listenerValueOrError = (t1 == null ? t2 == null : t1 === t2) ? asyncError : new P.AsyncError(e, s);
 | 
| -            t1 = this._box_1;
 | 
| -            t1.listenerValueOrError = listenerValueOrError;
 | 
| -            t1.listenerHasValue = false;
 | 
| -            return;
 | 
| -          }
 | 
| -        }
 | 
| -        errorCallback = t1.get$_onError();
 | 
| -        if (matchesTest === true && errorCallback != null) {
 | 
| -          try {
 | 
| -            t1 = errorCallback;
 | 
| -            t2 = H.getDynamicRuntimeType();
 | 
| -            t2 = H.buildFunctionType(t2, [t2, t2])._isTest$1(t1);
 | 
| -            t3 = this.zone;
 | 
| -            t4 = this._box_1;
 | 
| -            if (t2)
 | 
| -              t4.listenerValueOrError = t3.runBinary$3(errorCallback, J.get$error$x(asyncError), asyncError.get$stackTrace());
 | 
| -            else
 | 
| -              t4.listenerValueOrError = t3.runUnary$2(errorCallback, J.get$error$x(asyncError));
 | 
| -          } catch (exception) {
 | 
| -            t1 = H.unwrapException(exception);
 | 
| -            e0 = t1;
 | 
| -            s0 = H.getTraceFromException(exception);
 | 
| -            t1 = J.get$error$x(asyncError);
 | 
| -            t2 = e0;
 | 
| -            listenerValueOrError = (t1 == null ? t2 == null : t1 === t2) ? asyncError : new P.AsyncError(e0, s0);
 | 
| -            t1 = this._box_1;
 | 
| -            t1.listenerValueOrError = listenerValueOrError;
 | 
| -            t1.listenerHasValue = false;
 | 
| -            return;
 | 
| -          }
 | 
| -          this._box_1.listenerHasValue = true;
 | 
| -        } else {
 | 
| -          t1 = this._box_1;
 | 
| -          t1.listenerValueOrError = asyncError;
 | 
| -          t1.listenerHasValue = false;
 | 
| -        }
 | 
| -      }
 | 
| -    },
 | 
|      _Future__propagateToListeners_handleWhenCompleteCallback: {
 | 
| -      "^": "Closure:2;_box_2,_box_1,hasError,listener,zone",
 | 
| +      "^": "Closure:2;_box_1,_box_0,hasError,listener",
 | 
|        call$0: function() {
 | 
| -        var t1, e, s, completeResult, t2, exception, result;
 | 
| -        t1 = {};
 | 
| -        t1.completeResult = null;
 | 
| +        var completeResult, e, s, exception, t1, t2, originalSource;
 | 
| +        completeResult = null;
 | 
|          try {
 | 
| -          completeResult = this.zone.run$1(this.listener.get$_whenCompleteAction());
 | 
| -          t1.completeResult = completeResult;
 | 
| -          t2 = completeResult;
 | 
| +          completeResult = this.listener.handleWhenComplete$0();
 | 
|          } catch (exception) {
 | 
|            t1 = H.unwrapException(exception);
 | 
|            e = t1;
 | 
|            s = H.getTraceFromException(exception);
 | 
|            if (this.hasError) {
 | 
| -            t1 = J.get$error$x(this._box_2.source.get$_error());
 | 
| +            t1 = J.get$error$x(this._box_1.source.get$_error());
 | 
|              t2 = e;
 | 
|              t2 = t1 == null ? t2 == null : t1 === t2;
 | 
|              t1 = t2;
 | 
|            } else
 | 
|              t1 = false;
 | 
| -          t2 = this._box_1;
 | 
| +          t2 = this._box_0;
 | 
|            if (t1)
 | 
| -            t2.listenerValueOrError = this._box_2.source.get$_error();
 | 
| +            t2.listenerValueOrError = this._box_1.source.get$_error();
 | 
|            else
 | 
|              t2.listenerValueOrError = new P.AsyncError(e, s);
 | 
| -          t2.listenerHasValue = false;
 | 
| +          t2.listenerHasError = true;
 | 
|            return;
 | 
|          }
 | 
| -        if (!!J.getInterceptor(t2).$isFuture) {
 | 
| -          result = J.get$result$x(this.listener);
 | 
| -          result.set$_isChained(true);
 | 
| -          this._box_1.isPropagationAborted = true;
 | 
| -          t2.then$2$onError(new P._Future__propagateToListeners_handleWhenCompleteCallback_closure(this._box_2, result), new P._Future__propagateToListeners_handleWhenCompleteCallback_closure0(t1, result));
 | 
| +        if (!!J.getInterceptor(completeResult).$isFuture) {
 | 
| +          if (completeResult instanceof P._Future && completeResult.get$_state() >= 4) {
 | 
| +            if (completeResult.get$_state() === 8) {
 | 
| +              t1 = this._box_0;
 | 
| +              t1.listenerValueOrError = completeResult.get$_resultOrListeners();
 | 
| +              t1.listenerHasError = true;
 | 
| +            }
 | 
| +            return;
 | 
| +          }
 | 
| +          originalSource = this._box_1.source;
 | 
| +          t1 = this._box_0;
 | 
| +          t1.listenerValueOrError = completeResult.then$1(new P._Future__propagateToListeners_handleWhenCompleteCallback_closure(originalSource));
 | 
| +          t1.listenerHasError = false;
 | 
|          }
 | 
|        }
 | 
|      },
 | 
|      _Future__propagateToListeners_handleWhenCompleteCallback_closure: {
 | 
| -      "^": "Closure:0;_box_2,result",
 | 
| -      call$1: [function(ignored) {
 | 
| -        P._Future__propagateToListeners(this._box_2.source, new P._FutureListener(null, this.result, 0, null, null));
 | 
| -      }, null, null, 2, 0, null, 34, "call"]
 | 
| +      "^": "Closure:0;originalSource",
 | 
| +      call$1: [function(_) {
 | 
| +        return this.originalSource;
 | 
| +      }, null, null, 2, 0, null, 6, "call"]
 | 
|      },
 | 
| -    _Future__propagateToListeners_handleWhenCompleteCallback_closure0: {
 | 
| -      "^": "Closure:9;_box_0,result",
 | 
| -      call$2: [function(error, stackTrace) {
 | 
| -        var t1, completeResult;
 | 
| -        t1 = this._box_0;
 | 
| -        if (!(t1.completeResult instanceof P._Future)) {
 | 
| -          completeResult = H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null]);
 | 
| -          t1.completeResult = completeResult;
 | 
| -          completeResult._setError$2(error, stackTrace);
 | 
| +    _Future__propagateToListeners_handleValueCallback: {
 | 
| +      "^": "Closure:2;_box_0,listener,sourceResult",
 | 
| +      call$0: function() {
 | 
| +        var e, s, exception, t1;
 | 
| +        try {
 | 
| +          this._box_0.listenerValueOrError = this.listener.handleValue$1(this.sourceResult);
 | 
| +        } catch (exception) {
 | 
| +          t1 = H.unwrapException(exception);
 | 
| +          e = t1;
 | 
| +          s = H.getTraceFromException(exception);
 | 
| +          t1 = this._box_0;
 | 
| +          t1.listenerValueOrError = new P.AsyncError(e, s);
 | 
| +          t1.listenerHasError = true;
 | 
|          }
 | 
| -        P._Future__propagateToListeners(t1.completeResult, new P._FutureListener(null, this.result, 0, null, null));
 | 
| -      }, function(error) {
 | 
| -        return this.call$2(error, null);
 | 
| -      }, "call$1", null, null, null, 2, 2, null, 5, 1, 2, "call"]
 | 
| +      }
 | 
| +    },
 | 
| +    _Future__propagateToListeners_handleError: {
 | 
| +      "^": "Closure:2;_box_1,_box_0,listener",
 | 
| +      call$0: function() {
 | 
| +        var asyncError, e, s, t1, t2, exception, t3, t4;
 | 
| +        try {
 | 
| +          asyncError = this._box_1.source.get$_error();
 | 
| +          t1 = this.listener;
 | 
| +          if (t1.matchesErrorTest$1(asyncError) === true && t1.get$hasErrorCallback()) {
 | 
| +            t2 = this._box_0;
 | 
| +            t2.listenerValueOrError = t1.handleError$1(asyncError);
 | 
| +            t2.listenerHasError = false;
 | 
| +          }
 | 
| +        } catch (exception) {
 | 
| +          t1 = H.unwrapException(exception);
 | 
| +          e = t1;
 | 
| +          s = H.getTraceFromException(exception);
 | 
| +          t1 = this._box_1;
 | 
| +          t2 = J.get$error$x(t1.source.get$_error());
 | 
| +          t3 = e;
 | 
| +          t4 = this._box_0;
 | 
| +          if (t2 == null ? t3 == null : t2 === t3)
 | 
| +            t4.listenerValueOrError = t1.source.get$_error();
 | 
| +          else
 | 
| +            t4.listenerValueOrError = new P.AsyncError(e, s);
 | 
| +          t4.listenerHasError = true;
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      _AsyncCallbackEntry: {
 | 
|        "^": "Object;callback,next"
 | 
| @@ -5990,6 +6242,12 @@
 | 
|        map$1: function(_, convert) {
 | 
|          return H.setRuntimeTypeInfo(new P._MapStream(convert, this), [H.getRuntimeTypeArgument(this, "Stream", 0), null]);
 | 
|        },
 | 
| +      handleError$2$test: function(onError, test) {
 | 
| +        return H.setRuntimeTypeInfo(new P._HandleErrorStream(onError, test, this), [H.getRuntimeTypeArgument(this, "Stream", 0)]);
 | 
| +      },
 | 
| +      handleError$1: function(onError) {
 | 
| +        return this.handleError$2$test(onError, null);
 | 
| +      },
 | 
|        pipe$1: function(streamConsumer) {
 | 
|          return streamConsumer.addStream$1(this).then$1(new P.Stream_pipe_closure(streamConsumer));
 | 
|        },
 | 
| @@ -6046,7 +6304,7 @@
 | 
|        "^": "Closure:0;streamConsumer",
 | 
|        call$1: [function(_) {
 | 
|          return this.streamConsumer.close$0(0);
 | 
| -      }, null, null, 2, 0, null, 9, "call"]
 | 
| +      }, null, null, 2, 0, null, 6, "call"]
 | 
|      },
 | 
|      Stream_contains_closure: {
 | 
|        "^": "Closure;_box_0,$this,needle,future",
 | 
| @@ -6055,7 +6313,7 @@
 | 
|          t1 = this._box_0;
 | 
|          t2 = this.future;
 | 
|          P._runUserCode(new P.Stream_contains__closure(this.needle, element), new P.Stream_contains__closure0(t1, t2), P._cancelAndErrorClosure(t1.subscription, t2));
 | 
| -      }, null, null, 2, 0, null, 23, "call"],
 | 
| +      }, null, null, 2, 0, null, 22, "call"],
 | 
|        $signature: function() {
 | 
|          return H.computeSignature(function(T) {
 | 
|            return {func: 1, args: [T]};
 | 
| @@ -6069,7 +6327,7 @@
 | 
|        }
 | 
|      },
 | 
|      Stream_contains__closure0: {
 | 
| -      "^": "Closure:38;_box_0,future",
 | 
| +      "^": "Closure:37;_box_0,future",
 | 
|        call$1: function(isMatch) {
 | 
|          if (isMatch === true)
 | 
|            P._cancelAndValue(this._box_0.subscription, this.future, true);
 | 
| @@ -6085,7 +6343,7 @@
 | 
|        "^": "Closure;_box_0,$this,action,future",
 | 
|        call$1: [function(element) {
 | 
|          P._runUserCode(new P.Stream_forEach__closure(this.action, element), new P.Stream_forEach__closure0(), P._cancelAndErrorClosure(this._box_0.subscription, this.future));
 | 
| -      }, null, null, 2, 0, null, 23, "call"],
 | 
| +      }, null, null, 2, 0, null, 22, "call"],
 | 
|        $signature: function() {
 | 
|          return H.computeSignature(function(T) {
 | 
|            return {func: 1, args: [T]};
 | 
| @@ -6113,7 +6371,7 @@
 | 
|        "^": "Closure:0;_box_0",
 | 
|        call$1: [function(_) {
 | 
|          ++this._box_0.count;
 | 
| -      }, null, null, 2, 0, null, 9, "call"]
 | 
| +      }, null, null, 2, 0, null, 6, "call"]
 | 
|      },
 | 
|      Stream_length_closure0: {
 | 
|        "^": "Closure:1;_box_0,future",
 | 
| @@ -6125,7 +6383,7 @@
 | 
|        "^": "Closure:0;_box_0,future",
 | 
|        call$1: [function(_) {
 | 
|          P._cancelAndValue(this._box_0.subscription, this.future, false);
 | 
| -      }, null, null, 2, 0, null, 9, "call"]
 | 
| +      }, null, null, 2, 0, null, 6, "call"]
 | 
|      },
 | 
|      Stream_isEmpty_closure0: {
 | 
|        "^": "Closure:1;future",
 | 
| @@ -6137,7 +6395,7 @@
 | 
|        "^": "Closure;$this,result",
 | 
|        call$1: [function(data) {
 | 
|          this.result.push(data);
 | 
| -      }, null, null, 2, 0, null, 15, "call"],
 | 
| +      }, null, null, 2, 0, null, 12, "call"],
 | 
|        $signature: function() {
 | 
|          return H.computeSignature(function(T) {
 | 
|            return {func: 1, args: [T]};
 | 
| @@ -6156,7 +6414,7 @@
 | 
|          var t1 = this._box_0;
 | 
|          t1.foundResult = true;
 | 
|          t1.result = value;
 | 
| -      }, null, null, 2, 0, null, 6, "call"],
 | 
| +      }, null, null, 2, 0, null, 7, "call"],
 | 
|        $signature: function() {
 | 
|          return H.computeSignature(function(T) {
 | 
|            return {func: 1, args: [T]};
 | 
| @@ -6187,7 +6445,7 @@
 | 
|        "^": "Object;"
 | 
|      },
 | 
|      _StreamController: {
 | 
| -      "^": "Object;",
 | 
| +      "^": "Object;_state<",
 | 
|        get$isPaused: function() {
 | 
|          var t1 = this._state;
 | 
|          return (t1 & 1) !== 0 ? this.get$_subscription().get$_isInputPaused() : (t1 & 2) === 0;
 | 
| @@ -6203,13 +6461,17 @@
 | 
|            t1 = this._varData;
 | 
|            if (t1 == null) {
 | 
|              t1 = new P._StreamImplEvents(null, null, 0);
 | 
| +            t1.$builtinTypeInfo = this.$builtinTypeInfo;
 | 
|              this._varData = t1;
 | 
|            }
 | 
|            return t1;
 | 
|          }
 | 
|          state = this._varData;
 | 
| -        if (state.get$varData() == null)
 | 
| -          state.set$varData(new P._StreamImplEvents(null, null, 0));
 | 
| +        if (state.get$varData() == null) {
 | 
| +          t1 = new P._StreamImplEvents(null, null, 0);
 | 
| +          t1.$builtinTypeInfo = this.$builtinTypeInfo;
 | 
| +          state.set$varData(t1);
 | 
| +        }
 | 
|          return state.get$varData();
 | 
|        },
 | 
|        get$_subscription: function() {
 | 
| @@ -6238,7 +6500,7 @@
 | 
|          return H.computeSignature(function(T) {
 | 
|            return {func: 1, v: true, args: [T]};
 | 
|          }, this.$receiver, "_StreamController");
 | 
| -      }, 6],
 | 
| +      }, 7],
 | 
|        addError$2: [function(error, stackTrace) {
 | 
|          var replacement;
 | 
|          if (this._state >= 4)
 | 
| @@ -6250,10 +6512,10 @@
 | 
|            error = error != null ? error : new P.NullThrownError();
 | 
|            stackTrace = replacement.get$stackTrace();
 | 
|          }
 | 
| -        this._async$_addError$2(error, stackTrace);
 | 
| +        this._addError$2(error, stackTrace);
 | 
|        }, function(error) {
 | 
|          return this.addError$2(error, null);
 | 
| -      }, "addError$1", "call$2", "call$1", "get$addError", 2, 2, 10, 5, 1, 2],
 | 
| +      }, "addError$1", "call$2", "call$1", "get$addError", 2, 2, 9, 5, 3, 4],
 | 
|        close$0: [function(_) {
 | 
|          var t1 = this._state;
 | 
|          if ((t1 & 4) !== 0)
 | 
| @@ -6269,13 +6531,18 @@
 | 
|          return this._ensureDoneFuture$0();
 | 
|        }, null, "get$close", 0, 0, null],
 | 
|        _async$_add$1: function(value) {
 | 
| -        var t1 = this._state;
 | 
| +        var t1, t2;
 | 
| +        t1 = this._state;
 | 
|          if ((t1 & 1) !== 0)
 | 
|            this._sendData$1(value);
 | 
| -        else if ((t1 & 3) === 0)
 | 
| -          this._ensurePendingEvents$0().add$1(0, new P._DelayedData(value, null));
 | 
| +        else if ((t1 & 3) === 0) {
 | 
| +          t1 = this._ensurePendingEvents$0();
 | 
| +          t2 = new P._DelayedData(value, null);
 | 
| +          t2.$builtinTypeInfo = this.$builtinTypeInfo;
 | 
| +          t1.add$1(0, t2);
 | 
| +        }
 | 
|        },
 | 
| -      _async$_addError$2: function(error, stackTrace) {
 | 
| +      _addError$2: function(error, stackTrace) {
 | 
|          var t1 = this._state;
 | 
|          if ((t1 & 1) !== 0)
 | 
|            this._sendError$2(error, stackTrace);
 | 
| @@ -6355,7 +6622,7 @@
 | 
|          this.get$_subscription()._async$_add$1(data);
 | 
|        },
 | 
|        _sendError$2: function(error, stackTrace) {
 | 
| -        this.get$_subscription()._async$_addError$2(error, stackTrace);
 | 
| +        this.get$_subscription()._addError$2(error, stackTrace);
 | 
|        },
 | 
|        _sendDone$0: function() {
 | 
|          this.get$_subscription()._close$0();
 | 
| @@ -6408,13 +6675,13 @@
 | 
|          return H.computeSignature(function(T) {
 | 
|            return {func: 1, v: true, args: [T]};
 | 
|          }, this.$receiver, "_StreamSinkWrapper");
 | 
| -      }, 15]
 | 
| +      }, 12]
 | 
|      },
 | 
|      _EventSink: {
 | 
|        "^": "Object;"
 | 
|      },
 | 
|      _BufferingStreamSubscription: {
 | 
| -      "^": "Object;_onError<,_zone<",
 | 
| +      "^": "Object;_zone<,_state<",
 | 
|        _setPendingEvents$1: function(pendingEvents) {
 | 
|          if (pendingEvents == null)
 | 
|            return;
 | 
| @@ -6491,9 +6758,9 @@
 | 
|          if (t1 < 32)
 | 
|            this._sendData$1(data);
 | 
|          else
 | 
| -          this._addPending$1(new P._DelayedData(data, null));
 | 
| +          this._addPending$1(H.setRuntimeTypeInfo(new P._DelayedData(data, null), [null]));
 | 
|        }],
 | 
| -      _async$_addError$2: ["super$_BufferingStreamSubscription$_addError", function(error, stackTrace) {
 | 
| +      _addError$2: ["super$_BufferingStreamSubscription$_addError", function(error, stackTrace) {
 | 
|          var t1 = this._state;
 | 
|          if ((t1 & 8) !== 0)
 | 
|            return;
 | 
| @@ -6524,7 +6791,7 @@
 | 
|          var pending, t1;
 | 
|          pending = this._pending;
 | 
|          if (pending == null) {
 | 
| -          pending = new P._StreamImplEvents(null, null, 0);
 | 
| +          pending = H.setRuntimeTypeInfo(new P._StreamImplEvents(null, null, 0), [null]);
 | 
|            this._pending = pending;
 | 
|          }
 | 
|          pending.add$1(0, $event);
 | 
| @@ -6638,8 +6905,7 @@
 | 
|            return;
 | 
|          t1._state = (t2 | 32) >>> 0;
 | 
|          t2 = t1._onError;
 | 
| -        t3 = H.getDynamicRuntimeType();
 | 
| -        t3 = H.buildFunctionType(t3, [t3, t3])._isTest$1(t2);
 | 
| +        t3 = H.buildFunctionType(H.getDynamicRuntimeType(), [H.buildInterfaceType(P.Object), H.buildInterfaceType(P.StackTrace)])._isTest$1(t2);
 | 
|          t4 = t1._zone;
 | 
|          t5 = this.error;
 | 
|          t6 = t1._onError;
 | 
| @@ -6709,7 +6975,7 @@
 | 
|        }
 | 
|      },
 | 
|      _PendingEvents: {
 | 
| -      "^": "Object;",
 | 
| +      "^": "Object;_state<",
 | 
|        schedule$1: function(dispatch) {
 | 
|          var t1 = this._state;
 | 
|          if (t1 === 1)
 | 
| @@ -6760,7 +7026,7 @@
 | 
|        }
 | 
|      },
 | 
|      _DoneStreamSubscription: {
 | 
| -      "^": "Object;_zone<,_state,_onDone",
 | 
| +      "^": "Object;_zone<,_state<,_onDone",
 | 
|        get$isPaused: function() {
 | 
|          return this._state >= 4;
 | 
|        },
 | 
| @@ -6800,7 +7066,7 @@
 | 
|        }, "call$0", "get$_sendDone", 0, 0, 2]
 | 
|      },
 | 
|      _StreamIteratorImpl: {
 | 
| -      "^": "Object;_subscription,_async$_current,_futureOrPrefetch,_state",
 | 
| +      "^": "Object;_subscription,_async$_current,_futureOrPrefetch,_state<",
 | 
|        _clear$0: function(_) {
 | 
|          this._subscription = null;
 | 
|          this._futureOrPrefetch = null;
 | 
| @@ -6824,7 +7090,7 @@
 | 
|          return H.computeSignature(function(T) {
 | 
|            return {func: 1, v: true, args: [T]};
 | 
|          }, this.$receiver, "_StreamIteratorImpl");
 | 
| -      }, 15],
 | 
| +      }, 12],
 | 
|        _onError$2: [function(error, stackTrace) {
 | 
|          var hasNext;
 | 
|          if (this._state === 2) {
 | 
| @@ -6838,7 +7104,7 @@
 | 
|          this._state = 4;
 | 
|        }, function(error) {
 | 
|          return this._onError$2(error, null);
 | 
| -      }, "_onError$1", "call$2", "call$1", "get$_onError", 2, 2, 10, 5, 1, 2],
 | 
| +      }, "_onError$1", "call$2", "call$1", "get$_onError", 2, 2, 9, 5, 3, 4],
 | 
|        _onDone$0: [function() {
 | 
|          if (this._state === 2) {
 | 
|            var hasNext = this._futureOrPrefetch;
 | 
| @@ -6874,7 +7140,7 @@
 | 
|      _cancelAndErrorClosure_closure: {
 | 
|        "^": "Closure:5;subscription,future",
 | 
|        call$2: function(error, stackTrace) {
 | 
| -        return P._cancelAndError(this.subscription, this.future, error, stackTrace);
 | 
| +        P._cancelAndError(this.subscription, this.future, error, stackTrace);
 | 
|        }
 | 
|      },
 | 
|      _cancelAndValue_closure: {
 | 
| @@ -6900,6 +7166,9 @@
 | 
|        _handleData$2: function(data, sink) {
 | 
|          sink._async$_add$1(data);
 | 
|        },
 | 
| +      _handleError$3: function(error, stackTrace, sink) {
 | 
| +        sink._addError$2(error, stackTrace);
 | 
| +      },
 | 
|        $asStream: function($S, $T) {
 | 
|          return [$T];
 | 
|        }
 | 
| @@ -6911,7 +7180,7 @@
 | 
|            return;
 | 
|          this.super$_BufferingStreamSubscription$_add(data);
 | 
|        },
 | 
| -      _async$_addError$2: function(error, stackTrace) {
 | 
| +      _addError$2: function(error, stackTrace) {
 | 
|          if ((this._state & 2) !== 0)
 | 
|            return;
 | 
|          this.super$_BufferingStreamSubscription$_addError(error, stackTrace);
 | 
| @@ -6942,10 +7211,10 @@
 | 
|          return H.computeSignature(function(S, T) {
 | 
|            return {func: 1, v: true, args: [S]};
 | 
|          }, this.$receiver, "_ForwardingStreamSubscription");
 | 
| -      }, 15],
 | 
| +      }, 12],
 | 
|        _handleError$2: [function(error, stackTrace) {
 | 
| -        this._async$_addError$2(error, stackTrace);
 | 
| -      }, "call$2", "get$_handleError", 4, 0, 11, 1, 2],
 | 
| +        this._stream._handleError$3(error, stackTrace, this);
 | 
| +      }, "call$2", "get$_handleError", 4, 0, 10, 3, 4],
 | 
|        _handleDone$0: [function() {
 | 
|          this._close$0();
 | 
|        }, "call$0", "get$_handleDone", 0, 0, 2],
 | 
| @@ -6958,13 +7227,15 @@
 | 
|        $as_BufferingStreamSubscription: function($S, $T) {
 | 
|          return [$T];
 | 
|        },
 | 
| -      static: {_ForwardingStreamSubscription$: function(_stream, onData, onError, onDone, cancelOnError, $S, $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;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      _MapStream: {
 | 
|        "^": "_ForwardingStream;_transform,_async$_source",
 | 
| @@ -6986,6 +7257,34 @@
 | 
|          return this._transform.call$1(arg0);
 | 
|        }
 | 
|      },
 | 
| +    _HandleErrorStream: {
 | 
| +      "^": "_ForwardingStream;_transform,_test,_async$_source",
 | 
| +      _handleError$3: function(error, stackTrace, sink) {
 | 
| +        var matches, e, s, exception, t1, t2;
 | 
| +        matches = true;
 | 
| +        if (matches === true)
 | 
| +          try {
 | 
| +            P._invokeErrorHandler(this._transform, error, stackTrace);
 | 
| +          } catch (exception) {
 | 
| +            t1 = H.unwrapException(exception);
 | 
| +            e = t1;
 | 
| +            s = H.getTraceFromException(exception);
 | 
| +            t1 = e;
 | 
| +            t2 = error;
 | 
| +            if (t1 == null ? t2 == null : t1 === t2)
 | 
| +              sink._addError$2(error, stackTrace);
 | 
| +            else
 | 
| +              P._addErrorWithReplacement(sink, e, s);
 | 
| +            return;
 | 
| +          }
 | 
| +        else
 | 
| +          sink._addError$2(error, stackTrace);
 | 
| +      },
 | 
| +      $as_ForwardingStream: function($T) {
 | 
| +        return [$T, $T];
 | 
| +      },
 | 
| +      $asStream: null
 | 
| +    },
 | 
|      Timer: {
 | 
|        "^": "Object;"
 | 
|      },
 | 
| @@ -7060,43 +7359,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, 36],
 | 
| +      }, "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, 34],
 | 
|        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, 34],
 | 
| +      }, "call$3", "get$runUnary", 6, 0, 32],
 | 
|        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, 32],
 | 
| +      }, "call$4", "get$runBinary", 8, 0, 31],
 | 
|        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, 31],
 | 
| +      }, "call$2", "get$registerCallback", 4, 0, 30],
 | 
|        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, 30],
 | 
| +      }, "call$2", "get$registerUnaryCallback", 4, 0, 29],
 | 
|        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, 33],
 | 
| +      }, "call$2", "get$registerBinaryCallback", 4, 0, 28],
 | 
|        errorCallback$3: [function(zone, error, stackTrace) {
 | 
|          var implementation, implZone;
 | 
|          implementation = this._delegationTarget.get$_errorCallback();
 | 
| @@ -7104,37 +7403,37 @@
 | 
|          if (implZone === C.C__RootZone)
 | 
|            return;
 | 
|          return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, error, stackTrace);
 | 
| -      }, "call$3", "get$errorCallback", 6, 0, 23],
 | 
| +      }, "call$3", "get$errorCallback", 6, 0, 33],
 | 
|        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, 24],
 | 
| +      }, "call$2", "get$scheduleMicrotask", 4, 0, 23],
 | 
|        createTimer$3: [function(zone, duration, f) {
 | 
|          var implementation, implZone;
 | 
|          implementation = this._delegationTarget.get$_createTimer();
 | 
|          implZone = implementation.zone;
 | 
|          return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, duration, f);
 | 
| -      }, "call$3", "get$createTimer", 6, 0, 25],
 | 
| +      }, "call$3", "get$createTimer", 6, 0, 24],
 | 
|        createPeriodicTimer$3: [function(zone, period, f) {
 | 
|          var implementation, implZone;
 | 
|          implementation = this._delegationTarget.get$_createPeriodicTimer();
 | 
|          implZone = implementation.zone;
 | 
|          return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, period, f);
 | 
| -      }, "call$3", "get$createPeriodicTimer", 6, 0, 26],
 | 
| +      }, "call$3", "get$createPeriodicTimer", 6, 0, 25],
 | 
|        print$2: [function(_, zone, line) {
 | 
|          var implementation, implZone;
 | 
|          implementation = this._delegationTarget.get$_print();
 | 
|          implZone = implementation.zone;
 | 
|          implementation.$function.call$4(implZone, P._parentDelegate(implZone), zone, line);
 | 
| -      }, "call$2", "get$print", 4, 0, 27],
 | 
| +      }, "call$2", "get$print", 4, 0, 26],
 | 
|        fork$3: [function(zone, specification, zoneValues) {
 | 
|          var implementation, implZone;
 | 
|          implementation = this._delegationTarget.get$_fork();
 | 
|          implZone = implementation.zone;
 | 
|          return implementation.$function.call$5(implZone, P._parentDelegate(implZone), zone, specification, zoneValues);
 | 
| -      }, "call$3", "get$fork", 6, 0, 28]
 | 
| +      }, "call$3", "get$fork", 6, 0, 27]
 | 
|      },
 | 
|      _Zone: {
 | 
|        "^": "Object;",
 | 
| @@ -7143,7 +7442,7 @@
 | 
|        }
 | 
|      },
 | 
|      _CustomZone: {
 | 
| -      "^": "_Zone;_runUnary<,_run<,_runBinary<,_registerCallback<,_registerUnaryCallback<,_registerBinaryCallback<,_errorCallback<,_scheduleMicrotask<,_createTimer<,_createPeriodicTimer<,_print<,_fork<,_handleUncaughtError<,_delegateCache,parent>,_async$_map<",
 | 
| +      "^": "_Zone;_run<,_runUnary<,_runBinary<,_registerCallback<,_registerUnaryCallback<,_registerBinaryCallback<,_errorCallback<,_scheduleMicrotask<,_createTimer<,_createPeriodicTimer<,_print<,_fork<,_handleUncaughtError<,_delegateCache,parent>,_async$_map<",
 | 
|        get$_delegate: function() {
 | 
|          var t1 = this._delegateCache;
 | 
|          if (t1 != null)
 | 
| @@ -7238,49 +7537,49 @@
 | 
|          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, 22, 5, 5],
 | 
| +      }, "fork$0", "call$2$specification$zoneValues", "call$0", "get$fork", 0, 5, 21, 5, 5],
 | 
|        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, 21],
 | 
| +      }, "call$1", "get$run", 2, 0, 20],
 | 
|        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, 20],
 | 
| +      }, "call$2", "get$runUnary", 4, 0, 19],
 | 
|        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, 19],
 | 
| -      registerCallback$1: [function(f) {
 | 
| +      }, "call$3", "get$runBinary", 6, 0, 18],
 | 
| +      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, f);
 | 
| -      }, "call$1", "get$registerCallback", 2, 0, 8],
 | 
| -      registerUnaryCallback$1: [function(f) {
 | 
| +        return implementation.$function.call$4(t1, parentDelegate, this, callback);
 | 
| +      }, "call$1", "get$registerCallback", 2, 0, 17],
 | 
| +      registerUnaryCallback$1: [function(callback) {
 | 
|          var implementation, t1, parentDelegate;
 | 
|          implementation = this._registerUnaryCallback;
 | 
|          t1 = implementation.zone;
 | 
|          parentDelegate = P._parentDelegate(t1);
 | 
| -        return implementation.$function.call$4(t1, parentDelegate, this, f);
 | 
| -      }, "call$1", "get$registerUnaryCallback", 2, 0, 18],
 | 
| -      registerBinaryCallback$1: [function(f) {
 | 
| +        return implementation.$function.call$4(t1, parentDelegate, this, callback);
 | 
| +      }, "call$1", "get$registerUnaryCallback", 2, 0, 8],
 | 
| +      registerBinaryCallback$1: [function(callback) {
 | 
|          var implementation, t1, parentDelegate;
 | 
|          implementation = this._registerBinaryCallback;
 | 
|          t1 = implementation.zone;
 | 
|          parentDelegate = P._parentDelegate(t1);
 | 
| -        return implementation.$function.call$4(t1, parentDelegate, this, f);
 | 
| -      }, "call$1", "get$registerBinaryCallback", 2, 0, 17],
 | 
| +        return implementation.$function.call$4(t1, parentDelegate, this, callback);
 | 
| +      }, "call$1", "get$registerBinaryCallback", 2, 0, 16],
 | 
|        errorCallback$2: [function(error, stackTrace) {
 | 
|          var implementation, implementationZone, parentDelegate;
 | 
|          implementation = this._errorCallback;
 | 
| @@ -7289,7 +7588,7 @@
 | 
|            return;
 | 
|          parentDelegate = P._parentDelegate(implementationZone);
 | 
|          return implementation.$function.call$5(implementationZone, parentDelegate, this, error, stackTrace);
 | 
| -      }, "call$2", "get$errorCallback", 4, 0, 16],
 | 
| +      }, "call$2", "get$errorCallback", 4, 0, 15],
 | 
|        scheduleMicrotask$1: [function(f) {
 | 
|          var implementation, t1, parentDelegate;
 | 
|          implementation = this._scheduleMicrotask;
 | 
| @@ -7303,14 +7602,14 @@
 | 
|          t1 = implementation.zone;
 | 
|          parentDelegate = P._parentDelegate(t1);
 | 
|          return implementation.$function.call$5(t1, parentDelegate, this, duration, f);
 | 
| -      }, "call$2", "get$createTimer", 4, 0, 14],
 | 
| +      }, "call$2", "get$createTimer", 4, 0, 13],
 | 
|        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, 13],
 | 
| +      }, "call$2", "get$createPeriodicTimer", 4, 0, 12],
 | 
|        print$1: [function(_, line) {
 | 
|          var implementation, t1, parentDelegate;
 | 
|          implementation = this._print;
 | 
| @@ -7335,7 +7634,7 @@
 | 
|        "^": "Closure:0;$this,registered",
 | 
|        call$1: [function(arg) {
 | 
|          return this.$this.runUnaryGuarded$2(this.registered, arg);
 | 
| -      }, null, null, 2, 0, null, 13, "call"]
 | 
| +      }, null, null, 2, 0, null, 15, "call"]
 | 
|      },
 | 
|      _rootHandleUncaughtError_closure: {
 | 
|        "^": "Closure:1;_box_0,stackTrace",
 | 
| @@ -7488,43 +7787,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, 22, 5, 5],
 | 
| +      }, "fork$0", "call$2$specification$zoneValues", "call$0", "get$fork", 0, 5, 21, 5, 5],
 | 
|        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, 21],
 | 
| +      }, "call$1", "get$run", 2, 0, 20],
 | 
|        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, 20],
 | 
| +      }, "call$2", "get$runUnary", 4, 0, 19],
 | 
|        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, 19],
 | 
| +      }, "call$3", "get$runBinary", 6, 0, 18],
 | 
|        registerCallback$1: [function(f) {
 | 
|          return f;
 | 
| -      }, "call$1", "get$registerCallback", 2, 0, 8],
 | 
| +      }, "call$1", "get$registerCallback", 2, 0, 17],
 | 
|        registerUnaryCallback$1: [function(f) {
 | 
|          return f;
 | 
| -      }, "call$1", "get$registerUnaryCallback", 2, 0, 18],
 | 
| +      }, "call$1", "get$registerUnaryCallback", 2, 0, 8],
 | 
|        registerBinaryCallback$1: [function(f) {
 | 
|          return f;
 | 
| -      }, "call$1", "get$registerBinaryCallback", 2, 0, 17],
 | 
| +      }, "call$1", "get$registerBinaryCallback", 2, 0, 16],
 | 
|        errorCallback$2: [function(error, stackTrace) {
 | 
|          return;
 | 
| -      }, "call$2", "get$errorCallback", 4, 0, 16],
 | 
| +      }, "call$2", "get$errorCallback", 4, 0, 15],
 | 
|        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, 14],
 | 
| +      }, "call$2", "get$createTimer", 4, 0, 13],
 | 
|        createPeriodicTimer$2: [function(duration, f) {
 | 
|          return P.Timer__createPeriodicTimer(duration, f);
 | 
| -      }, "call$2", "get$createPeriodicTimer", 4, 0, 13],
 | 
| +      }, "call$2", "get$createPeriodicTimer", 4, 0, 12],
 | 
|        print$1: [function(_, line) {
 | 
|          H.printString(line);
 | 
|        }, "call$1", "get$print", 2, 0, 7]
 | 
| @@ -7545,16 +7844,16 @@
 | 
|        "^": "Closure:0;$this,f",
 | 
|        call$1: [function(arg) {
 | 
|          return this.$this.runUnaryGuarded$2(this.f, arg);
 | 
| -      }, null, null, 2, 0, null, 13, "call"]
 | 
| +      }, null, null, 2, 0, null, 15, "call"]
 | 
|      },
 | 
|      runZoned_closure: {
 | 
| -      "^": "Closure:41;onError",
 | 
| +      "^": "Closure:11;onError",
 | 
|        call$5: [function($self, $parent, zone, error, stackTrace) {
 | 
|          var e, s, t1, t2, exception;
 | 
|          try {
 | 
|            t1 = this.onError;
 | 
|            t2 = H.getDynamicRuntimeType();
 | 
| -          t2 = H.buildFunctionType(t2, [t2, t2])._isTest$1(t1);
 | 
| +          t2 = H.buildFunctionType(t2, [t2, H.buildInterfaceType(P.StackTrace)])._isTest$1(t1);
 | 
|            if (t2) {
 | 
|              t1 = J.get$parent$x($self).runBinary$3(t1, error, stackTrace);
 | 
|              return t1;
 | 
| @@ -7572,7 +7871,7 @@
 | 
|            else
 | 
|              return $parent.handleUncaughtError$3(zone, e, s);
 | 
|          }
 | 
| -      }, null, null, 10, 0, null, 0, 3, 4, 1, 2, "call"]
 | 
| +      }, null, null, 10, 0, null, 0, 2, 1, 3, 4, "call"]
 | 
|      }
 | 
|    }], ["dart.collection", "dart:collection",, P, {
 | 
|      "^": "",
 | 
| @@ -7926,17 +8225,20 @@
 | 
|          return -1;
 | 
|        },
 | 
|        $isMap: 1,
 | 
| -      static: {_HashMap__setTableEntry: function(table, key, value) {
 | 
| +      static: {
 | 
| +        _HashMap__setTableEntry: function(table, key, value) {
 | 
|            if (value == null)
 | 
|              table[key] = table;
 | 
|            else
 | 
|              table[key] = value;
 | 
| -        }, _HashMap__newHashTable: function() {
 | 
| +        },
 | 
| +        _HashMap__newHashTable: function() {
 | 
|            var table = Object.create(null);
 | 
|            P._HashMap__setTableEntry(table, "<non-identifier-key>", table);
 | 
|            delete table["<non-identifier-key>"];
 | 
|            return table;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      _LinkedIdentityHashMap: {
 | 
|        "^": "JsLinkedHashMap;__js_helper$_length,_strings,_nums,_rest,_first,_last,_modifications",
 | 
| @@ -7955,9 +8257,11 @@
 | 
|          }
 | 
|          return -1;
 | 
|        },
 | 
| -      static: {_LinkedIdentityHashMap__LinkedIdentityHashMap$es6: function($K, $V) {
 | 
| +      static: {
 | 
| +        _LinkedIdentityHashMap__LinkedIdentityHashMap$es6: function($K, $V) {
 | 
|            return H.setRuntimeTypeInfo(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",
 | 
| @@ -8171,12 +8475,14 @@
 | 
|          return -1;
 | 
|        },
 | 
|        $isEfficientLength: 1,
 | 
| -      static: {_LinkedHashSet__newHashTable: function() {
 | 
| +      static: {
 | 
| +        _LinkedHashSet__newHashTable: function() {
 | 
|            var table = Object.create(null);
 | 
|            table["<non-identifier-key>"] = table;
 | 
|            delete table["<non-identifier-key>"];
 | 
|            return table;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      _LinkedHashSetCell: {
 | 
|        "^": "Object;_element<,_collection$_next<,_collection$_previous@"
 | 
| @@ -8203,23 +8509,11 @@
 | 
|          }
 | 
|        }
 | 
|      },
 | 
| -    UnmodifiableListView: {
 | 
| -      "^": "UnmodifiableListBase;_collection$_source",
 | 
| -      get$length: function(_) {
 | 
| -        return this._collection$_source.length;
 | 
| -      },
 | 
| -      $index: function(_, index) {
 | 
| -        var t1 = this._collection$_source;
 | 
| -        if (index >>> 0 !== index || index >= t1.length)
 | 
| -          return H.ioore(t1, index);
 | 
| -        return t1[index];
 | 
| -      }
 | 
| -    },
 | 
|      closure5: {
 | 
|        "^": "Closure:3;result",
 | 
|        call$2: [function(k, v) {
 | 
|          this.result.$indexSet(0, k, v);
 | 
| -      }, null, null, 4, 0, null, 35, 36, "call"]
 | 
| +      }, null, null, 4, 0, null, 36, 37, "call"]
 | 
|      },
 | 
|      _HashSetBase: {
 | 
|        "^": "SetBase;"
 | 
| @@ -8264,13 +8558,6 @@
 | 
|            throw H.wrapException(H.IterableElementError_noElement());
 | 
|          return this.$index(receiver, this.get$length(receiver) - 1);
 | 
|        },
 | 
| -      get$single: function(receiver) {
 | 
| -        if (this.get$length(receiver) === 0)
 | 
| -          throw H.wrapException(H.IterableElementError_noElement());
 | 
| -        if (this.get$length(receiver) > 1)
 | 
| -          throw H.wrapException(H.IterableElementError_tooMany());
 | 
| -        return this.$index(receiver, 0);
 | 
| -      },
 | 
|        contains$1: function(receiver, element) {
 | 
|          var $length, i;
 | 
|          $length = this.get$length(receiver);
 | 
| @@ -8318,7 +8605,7 @@
 | 
|              this.$indexSet(receiver, start + i, t1.$index(otherList, otherStart + i));
 | 
|        }, function($receiver, start, end, iterable) {
 | 
|          return this.setRange$4($receiver, start, end, iterable, 0);
 | 
| -      }, "setRange$3", null, null, "get$setRange", 6, 2, null, 37],
 | 
| +      }, "setRange$3", null, null, "get$setRange", 6, 2, null, 38],
 | 
|        replaceRange$3: function(receiver, start, end, newContents) {
 | 
|          var removeLength, insertLength, insertEnd, delta, newLength;
 | 
|          P.RangeError_checkValidRange(start, end, this.get$length(receiver), null, null, null);
 | 
| @@ -8342,13 +8629,12 @@
 | 
|          }
 | 
|        },
 | 
|        indexOf$2: function(receiver, element, startIndex) {
 | 
| -        var t1, i;
 | 
| -        t1 = J.getInterceptor$n(startIndex);
 | 
| -        if (t1.$ge(startIndex, this.get$length(receiver)))
 | 
| +        var i;
 | 
| +        if (startIndex >= this.get$length(receiver))
 | 
|            return -1;
 | 
| -        if (t1.$lt(startIndex, 0))
 | 
| +        if (startIndex < 0)
 | 
|            startIndex = 0;
 | 
| -        for (i = startIndex; t1 = J.getInterceptor$n(i), t1.$lt(i, this.get$length(receiver)); i = t1.$add(i, 1))
 | 
| +        for (i = startIndex; i < this.get$length(receiver); ++i)
 | 
|            if (J.$eq$(this.$index(receiver, i), element))
 | 
|              return i;
 | 
|          return -1;
 | 
| @@ -8356,9 +8642,6 @@
 | 
|        indexOf$1: function($receiver, element) {
 | 
|          return this.indexOf$2($receiver, element, 0);
 | 
|        },
 | 
| -      get$reversed: function(receiver) {
 | 
| -        return H.setRuntimeTypeInfo(new H.ReversedListIterable(receiver), [H.getRuntimeTypeArgument(receiver, "ListMixin", 0)]);
 | 
| -      },
 | 
|        toString$0: function(receiver) {
 | 
|          return P.IterableBase_iterableToFullString(receiver, "[", "]");
 | 
|        },
 | 
| @@ -8417,7 +8700,7 @@
 | 
|        }
 | 
|      },
 | 
|      ListQueue: {
 | 
| -      "^": "Iterable;_table,_head,_tail,_modificationCount",
 | 
| +      "^": "ListIterable;_table,_head,_tail,_modificationCount",
 | 
|        get$iterator: function(_) {
 | 
|          return new P._ListQueueIterator(this, this._tail, this._modificationCount, this._head, null);
 | 
|        },
 | 
| @@ -8452,6 +8735,20 @@
 | 
|            return H.ioore(t1, t2);
 | 
|          return t1[t2];
 | 
|        },
 | 
| +      elementAt$1: function(_, index) {
 | 
| +        var $length, t1, t2, t3;
 | 
| +        $length = (this._tail - this._head & this._table.length - 1) >>> 0;
 | 
| +        if (typeof index !== "number")
 | 
| +          return H.iae(index);
 | 
| +        if (0 > index || index >= $length)
 | 
| +          H.throwExpression(P.IndexError$(index, this, "index", null, $length));
 | 
| +        t1 = this._table;
 | 
| +        t2 = t1.length;
 | 
| +        t3 = (this._head + index & t2 - 1) >>> 0;
 | 
| +        if (t3 < 0 || t3 >= t2)
 | 
| +          return H.ioore(t1, t3);
 | 
| +        return t1[t3];
 | 
| +      },
 | 
|        add$1: function(_, value) {
 | 
|          this._add$1(value);
 | 
|        },
 | 
| @@ -8522,11 +8819,13 @@
 | 
|          this._table = H.setRuntimeTypeInfo(t1, [$E]);
 | 
|        },
 | 
|        $isEfficientLength: 1,
 | 
| -      static: {ListQueue$: function(initialCapacity, $E) {
 | 
| +      static: {
 | 
| +        ListQueue$: function(initialCapacity, $E) {
 | 
|            var t1 = H.setRuntimeTypeInfo(new P.ListQueue(null, 0, 0, 0), [$E]);
 | 
|            t1.ListQueue$1(initialCapacity, $E);
 | 
|            return t1;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      _ListQueueIterator: {
 | 
|        "^": "Object;_queue,_end,_modificationCount,_collection$_position,_collection$_current",
 | 
| @@ -8618,7 +8917,7 @@
 | 
|      },
 | 
|      _defaultToEncodable: [function(object) {
 | 
|        return object.toJson$0();
 | 
| -    }, "call$1", "convert___defaultToEncodable$closure", 2, 0, 12, 19],
 | 
| +    }, "call$1", "convert___defaultToEncodable$closure", 2, 0, 0, 25],
 | 
|      _JsonMap: {
 | 
|        "^": "Object;_original,_processed,_data",
 | 
|        $index: function(_, key) {
 | 
| @@ -8767,7 +9066,7 @@
 | 
|        "^": "Closure:0;$this",
 | 
|        call$1: [function(each) {
 | 
|          return this.$this.$index(0, each);
 | 
| -      }, null, null, 2, 0, null, 22, "call"]
 | 
| +      }, null, null, 2, 0, null, 18, "call"]
 | 
|      },
 | 
|      Codec: {
 | 
|        "^": "Object;"
 | 
| @@ -8924,9 +9223,9 @@
 | 
|            this.writeString$1("null");
 | 
|            return true;
 | 
|          } else if (typeof object === "string") {
 | 
| -          this.writeString$1("\"");
 | 
| +          this.writeString$1('"');
 | 
|            this.writeStringContent$1(object);
 | 
| -          this.writeString$1("\"");
 | 
| +          this.writeString$1('"');
 | 
|            return true;
 | 
|          } else {
 | 
|            t1 = J.getInterceptor(object);
 | 
| @@ -8964,26 +9263,23 @@
 | 
|          this.writeString$1("]");
 | 
|        },
 | 
|        writeMap$1: function(map) {
 | 
| -        var t1, t2, keyValueList, separator, i;
 | 
| +        var t1, keyValueList, separator, i, t2;
 | 
|          t1 = {};
 | 
|          if (map.get$isEmpty(map) === true) {
 | 
|            this.writeString$1("{}");
 | 
|            return true;
 | 
|          }
 | 
| -        t2 = J.$mul$ns(map.get$length(map), 2);
 | 
| -        if (typeof t2 !== "number")
 | 
| -          return H.iae(t2);
 | 
| -        keyValueList = new Array(t2);
 | 
| +        keyValueList = new Array(J.$mul$ns(map.get$length(map), 2));
 | 
|          t1.i = 0;
 | 
|          t1.allStringKeys = true;
 | 
|          map.forEach$1(0, new P._JsonStringifier_writeMap_closure(t1, keyValueList));
 | 
|          if (!t1.allStringKeys)
 | 
|            return false;
 | 
|          this.writeString$1("{");
 | 
| -        for (t1 = keyValueList.length, separator = "\"", i = 0; i < t1; i += 2, separator = ",\"") {
 | 
| +        for (t1 = keyValueList.length, separator = '"', i = 0; i < t1; i += 2, separator = ',"') {
 | 
|            this.writeString$1(separator);
 | 
|            this.writeStringContent$1(keyValueList[i]);
 | 
| -          this.writeString$1("\":");
 | 
| +          this.writeString$1('":');
 | 
|            t2 = i + 1;
 | 
|            if (t2 >= t1)
 | 
|              return H.ioore(keyValueList, t2);
 | 
| @@ -9015,7 +9311,7 @@
 | 
|          if (i >= t4)
 | 
|            return H.ioore(t1, i);
 | 
|          t1[i] = value;
 | 
| -      }, null, null, 4, 0, null, 17, 6, "call"]
 | 
| +      }, null, null, 4, 0, null, 17, 7, "call"]
 | 
|      },
 | 
|      _JsonStringStringifier: {
 | 
|        "^": "_JsonStringifier;_convert$_sink,_seen,_toEncodable",
 | 
| @@ -9031,18 +9327,21 @@
 | 
|        writeCharCode$1: function(charCode) {
 | 
|          this._convert$_sink.writeCharCode$1(charCode);
 | 
|        },
 | 
| -      static: {_JsonStringStringifier_stringify: function(object, toEncodable, indent) {
 | 
| +      static: {
 | 
| +        _JsonStringStringifier_stringify: function(object, toEncodable, indent) {
 | 
|            var output, t1;
 | 
|            output = new P.StringBuffer("");
 | 
|            P._JsonStringStringifier_printOn(object, output, toEncodable, indent);
 | 
|            t1 = output._contents;
 | 
|            return t1.charCodeAt(0) == 0 ? t1 : t1;
 | 
| -        }, _JsonStringStringifier_printOn: function(object, output, toEncodable, indent) {
 | 
| +        },
 | 
| +        _JsonStringStringifier_printOn: function(object, output, toEncodable, indent) {
 | 
|            var t1, stringifier;
 | 
|            t1 = P.convert___defaultToEncodable$closure();
 | 
|            stringifier = new P._JsonStringStringifier(output, [], t1);
 | 
|            stringifier.writeObject$1(object);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      Utf8Codec: {
 | 
|        "^": "Encoding;_allowMalformed",
 | 
| @@ -9059,13 +9358,9 @@
 | 
|          P.RangeError_checkValidRange(start, end, stringLength, null, null, null);
 | 
|          t2 = J.getInterceptor$n(stringLength);
 | 
|          $length = t2.$sub(stringLength, start);
 | 
| -        t3 = J.getInterceptor($length);
 | 
| -        if (t3.$eq($length, 0))
 | 
| -          return new Uint8Array(0);
 | 
| -        t3 = t3.$mul($length, 3);
 | 
| -        if (typeof t3 !== "number" || Math.floor(t3) !== t3)
 | 
| -          H.throwExpression(P.ArgumentError$("Invalid length " + H.S(t3)));
 | 
| -        t3 = new Uint8Array(t3);
 | 
| +        if ($length === 0)
 | 
| +          return new Uint8Array(H._checkLength(0));
 | 
| +        t3 = new Uint8Array(H._checkLength($length * 3));
 | 
|          encoder = new P._Utf8Encoder(0, 0, t3);
 | 
|          if (encoder._fillBuffer$3(string, start, stringLength) !== stringLength)
 | 
|            encoder._writeSurrogate$2(t1.codeUnitAt$1(string, t2.$sub(stringLength, 1)), 0);
 | 
| @@ -9291,7 +9586,7 @@
 | 
|        }
 | 
|      },
 | 
|      _Utf8Decoder_convert_scanOneByteCharacters: {
 | 
| -      "^": "Closure:43;endIndex",
 | 
| +      "^": "Closure:42;endIndex",
 | 
|        call$2: function(units, from) {
 | 
|          var to, t1, i, unit;
 | 
|          to = this.endIndex;
 | 
| @@ -9304,7 +9599,7 @@
 | 
|        }
 | 
|      },
 | 
|      _Utf8Decoder_convert_addSingleBytes: {
 | 
| -      "^": "Closure:67;$this,codeUnits,startIndex,endIndex",
 | 
| +      "^": "Closure:43;$this,codeUnits,startIndex,endIndex",
 | 
|        call$2: function(from, to) {
 | 
|          this.$this._stringSink._contents += P.String_String$fromCharCodes(this.codeUnits, from, to);
 | 
|        }
 | 
| @@ -9384,6 +9679,9 @@
 | 
|        }
 | 
|        return result;
 | 
|      },
 | 
| +    List_List$unmodifiable: function(elements, $E) {
 | 
| +      return J.JSArray_markUnmodifiableList(P.List_List$from(elements, false, $E));
 | 
| +    },
 | 
|      print: function(object) {
 | 
|        var line, t1;
 | 
|        line = H.S(object);
 | 
| @@ -9411,7 +9709,7 @@
 | 
|        return H.Primitives_stringFromCharCode(charCode);
 | 
|      },
 | 
|      NoSuchMethodError_toString_closure: {
 | 
| -      "^": "Closure:45;_box_0,sb",
 | 
| +      "^": "Closure:66;_box_0,sb",
 | 
|        call$2: [function(key, value) {
 | 
|          var t1, t2, t3;
 | 
|          t1 = this.sb;
 | 
| @@ -9421,7 +9719,7 @@
 | 
|          t1._contents = t3 + ": ";
 | 
|          t1._contents += H.S(P.Error_safeToString(value));
 | 
|          t2.comma = ", ";
 | 
| -      }, null, null, 4, 0, null, 17, 6, "call"]
 | 
| +      }, null, null, 4, 0, null, 17, 7, "call"]
 | 
|      },
 | 
|      bool: {
 | 
|        "^": "Object;"
 | 
| @@ -9464,19 +9762,20 @@
 | 
|        DateTime$_withValue$2$isUtc: function(_value, isUtc) {
 | 
|          var t1 = this._core$_value;
 | 
|          if (!(Math.abs(t1) > 864e13)) {
 | 
| -          if (Math.abs(t1) === 864e13)
 | 
| -            ;
 | 
| +          Math.abs(t1) === 864e13;
 | 
|            t1 = false;
 | 
|          } else
 | 
|            t1 = true;
 | 
|          if (t1)
 | 
|            throw H.wrapException(P.ArgumentError$(this.get$millisecondsSinceEpoch()));
 | 
|        },
 | 
| -      static: {DateTime$_withValue: function(_value, isUtc) {
 | 
| +      static: {
 | 
| +        DateTime$_withValue: function(_value, isUtc) {
 | 
|            var t1 = new P.DateTime(_value, isUtc);
 | 
|            t1.DateTime$_withValue$2$isUtc(_value, isUtc);
 | 
|            return t1;
 | 
| -        }, DateTime__fourDigits: function(n) {
 | 
| +        },
 | 
| +        DateTime__fourDigits: function(n) {
 | 
|            var absN, sign;
 | 
|            absN = Math.abs(n);
 | 
|            sign = n < 0 ? "-" : "";
 | 
| @@ -9487,17 +9786,20 @@
 | 
|            if (absN >= 10)
 | 
|              return sign + "00" + H.S(absN);
 | 
|            return sign + "000" + H.S(absN);
 | 
| -        }, DateTime__threeDigits: function(n) {
 | 
| +        },
 | 
| +        DateTime__threeDigits: function(n) {
 | 
|            if (n >= 100)
 | 
|              return "" + n;
 | 
|            if (n >= 10)
 | 
|              return "0" + n;
 | 
|            return "00" + n;
 | 
| -        }, DateTime__twoDigits: function(n) {
 | 
| +        },
 | 
| +        DateTime__twoDigits: function(n) {
 | 
|            if (n >= 10)
 | 
|              return "" + n;
 | 
|            return "0" + n;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      $double: {
 | 
|        "^": "num;"
 | 
| @@ -9511,9 +9813,6 @@
 | 
|        $sub: function(_, other) {
 | 
|          return new P.Duration(this._duration - other.get$_duration());
 | 
|        },
 | 
| -      $mul: function(_, factor) {
 | 
| -        return new P.Duration(C.JSInt_methods.round$0(this._duration * factor));
 | 
| -      },
 | 
|        $tdiv: function(_, quotient) {
 | 
|          if (quotient === 0)
 | 
|            throw H.wrapException(new P.IntegerDivisionByZeroException());
 | 
| @@ -9525,11 +9824,8 @@
 | 
|        $gt: function(_, other) {
 | 
|          return this._duration > other.get$_duration();
 | 
|        },
 | 
| -      $le: function(_, other) {
 | 
| -        return C.JSInt_methods.$le(this._duration, other.get$_duration());
 | 
| -      },
 | 
|        $ge: function(_, other) {
 | 
| -        return this._duration >= other.get$_duration();
 | 
| +        return C.JSInt_methods.$ge(this._duration, other.get$_duration());
 | 
|        },
 | 
|        get$inMilliseconds: function() {
 | 
|          return C.JSInt_methods._tdivFast$1(this._duration, 1000);
 | 
| @@ -9558,12 +9854,14 @@
 | 
|        $negate: function(_) {
 | 
|          return new P.Duration(-this._duration);
 | 
|        },
 | 
| -      static: {Duration$: function(days, hours, microseconds, milliseconds, minutes, seconds) {
 | 
| +      static: {
 | 
| +        Duration$: function(days, hours, microseconds, milliseconds, minutes, seconds) {
 | 
|            return new P.Duration(864e8 * days + 3600000000 * hours + 60000000 * minutes + 1000000 * seconds + 1000 * milliseconds + microseconds);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      Duration_toString_sixDigits: {
 | 
| -      "^": "Closure:15;",
 | 
| +      "^": "Closure:14;",
 | 
|        call$1: function(n) {
 | 
|          if (n >= 100000)
 | 
|            return "" + n;
 | 
| @@ -9579,7 +9877,7 @@
 | 
|        }
 | 
|      },
 | 
|      Duration_toString_twoDigits: {
 | 
| -      "^": "Closure:15;",
 | 
| +      "^": "Closure:14;",
 | 
|        call$1: function(n) {
 | 
|          if (n >= 10)
 | 
|            return "" + n;
 | 
| @@ -9619,13 +9917,17 @@
 | 
|          errorValue = P.Error_safeToString(this.invalidValue);
 | 
|          return prefix + explanation + ": " + H.S(errorValue);
 | 
|        },
 | 
| -      static: {ArgumentError$: function(message) {
 | 
| +      static: {
 | 
| +        ArgumentError$: function(message) {
 | 
|            return new P.ArgumentError(false, null, null, message);
 | 
| -        }, ArgumentError$value: function(value, $name, message) {
 | 
| +        },
 | 
| +        ArgumentError$value: function(value, $name, message) {
 | 
|            return new P.ArgumentError(true, value, $name, message);
 | 
| -        }, ArgumentError$notNull: function($name) {
 | 
| +        },
 | 
| +        ArgumentError$notNull: function($name) {
 | 
|            return new P.ArgumentError(false, null, $name, "Must not be null");
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      RangeError: {
 | 
|        "^": "ArgumentError;start,end,_hasValue,invalidValue,name,message",
 | 
| @@ -9652,17 +9954,19 @@
 | 
|          }
 | 
|          return explanation;
 | 
|        },
 | 
| -      static: {RangeError$value: function(value, $name, message) {
 | 
| +      static: {
 | 
| +        RangeError$value: function(value, $name, message) {
 | 
|            return new P.RangeError(null, null, true, value, $name, "Value not in range");
 | 
| -        }, RangeError$range: function(invalidValue, minValue, maxValue, $name, message) {
 | 
| +        },
 | 
| +        RangeError$range: function(invalidValue, minValue, maxValue, $name, message) {
 | 
|            return new P.RangeError(minValue, maxValue, true, invalidValue, $name, "Invalid value");
 | 
| -        }, RangeError_checkValueInInterval: function(value, minValue, maxValue, $name, message) {
 | 
| +        },
 | 
| +        RangeError_checkValueInInterval: function(value, minValue, maxValue, $name, message) {
 | 
|            if (value < minValue || value > maxValue)
 | 
|              throw H.wrapException(P.RangeError$range(value, minValue, maxValue, $name, message));
 | 
| -        }, RangeError_checkValidRange: function(start, end, $length, startName, endName, message) {
 | 
| +        },
 | 
| +        RangeError_checkValidRange: function(start, end, $length, startName, endName, message) {
 | 
|            var t1;
 | 
| -          if (typeof start !== "number")
 | 
| -            return H.iae(start);
 | 
|            if (!(0 > start)) {
 | 
|              if (typeof $length !== "number")
 | 
|                return H.iae($length);
 | 
| @@ -9685,7 +9989,8 @@
 | 
|              return end;
 | 
|            }
 | 
|            return $length;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      IndexError: {
 | 
|        "^": "ArgumentError;indexable,length>,_hasValue,invalidValue,name,message",
 | 
| @@ -9696,14 +10001,16 @@
 | 
|          if (J.$lt$n(this.invalidValue, 0))
 | 
|            return ": index must not be negative";
 | 
|          var t1 = this.length;
 | 
| -        if (J.$eq$(t1, 0))
 | 
| +        if (t1 === 0)
 | 
|            return ": no indices are valid";
 | 
|          return ": index should be less than " + H.S(t1);
 | 
|        },
 | 
| -      static: {IndexError$: function(invalidValue, indexable, $name, message, $length) {
 | 
| +      static: {
 | 
| +        IndexError$: function(invalidValue, indexable, $name, message, $length) {
 | 
|            var t1 = $length != null ? $length : J.get$length$asx(indexable);
 | 
|            return new P.IndexError(indexable, t1, true, invalidValue, $name, "Index out of range");
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      NoSuchMethodError: {
 | 
|        "^": "Error;_core$_receiver,_memberName,_core$_arguments,_namedArguments,_existingArgumentNames",
 | 
| @@ -9723,9 +10030,11 @@
 | 
|          actualParameters = H.S(sb);
 | 
|          return "NoSuchMethodError: method not found: '" + H.S(this._memberName.__internal$_name) + "'\nReceiver: " + H.S(receiverText) + "\nArguments: [" + actualParameters + "]";
 | 
|        },
 | 
| -      static: {NoSuchMethodError$: function(receiver, memberName, positionalArguments, namedArguments, existingArgumentNames) {
 | 
| +      static: {
 | 
| +        NoSuchMethodError$: function(receiver, memberName, positionalArguments, namedArguments, existingArgumentNames) {
 | 
|            return new P.NoSuchMethodError(receiver, memberName, positionalArguments, namedArguments, existingArgumentNames);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      UnsupportedError: {
 | 
|        "^": "Error;message>",
 | 
| @@ -9850,14 +10159,14 @@
 | 
|            ++i;
 | 
|          }
 | 
|          t2 = J.getInterceptor$n(lineEnd);
 | 
| -        if (J.$gt$n(t2.$sub(lineEnd, lineStart), 78))
 | 
| +        if (t2.$sub(lineEnd, lineStart) > 78)
 | 
|            if (offset - lineStart < 75) {
 | 
|              end = lineStart + 75;
 | 
|              start = lineStart;
 | 
|              prefix = "";
 | 
|              postfix = "...";
 | 
|            } else {
 | 
| -            if (J.$lt$n(t2.$sub(lineEnd, offset), 75)) {
 | 
| +            if (t2.$sub(lineEnd, offset) < 75) {
 | 
|                start = t2.$sub(lineEnd, 75);
 | 
|                end = lineEnd;
 | 
|                postfix = "";
 | 
| @@ -9875,8 +10184,6 @@
 | 
|            postfix = "";
 | 
|          }
 | 
|          slice = t1.substring$2(source, start, end);
 | 
| -        if (typeof start !== "number")
 | 
| -          return H.iae(start);
 | 
|          return report + prefix + slice + postfix + "\n" + C.JSString_methods.$mul(" ", offset - start + prefix.length) + "^\n";
 | 
|        }
 | 
|      },
 | 
| @@ -9887,32 +10194,34 @@
 | 
|        }
 | 
|      },
 | 
|      Expando: {
 | 
| -      "^": "Object;name",
 | 
| +      "^": "Object;name,_jsWeakMapOrKey",
 | 
|        toString$0: function(_) {
 | 
|          return "Expando:" + H.S(this.name);
 | 
|        },
 | 
|        $index: function(_, object) {
 | 
| -        var values = H.Primitives_getProperty(object, "expando$values");
 | 
| -        return values == null ? null : H.Primitives_getProperty(values, this._getKey$0());
 | 
| -      },
 | 
| -      $indexSet: function(_, object, value) {
 | 
| -        var values = H.Primitives_getProperty(object, "expando$values");
 | 
| -        if (values == null) {
 | 
| -          values = new P.Object();
 | 
| -          H.Primitives_setProperty(object, "expando$values", values);
 | 
| +        var t1, values;
 | 
| +        t1 = this._jsWeakMapOrKey;
 | 
| +        if (typeof t1 !== "string") {
 | 
| +          if (object == null || typeof object === "boolean" || typeof object === "number" || typeof object === "string")
 | 
| +            H.throwExpression(P.ArgumentError$value(object, "Expandos are not allowed on strings, numbers, booleans or null", null));
 | 
| +          return t1.get(object);
 | 
|          }
 | 
| -        H.Primitives_setProperty(values, this._getKey$0(), value);
 | 
| +        values = H.Primitives_getProperty(object, "expando$values");
 | 
| +        return values == null ? null : H.Primitives_getProperty(values, t1);
 | 
|        },
 | 
| -      _getKey$0: function() {
 | 
| -        var key, t1;
 | 
| -        key = H.Primitives_getProperty(this, "expando$key");
 | 
| -        if (key == null) {
 | 
| -          t1 = $.Expando__keyCount;
 | 
| -          $.Expando__keyCount = t1 + 1;
 | 
| -          key = "expando$key$" + t1;
 | 
| -          H.Primitives_setProperty(this, "expando$key", key);
 | 
| +      $indexSet: function(_, object, value) {
 | 
| +        var t1, values;
 | 
| +        t1 = this._jsWeakMapOrKey;
 | 
| +        if (typeof t1 !== "string")
 | 
| +          t1.set(object, value);
 | 
| +        else {
 | 
| +          values = H.Primitives_getProperty(object, "expando$values");
 | 
| +          if (values == null) {
 | 
| +            values = new P.Object();
 | 
| +            H.Primitives_setProperty(object, "expando$values", values);
 | 
| +          }
 | 
| +          H.Primitives_setProperty(values, t1, value);
 | 
|          }
 | 
| -        return key;
 | 
|        }
 | 
|      },
 | 
|      $int: {
 | 
| @@ -9924,8 +10233,8 @@
 | 
|        map$1: function(_, f) {
 | 
|          return H.MappedIterable_MappedIterable(this, f, H.getRuntimeTypeArgument(this, "Iterable", 0), null);
 | 
|        },
 | 
| -      where$1: ["super$Iterable$where", function(_, f) {
 | 
| -        return H.setRuntimeTypeInfo(new H.WhereIterable(this, f), [H.getRuntimeTypeArgument(this, "Iterable", 0)]);
 | 
| +      where$1: ["super$Iterable$where", function(_, test) {
 | 
| +        return H.setRuntimeTypeInfo(new H.WhereIterable(this, test), [H.getRuntimeTypeArgument(this, "Iterable", 0)]);
 | 
|        }],
 | 
|        contains$1: function(_, element) {
 | 
|          var t1;
 | 
| @@ -9956,7 +10265,7 @@
 | 
|          return !this.get$iterator(this).moveNext$0();
 | 
|        },
 | 
|        get$isNotEmpty: function(_) {
 | 
| -        return this.get$isEmpty(this) !== true;
 | 
| +        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)]);
 | 
| @@ -10067,7 +10376,8 @@
 | 
|          var t1 = this._contents;
 | 
|          return t1.charCodeAt(0) == 0 ? t1 : t1;
 | 
|        },
 | 
| -      static: {StringBuffer__writeAll: function(string, objects, separator) {
 | 
| +      static: {
 | 
| +        StringBuffer__writeAll: function(string, objects, separator) {
 | 
|            var iterator = J.get$iterator$ax(objects);
 | 
|            if (!iterator.moveNext$0())
 | 
|              return string;
 | 
| @@ -10081,13 +10391,14 @@
 | 
|                string = string + separator + H.S(iterator.get$current());
 | 
|            }
 | 
|            return string;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      Symbol: {
 | 
|        "^": "Object;"
 | 
|      },
 | 
|      Uri: {
 | 
| -      "^": "Object;scheme,_userInfo,_host,_port,_path,_query,_fragment,_pathSegments,_queryParameters",
 | 
| +      "^": "Object;scheme,_userInfo,_host,_port,_path,_query,_fragment,_pathSegments,_queryParameters,_queryParameterLists",
 | 
|        get$host: function(_) {
 | 
|          var t1 = this._host;
 | 
|          if (t1 == null)
 | 
| @@ -10110,7 +10421,7 @@
 | 
|          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 : J.JSArray_markUnmodifiableList(P.List_List$from(H.setRuntimeTypeInfo(new H.MappedListIterable(pathToSplit.split("/"), P.core_Uri_decodeComponent$closure()), [null, null]), false, P.String));
 | 
| +        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);
 | 
|          this._pathSegments = result;
 | 
|          return result;
 | 
|        },
 | 
| @@ -10280,7 +10591,8 @@
 | 
|          t5 = this._fragment;
 | 
|          return t1.call$2(this.scheme, t1.call$2(this._userInfo, t1.call$2(t2, t1.call$2(t3, t1.call$2(this._path, t1.call$2(t4, t1.call$2(t5 == null ? "" : t5, 1)))))));
 | 
|        },
 | 
| -      static: {Uri_Uri: function(fragment, host, path, pathSegments, port, query, queryParameters, scheme, userInfo) {
 | 
| +      static: {
 | 
| +        Uri_Uri: function(fragment, host, path, pathSegments, port, query, queryParameters, scheme, userInfo) {
 | 
|            var isFile, t1, t2;
 | 
|            scheme = P.Uri__makeScheme(scheme, 0, scheme.length);
 | 
|            userInfo = P.Uri__makeUserInfo(userInfo, 0, userInfo.length);
 | 
| @@ -10298,15 +10610,17 @@
 | 
|            t1 = host == null;
 | 
|            t2 = path == null ? 0 : path.length;
 | 
|            path = P.Uri__makePath(path, 0, t2, pathSegments, scheme, !t1);
 | 
| -          return new P.Uri(scheme, userInfo, host, port, scheme.length === 0 && t1 && !C.JSString_methods.startsWith$1(path, "/") ? P.Uri__normalizeRelativePath(path) : P.Uri__removeDotSegments(path), query, fragment, null, null);
 | 
| -        }, Uri__defaultPort: function(scheme) {
 | 
| +          return new P.Uri(scheme, userInfo, host, port, scheme.length === 0 && t1 && !C.JSString_methods.startsWith$1(path, "/") ? P.Uri__normalizeRelativePath(path) : P.Uri__removeDotSegments(path), query, fragment, null, null, null);
 | 
| +        },
 | 
| +        Uri__defaultPort: function(scheme) {
 | 
|            if (scheme === "http")
 | 
|              return 80;
 | 
|            if (scheme === "https")
 | 
|              return 443;
 | 
|            return 0;
 | 
| -        }, Uri_parse: function(uri, start, end) {
 | 
| -          var t1, pathStart, state, t2, i, t3, $char, index, path, numberSignIndex, t4, query, fragment;
 | 
| +        },
 | 
| +        Uri_parse: function(uri, start, end) {
 | 
| +          var t1, pathStart, state, t2, i, t3, $char, index, path, numberSignIndex, query, fragment;
 | 
|            t1 = {};
 | 
|            t1.end = end;
 | 
|            t1.scheme = "";
 | 
| @@ -10344,6 +10658,8 @@
 | 
|                  P.Uri__fail(uri, start, "Invalid empty scheme");
 | 
|                t1.scheme = P.Uri__makeScheme(uri, start, i);
 | 
|                ++i;
 | 
| +              if (t1.scheme === "data")
 | 
| +                return P.UriData__parse(uri, i, null).get$uri();
 | 
|                if (i === t1.end) {
 | 
|                  t1.$char = -1;
 | 
|                  state = 0;
 | 
| @@ -10369,7 +10685,7 @@
 | 
|                t1.$char = -1;
 | 
|                state = 0;
 | 
|              } else {
 | 
| -              $char = t2.codeUnitAt$1(uri, t1.index);
 | 
| +              $char = t2.codeUnitAt$1(uri, index);
 | 
|                t1.$char = $char;
 | 
|                if ($char === 47) {
 | 
|                  t1.index = J.$add$ns(t1.index, 1);
 | 
| @@ -10381,8 +10697,15 @@
 | 
|              }
 | 
|            }
 | 
|            if (state === 1)
 | 
| -            for (; index = J.$add$ns(t1.index, 1), t1.index = index, J.$lt$n(index, t1.end);) {
 | 
| -              $char = t2.codeUnitAt$1(uri, t1.index);
 | 
| +            while (true) {
 | 
| +              index = J.$add$ns(t1.index, 1);
 | 
| +              t1.index = index;
 | 
| +              t3 = t1.end;
 | 
| +              if (typeof t3 !== "number")
 | 
| +                return H.iae(t3);
 | 
| +              if (!(index < t3))
 | 
| +                break;
 | 
| +              $char = t2.codeUnitAt$1(uri, index);
 | 
|                t1.$char = $char;
 | 
|                if ($char === 63 || $char === 35)
 | 
|                  break;
 | 
| @@ -10394,8 +10717,10 @@
 | 
|            if (t3 === 63) {
 | 
|              i = J.$add$ns(t1.index, 1);
 | 
|              while (true) {
 | 
| -              t3 = J.getInterceptor$n(i);
 | 
| -              if (!t3.$lt(i, t1.end)) {
 | 
| +              t3 = t1.end;
 | 
| +              if (typeof t3 !== "number")
 | 
| +                return H.iae(t3);
 | 
| +              if (!(i < t3)) {
 | 
|                  numberSignIndex = -1;
 | 
|                  break;
 | 
|                }
 | 
| @@ -10403,43 +10728,47 @@
 | 
|                  numberSignIndex = i;
 | 
|                  break;
 | 
|                }
 | 
| -              i = t3.$add(i, 1);
 | 
| +              ++i;
 | 
|              }
 | 
| -            t2 = J.getInterceptor$n(numberSignIndex);
 | 
| -            t3 = t2.$lt(numberSignIndex, 0);
 | 
| -            t4 = t1.index;
 | 
| -            if (t3) {
 | 
| -              query = P.Uri__makeQuery(uri, J.$add$ns(t4, 1), t1.end, null);
 | 
| +            t2 = t1.index;
 | 
| +            if (numberSignIndex < 0) {
 | 
| +              query = P.Uri__makeQuery(uri, J.$add$ns(t2, 1), t1.end, null);
 | 
|                fragment = null;
 | 
|              } else {
 | 
| -              query = P.Uri__makeQuery(uri, J.$add$ns(t4, 1), numberSignIndex, null);
 | 
| -              fragment = P.Uri__makeFragment(uri, t2.$add(numberSignIndex, 1), t1.end);
 | 
| +              query = P.Uri__makeQuery(uri, J.$add$ns(t2, 1), numberSignIndex, null);
 | 
| +              fragment = P.Uri__makeFragment(uri, numberSignIndex + 1, t1.end);
 | 
|              }
 | 
|            } else {
 | 
|              fragment = t3 === 35 ? P.Uri__makeFragment(uri, J.$add$ns(t1.index, 1), t1.end) : null;
 | 
|              query = null;
 | 
|            }
 | 
| -          return new P.Uri(t1.scheme, t1.userinfo, t1.host, t1.port, path, query, fragment, null, null);
 | 
| -        }, Uri__fail: function(uri, index, message) {
 | 
| +          return new P.Uri(t1.scheme, t1.userinfo, t1.host, t1.port, path, query, fragment, null, null, null);
 | 
| +        },
 | 
| +        Uri__fail: function(uri, index, message) {
 | 
|            throw H.wrapException(new P.FormatException(message, uri, index));
 | 
| -        }, Uri_Uri$file: function(path, windows) {
 | 
| +        },
 | 
| +        Uri_Uri$file: function(path, windows) {
 | 
|            return windows ? P.Uri__makeWindowsFileUrl(path, false) : P.Uri__makeFileUri(path, false);
 | 
| -        }, Uri_base: function() {
 | 
| +        },
 | 
| +        Uri_base: function() {
 | 
|            var uri = H.Primitives_currentUri();
 | 
|            if (uri != null)
 | 
|              return P.Uri_parse(uri, 0, null);
 | 
|            throw H.wrapException(new P.UnsupportedError("'Uri.base' is not supported"));
 | 
| -        }, Uri__checkNonWindowsPathReservedCharacters: function(segments, argumentError) {
 | 
| +        },
 | 
| +        Uri__checkNonWindowsPathReservedCharacters: function(segments, argumentError) {
 | 
|            C.JSArray_methods.forEach$1(segments, new P.Uri__checkNonWindowsPathReservedCharacters_closure(false));
 | 
| -        }, Uri__checkWindowsPathReservedCharacters: function(segments, argumentError, firstSegment) {
 | 
| +        },
 | 
| +        Uri__checkWindowsPathReservedCharacters: function(segments, argumentError, firstSegment) {
 | 
|            var t1;
 | 
|            for (t1 = H.SubListIterable$(segments, firstSegment, null, H.getTypeArgumentByIndex(segments, 0)), t1 = new H.ListIterator(t1, t1.get$length(t1), 0, null); t1.moveNext$0();)
 | 
| -            if (J.contains$1$asx(t1._current, new H.JSSyntaxRegExp("[\"*/:<>?\\\\|]", H.JSSyntaxRegExp_makeNative("[\"*/:<>?\\\\|]", false, true, false), null, null)) === true)
 | 
| +            if (J.contains$1$asx(t1._current, new H.JSSyntaxRegExp('["*/:<>?\\\\|]', H.JSSyntaxRegExp_makeNative('["*/:<>?\\\\|]', false, true, false), null, null)) === true)
 | 
|                if (argumentError)
 | 
|                  throw H.wrapException(P.ArgumentError$("Illegal character in path"));
 | 
|                else
 | 
|                  throw H.wrapException(new P.UnsupportedError("Illegal character in path"));
 | 
| -        }, Uri__checkWindowsDriveLetter: function(charCode, argumentError) {
 | 
| +        },
 | 
| +        Uri__checkWindowsDriveLetter: function(charCode, argumentError) {
 | 
|            var t1;
 | 
|            if (!(65 <= charCode && charCode <= 90))
 | 
|              t1 = 97 <= charCode && charCode <= 122;
 | 
| @@ -10451,7 +10780,8 @@
 | 
|              throw H.wrapException(P.ArgumentError$("Illegal drive letter " + P.String_String$fromCharCode(charCode)));
 | 
|            else
 | 
|              throw H.wrapException(new P.UnsupportedError("Illegal drive letter " + P.String_String$fromCharCode(charCode)));
 | 
| -        }, Uri__makeFileUri: function(path, slashTerminated) {
 | 
| +        },
 | 
| +        Uri__makeFileUri: function(path, slashTerminated) {
 | 
|            var t1, segments;
 | 
|            t1 = J.getInterceptor$s(path);
 | 
|            segments = t1.split$1(path, "/");
 | 
| @@ -10459,7 +10789,8 @@
 | 
|              return P.Uri_Uri(null, null, null, segments, null, null, null, "file", "");
 | 
|            else
 | 
|              return P.Uri_Uri(null, null, null, segments, null, null, null, "", "");
 | 
| -        }, Uri__makeWindowsFileUrl: function(path, slashTerminated) {
 | 
| +        },
 | 
| +        Uri__makeWindowsFileUrl: function(path, slashTerminated) {
 | 
|            var t1, pathSegments, pathStart, hostPart;
 | 
|            t1 = J.getInterceptor$s(path);
 | 
|            if (t1.startsWith$1(path, "\\\\?\\"))
 | 
| @@ -10499,11 +10830,13 @@
 | 
|              P.Uri__checkWindowsPathReservedCharacters(pathSegments, true, 0);
 | 
|              return P.Uri_Uri(null, null, null, pathSegments, null, null, null, "", "");
 | 
|            }
 | 
| -        }, Uri__makePort: function(port, scheme) {
 | 
| +        },
 | 
| +        Uri__makePort: function(port, scheme) {
 | 
|            if (port != null && port === P.Uri__defaultPort(scheme))
 | 
|              return;
 | 
|            return port;
 | 
| -        }, Uri__makeHost: function(host, start, end, strictIPv6) {
 | 
| +        },
 | 
| +        Uri__makeHost: function(host, start, end, strictIPv6) {
 | 
|            var t1, t2, t3, i;
 | 
|            if (host == null)
 | 
|              return;
 | 
| @@ -10525,7 +10858,8 @@
 | 
|                  return "[" + H.S(host) + "]";
 | 
|                }
 | 
|            return P.Uri__normalizeRegName(host, start, end);
 | 
| -        }, Uri__normalizeRegName: function(host, start, end) {
 | 
| +        },
 | 
| +        Uri__normalizeRegName: function(host, start, end) {
 | 
|            var t1, index, sectionStart, buffer, isNormalized, t2, $char, replacement, t3, slice, sourceLength, tail;
 | 
|            for (t1 = J.getInterceptor$s(host), index = start, sectionStart = index, buffer = null, isNormalized = true; t2 = J.getInterceptor$n(index), t2.$lt(index, end);) {
 | 
|              $char = t1.codeUnitAt$1(host, index);
 | 
| @@ -10615,7 +10949,8 @@
 | 
|            }
 | 
|            t1 = buffer._contents;
 | 
|            return t1.charCodeAt(0) == 0 ? t1 : t1;
 | 
| -        }, Uri__makeScheme: function(scheme, start, end) {
 | 
| +        },
 | 
| +        Uri__makeScheme: function(scheme, start, end) {
 | 
|            var t1, lowerCase, i, containsUpperCase, codeUnit, t2;
 | 
|            if (start === end)
 | 
|              return "";
 | 
| @@ -10643,11 +10978,13 @@
 | 
|            }
 | 
|            scheme = t1.substring$2(scheme, start, end);
 | 
|            return containsUpperCase ? scheme.toLowerCase() : scheme;
 | 
| -        }, Uri__makeUserInfo: function(userInfo, start, end) {
 | 
| +        },
 | 
| +        Uri__makeUserInfo: function(userInfo, start, end) {
 | 
|            if (userInfo == null)
 | 
|              return "";
 | 
|            return P.Uri__normalize(userInfo, start, end, C.List_gRj);
 | 
| -        }, Uri__makePath: function(path, start, end, pathSegments, scheme, hasAuthority) {
 | 
| +        },
 | 
| +        Uri__makePath: function(path, start, end, pathSegments, scheme, hasAuthority) {
 | 
|            var isFile, ensureLeadingSlash, t1, result;
 | 
|            isFile = scheme === "file";
 | 
|            ensureLeadingSlash = isFile || hasAuthority;
 | 
| @@ -10669,31 +11006,34 @@
 | 
|            } else if (ensureLeadingSlash && !C.JSString_methods.startsWith$1(result, "/"))
 | 
|              result = "/" + result;
 | 
|            return P.Uri__normalizePath(result, scheme, hasAuthority);
 | 
| -        }, Uri__normalizePath: function(path, scheme, hasAuthority) {
 | 
| +        },
 | 
| +        Uri__normalizePath: function(path, scheme, hasAuthority) {
 | 
|            if (scheme.length === 0 && !hasAuthority && !C.JSString_methods.startsWith$1(path, "/"))
 | 
|              return P.Uri__normalizeRelativePath(path);
 | 
|            return P.Uri__removeDotSegments(path);
 | 
| -        }, Uri__makeQuery: function(query, start, end, queryParameters) {
 | 
| +        },
 | 
| +        Uri__makeQuery: function(query, start, end, queryParameters) {
 | 
|            var t1, t2, result;
 | 
|            t1 = {};
 | 
|            t2 = query == null;
 | 
|            if (t2 && true)
 | 
|              return;
 | 
|            t2 = !t2;
 | 
| -          if (t2)
 | 
| -            ;
 | 
| +          t2;
 | 
|            if (t2)
 | 
|              return P.Uri__normalize(query, start, end, C.List_CVk);
 | 
|            result = new P.StringBuffer("");
 | 
| -          t1.first = true;
 | 
| -          C.JSNull_methods.forEach$1(queryParameters, new P.Uri__makeQuery_closure(t1, result));
 | 
| +          t1.separator = "";
 | 
| +          C.JSNull_methods.forEach$1(queryParameters, new P.Uri__makeQuery_closure(new P.Uri__makeQuery_writeParameter(t1, result)));
 | 
|            t1 = result._contents;
 | 
|            return t1.charCodeAt(0) == 0 ? t1 : t1;
 | 
| -        }, Uri__makeFragment: function(fragment, start, end) {
 | 
| +        },
 | 
| +        Uri__makeFragment: function(fragment, start, end) {
 | 
|            if (fragment == null)
 | 
|              return;
 | 
|            return P.Uri__normalize(fragment, start, end, C.List_CVk);
 | 
| -        }, Uri__normalizeEscape: function(source, index, lowerCase) {
 | 
| +        },
 | 
| +        Uri__normalizeEscape: function(source, index, lowerCase) {
 | 
|            var t1, t2, firstDigit, secondDigit, firstDigitValue, secondDigitValue, value, t3;
 | 
|            t1 = J.getInterceptor$ns(index);
 | 
|            t2 = J.getInterceptor$asx(source);
 | 
| @@ -10718,7 +11058,8 @@
 | 
|            if (firstDigit >= 97 || secondDigit >= 97)
 | 
|              return t2.substring$2(source, index, t1.$add(index, 3)).toUpperCase();
 | 
|            return;
 | 
| -        }, Uri__parseHexDigit: function($char) {
 | 
| +        },
 | 
| +        Uri__parseHexDigit: function($char) {
 | 
|            var digit, lowerCase;
 | 
|            digit = $char ^ 48;
 | 
|            if (digit <= 9)
 | 
| @@ -10727,7 +11068,8 @@
 | 
|            if (97 <= lowerCase && lowerCase <= 102)
 | 
|              return lowerCase - 87;
 | 
|            return -1;
 | 
| -        }, Uri__escapeChar: function($char) {
 | 
| +        },
 | 
| +        Uri__escapeChar: function($char) {
 | 
|            var codeUnits, flag, encodedBytes, t1, index, $byte, t2, t3;
 | 
|            if ($char < 128) {
 | 
|              codeUnits = new Array(3);
 | 
| @@ -10770,7 +11112,8 @@
 | 
|              }
 | 
|            }
 | 
|            return P.String_String$fromCharCodes(codeUnits, 0, null);
 | 
| -        }, Uri__normalize: function(component, start, end, charTable) {
 | 
| +        },
 | 
| +        Uri__normalize: function(component, start, end, charTable) {
 | 
|            var t1, index, sectionStart, buffer, t2, $char, t3, replacement, sourceLength, tail;
 | 
|            for (t1 = J.getInterceptor$s(component), index = start, sectionStart = index, buffer = null; t2 = J.getInterceptor$n(index), t2.$lt(index, end);) {
 | 
|              $char = t1.codeUnitAt$1(component, index);
 | 
| @@ -10838,11 +11181,13 @@
 | 
|              buffer._contents += t1.substring$2(component, sectionStart, end);
 | 
|            t1 = buffer._contents;
 | 
|            return t1.charCodeAt(0) == 0 ? t1 : t1;
 | 
| -        }, Uri__mayContainDotSegments: function(path) {
 | 
| +        },
 | 
| +        Uri__mayContainDotSegments: function(path) {
 | 
|            if (C.JSString_methods.startsWith$1(path, "."))
 | 
|              return true;
 | 
|            return C.JSString_methods.indexOf$1(path, "/.") !== -1;
 | 
| -        }, Uri__removeDotSegments: function(path) {
 | 
| +        },
 | 
| +        Uri__removeDotSegments: function(path) {
 | 
|            var output, t1, t2, appendSlash, _i, segment, t3;
 | 
|            if (!P.Uri__mayContainDotSegments(path))
 | 
|              return path;
 | 
| @@ -10869,7 +11214,8 @@
 | 
|            if (appendSlash)
 | 
|              output.push("");
 | 
|            return C.JSArray_methods.join$1(output, "/");
 | 
| -        }, Uri__normalizeRelativePath: function(path) {
 | 
| +        },
 | 
| +        Uri__normalizeRelativePath: function(path) {
 | 
|            var output, t1, t2, appendSlash, _i, segment;
 | 
|            if (!P.Uri__mayContainDotSegments(path))
 | 
|              return path;
 | 
| @@ -10908,18 +11254,22 @@
 | 
|            if (appendSlash || J.$eq$(C.JSArray_methods.get$last(output), ".."))
 | 
|              output.push("");
 | 
|            return C.JSArray_methods.join$1(output, "/");
 | 
| -        }, Uri_decodeComponent: [function(encodedComponent) {
 | 
| +        },
 | 
| +        Uri_decodeComponent: [function(encodedComponent) {
 | 
|            return P.Uri__uriDecode(encodedComponent, 0, J.get$length$asx(encodedComponent), C.Utf8Codec_false, false);
 | 
| -        }, "call$1", "core_Uri_decodeComponent$closure", 2, 0, 66, 38], Uri_splitQueryString: function(query, encoding) {
 | 
| +        }, "call$1", "core_Uri_decodeComponent$closure", 2, 0, 64, 39],
 | 
| +        Uri_splitQueryString: function(query, encoding) {
 | 
|            return C.JSArray_methods.fold$2(query.split("&"), P.LinkedHashMap__makeEmpty(), new P.Uri_splitQueryString_closure(encoding));
 | 
| -        }, Uri_parseIPv4Address: function(host) {
 | 
| +        },
 | 
| +        Uri_parseIPv4Address: function(host) {
 | 
|            var t1, bytes;
 | 
|            t1 = new P.Uri_parseIPv4Address_error();
 | 
|            bytes = host.split(".");
 | 
|            if (bytes.length !== 4)
 | 
|              t1.call$1("IPv4 address should contain exactly 4 parts");
 | 
|            return H.setRuntimeTypeInfo(new H.MappedListIterable(bytes, new P.Uri_parseIPv4Address_closure(t1)), [null, null]).toList$0(0);
 | 
| -        }, Uri_parseIPv6Address: function(host, start, end) {
 | 
| +        },
 | 
| +        Uri_parseIPv6Address: function(host, start, end) {
 | 
|            var error, parseHex, parts, partStart, last, i, wildcardSeen, t1, atEnd, isLastWildcard, exception, t2, bytes, index, value, wildCardLength, j;
 | 
|            if (end == null)
 | 
|              end = J.get$length$asx(host);
 | 
| @@ -10980,7 +11330,7 @@
 | 
|                error.call$1("an address with a wildcard must have less than 7 parts");
 | 
|            } else if (J.get$length$asx(parts) !== 8)
 | 
|              error.call$1("an address without a wildcard must contain exactly 8 parts");
 | 
| -          bytes = H.setRuntimeTypeInfo(new Array(16), [P.$int]);
 | 
| +          bytes = new Uint8Array(16);
 | 
|            i = 0;
 | 
|            index = 0;
 | 
|            while (true) {
 | 
| @@ -11018,7 +11368,8 @@
 | 
|              ++i;
 | 
|            }
 | 
|            return bytes;
 | 
| -        }, Uri__uriEncode: function(canonicalTable, text, encoding, spaceToPlus) {
 | 
| +        },
 | 
| +        Uri__uriEncode: function(canonicalTable, text, encoding, spaceToPlus) {
 | 
|            var result, bytes, t1, i, t2, $byte, t3;
 | 
|            if (encoding === C.Utf8Codec_false && $.$get$Uri__needsNoEncoding()._nativeRegExp.test(H.checkString(text)))
 | 
|              return text;
 | 
| @@ -11048,7 +11399,8 @@
 | 
|              }
 | 
|            }
 | 
|            return t2.charCodeAt(0) == 0 ? t2 : t2;
 | 
| -        }, Uri__hexCharPairToByte: function(s, pos) {
 | 
| +        },
 | 
| +        Uri__hexCharPairToByte: function(s, pos) {
 | 
|            var t1, $byte, i, charCode;
 | 
|            for (t1 = J.getInterceptor$s(s), $byte = 0, i = 0; i < 2; ++i) {
 | 
|              charCode = t1.codeUnitAt$1(s, pos + i);
 | 
| @@ -11063,7 +11415,8 @@
 | 
|              }
 | 
|            }
 | 
|            return $byte;
 | 
| -        }, Uri__uriDecode: function(text, start, end, encoding, plusToSpace) {
 | 
| +        },
 | 
| +        Uri__uriDecode: function(text, start, end, encoding, plusToSpace) {
 | 
|            var t1, i, simple, codeUnit, t2, bytes;
 | 
|            if (typeof end !== "number")
 | 
|              return H.iae(end);
 | 
| @@ -11118,21 +11471,23 @@
 | 
|              }
 | 
|            }
 | 
|            return new P.Utf8Decoder(false).convert$1(bytes);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      Uri_parse_parseAuth: {
 | 
|        "^": "Closure:2;_box_0,uri,EOI",
 | 
|        call$0: function() {
 | 
| -        var t1, authStart, t2, t3, $char, lastColon, lastAt, char0, endBracket, hostEnd, t4, hostStart, i, portNumber, digit;
 | 
| +        var t1, hostStart, t2, t3, $char, lastColon, lastAt, char0, endBracket, hostEnd, t4, t5, t6, i, portNumber, digit;
 | 
|          t1 = this._box_0;
 | 
| -        if (J.$eq$(t1.index, t1.end)) {
 | 
| +        hostStart = t1.index;
 | 
| +        t2 = t1.end;
 | 
| +        if (hostStart == null ? t2 == null : hostStart === t2) {
 | 
|            t1.$char = this.EOI;
 | 
|            return;
 | 
|          }
 | 
| -        authStart = t1.index;
 | 
|          t2 = this.uri;
 | 
|          t3 = J.getInterceptor$s(t2);
 | 
| -        t1.$char = t3.codeUnitAt$1(t2, authStart);
 | 
| +        t1.$char = t3.codeUnitAt$1(t2, hostStart);
 | 
|          for ($char = this.EOI, lastColon = -1, lastAt = -1; J.$lt$n(t1.index, t1.end);) {
 | 
|            char0 = t3.codeUnitAt$1(t2, t1.index);
 | 
|            t1.$char = char0;
 | 
| @@ -11145,7 +11500,7 @@
 | 
|              lastColon = t1.index;
 | 
|            else if (char0 === 91) {
 | 
|              endBracket = t3.indexOf$2(t2, "]", J.$add$ns(t1.index, 1));
 | 
| -            if (J.$eq$(endBracket, -1)) {
 | 
| +            if (endBracket === -1) {
 | 
|                t1.index = t1.end;
 | 
|                t1.$char = $char;
 | 
|                lastColon = -1;
 | 
| @@ -11160,20 +11515,31 @@
 | 
|          hostEnd = t1.index;
 | 
|          t4 = J.getInterceptor$n(lastAt);
 | 
|          if (t4.$ge(lastAt, 0)) {
 | 
| -          t1.userinfo = P.Uri__makeUserInfo(t2, authStart, lastAt);
 | 
| +          t1.userinfo = P.Uri__makeUserInfo(t2, hostStart, lastAt);
 | 
|            hostStart = t4.$add(lastAt, 1);
 | 
| -        } else
 | 
| -          hostStart = authStart;
 | 
| +        }
 | 
|          t4 = J.getInterceptor$n(lastColon);
 | 
|          if (t4.$ge(lastColon, 0)) {
 | 
| -          if (J.$lt$n(t4.$add(lastColon, 1), t1.index))
 | 
| -            for (i = t4.$add(lastColon, 1), portNumber = 0; t4 = J.getInterceptor$n(i), t4.$lt(i, t1.index); i = t4.$add(i, 1)) {
 | 
| +          t5 = t4.$add(lastColon, 1);
 | 
| +          t6 = t1.index;
 | 
| +          if (typeof t6 !== "number")
 | 
| +            return H.iae(t6);
 | 
| +          if (t5 < t6) {
 | 
| +            i = t4.$add(lastColon, 1);
 | 
| +            portNumber = 0;
 | 
| +            while (true) {
 | 
| +              t4 = t1.index;
 | 
| +              if (typeof t4 !== "number")
 | 
| +                return H.iae(t4);
 | 
| +              if (!(i < t4))
 | 
| +                break;
 | 
|                digit = t3.codeUnitAt$1(t2, i);
 | 
|                if (48 > digit || 57 < digit)
 | 
|                  P.Uri__fail(t2, i, "Invalid port number");
 | 
|                portNumber = portNumber * 10 + (digit - 48);
 | 
| +              ++i;
 | 
|              }
 | 
| -          else
 | 
| +          } else
 | 
|              portNumber = null;
 | 
|            t1.port = P.Uri__makePort(portNumber, t1.scheme);
 | 
|            hostEnd = lastColon;
 | 
| @@ -11197,23 +11563,29 @@
 | 
|        "^": "Closure:0;",
 | 
|        call$1: [function(s) {
 | 
|          return P.Uri__uriEncode(C.List_qg40, s, C.Utf8Codec_false, false);
 | 
| -      }, null, null, 2, 0, null, 39, "call"]
 | 
| +      }, null, null, 2, 0, null, 40, "call"]
 | 
|      },
 | 
| -    Uri__makeQuery_closure: {
 | 
| -      "^": "Closure:3;_box_0,result",
 | 
| +    Uri__makeQuery_writeParameter: {
 | 
| +      "^": "Closure:46;_box_0,result",
 | 
|        call$2: function(key, value) {
 | 
| -        var t1 = this._box_0;
 | 
| -        if (!t1.first)
 | 
| -          this.result._contents += "&";
 | 
| -        t1.first = false;
 | 
| +        var t1, t2;
 | 
|          t1 = this.result;
 | 
| +        t2 = this._box_0;
 | 
| +        t1._contents += t2.separator;
 | 
| +        t2.separator = "&";
 | 
|          t1._contents += H.S(P.Uri__uriEncode(C.List_nxB, key, C.Utf8Codec_false, true));
 | 
| -        if (!value.get$isEmpty(value)) {
 | 
| +        if (value.get$isNotEmpty(value)) {
 | 
|            t1._contents += "=";
 | 
|            t1._contents += H.S(P.Uri__uriEncode(C.List_nxB, value, C.Utf8Codec_false, true));
 | 
|          }
 | 
|        }
 | 
|      },
 | 
| +    Uri__makeQuery_closure: {
 | 
| +      "^": "Closure:3;writeParameter",
 | 
| +      call$2: function(key, value) {
 | 
| +        this.writeParameter.call$2(key, value);
 | 
| +      }
 | 
| +    },
 | 
|      Uri_hashCode_combine: {
 | 
|        "^": "Closure:47;",
 | 
|        call$2: function(part, current) {
 | 
| @@ -11223,16 +11595,15 @@
 | 
|      Uri_splitQueryString_closure: {
 | 
|        "^": "Closure:3;encoding",
 | 
|        call$2: function(map, element) {
 | 
| -        var t1, index, t2, key, value;
 | 
| +        var t1, index, key, value;
 | 
|          t1 = J.getInterceptor$asx(element);
 | 
|          index = t1.indexOf$1(element, "=");
 | 
| -        t2 = J.getInterceptor(index);
 | 
| -        if (t2.$eq(index, -1)) {
 | 
| +        if (index === -1) {
 | 
|            if (!t1.$eq(element, ""))
 | 
|              J.$indexSet$ax(map, P.Uri__uriDecode(element, 0, t1.get$length(element), this.encoding, true), "");
 | 
| -        } else if (!t2.$eq(index, 0)) {
 | 
| +        } else if (index !== 0) {
 | 
|            key = t1.substring$2(element, 0, index);
 | 
| -          value = t1.substring$1(element, t2.$add(index, 1));
 | 
| +          value = t1.substring$1(element, index + 1);
 | 
|            t1 = this.encoding;
 | 
|            J.$indexSet$ax(map, P.Uri__uriDecode(key, 0, key.length, t1, true), P.Uri__uriDecode(value, 0, value.length, t1, true));
 | 
|          }
 | 
| @@ -11254,7 +11625,7 @@
 | 
|          if (t1.$lt($byte, 0) || t1.$gt($byte, 255))
 | 
|            this.error.call$1("each part must be in the range of `0..255`");
 | 
|          return $byte;
 | 
| -      }, null, null, 2, 0, null, 40, "call"]
 | 
| +      }, null, null, 2, 0, null, 41, "call"]
 | 
|      },
 | 
|      Uri_parseIPv6Address_error: {
 | 
|        "^": "Closure:48;host",
 | 
| @@ -11281,7 +11652,27 @@
 | 
|      UriData: {
 | 
|        "^": "Object;_text,_separatorIndices,_uriCache",
 | 
|        get$uri: function() {
 | 
| -        return this._uriCache;
 | 
| +        var t1, t2, t3, queryIndex, query, end;
 | 
| +        t1 = this._uriCache;
 | 
| +        if (t1 != null)
 | 
| +          return t1;
 | 
| +        t1 = this._separatorIndices;
 | 
| +        if (0 >= t1.length)
 | 
| +          return H.ioore(t1, 0);
 | 
| +        t2 = this._text;
 | 
| +        t1 = t1[0] + 1;
 | 
| +        t3 = J.getInterceptor$asx(t2);
 | 
| +        queryIndex = t3.indexOf$2(t2, "?", t1);
 | 
| +        if (queryIndex >= 0) {
 | 
| +          query = t3.substring$1(t2, queryIndex + 1);
 | 
| +          end = queryIndex;
 | 
| +        } else {
 | 
| +          query = null;
 | 
| +          end = null;
 | 
| +        }
 | 
| +        t1 = new P.Uri("data", "", null, null, t3.substring$2(t2, t1, end), query, null, null, null, null);
 | 
| +        this._uriCache = t1;
 | 
| +        return t1;
 | 
|        },
 | 
|        toString$0: function(_) {
 | 
|          var t1, t2;
 | 
| @@ -11289,9 +11680,10 @@
 | 
|          if (0 >= t1.length)
 | 
|            return H.ioore(t1, 0);
 | 
|          t2 = this._text;
 | 
| -        return t1[0] === -1 ? "data:" + t2 : t2;
 | 
| +        return t1[0] === -1 ? "data:" + H.S(t2) : t2;
 | 
|        },
 | 
| -      static: {UriData_UriData$fromUri: function(uri) {
 | 
| +      static: {
 | 
| +        UriData_UriData$fromUri: function(uri) {
 | 
|            if (uri.scheme !== "data")
 | 
|              throw H.wrapException(P.ArgumentError$value(uri, "uri", "Scheme must be 'data'"));
 | 
|            if (uri._host != null)
 | 
| @@ -11301,64 +11693,72 @@
 | 
|            if (uri._query == null)
 | 
|              return P.UriData__parse(uri._path, 0, uri);
 | 
|            return P.UriData__parse(uri.toString$0(0), 5, uri);
 | 
| -        }, UriData__parse: function(text, start, sourceUri) {
 | 
| -          var indices, t1, i, slashIndex, $char, equalsIndex, lastSeparator;
 | 
| +        },
 | 
| +        UriData__parse: function(text, start, sourceUri) {
 | 
| +          var indices, t1, i, slashIndex, $char, t2, equalsIndex, lastSeparator;
 | 
|            indices = [start - 1];
 | 
| -          for (t1 = text.length, i = start, slashIndex = -1, $char = null; i < t1; ++i) {
 | 
| -            $char = C.JSString_methods.codeUnitAt$1(text, i);
 | 
| -            if ($char === 44 || $char === 59)
 | 
| +          t1 = J.getInterceptor$asx(text);
 | 
| +          i = start;
 | 
| +          slashIndex = -1;
 | 
| +          $char = null;
 | 
| +          while (true) {
 | 
| +            t2 = t1.get$length(text);
 | 
| +            if (typeof t2 !== "number")
 | 
| +              return H.iae(t2);
 | 
| +            if (!(i < t2))
 | 
|                break;
 | 
| -            if ($char === 47) {
 | 
| -              if (slashIndex < 0) {
 | 
| -                slashIndex = i;
 | 
| -                continue;
 | 
| +            c$0: {
 | 
| +              $char = t1.codeUnitAt$1(text, i);
 | 
| +              if ($char === 44 || $char === 59)
 | 
| +                break;
 | 
| +              if ($char === 47) {
 | 
| +                if (slashIndex < 0) {
 | 
| +                  slashIndex = i;
 | 
| +                  break c$0;
 | 
| +                }
 | 
| +                throw H.wrapException(new P.FormatException("Invalid MIME type", text, i));
 | 
|                }
 | 
| -              throw H.wrapException(new P.FormatException("Invalid MIME type", text, i));
 | 
|              }
 | 
| +            ++i;
 | 
|            }
 | 
|            if (slashIndex < 0 && i > start)
 | 
|              throw H.wrapException(new P.FormatException("Invalid MIME type", text, i));
 | 
|            for (; $char !== 44;) {
 | 
|              indices.push(i);
 | 
|              ++i;
 | 
| -            for (equalsIndex = -1; i < t1; ++i) {
 | 
| -              $char = C.JSString_methods.codeUnitAt$1(text, i);
 | 
| +            equalsIndex = -1;
 | 
| +            while (true) {
 | 
| +              t2 = t1.get$length(text);
 | 
| +              if (typeof t2 !== "number")
 | 
| +                return H.iae(t2);
 | 
| +              if (!(i < t2))
 | 
| +                break;
 | 
| +              $char = t1.codeUnitAt$1(text, i);
 | 
|                if ($char === 61) {
 | 
|                  if (equalsIndex < 0)
 | 
|                    equalsIndex = i;
 | 
|                } else if ($char === 59 || $char === 44)
 | 
|                  break;
 | 
| +              ++i;
 | 
|              }
 | 
|              if (equalsIndex >= 0)
 | 
|                indices.push(equalsIndex);
 | 
|              else {
 | 
|                lastSeparator = C.JSArray_methods.get$last(indices);
 | 
| -              if ($char !== 44 || i !== lastSeparator + 7 || !C.JSString_methods.startsWith$2(text, "base64", lastSeparator + 1))
 | 
| +              if ($char !== 44 || i !== lastSeparator + 7 || !t1.startsWith$2(text, "base64", lastSeparator + 1))
 | 
|                  throw H.wrapException(new P.FormatException("Expecting '='", text, i));
 | 
|                break;
 | 
|              }
 | 
|            }
 | 
|            indices.push(i);
 | 
|            return new P.UriData(text, indices, sourceUri);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      }
 | 
|    }], ["dart.dom.html", "dart:html",, W, {
 | 
|      "^": "",
 | 
| -    WebSocket_WebSocket: function(url, protocol_OR_protocols) {
 | 
| -      var t1, t2;
 | 
| -      t1 = typeof url !== "string";
 | 
| -      if ((!t1 || url == null) && true)
 | 
| -        return new WebSocket(url);
 | 
| -      t2 = !t1 || url == null;
 | 
| -      if (t2)
 | 
| -        return new WebSocket(url, protocol_OR_protocols);
 | 
| -      t2 = H.checkSubtype(protocol_OR_protocols, "$isList", [P.String], "$asList");
 | 
| -      if (!t2)
 | 
| -        ;
 | 
| -      t1 = !t1 || url == null;
 | 
| -      if (t1)
 | 
| -        return new WebSocket(url, protocol_OR_protocols);
 | 
| -      throw H.wrapException(P.ArgumentError$("Incorrect number or type of arguments"));
 | 
| +    WebSocket_WebSocket: function(url, protocols) {
 | 
| +      return new WebSocket(url);
 | 
|      },
 | 
|      _JenkinsSmiHash_combine: function(hash, value) {
 | 
|        hash = 536870911 & hash + value;
 | 
| @@ -11398,10 +11798,6 @@
 | 
|      },
 | 
|      HtmlElement: {
 | 
|        "^": "Element;",
 | 
| -      $isHtmlElement: 1,
 | 
| -      $isElement: 1,
 | 
| -      $isNode: 1,
 | 
| -      $isObject: 1,
 | 
|        "%": "HTMLAppletElement|HTMLBRElement|HTMLBaseElement|HTMLButtonElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDataListElement|HTMLDetailsElement|HTMLDialogElement|HTMLDirectoryElement|HTMLFieldSetElement|HTMLFontElement|HTMLFrameElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMarqueeElement|HTMLMenuElement|HTMLMenuItemElement|HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLOptGroupElement|HTMLOptionElement|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement|HTMLPictureElement|HTMLPreElement|HTMLProgressElement|HTMLQuoteElement|HTMLShadowElement|HTMLSpanElement|HTMLStyleElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableDataCellElement|HTMLTableElement|HTMLTableHeaderCellElement|HTMLTableRowElement|HTMLTableSectionElement|HTMLTemplateElement|HTMLTextAreaElement|HTMLTitleElement|HTMLUListElement|HTMLUnknownElement;HTMLElement"
 | 
|      },
 | 
|      AnchorElement: {
 | 
| @@ -11443,6 +11839,14 @@
 | 
|        "^": "UIEvent;data=",
 | 
|        "%": "CompositionEvent"
 | 
|      },
 | 
| +    CrossOriginServiceWorkerClient: {
 | 
| +      "^": "EventTarget;origin=",
 | 
| +      postMessage$2: function(receiver, message, transfer) {
 | 
| +        receiver.postMessage(new P._StructuredCloneDart2Js([], []).walk$1(message), transfer);
 | 
| +        return;
 | 
| +      },
 | 
| +      "%": "CrossOriginServiceWorkerClient"
 | 
| +    },
 | 
|      CssStyleDeclaration: {
 | 
|        "^": "Interceptor_CssStyleDeclarationBase;length=",
 | 
|        "%": "CSS2Properties|CSSStyleDeclaration|MSStyleCSSProperties"
 | 
| @@ -11457,6 +11861,10 @@
 | 
|        "^": "HtmlElement;",
 | 
|        "%": ";HTMLDivElement"
 | 
|      },
 | 
| +    Document: {
 | 
| +      "^": "Node;origin=",
 | 
| +      "%": "Document|HTMLDocument|XMLDocument"
 | 
| +    },
 | 
|      DocumentFragment: {
 | 
|        "^": "Node;",
 | 
|        $isInterceptor: 1,
 | 
| @@ -11474,44 +11882,38 @@
 | 
|        "%": "DOMException"
 | 
|      },
 | 
|      DomRectReadOnly: {
 | 
| -      "^": "Interceptor;height=,left=,top=,width=",
 | 
| +      "^": "Interceptor;",
 | 
|        toString$0: function(receiver) {
 | 
|          return "Rectangle (" + H.S(receiver.left) + ", " + H.S(receiver.top) + ") " + H.S(this.get$width(receiver)) + " x " + H.S(this.get$height(receiver));
 | 
|        },
 | 
|        $eq: function(receiver, other) {
 | 
| -        var t1, t2, t3;
 | 
| +        var t1;
 | 
|          if (other == null)
 | 
|            return false;
 | 
|          t1 = J.getInterceptor(other);
 | 
|          if (!t1.$isRectangle)
 | 
|            return false;
 | 
| -        t2 = receiver.left;
 | 
| -        t3 = t1.get$left(other);
 | 
| -        if (t2 == null ? t3 == null : t2 === t3) {
 | 
| -          t2 = receiver.top;
 | 
| -          t3 = t1.get$top(other);
 | 
| -          if (t2 == null ? t3 == null : t2 === t3) {
 | 
| -            t2 = this.get$width(receiver);
 | 
| -            t3 = t1.get$width(other);
 | 
| -            if (t2 == null ? t3 == null : t2 === t3) {
 | 
| -              t2 = this.get$height(receiver);
 | 
| -              t1 = t1.get$height(other);
 | 
| -              t1 = t2 == null ? t1 == null : t2 === t1;
 | 
| -            } else
 | 
| -              t1 = false;
 | 
| -          } else
 | 
| -            t1 = false;
 | 
| -        } else
 | 
| -          t1 = false;
 | 
| -        return t1;
 | 
| +        return receiver.left === t1.get$left(other) && receiver.top === t1.get$top(other) && this.get$width(receiver) === t1.get$width(other) && this.get$height(receiver) === t1.get$height(other);
 | 
|        },
 | 
|        get$hashCode: function(receiver) {
 | 
|          var t1, t2, t3, t4;
 | 
| -        t1 = J.get$hashCode$(receiver.left);
 | 
| -        t2 = J.get$hashCode$(receiver.top);
 | 
| -        t3 = J.get$hashCode$(this.get$width(receiver));
 | 
| -        t4 = J.get$hashCode$(this.get$height(receiver));
 | 
| -        return W._JenkinsSmiHash_finish(W._JenkinsSmiHash_combine(W._JenkinsSmiHash_combine(W._JenkinsSmiHash_combine(W._JenkinsSmiHash_combine(0, t1), t2), t3), t4));
 | 
| +        t1 = receiver.left;
 | 
| +        t2 = receiver.top;
 | 
| +        t3 = this.get$width(receiver);
 | 
| +        t4 = this.get$height(receiver);
 | 
| +        return W._JenkinsSmiHash_finish(W._JenkinsSmiHash_combine(W._JenkinsSmiHash_combine(W._JenkinsSmiHash_combine(W._JenkinsSmiHash_combine(0, t1 & 0x1FFFFFFF), t2 & 0x1FFFFFFF), t3 & 0x1FFFFFFF), t4 & 0x1FFFFFFF));
 | 
| +      },
 | 
| +      get$height: function(receiver) {
 | 
| +        return receiver.height;
 | 
| +      },
 | 
| +      get$left: function(receiver) {
 | 
| +        return receiver.left;
 | 
| +      },
 | 
| +      get$top: function(receiver) {
 | 
| +        return receiver.top;
 | 
| +      },
 | 
| +      get$width: function(receiver) {
 | 
| +        return receiver.width;
 | 
|        },
 | 
|        $isRectangle: 1,
 | 
|        $asRectangle: Isolate.functionThatReturnsNull,
 | 
| @@ -11533,7 +11935,7 @@
 | 
|          return receiver.localName;
 | 
|        },
 | 
|        get$onClick: function(receiver) {
 | 
| -        return H.setRuntimeTypeInfo(new W._ElementEventStreamImpl(receiver, "click", false), [null]);
 | 
| +        return H.setRuntimeTypeInfo(new W._ElementEventStreamImpl(receiver, "click", false), [H.getTypeArgumentByIndex(C.EventStreamProvider_click, 0)]);
 | 
|        },
 | 
|        $isElement: 1,
 | 
|        $isNode: 1,
 | 
| @@ -11555,18 +11957,22 @@
 | 
|          return receiver.stopPropagation();
 | 
|        },
 | 
|        $isEvent: 1,
 | 
| -      "%": "AnimationPlayerEvent|AudioProcessingEvent|AutocompleteErrorEvent|BeforeUnloadEvent|CloseEvent|CustomEvent|DeviceLightEvent|DeviceMotionEvent|DeviceOrientationEvent|ExtendableEvent|FetchEvent|FontFaceSetLoadEvent|GamepadEvent|HashChangeEvent|IDBVersionChangeEvent|InstallEvent|MIDIConnectionEvent|MediaKeyNeededEvent|MediaQueryListEvent|MediaStreamEvent|MediaStreamTrackEvent|MutationEvent|OfflineAudioCompletionEvent|OverflowEvent|PageTransitionEvent|PopStateEvent|ProgressEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|RTCPeerConnectionIceEvent|RelatedEvent|ResourceProgressEvent|SecurityPolicyViolationEvent|SpeechRecognitionEvent|SpeechSynthesisEvent|StorageEvent|TrackEvent|TransitionEvent|WebGLContextEvent|WebKitAnimationEvent|WebKitTransitionEvent|XMLHttpRequestProgressEvent;ClipboardEvent|Event|InputEvent"
 | 
| +      "%": "AnimationEvent|AnimationPlayerEvent|AudioProcessingEvent|AutocompleteErrorEvent|BeforeInstallPromptEvent|BeforeUnloadEvent|ClipboardEvent|CloseEvent|CrossOriginConnectEvent|CustomEvent|DefaultSessionStartEvent|DeviceLightEvent|DeviceMotionEvent|DeviceOrientationEvent|FontFaceSetLoadEvent|GamepadEvent|GeofencingEvent|HashChangeEvent|IDBVersionChangeEvent|MIDIConnectionEvent|MediaEncryptedEvent|MediaQueryListEvent|MediaStreamEvent|MediaStreamTrackEvent|OfflineAudioCompletionEvent|PageTransitionEvent|PopStateEvent|ProgressEvent|PromiseRejectionEvent|RTCDTMFToneChangeEvent|RTCDataChannelEvent|RTCIceCandidateEvent|RTCPeerConnectionIceEvent|RelatedEvent|ResourceProgressEvent|SecurityPolicyViolationEvent|SpeechRecognitionEvent|SpeechSynthesisEvent|StorageEvent|TrackEvent|TransitionEvent|WebGLContextEvent|WebKitTransitionEvent|XMLHttpRequestProgressEvent;Event|InputEvent"
 | 
|      },
 | 
|      EventTarget: {
 | 
|        "^": "Interceptor;",
 | 
| -      _addEventListener$3: function(receiver, type, listener, useCapture) {
 | 
| +      _addEventListener$3: function(receiver, type, listener, capture) {
 | 
|          return receiver.addEventListener(type, H.convertDartClosureToJS(listener, 1), false);
 | 
|        },
 | 
| -      _removeEventListener$3: function(receiver, type, listener, useCapture) {
 | 
| +      _removeEventListener$3: function(receiver, type, listener, capture) {
 | 
|          return receiver.removeEventListener(type, H.convertDartClosureToJS(listener, 1), false);
 | 
|        },
 | 
|        "%": "MediaStream;EventTarget"
 | 
|      },
 | 
| +    ExtendableEvent: {
 | 
| +      "^": "Event;",
 | 
| +      "%": "FetchEvent|NotificationEvent|PeriodicSyncEvent|SyncEvent;ExtendableEvent"
 | 
| +    },
 | 
|      File: {
 | 
|        "^": "Blob;",
 | 
|        $isFile: 1,
 | 
| @@ -11599,7 +12005,7 @@
 | 
|          throw H.wrapException(new P.StateError("No elements"));
 | 
|        },
 | 
|        elementAt$1: function(receiver, index) {
 | 
| -        if (index < 0 || index >= receiver.length)
 | 
| +        if (index >>> 0 !== index || index >= receiver.length)
 | 
|            return H.ioore(receiver, index);
 | 
|          return receiver[index];
 | 
|        },
 | 
| @@ -11609,7 +12015,13 @@
 | 
|        },
 | 
|        $isEfficientLength: 1,
 | 
|        $isJavaScriptIndexingBehavior: 1,
 | 
| +      $asJavaScriptIndexingBehavior: function() {
 | 
| +        return [W.Node];
 | 
| +      },
 | 
|        $isJSIndexable: 1,
 | 
| +      $asJSIndexable: function() {
 | 
| +        return [W.Node];
 | 
| +      },
 | 
|        "%": "HTMLCollection|HTMLFormControlsCollection|HTMLOptionsCollection"
 | 
|      },
 | 
|      Interceptor_ListMixin: {
 | 
| @@ -11633,7 +12045,6 @@
 | 
|        get$contentWindow: function(receiver) {
 | 
|          return W._convertNativeToDart_Window(receiver.contentWindow);
 | 
|        },
 | 
| -      $isHtmlElement: 1,
 | 
|        $isElement: 1,
 | 
|        $isNode: 1,
 | 
|        $isObject: 1,
 | 
| @@ -11694,6 +12105,7 @@
 | 
|          t2.mustCopy = true;
 | 
|          return t2.walk$1(t1);
 | 
|        },
 | 
| +      $isObject: 1,
 | 
|        "%": "MessageEvent"
 | 
|      },
 | 
|      MidiMessageEvent: {
 | 
| @@ -11714,6 +12126,11 @@
 | 
|        "^": "EventTarget;",
 | 
|        "%": "MIDIInput;MIDIPort"
 | 
|      },
 | 
| +    MouseEvent: {
 | 
| +      "^": "UIEvent;",
 | 
| +      $isObject: 1,
 | 
| +      "%": "DragEvent|MouseEvent|PointerEvent|WheelEvent"
 | 
| +    },
 | 
|      Navigator: {
 | 
|        "^": "Interceptor;",
 | 
|        $isInterceptor: 1,
 | 
| @@ -11739,7 +12156,7 @@
 | 
|        },
 | 
|        $isNode: 1,
 | 
|        $isObject: 1,
 | 
| -      "%": "Attr|Document|HTMLDocument|XMLDocument;Node"
 | 
| +      "%": "Attr;Node"
 | 
|      },
 | 
|      NodeList: {
 | 
|        "^": "Interceptor_ListMixin_ImmutableListMixin0;",
 | 
| @@ -11764,7 +12181,7 @@
 | 
|          throw H.wrapException(new P.StateError("No elements"));
 | 
|        },
 | 
|        elementAt$1: function(receiver, index) {
 | 
| -        if (index < 0 || index >= receiver.length)
 | 
| +        if (index >>> 0 !== index || index >= receiver.length)
 | 
|            return H.ioore(receiver, index);
 | 
|          return receiver[index];
 | 
|        },
 | 
| @@ -11774,7 +12191,13 @@
 | 
|        },
 | 
|        $isEfficientLength: 1,
 | 
|        $isJavaScriptIndexingBehavior: 1,
 | 
| +      $asJavaScriptIndexingBehavior: function() {
 | 
| +        return [W.Node];
 | 
| +      },
 | 
|        $isJSIndexable: 1,
 | 
| +      $asJSIndexable: function() {
 | 
| +        return [W.Node];
 | 
| +      },
 | 
|        "%": "NodeList|RadioNodeList"
 | 
|      },
 | 
|      Interceptor_ListMixin0: {
 | 
| @@ -11806,7 +12229,7 @@
 | 
|        "%": "PositionError"
 | 
|      },
 | 
|      PushEvent: {
 | 
| -      "^": "Event;data=",
 | 
| +      "^": "ExtendableEvent;data=",
 | 
|        "%": "PushEvent"
 | 
|      },
 | 
|      ScriptElement: {
 | 
| @@ -11817,6 +12240,21 @@
 | 
|        "^": "HtmlElement;length=",
 | 
|        "%": "HTMLSelectElement"
 | 
|      },
 | 
| +    ServicePortConnectEvent: {
 | 
| +      "^": "ExtendableEvent;origin=",
 | 
| +      "%": "ServicePortConnectEvent"
 | 
| +    },
 | 
| +    ServiceWorkerMessageEvent: {
 | 
| +      "^": "Event;origin=",
 | 
| +      get$data: function(receiver) {
 | 
| +        var t1, t2;
 | 
| +        t1 = receiver.data;
 | 
| +        t2 = new P._AcceptStructuredCloneDart2Js([], [], false);
 | 
| +        t2.mustCopy = true;
 | 
| +        return t2.walk$1(t1);
 | 
| +      },
 | 
| +      "%": "ServiceWorkerMessageEvent"
 | 
| +    },
 | 
|      SourceElement: {
 | 
|        "^": "HtmlElement;src%",
 | 
|        "%": "HTMLSourceElement"
 | 
| @@ -11835,7 +12273,7 @@
 | 
|      },
 | 
|      UIEvent: {
 | 
|        "^": "Event;",
 | 
| -      "%": "DragEvent|FocusEvent|MSPointerEvent|MouseEvent|PointerEvent|SVGZoomEvent|TouchEvent|WheelEvent;UIEvent"
 | 
| +      "%": "FocusEvent|SVGZoomEvent|TouchEvent;UIEvent"
 | 
|      },
 | 
|      WebSocket: {
 | 
|        "^": "EventTarget;",
 | 
| @@ -11953,7 +12391,7 @@
 | 
|          throw H.wrapException(new P.StateError("No elements"));
 | 
|        },
 | 
|        elementAt$1: function(receiver, index) {
 | 
| -        if (index < 0 || index >= receiver.length)
 | 
| +        if (index >>> 0 !== index || index >= receiver.length)
 | 
|            return H.ioore(receiver, index);
 | 
|          return receiver[index];
 | 
|        },
 | 
| @@ -11963,7 +12401,13 @@
 | 
|        },
 | 
|        $isEfficientLength: 1,
 | 
|        $isJavaScriptIndexingBehavior: 1,
 | 
| +      $asJavaScriptIndexingBehavior: function() {
 | 
| +        return [W.Node];
 | 
| +      },
 | 
|        $isJSIndexable: 1,
 | 
| +      $asJSIndexable: function() {
 | 
| +        return [W.Node];
 | 
| +      },
 | 
|        "%": "MozNamedAttrMap|NamedNodeMap"
 | 
|      },
 | 
|      Interceptor_ListMixin1: {
 | 
| @@ -11982,6 +12426,9 @@
 | 
|        },
 | 
|        $isEfficientLength: 1
 | 
|      },
 | 
| +    EventStreamProvider: {
 | 
| +      "^": "Object;_eventType"
 | 
| +    },
 | 
|      _EventStream: {
 | 
|        "^": "Stream;_target,_eventType,_useCapture",
 | 
|        listen$4$cancelOnError$onDone$onError: function(onData, cancelOnError, onDone, onError) {
 | 
| @@ -12106,21 +12553,25 @@
 | 
|          return this.postMessage$3($receiver, message, targetOrigin, null);
 | 
|        },
 | 
|        $isInterceptor: 1,
 | 
| -      static: {_DOMWindowCrossFrame__createSafe: function(w) {
 | 
| +      static: {
 | 
| +        _DOMWindowCrossFrame__createSafe: function(w) {
 | 
|            if (w === window)
 | 
|              return w;
 | 
|            else
 | 
|              return new W._DOMWindowCrossFrame(w);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      _LocationCrossFrame: {
 | 
|        "^": "Object;_location",
 | 
| -      static: {_LocationCrossFrame__createSafe: function($location) {
 | 
| +      static: {
 | 
| +        _LocationCrossFrame__createSafe: function($location) {
 | 
|            if ($location === window.location)
 | 
|              return $location;
 | 
|            else
 | 
|              return new W._LocationCrossFrame($location);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      }
 | 
|    }], ["dart.dom.indexed_db", "dart:indexed_db",, P, {
 | 
|      "^": "",
 | 
| @@ -12136,11 +12587,6 @@
 | 
|        $isInterceptor: 1,
 | 
|        "%": "SVGAElement"
 | 
|      },
 | 
| -    AltGlyphElement: {
 | 
| -      "^": "TextPositioningElement;",
 | 
| -      $isInterceptor: 1,
 | 
| -      "%": "SVGAltGlyphElement"
 | 
| -    },
 | 
|      AnimationElement: {
 | 
|        "^": "SvgElement;",
 | 
|        $isInterceptor: 1,
 | 
| @@ -12264,10 +12710,10 @@
 | 
|      SvgElement: {
 | 
|        "^": "Element;",
 | 
|        get$onClick: function(receiver) {
 | 
| -        return H.setRuntimeTypeInfo(new W._ElementEventStreamImpl(receiver, "click", false), [null]);
 | 
| +        return H.setRuntimeTypeInfo(new W._ElementEventStreamImpl(receiver, "click", false), [H.getTypeArgumentByIndex(C.EventStreamProvider_click, 0)]);
 | 
|        },
 | 
|        $isInterceptor: 1,
 | 
| -      "%": "SVGAltGlyphDefElement|SVGAltGlyphItemElement|SVGComponentTransferFunctionElement|SVGDescElement|SVGDiscardElement|SVGFEDistantLightElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGGlyphElement|SVGHKernElement|SVGMetadataElement|SVGMissingGlyphElement|SVGStopElement|SVGStyleElement|SVGTitleElement|SVGVKernElement;SVGElement"
 | 
| +      "%": "SVGComponentTransferFunctionElement|SVGDescElement|SVGDiscardElement|SVGFEDistantLightElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement|SVGFEMergeNodeElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGMetadataElement|SVGStopElement|SVGStyleElement|SVGTitleElement;SVGElement"
 | 
|      },
 | 
|      SvgSvgElement: {
 | 
|        "^": "GraphicsElement;",
 | 
| @@ -12281,17 +12727,13 @@
 | 
|      },
 | 
|      TextContentElement: {
 | 
|        "^": "GraphicsElement;",
 | 
| -      "%": ";SVGTextContentElement"
 | 
| +      "%": "SVGTSpanElement|SVGTextElement|SVGTextPositioningElement;SVGTextContentElement"
 | 
|      },
 | 
|      TextPathElement: {
 | 
|        "^": "TextContentElement;",
 | 
|        $isInterceptor: 1,
 | 
|        "%": "SVGTextPathElement"
 | 
|      },
 | 
| -    TextPositioningElement: {
 | 
| -      "^": "TextContentElement;",
 | 
| -      "%": "SVGTSpanElement|SVGTextElement;SVGTextPositioningElement"
 | 
| -    },
 | 
|      UseElement: {
 | 
|        "^": "GraphicsElement;",
 | 
|        $isInterceptor: 1,
 | 
| @@ -12317,11 +12759,6 @@
 | 
|        $isInterceptor: 1,
 | 
|        "%": "SVGFEDropShadowElement"
 | 
|      },
 | 
| -    _SVGGlyphRefElement: {
 | 
| -      "^": "SvgElement;",
 | 
| -      $isInterceptor: 1,
 | 
| -      "%": "SVGGlyphRefElement"
 | 
| -    },
 | 
|      _SVGMPathElement: {
 | 
|        "^": "SvgElement;",
 | 
|        $isInterceptor: 1,
 | 
| @@ -12353,7 +12790,7 @@
 | 
|        }
 | 
|        dartArgs = P.List_List$from(J.map$1$ax($arguments, P.js___convertToDart$closure()), true, null);
 | 
|        return P._convertToJS(H.Primitives_applyFunctionWithPositionalArguments(callback, dartArgs));
 | 
| -    }, null, null, 8, 0, null, 16, 41, 0, 42],
 | 
| +    }, null, null, 8, 0, null, 16, 42, 0, 43],
 | 
|      _defineProperty: function(o, $name, value) {
 | 
|        var exception;
 | 
|        try {
 | 
| @@ -12385,7 +12822,7 @@
 | 
|        if (!!t1.$isFunction)
 | 
|          return P._getJsProxy(o, "$dart_jsFunction", new P._convertToJS_closure());
 | 
|        return P._getJsProxy(o, "_$dart_jsObject", new P._convertToJS_closure0($.$get$_dartProxyCtor()));
 | 
| -    }, "call$1", "js___convertToJS$closure", 2, 0, 0, 26],
 | 
| +    }, "call$1", "js___convertToJS$closure", 2, 0, 0, 24],
 | 
|      _getJsProxy: function(o, propertyName, createProxy) {
 | 
|        var jsProxy = P._getOwnProperty(o, propertyName);
 | 
|        if (jsProxy == null) {
 | 
| @@ -12416,7 +12853,7 @@
 | 
|          else
 | 
|            return P._wrapToDart(o);
 | 
|        }
 | 
| -    }, "call$1", "js___convertToDart$closure", 2, 0, 12, 26],
 | 
| +    }, "call$1", "js___convertToDart$closure", 2, 0, 65, 24],
 | 
|      _wrapToDart: function(o) {
 | 
|        if (typeof o == "function")
 | 
|          return P._getDartProxy(o, $.$get$DART_CLOSURE_PROPERTY_NAME(), new P._wrapToDart_closure());
 | 
| @@ -12536,12 +12973,14 @@
 | 
|        setRange$3: function($receiver, start, end, iterable) {
 | 
|          return this.setRange$4($receiver, start, end, iterable, 0);
 | 
|        },
 | 
| -      static: {JsArray__checkRange: function(start, end, $length) {
 | 
| +      static: {
 | 
| +        JsArray__checkRange: function(start, end, $length) {
 | 
|            if (start > $length)
 | 
|              throw H.wrapException(P.RangeError$range(start, 0, $length, null, null));
 | 
|            if (end < start || end > $length)
 | 
|              throw H.wrapException(P.RangeError$range(end, start, $length, null, null));
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      JsObject_ListMixin: {
 | 
|        "^": "JsObject+ListMixin;",
 | 
| @@ -12621,6 +13060,11 @@
 | 
|      }
 | 
|    }], ["dart.typed_data.implementation", "dart:_native_typed_data",, H, {
 | 
|      "^": "",
 | 
| +    _checkLength: function($length) {
 | 
| +      if (typeof $length !== "number" || Math.floor($length) !== $length)
 | 
| +        throw H.wrapException(P.ArgumentError$("Invalid length " + H.S($length)));
 | 
| +      return $length;
 | 
| +    },
 | 
|      _checkValidRange: function(start, end, $length) {
 | 
|        var t1;
 | 
|        if (!(start >>> 0 !== start))
 | 
| @@ -12675,7 +13119,9 @@
 | 
|          receiver.set(source, start);
 | 
|        },
 | 
|        $isJavaScriptIndexingBehavior: 1,
 | 
| -      $isJSIndexable: 1
 | 
| +      $asJavaScriptIndexingBehavior: Isolate.functionThatReturnsNull,
 | 
| +      $isJSIndexable: 1,
 | 
| +      $asJSIndexable: Isolate.functionThatReturnsNull
 | 
|      },
 | 
|      NativeTypedArrayOfDouble: {
 | 
|        "^": "NativeTypedArray_ListMixin_FixedLengthListMixin;",
 | 
| @@ -12899,7 +13345,7 @@
 | 
|        }
 | 
|        throw "Unable to print message: " + String(string);
 | 
|      }
 | 
| -  }], ["frame", "package:stack_trace/src/frame.dart",, S, {
 | 
| +  }], ["", "package:stack_trace/src/frame.dart",, A, {
 | 
|      "^": "",
 | 
|      Frame: {
 | 
|        "^": "Object;uri<,line<,column<,member<",
 | 
| @@ -12931,15 +13377,20 @@
 | 
|        toString$0: function(_) {
 | 
|          return this.get$location(this) + " in " + H.S(this.member);
 | 
|        },
 | 
| -      static: {Frame_Frame$parseVM: function(frame) {
 | 
| -          return S.Frame__catchFormatException(frame, new S.closure0(frame));
 | 
| -        }, Frame_Frame$parseV8: function(frame) {
 | 
| -          return S.Frame__catchFormatException(frame, new S.closure4(frame));
 | 
| -        }, Frame_Frame$parseFirefox: function(frame) {
 | 
| -          return S.Frame__catchFormatException(frame, new S.closure3(frame));
 | 
| -        }, Frame_Frame$parseFriendly: function(frame) {
 | 
| -          return S.Frame__catchFormatException(frame, new S.closure1(frame));
 | 
| -        }, Frame__uriOrPathToUri: function(uriOrPath) {
 | 
| +      static: {
 | 
| +        Frame_Frame$parseVM: function(frame) {
 | 
| +          return A.Frame__catchFormatException(frame, new A.closure0(frame));
 | 
| +        },
 | 
| +        Frame_Frame$parseV8: function(frame) {
 | 
| +          return A.Frame__catchFormatException(frame, new A.closure4(frame));
 | 
| +        },
 | 
| +        Frame_Frame$parseFirefox: function(frame) {
 | 
| +          return A.Frame__catchFormatException(frame, new A.closure3(frame));
 | 
| +        },
 | 
| +        Frame_Frame$parseFriendly: function(frame) {
 | 
| +          return A.Frame__catchFormatException(frame, new A.closure1(frame));
 | 
| +        },
 | 
| +        Frame__uriOrPathToUri: function(uriOrPath) {
 | 
|            var t1 = J.getInterceptor$asx(uriOrPath);
 | 
|            if (t1.contains$1(uriOrPath, $.$get$Frame__uriRegExp()) === true)
 | 
|              return P.Uri_parse(uriOrPath, 0, null);
 | 
| @@ -12950,7 +13401,8 @@
 | 
|            if (t1.contains$1(uriOrPath, "\\") === true)
 | 
|              return $.$get$windows().toUri$1(uriOrPath);
 | 
|            return P.Uri_parse(uriOrPath, 0, null);
 | 
| -        }, Frame__catchFormatException: function(text, body) {
 | 
| +        },
 | 
| +        Frame__catchFormatException: function(text, body) {
 | 
|            var t1, exception;
 | 
|            try {
 | 
|              t1 = body.call$0();
 | 
| @@ -12961,7 +13413,8 @@
 | 
|              else
 | 
|                throw exception;
 | 
|            }
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      closure0: {
 | 
|        "^": "Closure:1;frame",
 | 
| @@ -12969,7 +13422,7 @@
 | 
|          var t1, match, t2, member, uri, lineAndColumn, line;
 | 
|          t1 = this.frame;
 | 
|          if (J.$eq$(t1, "..."))
 | 
| -          return new S.Frame(P.Uri_Uri(null, null, null, null, null, null, null, "", ""), null, null, "...");
 | 
| +          return new A.Frame(P.Uri_Uri(null, null, null, null, null, null, null, "", ""), null, null, "...");
 | 
|          match = $.$get$_vmFrame().firstMatch$1(t1);
 | 
|          if (match == null)
 | 
|            return new N.UnparsedFrame(P.Uri_Uri(null, null, "unparsed", null, null, null, null, "", ""), null, null, false, "unparsed", null, "unparsed", t1);
 | 
| @@ -12986,7 +13439,7 @@
 | 
|            return H.ioore(t1, 3);
 | 
|          lineAndColumn = J.split$1$s(t1[3], ":");
 | 
|          line = lineAndColumn.length > 1 ? H.Primitives_parseInt(lineAndColumn[1], null, null) : null;
 | 
| -        return new S.Frame(uri, line, lineAndColumn.length > 2 ? H.Primitives_parseInt(lineAndColumn[2], null, null) : null, member);
 | 
| +        return new A.Frame(uri, line, lineAndColumn.length > 2 ? H.Primitives_parseInt(lineAndColumn[2], null, null) : null, member);
 | 
|        }
 | 
|      },
 | 
|      closure4: {
 | 
| @@ -12997,7 +13450,7 @@
 | 
|          match = $.$get$_v8Frame().firstMatch$1(t1);
 | 
|          if (match == null)
 | 
|            return new N.UnparsedFrame(P.Uri_Uri(null, null, "unparsed", null, null, null, null, "", ""), null, null, false, "unparsed", null, "unparsed", t1);
 | 
| -        t1 = new S._parseLocation(t1);
 | 
| +        t1 = new A._parseLocation(t1);
 | 
|          t2 = match._match;
 | 
|          t3 = t2.length;
 | 
|          if (2 >= t3)
 | 
| @@ -13028,20 +13481,20 @@
 | 
|            evalMatch = t1.firstMatch$1($location);
 | 
|          }
 | 
|          if (J.$eq$($location, "native"))
 | 
| -          return new S.Frame(P.Uri_parse("native", 0, null), null, null, member);
 | 
| +          return new A.Frame(P.Uri_parse("native", 0, null), null, null, member);
 | 
|          urlMatch = $.$get$_v8UrlLocation().firstMatch$1($location);
 | 
|          if (urlMatch == null)
 | 
|            return new N.UnparsedFrame(P.Uri_Uri(null, null, "unparsed", null, null, null, null, "", ""), null, null, false, "unparsed", null, "unparsed", this.frame);
 | 
|          t1 = urlMatch._match;
 | 
|          if (1 >= t1.length)
 | 
|            return H.ioore(t1, 1);
 | 
| -        t2 = S.Frame__uriOrPathToUri(t1[1]);
 | 
| +        t2 = A.Frame__uriOrPathToUri(t1[1]);
 | 
|          if (2 >= t1.length)
 | 
|            return H.ioore(t1, 2);
 | 
|          t3 = H.Primitives_parseInt(t1[2], null, null);
 | 
|          if (3 >= t1.length)
 | 
|            return H.ioore(t1, 3);
 | 
| -        return new S.Frame(t2, t3, H.Primitives_parseInt(t1[3], null, null), member);
 | 
| +        return new A.Frame(t2, t3, H.Primitives_parseInt(t1[3], null, null), member);
 | 
|        }
 | 
|      },
 | 
|      closure3: {
 | 
| @@ -13055,7 +13508,7 @@
 | 
|          t1 = match._match;
 | 
|          if (3 >= t1.length)
 | 
|            return H.ioore(t1, 3);
 | 
| -        uri = S.Frame__uriOrPathToUri(t1[3]);
 | 
| +        uri = A.Frame__uriOrPathToUri(t1[3]);
 | 
|          t2 = t1.length;
 | 
|          if (1 >= t2)
 | 
|            return H.ioore(t1, 1);
 | 
| @@ -13089,7 +13542,7 @@
 | 
|              return H.ioore(t1, 5);
 | 
|            column = H.Primitives_parseInt(t1[5], null, null);
 | 
|          }
 | 
| -        return new S.Frame(uri, line, column, member);
 | 
| +        return new A.Frame(uri, line, column, member);
 | 
|        }
 | 
|      },
 | 
|      closure1: {
 | 
| @@ -13118,7 +13571,7 @@
 | 
|          column = t2 == null ? null : H.Primitives_parseInt(t2, null, null);
 | 
|          if (4 >= t1.length)
 | 
|            return H.ioore(t1, 4);
 | 
| -        return new S.Frame(uri, line, column, t1[4]);
 | 
| +        return new A.Frame(uri, line, column, t1[4]);
 | 
|        }
 | 
|      }
 | 
|    }], ["", "package:stream_channel/src/guarantee_channel.dart",, K, {
 | 
| @@ -13136,14 +13589,16 @@
 | 
|          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._streamController = P.StreamController_StreamController(null, new K.GuaranteeChannel_closure(_box_0, this), null, null, true, $T);
 | 
|        },
 | 
| -      static: {GuaranteeChannel$: function(innerStream, innerSink, allowSinkErrors, $T) {
 | 
| +      static: {
 | 
| +        GuaranteeChannel$: function(innerStream, innerSink, allowSinkErrors, $T) {
 | 
|            var t1, t2;
 | 
|            t1 = {};
 | 
|            t1.innerStream = innerStream;
 | 
|            t2 = H.setRuntimeTypeInfo(new K.GuaranteeChannel(null, null, null, false), [$T]);
 | 
|            t2.GuaranteeChannel$3$allowSinkErrors(innerSink, true, t1, $T);
 | 
|            return t2;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      GuaranteeChannel_closure: {
 | 
|        "^": "Closure:1;_box_0,$this",
 | 
| @@ -13187,16 +13642,16 @@
 | 
|            throw H.wrapException(new P.StateError("Cannot add event while adding stream."));
 | 
|          if (this._disconnected)
 | 
|            return;
 | 
| -        this._addError$2(error, stackTrace);
 | 
| +        this._guarantee_channel$_addError$2(error, stackTrace);
 | 
|        }, function(error) {
 | 
|          return this.addError$2(error, null);
 | 
| -      }, "addError$1", "call$2", "call$1", "get$addError", 2, 2, 6, 5, 1, 2],
 | 
| -      _addError$2: [function(error, stackTrace) {
 | 
| +      }, "addError$1", "call$2", "call$1", "get$addError", 2, 2, 6, 5, 3, 4],
 | 
| +      _guarantee_channel$_addError$2: [function(error, stackTrace) {
 | 
|          this._inner._async$_target.addError$2(error, stackTrace);
 | 
|          return;
 | 
|        }, function(error) {
 | 
| -        return this._addError$2(error, null);
 | 
| -      }, "_addError$1", "call$2", "call$1", "get$_addError", 2, 2, 6, 5, 1, 2],
 | 
| +        return this._guarantee_channel$_addError$2(error, null);
 | 
| +      }, "_guarantee_channel$_addError$1", "call$2", "call$1", "get$_guarantee_channel$_addError", 2, 2, 6, 5, 3, 4],
 | 
|        addStream$1: function(stream) {
 | 
|          var t1, t2, t3;
 | 
|          if (this._closed)
 | 
| @@ -13211,7 +13666,7 @@
 | 
|          this._addStreamCompleter = H.setRuntimeTypeInfo(new P._SyncCompleter(H.setRuntimeTypeInfo(new P._Future(0, $.Zone__current, null), [null])), [null]);
 | 
|          t1 = this._inner;
 | 
|          t1 = t1.get$add(t1);
 | 
| -        t2 = this.get$_addError();
 | 
| +        t2 = this.get$_guarantee_channel$_addError();
 | 
|          t3 = this._addStreamCompleter;
 | 
|          this._addStreamSubscription = stream.listen$3$onDone$onError(t1, t3.get$complete(t3), t2);
 | 
|          return this._addStreamCompleter.future.then$1(new K._GuaranteeSink_addStream_closure(this));
 | 
| @@ -13247,7 +13702,7 @@
 | 
|          var t1 = this.$this;
 | 
|          t1._addStreamCompleter = null;
 | 
|          t1._addStreamSubscription = null;
 | 
| -      }, null, null, 2, 0, null, 9, "call"]
 | 
| +      }, null, null, 2, 0, null, 6, "call"]
 | 
|      }
 | 
|    }], ["", "host.dart",, M, {
 | 
|      "^": "",
 | 
| @@ -13263,12 +13718,12 @@
 | 
|        t1 = currentUrl._queryParameters;
 | 
|        if (t1 == null) {
 | 
|          t1 = currentUrl._query;
 | 
| -        t1 = H.setRuntimeTypeInfo(new P.UnmodifiableMapView(P.Uri_splitQueryString(t1 == null ? "" : t1, C.Utf8Codec_false)), [null, null]);
 | 
| +        t1 = H.setRuntimeTypeInfo(new P.UnmodifiableMapView(P.Uri_splitQueryString(t1 == null ? "" : t1, C.Utf8Codec_false)), [P.String, P.String]);
 | 
|          currentUrl._queryParameters = t1;
 | 
|        }
 | 
|        webSocket = W.WebSocket_WebSocket(J.$index$asx(t1._map, "managerUrl"), null);
 | 
|        controller = B.StreamChannelController$(true, true, null);
 | 
| -      t1 = H.setRuntimeTypeInfo(new W._EventStream(webSocket, "message", false), [null]);
 | 
| +      t1 = H.setRuntimeTypeInfo(new W._EventStream(webSocket, "message", false), [H.getTypeArgumentByIndex(C.EventStreamProvider_message, 0)]);
 | 
|        H.setRuntimeTypeInfo(new W._EventStreamSubscription(0, t1._target, t1._eventType, W._wrapZone(new M._connectToServer_closure(controller)), false), [H.getTypeArgumentByIndex(t1, 0)])._tryResume$0();
 | 
|        t1 = controller._local._streamController;
 | 
|        t1.toString;
 | 
| @@ -13284,7 +13739,7 @@
 | 
|        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), [null]);
 | 
| +      t1 = H.setRuntimeTypeInfo(new W._EventStream(window, "message", false), [H.getTypeArgumentByIndex(C.EventStreamProvider_message, 0)]);
 | 
|        H.setRuntimeTypeInfo(new W._EventStreamSubscription(0, t1._target, t1._eventType, W._wrapZone(new M._connectToIframe_closure(iframe, controller, readyCompleter)), false), [H.getTypeArgumentByIndex(t1, 0)])._tryResume$0();
 | 
|        t1 = controller._local._streamController;
 | 
|        t1.toString;
 | 
| @@ -13326,13 +13781,13 @@
 | 
|            W._ElementCssClassSet__remove(t1, "paused");
 | 
|          } else
 | 
|            J.remove$0$ax($.$get$_iframes().$index(0, t1.$index(message, "id")));
 | 
| -      }, null, null, 2, 0, null, 7, "call"]
 | 
| +      }, null, null, 2, 0, null, 8, "call"]
 | 
|      },
 | 
|      main__closure0: {
 | 
|        "^": "Closure:0;serverChannel",
 | 
|        call$1: [function(_) {
 | 
|          return this.serverChannel._mainController._foreign._sink.add$1(0, P.LinkedHashMap__makeLiteral(["command", "ping"]));
 | 
| -      }, null, null, 2, 0, null, 9, "call"]
 | 
| +      }, null, null, 2, 0, null, 6, "call"]
 | 
|      },
 | 
|      main__closure1: {
 | 
|        "^": "Closure:0;serverChannel",
 | 
| @@ -13341,25 +13796,25 @@
 | 
|          t1.toString;
 | 
|          W._ElementCssClassSet__remove(t1, "paused");
 | 
|          this.serverChannel._mainController._foreign._sink.add$1(0, P.LinkedHashMap__makeLiteral(["command", "resume"]));
 | 
| -      }, null, null, 2, 0, null, 9, "call"]
 | 
| +      }, null, null, 2, 0, null, 6, "call"]
 | 
|      },
 | 
|      main_closure0: {
 | 
|        "^": "Closure:3;",
 | 
|        call$2: [function(error, stackTrace) {
 | 
| -        P.print(H.S(error) + "\n" + H.S(R.Trace_Trace$from(stackTrace).get$terse()));
 | 
| -      }, null, null, 4, 0, null, 1, 2, "call"]
 | 
| +        P.print(H.S(error) + "\n" + H.S(Y.Trace_Trace$from(stackTrace).get$terse()));
 | 
| +      }, null, null, 4, 0, null, 3, 4, "call"]
 | 
|      },
 | 
|      _connectToServer_closure: {
 | 
|        "^": "Closure:0;controller",
 | 
|        call$1: [function(message) {
 | 
|          this.controller._local._sink.add$1(0, C.JsonCodec_null_null.decode$1(J.get$data$x(message)));
 | 
| -      }, null, null, 2, 0, null, 7, "call"]
 | 
| +      }, null, null, 2, 0, null, 8, "call"]
 | 
|      },
 | 
|      _connectToServer_closure0: {
 | 
|        "^": "Closure:0;webSocket",
 | 
|        call$1: [function(message) {
 | 
|          return this.webSocket.send(C.JsonCodec_null_null.encode$1(message));
 | 
| -      }, null, null, 2, 0, null, 7, "call"]
 | 
| +      }, null, null, 2, 0, null, 8, "call"]
 | 
|      },
 | 
|      _connectToIframe_closure: {
 | 
|        "^": "Closure:0;iframe,controller,readyCompleter",
 | 
| @@ -13377,12 +13832,12 @@
 | 
|            this.readyCompleter.complete$0(0);
 | 
|          else
 | 
|            this.controller._local._sink.add$1(0, J.$index$asx(t1.get$data(message), "data"));
 | 
| -      }, null, null, 2, 0, null, 7, "call"]
 | 
| +      }, null, null, 2, 0, null, 8, "call"]
 | 
|      },
 | 
|      _connectToIframe_closure0: {
 | 
|        "^": "Closure:50;iframe,readyCompleter",
 | 
|        call$1: [function(message) {
 | 
| -        var $async$goto = 0, $async$completer = new P.Completer_Completer$sync(), $async$handler = 1, $async$currentError, $async$self = this, t1, t2, t3;
 | 
| +        var $async$goto = 0, $async$completer = new P.Completer_Completer$sync(), $async$handler = 1, $async$currentError, $async$self = this, t1, t2;
 | 
|          var $async$call$1 = P._wrapJsFunctionForAsync(function($async$errorCode, $async$result) {
 | 
|            if ($async$errorCode === 1) {
 | 
|              $async$currentError = $async$result;
 | 
| @@ -13397,9 +13852,8 @@
 | 
|                case 2:
 | 
|                  // returning from await.
 | 
|                  t1 = J.get$contentWindow$x($async$self.iframe);
 | 
| -                t2 = C.JsonCodec_null_null.encode$1(message);
 | 
| -                t3 = window.location;
 | 
| -                J.postMessage$2$x(t1, t2, (t3 && C.Location_methods).get$origin(t3));
 | 
| +                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);
 | 
|                case 1:
 | 
| @@ -13408,7 +13862,7 @@
 | 
|              }
 | 
|          });
 | 
|          return P._asyncHelper(null, $async$call$1, $async$completer, null);
 | 
| -      }, null, null, 2, 0, null, 7, "call"]
 | 
| +      }, null, null, 2, 0, null, 8, "call"]
 | 
|      }
 | 
|    }, 1], ["html_common", "dart:html_common",, P, {
 | 
|      "^": "",
 | 
| @@ -13506,7 +13960,7 @@
 | 
|        "^": "Closure:3;_box_0,$this",
 | 
|        call$2: [function(key, value) {
 | 
|          this._box_0.copy[key] = this.$this.walk$1(value);
 | 
| -      }, null, null, 4, 0, null, 17, 6, "call"]
 | 
| +      }, null, null, 4, 0, null, 17, 7, "call"]
 | 
|      },
 | 
|      _AcceptStructuredClone: {
 | 
|        "^": "Object;",
 | 
| @@ -13615,15 +14069,15 @@
 | 
|        "^": "Closure:0;completer",
 | 
|        call$1: [function(result) {
 | 
|          return this.completer.complete$1(0, result);
 | 
| -      }, null, null, 2, 0, null, 14, "call"]
 | 
| +      }, null, null, 2, 0, null, 13, "call"]
 | 
|      },
 | 
|      convertNativePromiseToDartFuture_closure0: {
 | 
|        "^": "Closure:0;completer",
 | 
|        call$1: [function(result) {
 | 
|          return this.completer.completeError$1(result);
 | 
| -      }, null, null, 2, 0, null, 14, "call"]
 | 
| +      }, null, null, 2, 0, null, 13, "call"]
 | 
|      }
 | 
| -  }], ["lazy_trace", "package:stack_trace/src/lazy_trace.dart",, S, {
 | 
| +  }], ["", "package:stack_trace/src/lazy_trace.dart",, T, {
 | 
|      "^": "",
 | 
|      LazyTrace: {
 | 
|        "^": "Object;_thunk,_lazy_trace$_inner",
 | 
| @@ -13639,10 +14093,10 @@
 | 
|          return this.get$_lazy_trace$_trace().get$frames();
 | 
|        },
 | 
|        get$terse: function() {
 | 
| -        return new S.LazyTrace(new S.LazyTrace_terse_closure(this), null);
 | 
| +        return new T.LazyTrace(new T.LazyTrace_terse_closure(this), null);
 | 
|        },
 | 
|        foldFrames$2$terse: function(predicate, terse) {
 | 
| -        return new S.LazyTrace(new S.LazyTrace_foldFrames_closure(this, predicate, true), null);
 | 
| +        return new T.LazyTrace(new T.LazyTrace_foldFrames_closure(this, predicate, true), null);
 | 
|        },
 | 
|        toString$0: function(_) {
 | 
|          return J.toString$0$(this.get$_lazy_trace$_trace());
 | 
| @@ -13689,7 +14143,7 @@
 | 
|            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 N.NullStreamSink(t3, false, false), [null]));
 | 
| +          return new D.VirtualChannel(this, t2, t1, H.setRuntimeTypeInfo(new S.NullStreamSink(t3, false, false), [null]));
 | 
|          }
 | 
|          t3 = this._controllers;
 | 
|          if (t3.containsKey$1(t2))
 | 
| @@ -13735,17 +14189,19 @@
 | 
|          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());
 | 
|        },
 | 
| -      static: {_MultiChannel$: function(_inner) {
 | 
| +      static: {
 | 
| +        _MultiChannel$: function(_inner) {
 | 
|            var t1 = new D._MultiChannel(_inner, null, B.StreamChannelController$(true, true, null), P.LinkedHashMap_LinkedHashMap$_empty(P.$int, B.StreamChannelController), 1);
 | 
|            t1._MultiChannel$1(_inner);
 | 
|            return t1;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      _MultiChannel_closure: {
 | 
|        "^": "Closure:0;$this",
 | 
|        call$1: [function(message) {
 | 
|          return this.$this._multi_channel$_inner._sink.add$1(0, [0, message]);
 | 
| -      }, null, null, 2, 0, null, 7, "call"]
 | 
| +      }, null, null, 2, 0, null, 8, "call"]
 | 
|      },
 | 
|      _MultiChannel_closure0: {
 | 
|        "^": "Closure:1;$this",
 | 
| @@ -13766,13 +14222,13 @@
 | 
|            return;
 | 
|          }
 | 
|          controller._local._sink.close$0(0);
 | 
| -      }, null, null, 2, 0, null, 7, "call"]
 | 
| +      }, null, null, 2, 0, null, 8, "call"]
 | 
|      },
 | 
|      _MultiChannel_virtualChannel_closure: {
 | 
|        "^": "Closure:0;_box_0,$this",
 | 
|        call$1: [function(message) {
 | 
|          return this.$this._multi_channel$_inner._sink.add$1(0, [this._box_0.outputId, message]);
 | 
| -      }, null, null, 2, 0, null, 7, "call"]
 | 
| +      }, null, null, 2, 0, null, 8, "call"]
 | 
|      },
 | 
|      _MultiChannel_virtualChannel_closure0: {
 | 
|        "^": "Closure:1;_box_0,$this",
 | 
| @@ -13784,17 +14240,53 @@
 | 
|      VirtualChannel: {
 | 
|        "^": "StreamChannelMixin;_parent,id,stream,sink"
 | 
|      }
 | 
| +  }], ["", "package:async/src/null_stream_sink.dart",, S, {
 | 
| +    "^": "",
 | 
| +    NullStreamSink: {
 | 
| +      "^": "Object;done,_null_stream_sink$_closed,_addingStream",
 | 
| +      add$1: function(_, data) {
 | 
| +        this._checkEventAllowed$0();
 | 
| +      },
 | 
| +      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._asyncComplete$1(null);
 | 
| +        }
 | 
| +        return future.whenComplete$1(new S.NullStreamSink_addStream_closure(this));
 | 
| +      },
 | 
| +      _checkEventAllowed$0: function() {
 | 
| +        if (this._null_stream_sink$_closed)
 | 
| +          throw H.wrapException(new P.StateError("Cannot add to a closed sink."));
 | 
| +        if (this._addingStream)
 | 
| +          throw H.wrapException(new P.StateError("Cannot add to a sink while adding a stream."));
 | 
| +      },
 | 
| +      close$0: function(_) {
 | 
| +        this._null_stream_sink$_closed = true;
 | 
| +        return this.done;
 | 
| +      }
 | 
| +    },
 | 
| +    NullStreamSink_addStream_closure: {
 | 
| +      "^": "Closure:1;$this",
 | 
| +      call$0: [function() {
 | 
| +        this.$this._addingStream = false;
 | 
| +      }, null, null, 0, 0, null, "call"]
 | 
| +    }
 | 
|    }], ["path", "package:path/path.dart",, B, {
 | 
|      "^": "",
 | 
|      current: function() {
 | 
|        var uri, t1, t2, targetScheme, targetUserInfo, targetHost, targetPort, targetPath, targetQuery, mergedPath, fragment, path;
 | 
|        uri = P.Uri_base();
 | 
| -      if (uri.$eq(0, $._currentUriBase))
 | 
| +      if (J.$eq$(uri, $._currentUriBase))
 | 
|          return $._current;
 | 
|        $._currentUriBase = uri;
 | 
|        t1 = $.$get$Style_platform();
 | 
|        t2 = $.$get$Style_url();
 | 
|        if (t1 == null ? t2 == null : t1 === t2) {
 | 
| +        uri.toString;
 | 
|          t1 = P.Uri_parse(".", 0, null);
 | 
|          targetScheme = t1.scheme;
 | 
|          if (targetScheme.length !== 0) {
 | 
| @@ -13809,9 +14301,7 @@
 | 
|            }
 | 
|            targetPath = P.Uri__removeDotSegments(t1._path);
 | 
|            targetQuery = t1._query;
 | 
| -          if (targetQuery != null)
 | 
| -            ;
 | 
| -          else
 | 
| +          if (!(targetQuery != null))
 | 
|              targetQuery = null;
 | 
|          } else {
 | 
|            targetScheme = uri.scheme;
 | 
| @@ -13821,9 +14311,7 @@
 | 
|              targetPort = P.Uri__makePort(t1._port != null ? t1.get$port(t1) : null, targetScheme);
 | 
|              targetPath = P.Uri__removeDotSegments(t1._path);
 | 
|              targetQuery = t1._query;
 | 
| -            if (targetQuery != null)
 | 
| -              ;
 | 
| -            else
 | 
| +            if (!(targetQuery != null))
 | 
|                targetQuery = null;
 | 
|            } else {
 | 
|              targetUserInfo = uri._userInfo;
 | 
| @@ -13833,9 +14321,7 @@
 | 
|              if (targetPath === "") {
 | 
|                targetPath = uri._path;
 | 
|                targetQuery = t1._query;
 | 
| -              if (targetQuery != null)
 | 
| -                ;
 | 
| -              else
 | 
| +              if (!(targetQuery != null))
 | 
|                  targetQuery = uri._query;
 | 
|              } else {
 | 
|                if (C.JSString_methods.startsWith$1(targetPath, "/"))
 | 
| @@ -13850,19 +14336,15 @@
 | 
|                  }
 | 
|                }
 | 
|                targetQuery = t1._query;
 | 
| -              if (targetQuery != null)
 | 
| -                ;
 | 
| -              else
 | 
| +              if (!(targetQuery != null))
 | 
|                  targetQuery = null;
 | 
|              }
 | 
|            }
 | 
|          }
 | 
|          fragment = t1._fragment;
 | 
| -        if (fragment != null)
 | 
| -          ;
 | 
| -        else
 | 
| +        if (!(fragment != null))
 | 
|            fragment = null;
 | 
| -        t1 = new P.Uri(targetScheme, targetUserInfo, targetHost, targetPort, targetPath, targetQuery, fragment, null, null).toString$0(0);
 | 
| +        t1 = new P.Uri(targetScheme, targetUserInfo, targetHost, targetPort, targetPath, targetQuery, fragment, null, null, null).toString$0(0);
 | 
|          $._current = t1;
 | 
|          return t1;
 | 
|        } else {
 | 
| @@ -13900,7 +14382,7 @@
 | 
|            if (t3 > t4)
 | 
|              H.throwExpression(P.RangeError$range(t3, 0, t4, "start", null));
 | 
|          }
 | 
| -        t1 += H.setRuntimeTypeInfo(new H.MappedListIterable(t2, new F._validateArgList_closure()), [null, null]).join$1(0, ", ");
 | 
| +        t1 += H.setRuntimeTypeInfo(new H.MappedListIterable(t2, new F._validateArgList_closure()), [H.getRuntimeTypeArgument(t2, "ListIterable", 0), 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)));
 | 
| @@ -13932,7 +14414,7 @@
 | 
|        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.__internal$_iterable), t1._f), [H.getTypeArgumentByIndex(t1, 0)]), t2 = this.style, t3 = t1._iterator, needsSeparator = false, isAbsoluteAndNotRootRelative = false; t1.moveNext$0();) {
 | 
| +        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);
 | 
| @@ -13955,10 +14437,9 @@
 | 
|              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)
 | 
| -              ;
 | 
| -            else if (needsSeparator)
 | 
| -              buffer._contents += t2.get$separator();
 | 
| +            if (!(J.$gt$n(t4.get$length(part), 0) && t2.containsSeparator$1(t4.$index(part, 0)) === true))
 | 
| +              if (needsSeparator)
 | 
| +                buffer._contents += t2.get$separator();
 | 
|              buffer._contents += H.S(part);
 | 
|            }
 | 
|            needsSeparator = t2.needsSeparator$1(part);
 | 
| @@ -13990,7 +14471,7 @@
 | 
|          var t1, root, i, start, previous, t2, t3, previousPrevious, t4, codeUnit, t5;
 | 
|          t1 = this.style;
 | 
|          root = t1.rootLength$1(path);
 | 
| -        if (!J.$eq$(root, 0)) {
 | 
| +        if (root !== 0) {
 | 
|            if (t1 === $.$get$Style_windows()) {
 | 
|              if (typeof root !== "number")
 | 
|                return H.iae(root);
 | 
| @@ -14044,7 +14525,7 @@
 | 
|          if (!J.$gt$n(t1.rootLength$1(path), 0) || t1.isRootRelative$1(path))
 | 
|            path = this.absolute$1(0, path);
 | 
|          if (!J.$gt$n(t1.rootLength$1(path), 0) && J.$gt$n(t1.rootLength$1(from), 0))
 | 
| -          throw H.wrapException(new E.PathException("Unable to find a path to \"" + path + "\" from \"" + H.S(from) + "\"."));
 | 
| +          throw H.wrapException(new E.PathException('Unable to find a path to "' + path + '" from "' + H.S(from) + '".'));
 | 
|          fromParsed = Q.ParsedPath_ParsedPath$parse(from, t1);
 | 
|          fromParsed.normalize$0();
 | 
|          pathParsed = Q.ParsedPath_ParsedPath$parse(path, t1);
 | 
| @@ -14084,7 +14565,7 @@
 | 
|          }
 | 
|          t2 = fromParsed.parts;
 | 
|          if (t2.length > 0 && J.$eq$(t2[0], ".."))
 | 
| -          throw H.wrapException(new E.PathException("Unable to find a path to \"" + path + "\" from \"" + H.S(from) + "\"."));
 | 
| +          throw H.wrapException(new E.PathException('Unable to find a path to "' + 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)
 | 
| @@ -14151,12 +14632,14 @@
 | 
|          rel = this.relative$1(path);
 | 
|          return this.split$1(0, rel).length > this.split$1(0, path).length ? path : rel;
 | 
|        },
 | 
| -      static: {Context_Context: function(current, style) {
 | 
| +      static: {
 | 
| +        Context_Context: function(current, style) {
 | 
|            current = style == null ? B.current() : ".";
 | 
|            if (style == null)
 | 
|              style = $.$get$Style_platform();
 | 
|            return new F.Context(style, current);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      Context_join_closure: {
 | 
|        "^": "Closure:0;",
 | 
| @@ -14179,8 +14662,8 @@
 | 
|      _validateArgList_closure: {
 | 
|        "^": "Closure:0;",
 | 
|        call$1: [function(arg) {
 | 
| -        return arg == null ? "null" : "\"" + H.S(arg) + "\"";
 | 
| -      }, null, null, 2, 0, null, 13, "call"]
 | 
| +        return arg == null ? "null" : '"' + H.S(arg) + '"';
 | 
| +      }, null, null, 2, 0, null, 15, "call"]
 | 
|      }
 | 
|    }], ["path.internal_style", "package:path/src/internal_style.dart",, E, {
 | 
|      "^": "",
 | 
| @@ -14233,15 +14716,14 @@
 | 
|          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, ""))
 | 
| -            ;
 | 
| -          else if (t3.$eq(part, ".."))
 | 
| -            if (newParts.length > 0)
 | 
| -              newParts.pop();
 | 
| +          if (!(t3.$eq(part, ".") || t3.$eq(part, "")))
 | 
| +            if (t3.$eq(part, ".."))
 | 
| +              if (newParts.length > 0)
 | 
| +                newParts.pop();
 | 
| +              else
 | 
| +                ++leadingDoubles;
 | 
|              else
 | 
| -              ++leadingDoubles;
 | 
| -          else
 | 
| -            newParts.push(part);
 | 
| +              newParts.push(part);
 | 
|          }
 | 
|          if (this.root == null)
 | 
|            C.JSArray_methods.insertAll$2(newParts, 0, P.List_List$filled(leadingDoubles, "..", false, null));
 | 
| @@ -14283,7 +14765,8 @@
 | 
|          t1 = builder._contents += H.S(C.JSArray_methods.get$last(this.separators));
 | 
|          return t1.charCodeAt(0) == 0 ? t1 : t1;
 | 
|        },
 | 
| -      static: {ParsedPath_ParsedPath$parse: function(path, style) {
 | 
| +      static: {
 | 
| +        ParsedPath_ParsedPath$parse: function(path, style) {
 | 
|            var root, isRootRelative, parts, separators, t1, start, i, t2;
 | 
|            root = style.getRoot$1(path);
 | 
|            isRootRelative = style.isRootRelative$1(path);
 | 
| @@ -14321,7 +14804,8 @@
 | 
|              separators.push("");
 | 
|            }
 | 
|            return new Q.ParsedPath(style, root, isRootRelative, parts, separators);
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      ParsedPath_normalize_closure: {
 | 
|        "^": "Closure:0;$this",
 | 
| @@ -14383,7 +14867,7 @@
 | 
|            t1 = uri._path;
 | 
|            return P.Uri__uriDecode(t1, 0, t1.length, C.Utf8Codec_false, false);
 | 
|          }
 | 
| -        throw H.wrapException(P.ArgumentError$("Uri " + uri.toString$0(0) + " must have scheme 'file:'."));
 | 
| +        throw H.wrapException(P.ArgumentError$("Uri " + J.toString$0$(uri) + " must have scheme 'file:'."));
 | 
|        },
 | 
|        absolutePathToUri$1: function(path) {
 | 
|          var parsed, t1;
 | 
| @@ -14407,25 +14891,31 @@
 | 
|          return codeUnit === 47;
 | 
|        },
 | 
|        needsSeparator$1: function(path) {
 | 
| -        var t1 = J.getInterceptor$asx(path);
 | 
| +        var t1, t2;
 | 
| +        t1 = J.getInterceptor$asx(path);
 | 
|          if (t1.get$isEmpty(path) === true)
 | 
|            return false;
 | 
|          if (t1.codeUnitAt$1(path, J.$sub$n(t1.get$length(path), 1)) !== 47)
 | 
|            return true;
 | 
| -        return t1.endsWith$1(path, "://") && J.$eq$(this.rootLength$1(path), t1.get$length(path));
 | 
| +        if (t1.endsWith$1(path, "://")) {
 | 
| +          t2 = this.rootLength$1(path);
 | 
| +          t1 = t1.get$length(path);
 | 
| +          t1 = t2 == null ? t1 == null : t2 === t1;
 | 
| +        } else
 | 
| +          t1 = false;
 | 
| +        return t1;
 | 
|        },
 | 
|        rootLength$1: function(path) {
 | 
| -        var t1, index, t2;
 | 
| +        var t1, index;
 | 
|          t1 = J.getInterceptor$asx(path);
 | 
|          if (t1.get$isEmpty(path) === true)
 | 
|            return 0;
 | 
|          if (t1.codeUnitAt$1(path, 0) === 47)
 | 
|            return 1;
 | 
|          index = t1.indexOf$1(path, "/");
 | 
| -        t2 = J.getInterceptor$n(index);
 | 
| -        if (t2.$gt(index, 0) && t1.startsWith$2(path, "://", t2.$sub(index, 1))) {
 | 
| -          index = t1.indexOf$2(path, "/", t2.$add(index, 2));
 | 
| -          if (J.$gt$n(index, 0))
 | 
| +        if (index > 0 && t1.startsWith$2(path, "://", index - 1)) {
 | 
| +          index = t1.indexOf$2(path, "/", index + 2);
 | 
| +          if (index > 0)
 | 
|              return index;
 | 
|            return t1.get$length(path);
 | 
|          }
 | 
| @@ -14436,7 +14926,7 @@
 | 
|          return t1.get$isNotEmpty(path) && t1.codeUnitAt$1(path, 0) === 47;
 | 
|        },
 | 
|        pathFromUri$1: function(uri) {
 | 
| -        return uri.toString$0(0);
 | 
| +        return J.toString$0$(uri);
 | 
|        },
 | 
|        relativePathToUri$1: function(path) {
 | 
|          return P.Uri_parse(path, 0, null);
 | 
| @@ -14473,10 +14963,9 @@
 | 
|            if (J.$lt$n(t1.get$length(path), 2) || t1.codeUnitAt$1(path, 1) !== 92)
 | 
|              return 1;
 | 
|            index = t1.indexOf$2(path, "\\", 2);
 | 
| -          t2 = J.getInterceptor$n(index);
 | 
| -          if (t2.$gt(index, 0)) {
 | 
| -            index = t1.indexOf$2(path, "\\", t2.$add(index, 1));
 | 
| -            if (J.$gt$n(index, 0))
 | 
| +          if (index > 0) {
 | 
| +            index = t1.indexOf$2(path, "\\", index + 1);
 | 
| +            if (index > 0)
 | 
|                return index;
 | 
|            }
 | 
|            return t1.get$length(path);
 | 
| @@ -14498,13 +14987,13 @@
 | 
|          return 3;
 | 
|        },
 | 
|        isRootRelative$1: function(path) {
 | 
| -        return J.$eq$(this.rootLength$1(path), 1);
 | 
| +        return this.rootLength$1(path) === 1;
 | 
|        },
 | 
|        pathFromUri$1: function(uri) {
 | 
|          var t1, path;
 | 
|          t1 = uri.scheme;
 | 
|          if (t1 !== "" && t1 !== "file")
 | 
| -          throw H.wrapException(P.ArgumentError$("Uri " + uri.toString$0(0) + " must have scheme 'file:'."));
 | 
| +          throw H.wrapException(P.ArgumentError$("Uri " + J.toString$0$(uri) + " must have scheme 'file:'."));
 | 
|          path = uri._path;
 | 
|          if (uri.get$host(uri) === "") {
 | 
|            if (C.JSString_methods.startsWith$1(path, "/"))
 | 
| @@ -14542,147 +15031,6 @@
 | 
|          return !J.$eq$(part, "");
 | 
|        }
 | 
|      }
 | 
| -  }], ["stack_trace.chain", "package:stack_trace/src/chain.dart",, O, {
 | 
| -    "^": "",
 | 
| -    Chain: {
 | 
| -      "^": "Object;traces",
 | 
| -      get$terse: function() {
 | 
| -        return this.foldFrames$2$terse(new O.Chain_terse_closure(), true);
 | 
| -      },
 | 
| -      foldFrames$2$terse: function(predicate, terse) {
 | 
| -        var t1, foldedTraces, nonEmptyTraces;
 | 
| -        t1 = this.traces;
 | 
| -        foldedTraces = t1.map$1(t1, new O.Chain_foldFrames_closure(predicate, true));
 | 
| -        nonEmptyTraces = foldedTraces.super$Iterable$where(foldedTraces, new O.Chain_foldFrames_closure0(true));
 | 
| -        if (!nonEmptyTraces.get$iterator(nonEmptyTraces).moveNext$0() && !foldedTraces.get$isEmpty(foldedTraces))
 | 
| -          return new O.Chain(H.setRuntimeTypeInfo(new P.UnmodifiableListView(C.JSArray_methods.toList$0([foldedTraces.get$last(foldedTraces)])), [R.Trace]));
 | 
| -        return new O.Chain(H.setRuntimeTypeInfo(new P.UnmodifiableListView(nonEmptyTraces.toList$0(0)), [R.Trace]));
 | 
| -      },
 | 
| -      toTrace$0: function() {
 | 
| -        var t1 = this.traces;
 | 
| -        return new R.Trace(H.setRuntimeTypeInfo(new P.UnmodifiableListView(C.JSArray_methods.toList$0(N.flatten(t1.map$1(t1, new O.Chain_toTrace_closure())))), [S.Frame]));
 | 
| -      },
 | 
| -      toString$0: function(_) {
 | 
| -        var t1 = this.traces;
 | 
| -        return t1.map$1(t1, new O.Chain_toString_closure(t1.map$1(t1, new O.Chain_toString_closure0()).fold$2(0, 0, P.math__max$closure()))).join$1(0, "===== asynchronous gap ===========================\n");
 | 
| -      },
 | 
| -      static: {Chain_Chain$parse: function(chain) {
 | 
| -          var t1 = J.getInterceptor$asx(chain);
 | 
| -          if (t1.get$isEmpty(chain) === true)
 | 
| -            return new O.Chain(H.setRuntimeTypeInfo(new P.UnmodifiableListView(C.JSArray_methods.toList$0([])), [R.Trace]));
 | 
| -          if (t1.contains$1(chain, "===== asynchronous gap ===========================\n") !== true)
 | 
| -            return new O.Chain(H.setRuntimeTypeInfo(new P.UnmodifiableListView(C.JSArray_methods.toList$0([R.Trace_Trace$parse(chain)])), [R.Trace]));
 | 
| -          return new O.Chain(H.setRuntimeTypeInfo(new P.UnmodifiableListView(H.setRuntimeTypeInfo(new H.MappedListIterable(t1.split$1(chain, "===== asynchronous gap ===========================\n"), new O.closure2()), [null, null]).toList$0(0)), [R.Trace]));
 | 
| -        }}
 | 
| -    },
 | 
| -    closure2: {
 | 
| -      "^": "Closure:0;",
 | 
| -      call$1: [function(trace) {
 | 
| -        return R.Trace$parseFriendly(trace);
 | 
| -      }, null, null, 2, 0, null, 11, "call"]
 | 
| -    },
 | 
| -    Chain_terse_closure: {
 | 
| -      "^": "Closure:0;",
 | 
| -      call$1: function(_) {
 | 
| -        return false;
 | 
| -      }
 | 
| -    },
 | 
| -    Chain_foldFrames_closure: {
 | 
| -      "^": "Closure:0;predicate,terse",
 | 
| -      call$1: [function(trace) {
 | 
| -        return trace.foldFrames$2$terse(this.predicate, this.terse);
 | 
| -      }, null, null, 2, 0, null, 11, "call"]
 | 
| -    },
 | 
| -    Chain_foldFrames_closure0: {
 | 
| -      "^": "Closure:0;terse",
 | 
| -      call$1: function(trace) {
 | 
| -        var t1;
 | 
| -        if (trace.get$frames()._collection$_source.length > 1)
 | 
| -          return true;
 | 
| -        t1 = trace.get$frames();
 | 
| -        if (t1.get$isEmpty(t1))
 | 
| -          return false;
 | 
| -        if (!this.terse)
 | 
| -          return false;
 | 
| -        t1 = trace.get$frames();
 | 
| -        return t1.get$single(t1).get$line() != null;
 | 
| -      }
 | 
| -    },
 | 
| -    Chain_toTrace_closure: {
 | 
| -      "^": "Closure:0;",
 | 
| -      call$1: [function(trace) {
 | 
| -        return trace.get$frames();
 | 
| -      }, null, null, 2, 0, null, 11, "call"]
 | 
| -    },
 | 
| -    Chain_toString_closure0: {
 | 
| -      "^": "Closure:0;",
 | 
| -      call$1: [function(trace) {
 | 
| -        var t1 = trace.get$frames();
 | 
| -        return t1.map$1(t1, new O.Chain_toString__closure0()).fold$2(0, 0, P.math__max$closure());
 | 
| -      }, null, null, 2, 0, null, 11, "call"]
 | 
| -    },
 | 
| -    Chain_toString__closure0: {
 | 
| -      "^": "Closure:0;",
 | 
| -      call$1: [function(frame) {
 | 
| -        return J.get$length$asx(J.get$location$x(frame));
 | 
| -      }, null, null, 2, 0, null, 12, "call"]
 | 
| -    },
 | 
| -    Chain_toString_closure: {
 | 
| -      "^": "Closure:0;longest",
 | 
| -      call$1: [function(trace) {
 | 
| -        var t1 = trace.get$frames();
 | 
| -        return t1.map$1(t1, new O.Chain_toString__closure(this.longest)).join$0(0);
 | 
| -      }, null, null, 2, 0, null, 11, "call"]
 | 
| -    },
 | 
| -    Chain_toString__closure: {
 | 
| -      "^": "Closure:0;longest",
 | 
| -      call$1: [function(frame) {
 | 
| -        return H.S(N.padRight(J.get$location$x(frame), this.longest)) + "  " + H.S(frame.get$member()) + "\n";
 | 
| -      }, null, null, 2, 0, null, 12, "call"]
 | 
| -    }
 | 
| -  }], ["stack_trace.src.utils", "package:stack_trace/src/utils.dart",, N, {
 | 
| -    "^": "",
 | 
| -    padRight: function(string, $length) {
 | 
| -      var t1, t2, result, i;
 | 
| -      t1 = J.getInterceptor$asx(string);
 | 
| -      t2 = t1.get$length(string);
 | 
| -      if (typeof $length !== "number")
 | 
| -        return H.iae($length);
 | 
| -      if (t2 >= $length)
 | 
| -        return string;
 | 
| -      result = new P.StringBuffer("");
 | 
| -      result._contents = H.S(string);
 | 
| -      for (i = 0; i < $length - t1.get$length(string); ++i)
 | 
| -        result._contents += " ";
 | 
| -      t1 = result._contents;
 | 
| -      return t1.charCodeAt(0) == 0 ? t1 : t1;
 | 
| -    },
 | 
| -    flatten: function(nested) {
 | 
| -      var result = [];
 | 
| -      new N.flatten_helper(result).call$1(nested);
 | 
| -      return result;
 | 
| -    },
 | 
| -    flatten_helper: {
 | 
| -      "^": "Closure:0;result",
 | 
| -      call$1: function(list) {
 | 
| -        var t1, t2, element;
 | 
| -        for (t1 = J.get$iterator$ax(list), t2 = this.result; t1.moveNext$0();) {
 | 
| -          element = t1.get$current();
 | 
| -          if (!!J.getInterceptor(element).$isList)
 | 
| -            this.call$1(element);
 | 
| -          else
 | 
| -            t2.push(element);
 | 
| -        }
 | 
| -      }
 | 
| -    }
 | 
| -  }], ["stack_trace.unparsed_frame", "package:stack_trace/src/unparsed_frame.dart",, N, {
 | 
| -    "^": "",
 | 
| -    UnparsedFrame: {
 | 
| -      "^": "Object;uri<,line<,column<,isCore<,library<,$package<,location>,member<",
 | 
| -      toString$0: function(_) {
 | 
| -        return this.member;
 | 
| -      }
 | 
| -    }
 | 
|    }], ["", "package:stream_channel/stream_channel.dart",, R, {
 | 
|      "^": "",
 | 
|      StreamChannelMixin: {
 | 
| @@ -14702,43 +15050,46 @@
 | 
|          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);
 | 
|        },
 | 
| -      static: {StreamChannelController$: function(allowForeignErrors, sync, $T) {
 | 
| +      static: {
 | 
| +        StreamChannelController$: function(allowForeignErrors, sync, $T) {
 | 
|            var t1 = H.setRuntimeTypeInfo(new B.StreamChannelController(null, null), [$T]);
 | 
|            t1.StreamChannelController$2$allowForeignErrors$sync(true, true, $T);
 | 
|            return t1;
 | 
| -        }}
 | 
| +        }
 | 
| +      }
 | 
|      }
 | 
| -  }], ["trace", "package:stack_trace/src/trace.dart",, R, {
 | 
| +  }], ["", "package:stack_trace/src/trace.dart",, Y, {
 | 
|      "^": "",
 | 
|      Trace: {
 | 
|        "^": "Object;frames<",
 | 
|        get$terse: function() {
 | 
| -        return this.foldFrames$2$terse(new R.Trace_terse_closure(), true);
 | 
| +        return this.foldFrames$2$terse(new Y.Trace_terse_closure(), true);
 | 
|        },
 | 
|        foldFrames$2$terse: function(predicate, terse) {
 | 
|          var t1, newFrames, t2, frame;
 | 
|          t1 = {};
 | 
|          t1.predicate = predicate;
 | 
| -        t1.predicate = new R.Trace_foldFrames_closure(predicate);
 | 
| -        newFrames = [];
 | 
| -        for (t2 = this.frames, t2 = t2.get$reversed(t2), t2 = new H.ListIterator(t2, t2.get$length(t2), 0, null); t2.moveNext$0();) {
 | 
| +        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;
 | 
|            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 S.Frame(frame.get$uri(), frame.get$line(), frame.get$column(), frame.get$member()));
 | 
| +            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 R.Trace_foldFrames_closure0(t1)), [null, null]).toList$0(0);
 | 
| +        newFrames = H.setRuntimeTypeInfo(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 R.Trace(H.setRuntimeTypeInfo(new P.UnmodifiableListView(H.setRuntimeTypeInfo(new H.ReversedListIterable(newFrames), [H.getTypeArgumentByIndex(newFrames, 0)]).toList$0(0)), [S.Frame]));
 | 
| +        return new Y.Trace(P.List_List$unmodifiable(H.setRuntimeTypeInfo(new H.ReversedListIterable(newFrames), [H.getTypeArgumentByIndex(newFrames, 0)]), A.Frame));
 | 
|        },
 | 
|        toString$0: function(_) {
 | 
|          var t1 = this.frames;
 | 
| -        return t1.map$1(t1, new R.Trace_toString_closure(t1.map$1(t1, new R.Trace_toString_closure0()).fold$2(0, 0, P.math__max$closure()))).join$0(0);
 | 
| +        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);
 | 
|        },
 | 
|        $isStackTrace: 1,
 | 
| -      static: {Trace_Trace$from: function(trace) {
 | 
| +      static: {
 | 
| +        Trace_Trace$from: function(trace) {
 | 
|            var t1;
 | 
|            if (trace == null)
 | 
|              throw H.wrapException(P.ArgumentError$("Cannot create a Trace from null."));
 | 
| @@ -14747,36 +15098,37 @@
 | 
|              return trace;
 | 
|            if (!!t1.$isChain)
 | 
|              return trace.toTrace$0();
 | 
| -          return new S.LazyTrace(new R.closure(trace), null);
 | 
| -        }, Trace_Trace$parse: function(trace) {
 | 
| +          return new T.LazyTrace(new Y.closure(trace), null);
 | 
| +        },
 | 
| +        Trace_Trace$parse: function(trace) {
 | 
|            var error, t1, exception;
 | 
|            try {
 | 
|              if (J.get$isEmpty$asx(trace) === true) {
 | 
| -              t1 = H.setRuntimeTypeInfo(new P.UnmodifiableListView(C.JSArray_methods.toList$0(H.setRuntimeTypeInfo([], [S.Frame]))), [S.Frame]);
 | 
| -              return new R.Trace(t1);
 | 
| +              t1 = P.List_List$unmodifiable(H.setRuntimeTypeInfo([], [A.Frame]), A.Frame);
 | 
| +              return new Y.Trace(t1);
 | 
|              }
 | 
|              if (J.contains$1$asx(trace, $.$get$_v8Trace()) === true) {
 | 
| -              t1 = R.Trace$parseV8(trace);
 | 
| +              t1 = Y.Trace$parseV8(trace);
 | 
|                return t1;
 | 
|              }
 | 
|              if (J.contains$1$asx(trace, "\tat ") === true) {
 | 
| -              t1 = R.Trace$parseJSCore(trace);
 | 
| +              t1 = Y.Trace$parseJSCore(trace);
 | 
|                return t1;
 | 
|              }
 | 
|              if (J.contains$1$asx(trace, $.$get$_firefoxSafariTrace()) === true) {
 | 
| -              t1 = R.Trace$parseFirefox(trace);
 | 
| +              t1 = Y.Trace$parseFirefox(trace);
 | 
|                return t1;
 | 
|              }
 | 
|              if (J.contains$1$asx(trace, "===== asynchronous gap ===========================\n") === true) {
 | 
| -              t1 = O.Chain_Chain$parse(trace).toTrace$0();
 | 
| +              t1 = U.Chain_Chain$parse(trace).toTrace$0();
 | 
|                return t1;
 | 
|              }
 | 
|              if (J.contains$1$asx(trace, $.$get$_friendlyTrace()) === true) {
 | 
| -              t1 = R.Trace$parseFriendly(trace);
 | 
| +              t1 = Y.Trace$parseFriendly(trace);
 | 
|                return t1;
 | 
|              }
 | 
| -            t1 = H.setRuntimeTypeInfo(new P.UnmodifiableListView(C.JSArray_methods.toList$0(R.Trace__parseVM(trace))), [S.Frame]);
 | 
| -            return new R.Trace(t1);
 | 
| +            t1 = P.List_List$unmodifiable(Y.Trace__parseVM(trace), A.Frame);
 | 
| +            return new Y.Trace(t1);
 | 
|            } catch (exception) {
 | 
|              t1 = H.unwrapException(exception);
 | 
|              if (t1 instanceof P.FormatException) {
 | 
| @@ -14785,48 +15137,55 @@
 | 
|              } else
 | 
|                throw exception;
 | 
|            }
 | 
| -        }, Trace__parseVM: function(trace) {
 | 
| -          var lines, $frames;
 | 
| +        },
 | 
| +        Trace__parseVM: function(trace) {
 | 
| +          var lines, t1, $frames;
 | 
|            lines = J.trim$0$s(trace).split("\n");
 | 
| -          $frames = H.setRuntimeTypeInfo(new H.MappedListIterable(H.SubListIterable$(lines, 0, lines.length - 1, H.getTypeArgumentByIndex(lines, 0)), new R.Trace__parseVM_closure()), [null, null]).toList$0(0);
 | 
| +          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);
 | 
|            if (!J.endsWith$1$s(C.JSArray_methods.get$last(lines), ".da"))
 | 
| -            C.JSArray_methods.add$1($frames, S.Frame_Frame$parseVM(C.JSArray_methods.get$last(lines)));
 | 
| +            C.JSArray_methods.add$1($frames, A.Frame_Frame$parseVM(C.JSArray_methods.get$last(lines)));
 | 
|            return $frames;
 | 
| -        }, Trace$parseV8: function(trace) {
 | 
| +        },
 | 
| +        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 R.Trace$parseV8_closure());
 | 
| -          return new R.Trace(H.setRuntimeTypeInfo(new P.UnmodifiableListView(H.MappedIterable_MappedIterable(t1, new R.Trace$parseV8_closure0(), H.getRuntimeTypeArgument(t1, "Iterable", 0), null).toList$0(0)), [S.Frame]));
 | 
| -        }, Trace$parseJSCore: function(trace) {
 | 
| +          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));
 | 
| +        },
 | 
| +        Trace$parseJSCore: function(trace) {
 | 
|            var t1 = J.split$1$s(trace, "\n");
 | 
| -          t1 = H.setRuntimeTypeInfo(new H.WhereIterable(t1, new R.Trace$parseJSCore_closure()), [H.getTypeArgumentByIndex(t1, 0)]);
 | 
| -          return new R.Trace(H.setRuntimeTypeInfo(new P.UnmodifiableListView(H.MappedIterable_MappedIterable(t1, new R.Trace$parseJSCore_closure0(), H.getRuntimeTypeArgument(t1, "Iterable", 0), null).toList$0(0)), [S.Frame]));
 | 
| -        }, Trace$parseFirefox: function(trace) {
 | 
| +          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));
 | 
| +        },
 | 
| +        Trace$parseFirefox: function(trace) {
 | 
|            var t1 = J.trim$0$s(trace).split("\n");
 | 
| -          t1 = H.setRuntimeTypeInfo(new H.WhereIterable(t1, new R.Trace$parseFirefox_closure()), [H.getTypeArgumentByIndex(t1, 0)]);
 | 
| -          return new R.Trace(H.setRuntimeTypeInfo(new P.UnmodifiableListView(H.MappedIterable_MappedIterable(t1, new R.Trace$parseFirefox_closure0(), H.getRuntimeTypeArgument(t1, "Iterable", 0), null).toList$0(0)), [S.Frame]));
 | 
| -        }, Trace$parseFriendly: function(trace) {
 | 
| +          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));
 | 
| +        },
 | 
| +        Trace$parseFriendly: function(trace) {
 | 
|            var 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 R.Trace$parseFriendly_closure()), [H.getTypeArgumentByIndex(t1, 0)]);
 | 
| -            t1 = H.MappedIterable_MappedIterable(t1, new R.Trace$parseFriendly_closure0(), H.getRuntimeTypeArgument(t1, "Iterable", 0), null);
 | 
| +            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);
 | 
|            }
 | 
| -          return new R.Trace(H.setRuntimeTypeInfo(new P.UnmodifiableListView(J.toList$0$ax(t1)), [S.Frame]));
 | 
| -        }}
 | 
| +          return new Y.Trace(P.List_List$unmodifiable(t1, A.Frame));
 | 
| +        }
 | 
| +      }
 | 
|      },
 | 
|      closure: {
 | 
|        "^": "Closure:1;trace",
 | 
|        call$0: function() {
 | 
| -        return R.Trace_Trace$parse(J.toString$0$(this.trace));
 | 
| +        return Y.Trace_Trace$parse(J.toString$0$(this.trace));
 | 
|        }
 | 
|      },
 | 
|      Trace__parseVM_closure: {
 | 
|        "^": "Closure:0;",
 | 
|        call$1: [function(line) {
 | 
| -        return S.Frame_Frame$parseVM(line);
 | 
| +        return A.Frame_Frame$parseVM(line);
 | 
|        }, null, null, 2, 0, null, 10, "call"]
 | 
|      },
 | 
|      Trace$parseV8_closure: {
 | 
| @@ -14838,7 +15197,7 @@
 | 
|      Trace$parseV8_closure0: {
 | 
|        "^": "Closure:0;",
 | 
|        call$1: [function(line) {
 | 
| -        return S.Frame_Frame$parseV8(line);
 | 
| +        return A.Frame_Frame$parseV8(line);
 | 
|        }, null, null, 2, 0, null, 10, "call"]
 | 
|      },
 | 
|      Trace$parseJSCore_closure: {
 | 
| @@ -14850,7 +15209,7 @@
 | 
|      Trace$parseJSCore_closure0: {
 | 
|        "^": "Closure:0;",
 | 
|        call$1: [function(line) {
 | 
| -        return S.Frame_Frame$parseV8(line);
 | 
| +        return A.Frame_Frame$parseV8(line);
 | 
|        }, null, null, 2, 0, null, 10, "call"]
 | 
|      },
 | 
|      Trace$parseFirefox_closure: {
 | 
| @@ -14863,7 +15222,7 @@
 | 
|      Trace$parseFirefox_closure0: {
 | 
|        "^": "Closure:0;",
 | 
|        call$1: [function(line) {
 | 
| -        return S.Frame_Frame$parseFirefox(line);
 | 
| +        return A.Frame_Frame$parseFirefox(line);
 | 
|        }, null, null, 2, 0, null, 10, "call"]
 | 
|      },
 | 
|      Trace$parseFriendly_closure: {
 | 
| @@ -14875,7 +15234,7 @@
 | 
|      Trace$parseFriendly_closure0: {
 | 
|        "^": "Closure:0;",
 | 
|        call$1: [function(line) {
 | 
| -        return S.Frame_Frame$parseFriendly(line);
 | 
| +        return A.Frame_Frame$parseFriendly(line);
 | 
|        }, null, null, 2, 0, null, 10, "call"]
 | 
|      },
 | 
|      Trace_terse_closure: {
 | 
| @@ -14907,14 +15266,14 @@
 | 
|          t1 = frame.get$library();
 | 
|          t2 = $.$get$_terseRegExp();
 | 
|          H.checkString("");
 | 
| -        return new S.Frame(P.Uri_parse(H.stringReplaceAllUnchecked(t1, t2, ""), 0, null), null, null, frame.get$member());
 | 
| -      }, null, null, 2, 0, null, 12, "call"]
 | 
| +        return new A.Frame(P.Uri_parse(H.stringReplaceAllUnchecked(t1, t2, ""), 0, null), null, null, frame.get$member());
 | 
| +      }, null, null, 2, 0, null, 11, "call"]
 | 
|      },
 | 
|      Trace_toString_closure0: {
 | 
|        "^": "Closure:0;",
 | 
|        call$1: [function(frame) {
 | 
|          return J.get$length$asx(J.get$location$x(frame));
 | 
| -      }, null, null, 2, 0, null, 12, "call"]
 | 
| +      }, null, null, 2, 0, null, 11, "call"]
 | 
|      },
 | 
|      Trace_toString_closure: {
 | 
|        "^": "Closure:0;longest",
 | 
| @@ -14922,8 +15281,33 @@
 | 
|          var t1 = J.getInterceptor(frame);
 | 
|          if (!!t1.$isUnparsedFrame)
 | 
|            return H.S(frame) + "\n";
 | 
| -        return H.S(N.padRight(t1.get$location(frame), this.longest)) + "  " + H.S(frame.get$member()) + "\n";
 | 
| -      }, null, null, 2, 0, null, 12, "call"]
 | 
| +        return H.S(B.padRight(t1.get$location(frame), this.longest)) + "  " + H.S(frame.get$member()) + "\n";
 | 
| +      }, null, null, 2, 0, null, 11, "call"]
 | 
| +    }
 | 
| +  }], ["", "package:stack_trace/src/unparsed_frame.dart",, N, {
 | 
| +    "^": "",
 | 
| +    UnparsedFrame: {
 | 
| +      "^": "Object;uri<,line<,column<,isCore<,library<,$package<,location>,member<",
 | 
| +      toString$0: function(_) {
 | 
| +        return this.member;
 | 
| +      }
 | 
| +    }
 | 
| +  }], ["", "package:stack_trace/src/utils.dart",, B, {
 | 
| +    "^": "",
 | 
| +    padRight: function(string, $length) {
 | 
| +      var t1, t2, result, i;
 | 
| +      t1 = J.getInterceptor$asx(string);
 | 
| +      t2 = t1.get$length(string);
 | 
| +      if (typeof $length !== "number")
 | 
| +        return H.iae($length);
 | 
| +      if (t2 >= $length)
 | 
| +        return string;
 | 
| +      result = new P.StringBuffer("");
 | 
| +      result._contents = H.S(string);
 | 
| +      for (i = 0; i < $length - t1.get$length(string); ++i)
 | 
| +        result._contents += " ";
 | 
| +      t1 = result._contents;
 | 
| +      return t1.charCodeAt(0) == 0 ? t1 : t1;
 | 
|      }
 | 
|    }]];
 | 
|    setupProgram(dart, 0);
 | 
| @@ -15091,16 +15475,23 @@
 | 
|      return J.getInterceptor$n(receiver).$gt(receiver, a0);
 | 
|    };
 | 
|    J.$index$asx = function(receiver, a0) {
 | 
| -    if (receiver.constructor == Array || typeof receiver == "string" || H.isJsIndexable(receiver, receiver[init.dispatchPropertyName]))
 | 
| -      if (a0 >>> 0 === a0 && a0 < receiver.length)
 | 
| -        return receiver[a0];
 | 
| +    if (typeof a0 === "number")
 | 
| +      if (receiver.constructor == Array || typeof receiver == "string" || H.isJsIndexable(receiver, receiver[init.dispatchPropertyName]))
 | 
| +        if (a0 >>> 0 === a0 && a0 < receiver.length)
 | 
| +          return receiver[a0];
 | 
|      return J.getInterceptor$asx(receiver).$index(receiver, a0);
 | 
|    };
 | 
|    J.$indexSet$ax = function(receiver, a0, a1) {
 | 
| -    if ((receiver.constructor == Array || H.isJsIndexable(receiver, receiver[init.dispatchPropertyName])) && !receiver.immutable$list && a0 >>> 0 === a0 && a0 < receiver.length)
 | 
| -      return receiver[a0] = a1;
 | 
| +    if (typeof a0 === "number")
 | 
| +      if ((receiver.constructor == Array || H.isJsIndexable(receiver, receiver[init.dispatchPropertyName])) && !receiver.immutable$list && a0 >>> 0 === a0 && a0 < receiver.length)
 | 
| +        return receiver[a0] = a1;
 | 
|      return J.getInterceptor$ax(receiver).$indexSet(receiver, a0, a1);
 | 
|    };
 | 
| +  J.$le$n = function(receiver, a0) {
 | 
| +    if (typeof receiver == "number" && typeof a0 == "number")
 | 
| +      return receiver <= a0;
 | 
| +    return J.getInterceptor$n(receiver).$le(receiver, a0);
 | 
| +  };
 | 
|    J.$lt$n = function(receiver, a0) {
 | 
|      if (typeof receiver == "number" && typeof a0 == "number")
 | 
|        return receiver < a0;
 | 
| @@ -15190,9 +15581,6 @@
 | 
|    J.substring$2$s = function(receiver, a0, a1) {
 | 
|      return J.getInterceptor$s(receiver).substring$2(receiver, a0, a1);
 | 
|    };
 | 
| -  J.toList$0$ax = function(receiver) {
 | 
| -    return J.getInterceptor$ax(receiver).toList$0(receiver);
 | 
| -  };
 | 
|    J.toLowerCase$0$s = function(receiver) {
 | 
|      return J.getInterceptor$s(receiver).toLowerCase$0(receiver);
 | 
|    };
 | 
| @@ -15236,11 +15624,14 @@
 | 
|    C.PlainJavaScriptObject_methods = J.PlainJavaScriptObject.prototype;
 | 
|    C.UnknownJavaScriptObject_methods = J.UnknownJavaScriptObject.prototype;
 | 
|    C.C_DynamicRuntimeType = new H.DynamicRuntimeType();
 | 
| +  C.C_EmptyIterator = new H.EmptyIterator();
 | 
|    C.C_OutOfMemoryError = new P.OutOfMemoryError();
 | 
|    C.C_Utf8Encoder = new P.Utf8Encoder();
 | 
|    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);
 | 
| @@ -15292,6 +15683,35 @@
 | 
|      hooks.getTag = getTagFallback;
 | 
|    };
 | 
|  };
 | 
| +  C.JS_CONST_gkc0 = function(hooks) {
 | 
| +  var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
 | 
| +  if (userAgent.indexOf("Trident/") == -1) return hooks;
 | 
| +  var getTag = hooks.getTag;
 | 
| +  var quickMap = {
 | 
| +    "BeforeUnloadEvent": "Event",
 | 
| +    "DataTransfer": "Clipboard",
 | 
| +    "HTMLDDElement": "HTMLElement",
 | 
| +    "HTMLDTElement": "HTMLElement",
 | 
| +    "HTMLPhraseElement": "HTMLElement",
 | 
| +    "Position": "Geoposition"
 | 
| +  };
 | 
| +  function getTagIE(o) {
 | 
| +    var tag = getTag(o);
 | 
| +    var newTag = quickMap[tag];
 | 
| +    if (newTag) return newTag;
 | 
| +    if (tag == "Object") {
 | 
| +      if (window.DataView && (o instanceof window.DataView)) return "DataView";
 | 
| +    }
 | 
| +    return tag;
 | 
| +  }
 | 
| +  function prototypeForTagIE(tag) {
 | 
| +    var constructor = window[tag];
 | 
| +    if (constructor == null) return null;
 | 
| +    return constructor.prototype;
 | 
| +  }
 | 
| +  hooks.getTag = getTagIE;
 | 
| +  hooks.prototypeForTag = prototypeForTagIE;
 | 
| +};
 | 
|    C.JS_CONST_gkc = function() {
 | 
|    function typeNameInChrome(o) {
 | 
|      var constructor = o.constructor;
 | 
| @@ -15328,35 +15748,6 @@
 | 
|      prototypeForTag: prototypeForTag,
 | 
|      discriminator: discriminator };
 | 
|  };
 | 
| -  C.JS_CONST_gkc0 = function(hooks) {
 | 
| -  var userAgent = typeof navigator == "object" ? navigator.userAgent : "";
 | 
| -  if (userAgent.indexOf("Trident/") == -1) return hooks;
 | 
| -  var getTag = hooks.getTag;
 | 
| -  var quickMap = {
 | 
| -    "BeforeUnloadEvent": "Event",
 | 
| -    "DataTransfer": "Clipboard",
 | 
| -    "HTMLDDElement": "HTMLElement",
 | 
| -    "HTMLDTElement": "HTMLElement",
 | 
| -    "HTMLPhraseElement": "HTMLElement",
 | 
| -    "Position": "Geoposition"
 | 
| -  };
 | 
| -  function getTagIE(o) {
 | 
| -    var tag = getTag(o);
 | 
| -    var newTag = quickMap[tag];
 | 
| -    if (newTag) return newTag;
 | 
| -    if (tag == "Object") {
 | 
| -      if (window.DataView && (o instanceof window.DataView)) return "DataView";
 | 
| -    }
 | 
| -    return tag;
 | 
| -  }
 | 
| -  function prototypeForTagIE(tag) {
 | 
| -    var constructor = window[tag];
 | 
| -    if (constructor == null) return null;
 | 
| -    return constructor.prototype;
 | 
| -  }
 | 
| -  hooks.getTag = getTagIE;
 | 
| -  hooks.prototypeForTag = prototypeForTagIE;
 | 
| -};
 | 
|    C.JS_CONST_rr7 = function(hooks) {
 | 
|    var getTag = hooks.getTag;
 | 
|    var prototypeForTag = hooks.prototypeForTag;
 | 
| @@ -15384,8 +15775,8 @@
 | 
|    C.List_JYB = Isolate.makeConstantList([0, 0, 26624, 1023, 65534, 2047, 65534, 2047]);
 | 
|    C.List_WnV = Isolate.makeConstantList(["/", "\\"]);
 | 
|    C.List_cSk = Isolate.makeConstantList(["/"]);
 | 
| -  C.List_empty0 = Isolate.makeConstantList([]);
 | 
|    C.List_empty = H.setRuntimeTypeInfo(Isolate.makeConstantList([]), [P.String]);
 | 
| +  C.List_empty0 = Isolate.makeConstantList([]);
 | 
|    C.List_gRj = Isolate.makeConstantList([0, 0, 32722, 12287, 65534, 34815, 65534, 18431]);
 | 
|    C.List_nxB = Isolate.makeConstantList([0, 0, 24576, 1023, 65534, 34815, 65534, 18431]);
 | 
|    C.List_qNA = Isolate.makeConstantList([0, 0, 32754, 11263, 65534, 34815, 65534, 18431]);
 | 
| @@ -15449,27 +15840,38 @@
 | 
|      for (var i = 0; i < lazies.length;) {
 | 
|        var fieldName = lazies[i++];
 | 
|        var getterName = lazies[i++];
 | 
| -      var staticName = lazies[i++];
 | 
|        var lazyValue = lazies[i++];
 | 
| +      var staticName = lazies[i++];
 | 
|        Isolate.$lazy(fieldName, getterName, lazyValue, staticName);
 | 
|      }
 | 
| -  })(["DART_CLOSURE_PROPERTY_NAME", "$get$DART_CLOSURE_PROPERTY_NAME", "DART_CLOSURE_PROPERTY_NAME", function() {
 | 
| +  })(["DART_CLOSURE_PROPERTY_NAME", "$get$DART_CLOSURE_PROPERTY_NAME", function() {
 | 
|      return H.getIsolateAffinityTag("_$dart_dartClosure");
 | 
| -  }, "IsolateNatives_thisScript", "$get$IsolateNatives_thisScript", "thisScript", function() {
 | 
| +  }, "DART_CLOSURE_PROPERTY_NAME", "IsolateNatives_thisScript", "$get$IsolateNatives_thisScript", function() {
 | 
|      return H.IsolateNatives_computeThisScript();
 | 
| -  }, "IsolateNatives_workerIds", "$get$IsolateNatives_workerIds", "workerIds", function() {
 | 
| -    return new P.Expando(null);
 | 
| -  }, "TypeErrorDecoder_noSuchMethodPattern", "$get$TypeErrorDecoder_noSuchMethodPattern", "noSuchMethodPattern", function() {
 | 
| -    return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokeCallErrorOn({toString: function() {
 | 
| +  }, "IsolateNatives_thisScript", "IsolateNatives_workerIds", "$get$IsolateNatives_workerIds", function() {
 | 
| +    if (typeof WeakMap == "function")
 | 
| +      var t1 = new WeakMap();
 | 
| +    else {
 | 
| +      t1 = $.Expando__keyCount;
 | 
| +      $.Expando__keyCount = t1 + 1;
 | 
| +      t1 = "expando$key$" + t1;
 | 
| +    }
 | 
| +    return new P.Expando(null, t1);
 | 
| +  }, "IsolateNatives_workerIds", "TypeErrorDecoder_noSuchMethodPattern", "$get$TypeErrorDecoder_noSuchMethodPattern", function() {
 | 
| +    return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokeCallErrorOn({
 | 
| +      toString: function() {
 | 
|          return "$receiver$";
 | 
| -      }}));
 | 
| -  }, "TypeErrorDecoder_notClosurePattern", "$get$TypeErrorDecoder_notClosurePattern", "notClosurePattern", function() {
 | 
| -    return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokeCallErrorOn({$method$: null, toString: function() {
 | 
| +      }
 | 
| +    }));
 | 
| +  }, "TypeErrorDecoder_noSuchMethodPattern", "TypeErrorDecoder_notClosurePattern", "$get$TypeErrorDecoder_notClosurePattern", function() {
 | 
| +    return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokeCallErrorOn({$method$: null,
 | 
| +      toString: function() {
 | 
|          return "$receiver$";
 | 
| -      }}));
 | 
| -  }, "TypeErrorDecoder_nullCallPattern", "$get$TypeErrorDecoder_nullCallPattern", "nullCallPattern", function() {
 | 
| +      }
 | 
| +    }));
 | 
| +  }, "TypeErrorDecoder_notClosurePattern", "TypeErrorDecoder_nullCallPattern", "$get$TypeErrorDecoder_nullCallPattern", function() {
 | 
|      return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokeCallErrorOn(null));
 | 
| -  }, "TypeErrorDecoder_nullLiteralCallPattern", "$get$TypeErrorDecoder_nullLiteralCallPattern", "nullLiteralCallPattern", function() {
 | 
| +  }, "TypeErrorDecoder_nullCallPattern", "TypeErrorDecoder_nullLiteralCallPattern", "$get$TypeErrorDecoder_nullLiteralCallPattern", function() {
 | 
|      return H.TypeErrorDecoder_extractPattern(function() {
 | 
|        var $argumentsExpr$ = '$arguments$';
 | 
|        try {
 | 
| @@ -15478,9 +15880,9 @@
 | 
|          return e.message;
 | 
|        }
 | 
|      }());
 | 
| -  }, "TypeErrorDecoder_undefinedCallPattern", "$get$TypeErrorDecoder_undefinedCallPattern", "undefinedCallPattern", function() {
 | 
| +  }, "TypeErrorDecoder_nullLiteralCallPattern", "TypeErrorDecoder_undefinedCallPattern", "$get$TypeErrorDecoder_undefinedCallPattern", function() {
 | 
|      return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokeCallErrorOn(void 0));
 | 
| -  }, "TypeErrorDecoder_undefinedLiteralCallPattern", "$get$TypeErrorDecoder_undefinedLiteralCallPattern", "undefinedLiteralCallPattern", function() {
 | 
| +  }, "TypeErrorDecoder_undefinedCallPattern", "TypeErrorDecoder_undefinedLiteralCallPattern", "$get$TypeErrorDecoder_undefinedLiteralCallPattern", function() {
 | 
|      return H.TypeErrorDecoder_extractPattern(function() {
 | 
|        var $argumentsExpr$ = '$arguments$';
 | 
|        try {
 | 
| @@ -15489,9 +15891,9 @@
 | 
|          return e.message;
 | 
|        }
 | 
|      }());
 | 
| -  }, "TypeErrorDecoder_nullPropertyPattern", "$get$TypeErrorDecoder_nullPropertyPattern", "nullPropertyPattern", function() {
 | 
| +  }, "TypeErrorDecoder_undefinedLiteralCallPattern", "TypeErrorDecoder_nullPropertyPattern", "$get$TypeErrorDecoder_nullPropertyPattern", function() {
 | 
|      return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokePropertyErrorOn(null));
 | 
| -  }, "TypeErrorDecoder_nullLiteralPropertyPattern", "$get$TypeErrorDecoder_nullLiteralPropertyPattern", "nullLiteralPropertyPattern", function() {
 | 
| +  }, "TypeErrorDecoder_nullPropertyPattern", "TypeErrorDecoder_nullLiteralPropertyPattern", "$get$TypeErrorDecoder_nullLiteralPropertyPattern", function() {
 | 
|      return H.TypeErrorDecoder_extractPattern(function() {
 | 
|        try {
 | 
|          null.$method$;
 | 
| @@ -15499,9 +15901,9 @@
 | 
|          return e.message;
 | 
|        }
 | 
|      }());
 | 
| -  }, "TypeErrorDecoder_undefinedPropertyPattern", "$get$TypeErrorDecoder_undefinedPropertyPattern", "undefinedPropertyPattern", function() {
 | 
| +  }, "TypeErrorDecoder_nullLiteralPropertyPattern", "TypeErrorDecoder_undefinedPropertyPattern", "$get$TypeErrorDecoder_undefinedPropertyPattern", function() {
 | 
|      return H.TypeErrorDecoder_extractPattern(H.TypeErrorDecoder_provokePropertyErrorOn(void 0));
 | 
| -  }, "TypeErrorDecoder_undefinedLiteralPropertyPattern", "$get$TypeErrorDecoder_undefinedLiteralPropertyPattern", "undefinedLiteralPropertyPattern", function() {
 | 
| +  }, "TypeErrorDecoder_undefinedPropertyPattern", "TypeErrorDecoder_undefinedLiteralPropertyPattern", "$get$TypeErrorDecoder_undefinedLiteralPropertyPattern", function() {
 | 
|      return H.TypeErrorDecoder_extractPattern(function() {
 | 
|        try {
 | 
|          (void 0).$method$;
 | 
| @@ -15509,73 +15911,73 @@
 | 
|          return e.message;
 | 
|        }
 | 
|      }());
 | 
| -  }, "_AsyncRun__scheduleImmediateClosure", "$get$_AsyncRun__scheduleImmediateClosure", "_scheduleImmediateClosure", function() {
 | 
| +  }, "TypeErrorDecoder_undefinedLiteralPropertyPattern", "_AsyncRun__scheduleImmediateClosure", "$get$_AsyncRun__scheduleImmediateClosure", function() {
 | 
|      return P._AsyncRun__initializeScheduleImmediate();
 | 
| -  }, "Future__nullFuture", "$get$Future__nullFuture", "_nullFuture", function() {
 | 
| +  }, "_AsyncRun__scheduleImmediateClosure", "Future__nullFuture", "$get$Future__nullFuture", function() {
 | 
|      return P.Future_Future$value(null, null);
 | 
| -  }, "_RootZone__rootMap", "$get$_RootZone__rootMap", "_rootMap", function() {
 | 
| +  }, "Future__nullFuture", "_RootZone__rootMap", "$get$_RootZone__rootMap", function() {
 | 
|      return P.HashMap_HashMap(null, null, null, null, null);
 | 
| -  }, "_toStringVisiting", "$get$_toStringVisiting", "_toStringVisiting", function() {
 | 
| +  }, "_RootZone__rootMap", "_toStringVisiting", "$get$_toStringVisiting", function() {
 | 
|      return [];
 | 
| -  }, "Uri__needsNoEncoding", "$get$Uri__needsNoEncoding", "_needsNoEncoding", function() {
 | 
| +  }, "_toStringVisiting", "Uri__needsNoEncoding", "$get$Uri__needsNoEncoding", function() {
 | 
|      return P.RegExp_RegExp("^[\\-\\.0-9A-Z_a-z~]*$", true, false);
 | 
| -  }, "context", "$get$context", "context", function() {
 | 
| +  }, "Uri__needsNoEncoding", "context", "$get$context", function() {
 | 
|      return P._wrapToDart(self);
 | 
| -  }, "_DART_OBJECT_PROPERTY_NAME", "$get$_DART_OBJECT_PROPERTY_NAME", "_DART_OBJECT_PROPERTY_NAME", function() {
 | 
| +  }, "context", "_DART_OBJECT_PROPERTY_NAME", "$get$_DART_OBJECT_PROPERTY_NAME", function() {
 | 
|      return H.getIsolateAffinityTag("_$dart_dartObject");
 | 
| -  }, "_dartProxyCtor", "$get$_dartProxyCtor", "_dartProxyCtor", function() {
 | 
| +  }, "_DART_OBJECT_PROPERTY_NAME", "_dartProxyCtor", "$get$_dartProxyCtor", function() {
 | 
|      return function DartObject(o) {
 | 
|        this.o = o;
 | 
|      };
 | 
| -  }, "_vmFrame", "$get$_vmFrame", "_vmFrame", function() {
 | 
| +  }, "_dartProxyCtor", "_vmFrame", "$get$_vmFrame", function() {
 | 
|      return P.RegExp_RegExp("^#\\d+\\s+(\\S.*) \\((.+?)((?::\\d+){0,2})\\)$", true, false);
 | 
| -  }, "_v8Frame", "$get$_v8Frame", "_v8Frame", function() {
 | 
| +  }, "_vmFrame", "_v8Frame", "$get$_v8Frame", function() {
 | 
|      return P.RegExp_RegExp("^\\s*at (?:(\\S.*?)(?: \\[as [^\\]]+\\])? \\((.*)\\)|(.*))$", true, false);
 | 
| -  }, "_v8UrlLocation", "$get$_v8UrlLocation", "_v8UrlLocation", function() {
 | 
| +  }, "_v8Frame", "_v8UrlLocation", "$get$_v8UrlLocation", function() {
 | 
|      return P.RegExp_RegExp("^(.*):(\\d+):(\\d+)|native$", true, false);
 | 
| -  }, "_v8EvalLocation", "$get$_v8EvalLocation", "_v8EvalLocation", function() {
 | 
| +  }, "_v8UrlLocation", "_v8EvalLocation", "$get$_v8EvalLocation", function() {
 | 
|      return P.RegExp_RegExp("^eval at (?:\\S.*?) \\((.*)\\)(?:, .*?:\\d+:\\d+)?$", true, false);
 | 
| -  }, "_firefoxSafariFrame", "$get$_firefoxSafariFrame", "_firefoxSafariFrame", function() {
 | 
| +  }, "_v8EvalLocation", "_firefoxSafariFrame", "$get$_firefoxSafariFrame", function() {
 | 
|      return P.RegExp_RegExp("^(?:([^@(/]*)(?:\\(.*\\))?((?:/[^/]*)*)(?:\\(.*\\))?@)?(.*?):(\\d*)(?::(\\d*))?$", true, false);
 | 
| -  }, "_friendlyFrame", "$get$_friendlyFrame", "_friendlyFrame", function() {
 | 
| +  }, "_firefoxSafariFrame", "_friendlyFrame", "$get$_friendlyFrame", function() {
 | 
|      return P.RegExp_RegExp("^(\\S+)(?: (\\d+)(?::(\\d+))?)?\\s+([^\\d]\\S*)$", true, false);
 | 
| -  }, "_asyncBody", "$get$_asyncBody", "_asyncBody", function() {
 | 
| +  }, "_friendlyFrame", "_asyncBody", "$get$_asyncBody", function() {
 | 
|      return P.RegExp_RegExp("<(<anonymous closure>|[^>]+)_async_body>", true, false);
 | 
| -  }, "_initialDot", "$get$_initialDot", "_initialDot", function() {
 | 
| +  }, "_asyncBody", "_initialDot", "$get$_initialDot", function() {
 | 
|      return P.RegExp_RegExp("^\\.", true, false);
 | 
| -  }, "Frame__uriRegExp", "$get$Frame__uriRegExp", "_uriRegExp", function() {
 | 
| +  }, "_initialDot", "Frame__uriRegExp", "$get$Frame__uriRegExp", function() {
 | 
|      return P.RegExp_RegExp("^[a-zA-Z][-+.a-zA-Z\\d]*://", true, false);
 | 
| -  }, "Frame__windowsRegExp", "$get$Frame__windowsRegExp", "_windowsRegExp", function() {
 | 
| +  }, "Frame__uriRegExp", "Frame__windowsRegExp", "$get$Frame__windowsRegExp", function() {
 | 
|      return P.RegExp_RegExp("^([a-zA-Z]:[\\\\/]|\\\\\\\\)", true, false);
 | 
| -  }, "_iframes", "$get$_iframes", "_iframes", function() {
 | 
| +  }, "Frame__windowsRegExp", "_iframes", "$get$_iframes", function() {
 | 
|      return H.JsLinkedHashMap_JsLinkedHashMap$es6(P.$int, W.IFrameElement);
 | 
| -  }, "windows", "$get$windows", "windows", function() {
 | 
| +  }, "_iframes", "windows", "$get$windows", function() {
 | 
|      return F.Context_Context(null, $.$get$Style_windows());
 | 
| -  }, "context0", "$get$context0", "context", function() {
 | 
| +  }, "windows", "context0", "$get$context0", function() {
 | 
|      return new F.Context($.$get$Style_platform(), null);
 | 
| -  }, "Style_posix", "$get$Style_posix", "posix", function() {
 | 
| +  }, "context0", "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);
 | 
| -  }, "Style_windows", "$get$Style_windows", "windows", function() {
 | 
| +  }, "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));
 | 
| -  }, "Style_url", "$get$Style_url", "url", function() {
 | 
| +  }, "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));
 | 
| -  }, "Style_platform", "$get$Style_platform", "platform", function() {
 | 
| +  }, "Style_url", "Style_platform", "$get$Style_platform", function() {
 | 
|      return S.Style__getPlatformStyle();
 | 
| -  }, "_terseRegExp", "$get$_terseRegExp", "_terseRegExp", function() {
 | 
| +  }, "Style_platform", "_terseRegExp", "$get$_terseRegExp", function() {
 | 
|      return P.RegExp_RegExp("(-patch)?([/\\\\].*)?$", true, false);
 | 
| -  }, "_v8Trace", "$get$_v8Trace", "_v8Trace", function() {
 | 
| +  }, "_terseRegExp", "_v8Trace", "$get$_v8Trace", function() {
 | 
|      return P.RegExp_RegExp("\\n    ?at ", true, false);
 | 
| -  }, "_v8TraceLine", "$get$_v8TraceLine", "_v8TraceLine", function() {
 | 
| +  }, "_v8Trace", "_v8TraceLine", "$get$_v8TraceLine", function() {
 | 
|      return P.RegExp_RegExp("    ?at ", true, false);
 | 
| -  }, "_firefoxSafariTrace", "$get$_firefoxSafariTrace", "_firefoxSafariTrace", function() {
 | 
| +  }, "_v8TraceLine", "_firefoxSafariTrace", "$get$_firefoxSafariTrace", function() {
 | 
|      return P.RegExp_RegExp("^(([.0-9A-Za-z_$/<]|\\(.*\\))*@)?[^\\s]*:\\d*$", true, true);
 | 
| -  }, "_friendlyTrace", "$get$_friendlyTrace", "_friendlyTrace", function() {
 | 
| +  }, "_firefoxSafariTrace", "_friendlyTrace", "$get$_friendlyTrace", function() {
 | 
|      return P.RegExp_RegExp("^[^\\s]+( \\d+(:\\d+)?)?[ \\t]+[^\\s]+$", true, true);
 | 
| -  }]);
 | 
| +  }, "_friendlyTrace"]);
 | 
|    Isolate = Isolate.$finishIsolateConstructor(Isolate);
 | 
|    $ = new Isolate();
 | 
| -  init.metadata = ["self", "error", "stackTrace", "parent", "zone", null, "value", "message", "f", "_", "line", "trace", "frame", "arg", "result", "data", "callback", "key", "duration", "object", "arg1", "arg2", "each", "element", "invocation", "x", "o", "numberOfArguments", "arg3", "arg4", "specification", "zoneValues", "sender", "e", "ignored", "k", "v", 0, "encodedComponent", "s", "byteString", "captureThis", "arguments", "closure", "isolate", "errorCode"];
 | 
| -  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, ret: {func: 1}, args: [{func: 1}]}, {func: 1, args: [,], opt: [,]}, {func: 1, v: true, args: [P.Object], opt: [P.StackTrace]}, {func: 1, v: true, args: [, P.StackTrace]}, {func: 1, ret: P.Object, args: [,]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.String, args: [P.$int]}, {func: 1, ret: P.AsyncError, args: [P.Object, P.StackTrace]}, {func: 1, ret: {func: 1, args: [,,]}, args: [{func: 1, args: [,,]}]}, {func: 1, ret: {func: 1, args: [,]}, args: [{func: 1, args: [,]}]}, {func: 1, args: [{func: 1, args: [,,]},,,]}, {func: 1, args: [{func: 1, args: [,]},,]}, {func: 1, args: [{func: 1}]}, {func: 1, ret: P.Zone, named: {specification: P.ZoneSpecification, zoneValues: P.Map}}, {func: 1, ret: P.AsyncError, args: [P.Zone, P.Object, P.StackTrace]}, {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, args: [, P.String]}, {func: 1, ret: {func: 1, args: [,]}, args: [P.Zone, {func: 1, args: [,]}]}, {func: 1, ret: {func: 1}, args: [P.Zone, {func: 1}]}, {func: 1, args: [P.Zone, {func: 1, args: [,,]},,,]}, {func: 1, ret: {func: 1, args: [,,]}, args: [P.Zone, {func: 1, args: [,,]}]}, {func: 1, args: [P.Zone, {func: 1, args: [,]},,]}, {func: 1, args: [P.Zone, {func: 1}]}, {func: 1, args: [P.Zone,, P.StackTrace]}, {func: 1, args: [P.String]}, {func: 1, args: [P.bool]}, {func: 1, ret: P.bool}, {func: 1, args: [{func: 1, v: true}]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone,, P.StackTrace]}, {func: 1, args: [P.String,,]}, {func: 1, ret: P.$int, args: [, P.$int]}, {func: 1, ret: P.num, args: [P.num, P.num]}, {func: 1, args: [P.Symbol,,]}, {func: 1, v: true, opt: [,]}, {func: 1, ret: P.$int, args: [,,]}, {func: 1, v: true, args: [P.String], opt: [,]}, {func: 1, ret: P.$int, args: [P.$int, P.$int]}, {func: 1, ret: P.Future, args: [,]}, {func: 1, v: true, args: [,]}, {func: 1, v: true, args: [P.Zone, P.ZoneDelegate, P.Zone,, P.StackTrace]}, {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, args: [P.$int,,]}, {func: 1, ret: P.String, args: [P.String]}, {func: 1, v: true, args: [P.$int, P.$int]}];
 | 
| +  init.metadata = ["self", "zone", "parent", "error", "stackTrace", null, "_", "value", "message", "f", "line", "frame", "data", "result", "trace", "arg", "callback", "key", "each", "arg2", "duration", "x", "element", "arg1", "o", "object", "arg4", "arg3", "numberOfArguments", "isolate", "closure", "specification", "zoneValues", "e", "errorCode", "sender", "k", "v", 0, "encodedComponent", "s", "byteString", "captureThis", "arguments"];
 | 
| +  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, ret: {func: 1, args: [,]}, args: [{func: 1, args: [,]}]}, {func: 1, v: true, args: [P.Object], opt: [P.StackTrace]}, {func: 1, v: true, args: [, P.StackTrace]}, {func: 1, args: [P.Zone, P.ZoneDelegate, P.Zone,, P.StackTrace]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true, args: [P.Timer]}]}, {func: 1, ret: P.Timer, args: [P.Duration, {func: 1, v: true}]}, {func: 1, ret: P.String, args: [P.$int]}, {func: 1, ret: P.AsyncError, args: [P.Object, P.StackTrace]}, {func: 1, ret: {func: 1, args: [,,]}, args: [{func: 1, args: [,,]}]}, {func: 1, ret: {func: 1}, args: [{func: 1}]}, {func: 1, args: [{func: 1, args: [,,]},,,]}, {func: 1, args: [{func: 1, args: [,]},,]}, {func: 1, args: [{func: 1}]}, {func: 1, ret: P.Zone, named: {specification: P.ZoneSpecification, zoneValues: P.Map}}, {func: 1, args: [, P.String]}, {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, 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: {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: P.AsyncError, args: [P.Zone, P.Object, P.StackTrace]}, {func: 1, args: [P.Zone, {func: 1}]}, {func: 1, args: [P.Zone,, P.StackTrace]}, {func: 1, args: [P.String]}, {func: 1, args: [P.bool]}, {func: 1, args: [,], opt: [,]}, {func: 1, args: [{func: 1, v: true}]}, {func: 1, args: [P.String,,]}, {func: 1, v: true, opt: [,]}, {func: 1, ret: P.$int, args: [, P.$int]}, {func: 1, v: true, args: [P.$int, P.$int]}, {func: 1, ret: P.num, args: [P.num, P.num]}, {func: 1, args: [P.$int,,]}, {func: 1, v: true, args: [P.String, P.String]}, {func: 1, ret: P.$int, args: [,,]}, {func: 1, v: true, args: [P.String], opt: [,]}, {func: 1, ret: P.$int, args: [P.$int, 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, ret: P.Object, args: [,]}, {func: 1, args: [P.Symbol,,]}];
 | 
|    function convertToFastObject(properties) {
 | 
|      function MyClass() {
 | 
|      }
 | 
| 
 |