Version 0.8.10.4

svn merge -c 29753 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29770 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29789 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29798 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29812 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29814 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29816 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29817 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29818 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29819 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29820 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29821 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29822 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29823 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29824 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29825 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29826 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29827 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29828 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29830 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29831 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29833 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29835 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29836 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29837 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29838 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29839 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29840 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29841 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29844 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29846 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29847 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29849 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29850 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29852 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29855 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29856 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29858 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29859 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29860 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29862 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29864 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29865 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29868 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29870 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29873 https://dart.googlecode.com/svn/branches/bleeding_edge trunk
svn merge -c 29877 https://dart.googlecode.com/svn/branches/bleeding_edge trunk

R=kasperl@google.com

Review URL: https://codereview.chromium.org//59073003

git-svn-id: http://dart.googlecode.com/svn/trunk@29892 260f80e4-7a28-3924-810f-c04153c831b5
diff --git a/pkg/custom_element/lib/custom_element.dart b/pkg/custom_element/lib/custom_element.dart
index 7bdb00c..ab285ae 100644
--- a/pkg/custom_element/lib/custom_element.dart
+++ b/pkg/custom_element/lib/custom_element.dart
@@ -35,7 +35,6 @@
   /** The web component element wrapped by this class. */
   Element _host;
   List _shadowRoots;
-  _AttributeMap _attributes;
 
   /**
    * Shadow roots generated by dwc for each custom element, indexed by the
@@ -107,7 +106,8 @@
   void leftView() {}
 
   /** Invoked when any attribute of the component is modified. */
-  void attributeChanged(String name, String oldValue) {}
+  void attributeChanged(String name, String oldValue, String newValue) =>
+      host.attributeChanged(name, oldValue, newValue);
 
   // TODO(efortuna): Update these when we decide what to do with these
   // properties.
@@ -155,7 +155,7 @@
 
   String get nodeName => host.nodeName;
 
-  Document get document => host.document;
+  Document get ownerDocument => host.ownerDocument;
 
   Node get previousNode => host.previousNode;
 
@@ -173,12 +173,9 @@
   Node insertAllBefore(Iterable<Node> newChild, Node refChild) =>
     host.insertAllBefore(newChild, refChild);
 
-  Map<String, String> get attributes {
-    if (_attributes == null) _attributes = new _AttributeMap(this);
-    return _attributes;
-  }
+  Map<String, String> get attributes => host.attributes;
   set attributes(Map<String, String> value) {
-    (attributes as _AttributeMap)._replaceAll(value);
+    host.attributes = value;
   }
 
   List<Element> get elements => host.children;
@@ -237,12 +234,6 @@
   String get id => host.id;
   set id(String v) { host.id = v; }
 
-  String get innerHTML => host.innerHtml;
-
-  void set innerHTML(String v) {
-    host.innerHtml = v;
-  }
-
   String get innerHtml => host.innerHtml;
   void set innerHtml(String v) {
     host.innerHtml = v;
@@ -253,10 +244,6 @@
     host.setInnerHtml(html, validator: validator, treeSanitizer: treeSanitizer);
   }
 
-  void set unsafeInnerHtml(String html) {
-    host.unsafeInnerHtml = html;
-  }
-
   DocumentFragment createFragment(String html,
       {NodeValidator validator, NodeTreeSanitizer treeSanitizer}) =>
     host.createFragment(html,
@@ -359,9 +346,16 @@
 
   void requestPointerLock() { host.requestPointerLock(); }
 
-  Element query(String selectors) => host.query(selectors);
+  Element querySelector(String selectors) => host.querySelector(selectors);
 
-  ElementList queryAll(String selectors) => host.queryAll(selectors);
+  ElementList querySelectorAll(String selectors) =>
+      host.querySelectorAll(selectors);
+
+  @deprecated
+  Element query(String selectors) => host.querySelector(selectors);
+
+  @deprecated
+  ElementList queryAll(String selectors) => host.querySelectorAll(selectors);
 
   String get className => host.className;
   set className(String value) { host.className = value; }
@@ -423,16 +417,16 @@
 
   int get nodeType => host.nodeType;
 
-  void $dom_addEventListener(String type, EventListener listener,
-                             [bool useCapture]) {
-    host.$dom_addEventListener(type, listener, useCapture);
+  void addEventListener(String type, EventListener listener,
+      [bool useCapture]) {
+    host.addEventListener(type, listener, useCapture);
   }
 
   bool dispatchEvent(Event event) => host.dispatchEvent(event);
 
-  void $dom_removeEventListener(String type, EventListener listener,
-                                [bool useCapture]) {
-    host.$dom_removeEventListener(type, listener, useCapture);
+  void removeEventListener(String type, EventListener listener,
+      [bool useCapture]) {
+    host.removeEventListener(type, listener, useCapture);
   }
 
   get xtag => host.xtag;
diff --git a/pkg/pkg.status b/pkg/pkg.status
index c14883e..a86c987 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -304,14 +304,6 @@
 source_maps/test/parser_test: Pass, Timeout # Issue 13719: Please triage this failure.
 polymer_expressions/test/bindings_test: Fail, Pass # Issue 14445.
 
-[ $compiler == dartanalyzer ]
-# pkg issue 13944; Missing inherited member 'Observable._mirror'
-custom_element/test/analyzer_test: fail
-
-[ $compiler == dart2analyzer ]
-# pkg issue 13944; Missing inherited members: 'ListChangeRecord.addedCount' and 'ListChangeRecord.removedCount'
-custom_element/test/analyzer_test: fail
-
 [ $compiler == dartanalyzer || $compiler == dart2analyzer ]
 docgen/test/single_library_test: StaticWarning
 http_server/test/http_body_test: StaticWarning
diff --git a/pkg/polymer/example/component/news/web/index.html b/pkg/polymer/example/component/news/web/index.html
index 8dda8f59..b9e56c9 100644
--- a/pkg/polymer/example/component/news/web/index.html
+++ b/pkg/polymer/example/component/news/web/index.html
@@ -18,7 +18,7 @@
     <li><a href="//example.com/stories/4">Awesome story</a></li>
     <li class="breaking"><a href="//example.com/stories/5">Horrible story</a></li>
 </ul>
-  <script type="application/dart">import 'package:polymer/init.dart';</script>
+  <script type="application/dart">export 'package:polymer/init.dart';</script>
   <script src='packages/browser/dart.js'></script>
 </body>
 </html>
diff --git a/pkg/polymer/lib/boot.js b/pkg/polymer/lib/boot.js
index 0cb6714..d4a0f8f 100644
--- a/pkg/polymer/lib/boot.js
+++ b/pkg/polymer/lib/boot.js
@@ -5,7 +5,7 @@
 (function() {
   console.error('"boot.js" is now deprecated. Instead, you can initialize '
     + 'your polymer application by adding the following tags: \'' +
-    + '<script type="application/dart">import "package:polymer/init.dart";'
+    + '<script type="application/dart">export "package:polymer/init.dart";'
     + '</script><script src="packages/browser/dart.js"></script>\'. '
     + 'Make sure these script tags come after all HTML imports.');
 })();
diff --git a/pkg/polymer/lib/src/build/linter.dart b/pkg/polymer/lib/src/build/linter.dart
index 317765f..f186d31 100644
--- a/pkg/polymer/lib/src/build/linter.dart
+++ b/pkg/polymer/lib/src/build/linter.dart
@@ -544,7 +544,7 @@
 const String USE_INIT_DART =
     'To run a polymer applications, you need to call "initPolymer". You can '
     'either include a generic script tag that does this for you:'
-    '\'<script type="application/dart">import "package:polymer/init.dart";'
+    '\'<script type="application/dart">export "package:polymer/init.dart";'
     '</script>\' or add your own script tag and call that function. '
     'Make sure the script tag is placed after all HTML imports.';
 
@@ -556,7 +556,7 @@
     '"boot.js" is now deprecated. Instead, you can initialize your polymer '
     'application by calling "initPolymer()" in your main. If you don\'t have a '
     'main, then you can include our generic main by adding the following '
-    'script tag to your page: \'<script type="application/dart">import '
+    'script tag to your page: \'<script type="application/dart">export '
     '"package:polymer/init.dart";</script>\'. Additionally you need to '
     'include: \'<script src="packages/browser/dart.js"></script>\' in the page '
     'too. Make sure these script tags come after all HTML imports.';
diff --git a/pkg/polymer/lib/src/build/script_compactor.dart b/pkg/polymer/lib/src/build/script_compactor.dart
index bfb2c56..e869a2c 100644
--- a/pkg/polymer/lib/src/build/script_compactor.dart
+++ b/pkg/polymer/lib/src/build/script_compactor.dart
@@ -81,10 +81,7 @@
         mainScriptTag.attributes['src'] =
             path.url.basename(bootstrapId.path);
 
-        // TODO(sigmund): stop renaming the file (see dartbug.com/14554)
-        var modifiedMainId = mainLibraryId.addExtension('_modified.dart');
-
-        libraries.add(modifiedMainId);
+        libraries.add(mainLibraryId);
         var urls = libraries.map((id) => assetUrlFor(id, bootstrapId, logger))
             .where((url) => url != null).toList();
         var buffer = new StringBuffer()..writeln(MAIN_HEADER);
@@ -98,17 +95,12 @@
             ..writeln('  configureForDeployment([')
             ..writeAll(urls.map((url) => "      '$url',\n"))
             ..writeln('    ]);')
-            ..writeln('  i${i - 1}.polymerMainWrapper();')
+            ..writeln('  i${i - 1}.main();')
             ..writeln('}');
 
         transform.addOutput(new Asset.fromString(
               bootstrapId, buffer.toString()));
         transform.addOutput(new Asset.fromString(id, document.outerHtml));
-
-        return transform.readInputAsString(mainLibraryId).then((contents) {
-          transform.addOutput(new Asset.fromString(modifiedMainId,
-              '$contents\n\npolymerMainWrapper() => main();\n'));
-        });
       });
     });
   }
diff --git a/pkg/polymer/test/build/all_phases_test.dart b/pkg/polymer/test/build/all_phases_test.dart
index 4b6b759..bb39a85 100644
--- a/pkg/polymer/test/build/all_phases_test.dart
+++ b/pkg/polymer/test/build/all_phases_test.dart
@@ -45,18 +45,16 @@
 
       'a|web/test.html_bootstrap.dart':
           '''$MAIN_HEADER
-          import 'a.dart_modified.dart' as i0;
+          import 'a.dart' as i0;
 
           void main() {
             configureForDeployment([
-                'a.dart_modified.dart',
+                'a.dart',
               ]);
-            i0.polymerMainWrapper();
+            i0.main();
           }
           '''.replaceAll('\n          ', '\n'),
       'a|web/a.dart': _sampleObservableOutput('A', 'foo'),
-      'a|web/a.dart_modified.dart':
-          _sampleObservableOutput('A', 'foo', includeMain: true),
     });
 
   testPhases('single inline script', phases, {
@@ -75,19 +73,17 @@
 
       'a|web/test.html_bootstrap.dart':
           '''$MAIN_HEADER
-          import 'test.html.0.dart_modified.dart' as i0;
+          import 'test.html.0.dart' as i0;
 
           void main() {
             configureForDeployment([
-                'test.html.0.dart_modified.dart',
+                'test.html.0.dart',
               ]);
-            i0.polymerMainWrapper();
+            i0.main();
           }
           '''.replaceAll('\n          ', '\n'),
       'a|web/test.html.0.dart':
           _sampleObservableOutput("B", "bar"),
-      'a|web/test.html.0.dart_modified.dart':
-          _sampleObservableOutput("B", "bar", includeMain: true),
     });
 
   testPhases('several scripts', phases, {
@@ -119,18 +115,16 @@
 
       'a|web/test.html_bootstrap.dart':
           '''$MAIN_HEADER
-          import 'a.dart_modified.dart' as i0;
+          import 'a.dart' as i0;
 
           void main() {
             configureForDeployment([
-                'a.dart_modified.dart',
+                'a.dart',
               ]);
-            i0.polymerMainWrapper();
+            i0.main();
           }
           '''.replaceAll('\n          ', '\n'),
       'a|web/a.dart': _sampleObservableOutput('A', 'foo'),
-      'a|web/a.dart_modified.dart':
-          _sampleObservableOutput('A', 'foo', includeMain: true),
       'a|web/test.html.0.dart': _sampleObservableOutput("B", "bar"),
       'a|web/test.html.1.dart': _sampleObservableOutput("C", "car"),
     });
@@ -160,19 +154,17 @@
       'a|web/index.html_bootstrap.dart':
           '''$MAIN_HEADER
           import 'test2.html.0.dart' as i0;
-          import 'b.dart_modified.dart' as i1;
+          import 'b.dart' as i1;
 
           void main() {
             configureForDeployment([
                 'test2.html.0.dart',
-                'b.dart_modified.dart',
+                'b.dart',
               ]);
-            i1.polymerMainWrapper();
+            i1.main();
           }
           '''.replaceAll('\n          ', '\n'),
       'a|web/test2.html.0.dart': _sampleObservableOutput("A", "foo"),
-      'a|web/test2.html.0.dart_modified.dart':
-          _sampleObservableOutput("A", "foo", includeMain: true),
       'a|web/b.dart': _sampleObservableOutput('B', 'bar'),
     });
 }
@@ -198,5 +190,4 @@
       "__\$$field = notifyPropertyChange(#$field, __\$$field, value); "
       "}\n"
     "  $className($field) : __\$$field = $field;\n"
-    "}\n"
-    "${includeMain ? '\n\npolymerMainWrapper() => main();\n' : ''}";
+    "}\n";
diff --git a/pkg/polymer/test/build/script_compactor_test.dart b/pkg/polymer/test/build/script_compactor_test.dart
index 946c90d..e3ec79c 100644
--- a/pkg/polymer/test/build/script_compactor_test.dart
+++ b/pkg/polymer/test/build/script_compactor_test.dart
@@ -46,19 +46,16 @@
 
       'a|web/test.html_bootstrap.dart':
           '''$MAIN_HEADER
-          import 'a.dart_modified.dart' as i0;
+          import 'a.dart' as i0;
 
           void main() {
             configureForDeployment([
-                'a.dart_modified.dart',
+                'a.dart',
               ]);
-            i0.polymerMainWrapper();
+            i0.main();
           }
           '''.replaceAll('\n          ', '\n'),
       'a|web/a.dart': 'library a;\nmain(){}',
-      'a|web/a.dart_modified.dart':
-          'library a;\nmain(){}'
-          '\n\npolymerMainWrapper() => main();\n',
     });
 
   testPhases('several scripts', phases, {
@@ -83,16 +80,16 @@
           import 'a.dart' as i0;
           import 'b.dart' as i1;
           import 'c.dart' as i2;
-          import 'd.dart_modified.dart' as i3;
+          import 'd.dart' as i3;
 
           void main() {
             configureForDeployment([
                 'a.dart',
                 'b.dart',
                 'c.dart',
-                'd.dart_modified.dart',
+                'd.dart',
               ]);
-            i3.polymerMainWrapper();
+            i3.main();
           }
           '''.replaceAll('\n          ', '\n'),
     });
diff --git a/pkg/shadow_dom/lib/shadow_dom.debug.js b/pkg/shadow_dom/lib/shadow_dom.debug.js
index 2622ea3..5ed6ecf 100644
--- a/pkg/shadow_dom/lib/shadow_dom.debug.js
+++ b/pkg/shadow_dom/lib/shadow_dom.debug.js
@@ -1884,7 +1884,7 @@
 
     // 1.
     if (isShadowRoot(node))
-      return getInsertionParent(node) || scope.getHostForShadowRoot(node);
+      return getInsertionParent(node) || node.host;
 
     // 2.
     var eventParents = scope.eventParentsTable.get(node);
@@ -1980,7 +1980,7 @@
         ancestor = calculateParents(ancestor, context, ancestors);  // 3.4.7.
       }
       if (isShadowRoot(target))  // 3.5.
-        target = scope.getHostForShadowRoot(target);
+        target = target.host;
       else
         target = target.parentNode;  // 3.6.
     }
@@ -2009,10 +2009,8 @@
   function enclosedBy(a, b) {
     if (a === b)
       return true;
-    if (a instanceof wrappers.ShadowRoot) {
-      var host = scope.getHostForShadowRoot(a);
-      return enclosedBy(rootOfNode(host), b);
-    }
+    if (a instanceof wrappers.ShadowRoot)
+      return enclosedBy(rootOfNode(a.host), b);
     return false;
   }
 
@@ -2434,7 +2432,7 @@
 
   function getTargetToListenAt(wrapper) {
     if (wrapper instanceof wrappers.ShadowRoot)
-      wrapper = scope.getHostForShadowRoot(wrapper);
+      wrapper = wrapper.host;
     return unwrap(wrapper);
   }
 
@@ -2671,11 +2669,13 @@
     }
 
     var nodes = [];
-    var firstChild;
-    while (firstChild = node.firstChild) {
-      node.removeChild(firstChild);
-      nodes.push(firstChild);
-      firstChild.parentNode_ = parentNode;
+    for (var child = node.firstChild; child; child = child.nextSibling) {
+      nodes.push(child);
+    }
+
+    for (var i = nodes.length - 1; i >= 0; i--) {
+      node.removeChild(nodes[i]);
+      nodes[i].parentNode_ = parentNode;
     }
 
     for (var i = 0; i < nodes.length; i++) {
@@ -2825,12 +2825,28 @@
     this.previousSibling_ = undefined;
   };
 
+  var OriginalDocumentFragment = window.DocumentFragment;
   var originalAppendChild = OriginalNode.prototype.appendChild;
-  var originalInsertBefore = OriginalNode.prototype.insertBefore;
-  var originalReplaceChild = OriginalNode.prototype.replaceChild;
-  var originalRemoveChild = OriginalNode.prototype.removeChild;
   var originalCompareDocumentPosition =
       OriginalNode.prototype.compareDocumentPosition;
+  var originalInsertBefore = OriginalNode.prototype.insertBefore;
+  var originalRemoveChild = OriginalNode.prototype.removeChild;
+  var originalReplaceChild = OriginalNode.prototype.replaceChild;
+
+  var isIe = /Trident/.test(navigator.userAgent);
+
+  var removeChildOriginalHelper = isIe ?
+      function(parent, child) {
+        try {
+          originalRemoveChild.call(parent, child);
+        } catch (ex) {
+          if (!(parent instanceof OriginalDocumentFragment))
+            throw ex;
+        }
+      } :
+      function(parent, child) {
+        originalRemoveChild.call(parent, child);
+      };
 
   Node.prototype = Object.create(EventTarget.prototype);
   mixin(Node.prototype, {
@@ -2906,8 +2922,20 @@
     removeChild: function(childWrapper) {
       assertIsNodeWrapper(childWrapper);
       if (childWrapper.parentNode !== this) {
-        // TODO(arv): DOMException
-        throw new Error('NotFoundError');
+        // IE has invalid DOM trees at times.
+        var found = false;
+        var childNodes = this.childNodes;
+        for (var ieChild = this.firstChild; ieChild;
+             ieChild = ieChild.nextSibling) {
+          if (ieChild === childWrapper) {
+            found = true;
+            break;
+          }
+        }
+        if (!found) {
+          // TODO(arv): DOMException
+          throw new Error('NotFoundError');
+        }
       }
 
       var childNode = unwrap(childWrapper);
@@ -2923,7 +2951,7 @@
 
         var parentNode = childNode.parentNode;
         if (parentNode)
-          originalRemoveChild.call(parentNode, childNode);
+          removeChildOriginalHelper(parentNode, childNode);
 
         if (thisFirstChild === childWrapper)
           this.firstChild_ = childWrapperNextSibling;
@@ -2939,7 +2967,7 @@
         childWrapper.previousSibling_ = childWrapper.nextSibling_ =
             childWrapper.parentNode_ = undefined;
       } else {
-        originalRemoveChild.call(this.impl, childNode);
+        removeChildOriginalHelper(this.impl, childNode);
       }
 
       return childWrapper;
@@ -3726,12 +3754,13 @@
     }
 
     var node = unwrap(document.createElement('img'));
+    HTMLElement.call(this, node);
+    rewrap(node, this);
+
     if (width !== undefined)
       node.width = width;
     if (height !== undefined)
       node.height = height;
-    HTMLElement.call(this, node);
-    rewrap(node, this);
   }
 
   Image.prototype = HTMLImageElement.prototype;
@@ -3858,6 +3887,136 @@
 (function(scope) {
   'use strict';
 
+  var HTMLElement = scope.wrappers.HTMLElement;
+  var registerWrapper = scope.registerWrapper;
+
+  var OriginalHTMLMediaElement = window.HTMLMediaElement;
+
+  function HTMLMediaElement(node) {
+    HTMLElement.call(this, node);
+  }
+  HTMLMediaElement.prototype = Object.create(HTMLElement.prototype);
+
+  registerWrapper(OriginalHTMLMediaElement, HTMLMediaElement,
+                  document.createElement('audio'));
+
+  scope.wrappers.HTMLMediaElement = HTMLMediaElement;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+  'use strict';
+
+  var HTMLMediaElement = scope.wrappers.HTMLMediaElement;
+  var registerWrapper = scope.registerWrapper;
+  var unwrap = scope.unwrap;
+  var rewrap = scope.rewrap;
+
+  var OriginalHTMLAudioElement = window.HTMLAudioElement;
+
+  function HTMLAudioElement(node) {
+    HTMLMediaElement.call(this, node);
+  }
+  HTMLAudioElement.prototype = Object.create(HTMLMediaElement.prototype);
+
+  registerWrapper(OriginalHTMLAudioElement, HTMLAudioElement,
+                  document.createElement('audio'));
+
+  function Audio(src) {
+    if (!(this instanceof Audio)) {
+      throw new TypeError(
+          'DOM object constructor cannot be called as a function.');
+    }
+
+    var node = unwrap(document.createElement('audio'));
+    HTMLMediaElement.call(this, node);
+    rewrap(node, this);
+
+    node.setAttribute('preload', 'auto');
+    if (src !== undefined)
+      node.setAttribute('src', src);
+  }
+
+  Audio.prototype = HTMLAudioElement.prototype;
+
+  scope.wrappers.HTMLAudioElement = HTMLAudioElement;
+  scope.wrappers.Audio = Audio;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+  'use strict';
+
+  var HTMLElement = scope.wrappers.HTMLElement;
+  var mixin = scope.mixin;
+  var registerWrapper = scope.registerWrapper;
+  var rewrap = scope.rewrap;
+  var unwrap = scope.unwrap;
+  var wrap = scope.wrap;
+
+  var OriginalHTMLOptionElement = window.HTMLOptionElement;
+
+  function trimText(s) {
+    return s.replace(/\s+/g, ' ').trim();
+  }
+
+  function HTMLOptionElement(node) {
+    HTMLElement.call(this, node);
+  }
+  HTMLOptionElement.prototype = Object.create(HTMLElement.prototype);
+  mixin(HTMLOptionElement.prototype, {
+    get text() {
+      return trimText(this.textContent);
+    },
+    set text(value) {
+      this.textContent = trimText(String(value));
+    },
+    get form() {
+      return wrap(unwrap(this).form);
+    }
+  });
+
+  registerWrapper(OriginalHTMLOptionElement, HTMLOptionElement,
+                  document.createElement('option'));
+
+  function Option(text, value, defaultSelected, selected) {
+    if (!(this instanceof Option)) {
+      throw new TypeError(
+          'DOM object constructor cannot be called as a function.');
+    }
+
+    var node = unwrap(document.createElement('option'));
+    HTMLElement.call(this, node);
+    rewrap(node, this);
+
+    if (text !== undefined)
+      node.text = text;
+    if (value !== undefined)
+      node.setAttribute('value', value);
+    if (defaultSelected === true)
+      node.setAttribute('selected', '');
+    node.selected = selected === true;
+  }
+
+  Option.prototype = HTMLOptionElement.prototype;
+
+  scope.wrappers.HTMLOptionElement = HTMLOptionElement;
+  scope.wrappers.Option = Option;
+})(this.ShadowDOMPolyfill);
+
+// Copyright 2013 The Polymer Authors. All rights reserved.
+// Use of this source code is goverened by a BSD-style
+// license that can be found in the LICENSE file.
+
+(function(scope) {
+  'use strict';
+
   var HTMLContentElement = scope.wrappers.HTMLContentElement;
   var HTMLElement = scope.wrappers.HTMLElement;
   var HTMLShadowElement = scope.wrappers.HTMLShadowElement;
@@ -4037,6 +4196,10 @@
       return nextOlderShadowTreeTable.get(this) || null;
     },
 
+    get host() {
+      return shadowHostTable.get(this) || null;
+    },
+
     invalidateShadowRenderer: function() {
       return shadowHostTable.get(this).invalidateShadowRenderer();
     },
@@ -4051,9 +4214,6 @@
   });
 
   scope.wrappers.ShadowRoot = ShadowRoot;
-  scope.getHostForShadowRoot = function(node) {
-    return shadowHostTable.get(node);
-  };
 })(this.ShadowDOMPolyfill);
 // Copyright 2013 The Polymer Authors. All rights reserved.
 // Use of this source code is governed by a BSD-style
@@ -4068,7 +4228,6 @@
   var Node = scope.wrappers.Node;
   var ShadowRoot = scope.wrappers.ShadowRoot;
   var assert = scope.assert;
-  var getHostForShadowRoot = scope.getHostForShadowRoot;
   var mixin = scope.mixin;
   var muteMutationEvents = scope.muteMutationEvents;
   var oneOf = scope.oneOf;
@@ -4310,7 +4469,7 @@
   }
 
   function getRendererForShadowRoot(shadowRoot) {
-    return getRendererForHost(getHostForShadowRoot(shadowRoot));
+    return getRendererForHost(shadowRoot.host);
   }
 
   var spliceDiff = new ArraySplice();
@@ -4739,7 +4898,7 @@
     'HTMLLabelElement',
     'HTMLLegendElement',
     'HTMLObjectElement',
-    'HTMLOptionElement',
+    // HTMLOptionElement is handled in HTMLOptionElement.js
     'HTMLOutputElement',
     'HTMLSelectElement',
     'HTMLTextAreaElement',
@@ -4924,13 +5083,19 @@
         };
       });
 
-      var nativeConstructor = originalRegister.call(unwrap(this), tagName,
-          object.extends ? {prototype: newPrototype, extends: object.extends} :
-          {prototype: newPrototype});
+      var p = {prototype: newPrototype};
+      if (object.extends)
+        p.extends = object.extends;
+      var nativeConstructor = originalRegister.call(unwrap(this), tagName, p);
 
       function GeneratedWrapper(node) {
-        if (!node)
-          return document.createElement(tagName);
+        if (!node) {
+          if (object.extends) {
+            return document.createElement(object.extends, tagName);
+          } else {
+            return document.createElement(tagName);
+          }
+        }
         this.impl = node;
       }
       GeneratedWrapper.prototype = prototype;
@@ -5304,7 +5469,6 @@
     'a': 'HTMLAnchorElement',
     'applet': 'HTMLAppletElement',
     'area': 'HTMLAreaElement',
-    'audio': 'HTMLAudioElement',
     'br': 'HTMLBRElement',
     'base': 'HTMLBaseElement',
     'body': 'HTMLBodyElement',
@@ -5333,7 +5497,6 @@
     'link': 'HTMLLinkElement',
     'map': 'HTMLMapElement',
     'marquee': 'HTMLMarqueeElement',
-    // 'media', Covered by audio and video
     'menu': 'HTMLMenuElement',
     'menuitem': 'HTMLMenuItemElement',
     'meta': 'HTMLMetaElement',
@@ -5477,10 +5640,10 @@
 /*
   This is a limited shim for ShadowDOM css styling.
   https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
-
-  The intention here is to support only the styling features which can be
-  relatively simply implemented. The goal is to allow users to avoid the
-  most obvious pitfalls and do so without compromising performance significantly.
+  
+  The intention here is to support only the styling features which can be 
+  relatively simply implemented. The goal is to allow users to avoid the 
+  most obvious pitfalls and do so without compromising performance significantly. 
   For ShadowDOM styling that's not covered here, a set of best practices
   can be provided that should allow users to accomplish more complex styling.
 
@@ -5489,57 +5652,57 @@
 
   Shimmed features:
 
-  * @host: ShadowDOM allows styling of the shadowRoot's host element using the
-  @host rule. To shim this feature, the @host styles are reformatted and
+  * @host: ShadowDOM allows styling of the shadowRoot's host element using the 
+  @host rule. To shim this feature, the @host styles are reformatted and 
   prefixed with a given scope name and promoted to a document level stylesheet.
   For example, given a scope name of .foo, a rule like this:
-
+  
     @host {
       * {
         background: red;
       }
     }
-
+  
   becomes:
-
+  
     .foo {
       background: red;
     }
-
-  * encapsultion: Styles defined within ShadowDOM, apply only to
+  
+  * encapsultion: Styles defined within ShadowDOM, apply only to 
   dom inside the ShadowDOM. Polymer uses one of two techniques to imlement
   this feature.
-
-  By default, rules are prefixed with the host element tag name
+  
+  By default, rules are prefixed with the host element tag name 
   as a descendant selector. This ensures styling does not leak out of the 'top'
   of the element's ShadowDOM. For example,
 
   div {
       font-weight: bold;
     }
-
+  
   becomes:
 
   x-foo div {
       font-weight: bold;
     }
-
+  
   becomes:
 
 
-  Alternatively, if Platform.ShadowCSS.strictStyling is set to true then
+  Alternatively, if Platform.ShadowCSS.strictStyling is set to true then 
   selectors are scoped by adding an attribute selector suffix to each
-  simple selector that contains the host element tag name. Each element
-  in the element's ShadowDOM template is also given the scope attribute.
+  simple selector that contains the host element tag name. Each element 
+  in the element's ShadowDOM template is also given the scope attribute. 
   Thus, these rules match only elements that have the scope attribute.
   For example, given a scope name of x-foo, a rule like this:
-
+  
     div {
       font-weight: bold;
     }
-
+  
   becomes:
-
+  
     div[x-foo] {
       font-weight: bold;
     }
@@ -5571,39 +5734,39 @@
 
   becomes:
 
-    x-foo [part=special] { ... }
-
+    x-foo [part=special] { ... }    
+  
   Unaddressed ShadowDOM styling features:
-
+  
   * upper/lower bound encapsulation: Styles which are defined outside a
   shadowRoot should not cross the ShadowDOM boundary and should not apply
   inside a shadowRoot.
 
-  This styling behavior is not emulated. Some possible ways to do this that
+  This styling behavior is not emulated. Some possible ways to do this that 
   were rejected due to complexity and/or performance concerns include: (1) reset
   every possible property for every possible selector for a given scope name;
   (2) re-implement css in javascript.
-
+  
   As an alternative, users should make sure to use selectors
   specific to the scope in which they are working.
-
+  
   * ::distributed: This behavior is not emulated. It's often not necessary
   to style the contents of a specific insertion point and instead, descendants
-  of the host element can be styled selectively. Users can also create an
+  of the host element can be styled selectively. Users can also create an 
   extra node around an insertion point and style that node's contents
   via descendent selectors. For example, with a shadowRoot like this:
-
+  
     <style>
       content::-webkit-distributed(div) {
         background: red;
       }
     </style>
     <content></content>
-
+  
   could become:
-
+  
     <style>
-      / *@polyfill .content-container div * /
+      / *@polyfill .content-container div * / 
       content::-webkit-distributed(div) {
         background: red;
       }
@@ -5611,9 +5774,9 @@
     <div class="content-container">
       <content></content>
     </div>
-
+  
   Note the use of @polyfill in the comment above a ShadowDOM specific style
-  declaration. This is a directive to the styling shim to use the selector
+  declaration. This is a directive to the styling shim to use the selector 
   in comments in lieu of the next selector when running under polyfill.
 */
 (function(scope) {
@@ -5649,7 +5812,7 @@
       root.shimmedStyle = def.shimmedStyle;
     }
     // remove existing style elements
-    for (var i=0, l=def.rootStyles.length, s; (i<l) && (s=def.rootStyles[i]);
+    for (var i=0, l=def.rootStyles.length, s; (i<l) && (s=def.rootStyles[i]); 
         i++) {
       s.parentNode.removeChild(s);
     }
@@ -5693,14 +5856,14 @@
   /*
    * Process styles to convert native ShadowDOM rules that will trip
    * up the css parser; we rely on decorating the stylesheet with comments.
-   *
+   * 
    * For example, we convert this rule:
-   *
+   * 
    * (comment start) @polyfill :host menu-item (comment end)
    * shadow::-webkit-distributed(menu-item) {
-   *
+   * 
    * to this:
-   *
+   * 
    * scopeName menu-item {
    *
   **/
@@ -5719,14 +5882,14 @@
   },
   /*
    * Process styles to add rules which will only apply under the polyfill
-   *
+   * 
    * For example, we convert this rule:
-   *
-   * (comment start) @polyfill-rule :host menu-item {
+   * 
+   * (comment start) @polyfill-rule :host menu-item { 
    * ... } (comment end)
-   *
+   * 
    * to this:
-   *
+   * 
    * scopeName menu-item {...}
    *
   **/
@@ -5745,15 +5908,15 @@
   },
   /*
    * Process styles to add rules which will only apply under the polyfill
-   * and do not process via CSSOM. (CSSOM is destructive to rules on rare
+   * and do not process via CSSOM. (CSSOM is destructive to rules on rare 
    * occasions, e.g. -webkit-calc on Safari.)
    * For example, we convert this rule:
-   *
-   * (comment start) @polyfill-unscoped-rule menu-item {
+   * 
+   * (comment start) @polyfill-unscoped-rule menu-item { 
    * ... } (comment end)
-   *
+   * 
    * to this:
-   *
+   * 
    * menu-item {...}
    *
   **/
@@ -5792,7 +5955,7 @@
       return self.scopeHostCss(p1, name, typeExtension);
     });
     cssText = rulesToCss(this.findAtHostRules(cssToRules(cssText),
-      new RegExp('^' + name + selectorReSuffix, 'm')));
+        this.makeScopeMatcher(name, typeExtension)));
     return cssText;
   },
   scopeHostCss: function(cssText, name, typeExtension) {
@@ -5819,10 +5982,10 @@
     return r.join(', ');
   },
   // consider styles that do not include component name in the selector to be
-  // unscoped and in need of promotion;
+  // unscoped and in need of promotion; 
   // for convenience, also consider keyframe rules this way.
   findAtHostRules: function(cssRules, matcher) {
-    return Array.prototype.filter.call(cssRules,
+    return Array.prototype.filter.call(cssRules, 
       this.isHostRule.bind(this, matcher));
   },
   isHostRule: function(matcher, cssRule) {
@@ -5831,11 +5994,11 @@
       (cssRule.type == CSSRule.WEBKIT_KEYFRAMES_RULE);
   },
   /* Ensure styles are scoped. Pseudo-scoping takes a rule like:
-   *
-   *  .foo {... }
-   *
+   * 
+   *  .foo {... } 
+   *  
    *  and converts this to
-   *
+   *  
    *  scopeName .foo { ... }
   */
   shimScoping: function(styles, name, typeExtension) {
@@ -5866,15 +6029,28 @@
    * to
    *
    * scopeName.foo > .bar, .foo scopeName > .bar { }
-   * TODO(sorvell): file bug since native impl does not do the former yet.
-   * http://jsbin.com/OganOCI/2/edit
+   * 
+   * and
+   *
+   * :host(.foo:host) .bar { ... }
+   * 
+   * to
+   * 
+   * scopeName.foo .bar { ... }
   */
   convertColonHost: function(cssText) {
     // p1 = :host, p2 = contents of (), p3 rest of rule
     return cssText.replace(cssColonHostRe, function(m, p1, p2, p3) {
-      return p2 ? polyfillHostNoCombinator + p2 + p3 + ', '
-          + p2 + ' ' + p1 + p3 :
-          p1 + p3;
+      p1 = polyfillHostNoCombinator;
+      if (p2) {
+        if (p2.match(polyfillHost)) {
+          return p1 + p2.replace(polyfillHost, '') + p3;
+        } else {
+          return p1 + p2 + p3 + ', ' + p2 + ' ' + p1 + p3;
+        }
+      } else {
+        return p1 + p3;
+      }
     });
   },
   /*
@@ -5888,7 +6064,7 @@
     var cssText = '';
     Array.prototype.forEach.call(cssRules, function(rule) {
       if (rule.selectorText && (rule.style && rule.style.cssText)) {
-        cssText += this.scopeSelector(rule.selectorText, name, typeExtension,
+        cssText += this.scopeSelector(rule.selectorText, name, typeExtension, 
           this.strictStyling) + ' {\n\t';
         cssText += this.propertiesFromRule(rule) + '\n}\n\n';
       } else if (rule.media) {
@@ -5914,10 +6090,13 @@
     return r.join(', ');
   },
   selectorNeedsScoping: function(selector, name, typeExtension) {
-    var matchScope = typeExtension ? name : '\\[is=' + name + '\\]';
-    var re = new RegExp('^(' + matchScope + ')' + selectorReSuffix, 'm');
+    var re = this.makeScopeMatcher(name, typeExtension);
     return !selector.match(re);
   },
+  makeScopeMatcher: function(name, typeExtension) {
+    var matchScope = typeExtension ? '\\[is=[\'"]?' + name + '[\'"]?\\]' : name;
+    return new RegExp('^(' + matchScope + ')' + selectorReSuffix, 'm');
+  },
   // scope via name and [is=name]
   applySimpleSelectorScope: function(selector, name, typeExtension) {
     var scoper = typeExtension ? '[is=' + name + ']' : name;
@@ -5956,7 +6135,7 @@
     // TODO(sorvell): Chrome cssom incorrectly removes quotes from the content
     // property. (https://code.google.com/p/chromium/issues/detail?id=247231)
     if (rule.style.content && !rule.style.content.match(/['"]+/)) {
-      properties = 'content: \'' + rule.style.content + '\';\n' +
+      properties = 'content: \'' + rule.style.content + '\';\n' + 
         rule.style.cssText.replace(/content:[^;]*;/g, '');
     }
     return properties;
@@ -6042,5 +6221,4 @@
 scope.ShadowCSS = ShadowCSS;
 
 })(window.Platform);
-
 }
\ No newline at end of file
diff --git a/pkg/shadow_dom/lib/shadow_dom.min.js b/pkg/shadow_dom/lib/shadow_dom.min.js
index 3f339be..c9b57af 100644
--- a/pkg/shadow_dom/lib/shadow_dom.min.js
+++ b/pkg/shadow_dom/lib/shadow_dom.min.js
@@ -1,3 +1,3 @@
-if(!HTMLElement.prototype.createShadowRoot||window.__forceShadowDomPolyfill){!function(){Element.prototype.webkitCreateShadowRoot&&(Element.prototype.webkitCreateShadowRoot=function(){return window.ShadowDOMPolyfill.wrapIfNeeded(this).createShadowRoot()})}(),function(a){"use strict";function b(){function a(a){b=a}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=[],c={};if(Object.observe(c,a),c.id=1,c.id=2,delete c.id,Object.deliverChangeRecords(a),3!==b.length)return!1;if("new"==b[0].type&&"updated"==b[1].type&&"deleted"==b[2].type)F="new",G="updated",H="reconfigured",I="deleted";else if("add"!=b[0].type||"update"!=b[1].type||"delete"!=b[2].type)return console.error("Unexpected change record names for Object.observe. Using dirty-checking instead"),!1;return Object.unobserve(c,a),c=[0],Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),2!=b.length?!1:b[0].type!=J||b[1].type!=J?!1:(Array.unobserve(c,a),!0)}function c(){if(a.document&&"securityPolicy"in a.document&&!a.document.securityPolicy.allowsEval)return!1;try{var b=new Function("","return true;");return b()}catch(c){return!1}}function d(a){return+a===a>>>0}function e(a){return+a}function f(a){return a===Object(a)}function g(a,b){return a===b?0!==a||1/a===1/b:M(a)&&M(b)?!0:a!==a&&b!==b}function h(a){return"string"!=typeof a?!1:(a=a.trim(),""==a?!0:"."==a[0]?!1:U.test(a))}function i(a,b){if(b!==V)throw Error("Use Path.get to retrieve path objects");return""==a.trim()?this:d(a)?(this.push(a),this):(a.split(/\s*\.\s*/).filter(function(a){return a}).forEach(function(a){this.push(a)},this),L&&!K&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){if(a instanceof i)return a;null==a&&(a=""),"string"!=typeof a&&(a=String(a));var b=W[a];if(b)return b;if(!h(a))return X;var b=new i(a,V);return W[a]=b,b}function k(b){for(var c=0;Y>c&&b.check();)b.report(),c++;a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=c)}function l(a){for(var b in a)return!1;return!0}function m(a){return l(a.added)&&l(a.removed)&&l(a.changed)}function n(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function o(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function p(a,b,c,d){if(this.closed=!1,this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,K){var e=this;this.boundInternalCallback=function(a){e.internalCallback(a)}}q(this)}function q(a){$&&(Z.push(a),p._allObserversCount++)}function r(a,b,c,d){p.call(this,a,b,c,d),this.connect(),this.sync(!0)}function s(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");r.call(this,a,b,c,d)}function t(a){this.arr=[],this.callback=a,this.isObserved=!0}function u(a,b,c,d,e,g,h){var b=b instanceof i?b:j(b);return b&&b.length&&f(a)?(p.call(this,a,c,d,e),this.valueFn=g,this.setValueFn=h,this.path=b,this.connect(),this.sync(!0),void 0):(this.value_=b?b.getValueFrom(a):void 0,this.value=g?g(this.value_):this.value_,this.closed=!0,void 0)}function v(a,b,c,d){p.call(this,void 0,a,b,c),this.valueFn=d,this.observed=[],this.values=[],this.value=void 0,this.oldValue=void 0,this.oldValues=void 0,this.changeFlags=void 0,this.started=!1}function w(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function x(a,b,c){for(var d={},e={},f=0;f<b.length;f++){var g=b[f];db[g.type]?(g.name in c||(c[g.name]=g.oldValue),g.type!=G&&(g.type!=F?g.name in d?(delete d[g.name],delete c[g.name]):e[g.name]=!0:g.name in e?delete e[g.name]:d[g.name]=!0)):(console.error("Unknown changeRecord type: "+g.type),console.error(g))}for(var h in d)d[h]=a[h];for(var h in e)e[h]=void 0;var i={};for(var h in c)if(!(h in d||h in e)){var j=a[h];c[h]!==j&&(i[h]=j)}return{added:d,removed:e,changed:i}}function y(a,b,c){return{index:a,removed:b,addedCount:c}}function z(){}function A(a,b,c,d,e,f){return ib.calcSplices(a,b,c,d,e,f)}function B(a,b,c,d){return c>b||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function C(a,b,c,d){for(var e=y(b,c,d),f=!1,g=0,h=0;h<a.length;h++){var i=a[h];if(i.index+=g,!f){var j=B(e.index,e.index+e.removed.length,i.index,i.index+i.addedCount);if(j>=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.index<i.index){var l=e.removed.slice(0,i.index-e.index);Array.prototype.push.apply(l,c),c=l}if(e.index+e.removed.length>i.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.index<e.index&&(e.index=i.index)}else f=!0}else if(e.index<i.index){f=!0,a.splice(h,0,e),h++;var n=e.addedCount-e.removed.length;i.index+=n,g+=n}}}f||a.push(e)}function D(a,b){for(var c=[],f=0;f<b.length;f++){var g=b[f];switch(g.type){case J:C(c,g.index,g.removed.slice(),g.addedCount);break;case F:case G:case I:if(!d(g.name))continue;var h=e(g.name);if(0>h)continue;C(c,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return c}function E(a,b){var c=[];return D(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(A(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var F="add",G="update",H="reconfigure",I="delete",J="splice",K=b(),L=c(),M=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},N="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},O="[$_a-zA-Z]",P="[$_a-zA-Z0-9]",Q=O+"+"+P+"*",R="(?:[0-9]|[1-9]+[0-9]+)",S="(?:"+Q+"|"+R+")",T="(?:"+S+")(?:\\s*\\.\\s*"+S+")*",U=new RegExp("^"+T+"$"),V={},W={};i.get=j,i.prototype=N({__proto__:[],valid:!0,toString:function(){return this.join(".")},getValueFrom:function(a,b){for(var c=0;c<this.length;c++){if(null==a)return;b&&b.observe(a),a=a[this[c]]}return a},compiledGetValueFromFn:function(){var a=this.map(function(a){return d(a)?'["'+a+'"]':"."+a}),b="",c="obj";b+="if (obj != null";for(var e=0;e<this.length-1;e++)this[e],c+=a[e],b+=" &&\n     "+c+" != null";return b+=")\n",c+=a[e],b+="  return "+c+";\nelse\n  return undefined;",new Function("obj",b)},setValueFrom:function(a,b){if(!this.length)return!1;for(var c=0;c<this.length-1;c++){if(!f(a))return!1;a=a[this[c]]}return f(a)?(a[this[c]]=b,!0):!1}});var X=new i("",V);X.valid=!1,X.getValueFrom=X.setValueFrom=function(){};var Y=1e3;p.prototype={internalCallback:function(a){this.closed||this.reporting&&this.check(a)&&(this.report(),this.testingResults&&(this.testingResults.anyChanged=!0))},close:function(){this.closed||(this.object&&"function"==typeof this.object.close&&this.object.close(),this.disconnect(),this.object=void 0,this.closed=!0)},deliver:function(a){this.closed||(K?(this.testingResults=a,Object.deliverChangeRecords(this.boundInternalCallback),this.testingResults=void 0):k(this))},report:function(){this.reporting&&(this.sync(!1),this.callback&&(this.reportArgs.push(this.token),this.invokeCallback(this.reportArgs)),this.reportArgs=void 0)},invokeCallback:function(a){try{this.callback.apply(this.target,a)}catch(b){p._errorThrownDuringCallback=!0,console.error("Exception caught during observer callback: "+(b.stack||b))}},reset:function(){this.closed||(K&&(this.reporting=!1,Object.deliverChangeRecords(this.boundInternalCallback),this.reporting=!0),this.sync(!0))}};var Z,$=!K||a.forceCollectObservers;p._allObserversCount=0,$&&(Z=[]);var _=!1,ab="function"==typeof Object.deliverAllChangeRecords;a.Platform=a.Platform||{},a.Platform.performMicrotaskCheckpoint=function(){if(!_){if(ab)return Object.deliverAllChangeRecords(),void 0;if($){_=!0;var b=0,c={};do{b++;var d=Z;Z=[],c.anyChanged=!1;for(var e=0;e<d.length;e++){var f=d[e];f.closed||(K?f.deliver(c):f.check()&&(c.anyChanged=!0,f.report()),Z.push(f))}}while(Y>b&&c.anyChanged);a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=b),p._allObserversCount=Z.length,_=!1}}},$&&(a.Platform.clearObservers=function(){Z=[]}),r.prototype=N({__proto__:p.prototype,connect:function(){K&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=o(this.object))},check:function(a){var b,c;if(K){if(!a)return!1;c={},b=x(this.object,a,c)}else c=this.oldObject,b=n(this.object,this.oldObject);return m(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){K?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),s.prototype=N({__proto__:r.prototype,connect:function(){K&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=this.object.slice())},check:function(a){var b;if(K){if(!a)return!1;b=E(this.object,a)}else b=A(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),s.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e<c.index+c.addedCount;)d.push(b[e]),e++;Array.prototype.splice.apply(a,d)})};var bb=Object.getPrototypeOf({}),cb=Object.getPrototypeOf([]);t.prototype={reset:function(){this.isObserved=!this.isObserved},observe:function(a){if(f(a)&&a!==bb&&a!==cb){var b=this.arr.indexOf(a);b>=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;b<this.arr.length;){var d=this.arr[b];this.arr[b+1]==c?(b>a&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},u.prototype=N({__proto__:p.prototype,connect:function(){K&&(this.observedSet=new t(this.boundInternalCallback))},disconnect:function(){this.value=void 0,this.value_=void 0,this.observedSet&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.observedSet&&this.observedSet.cleanup(),g(this.value_,this.oldValue_)?!1:(this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.observedSet&&this.observedSet.cleanup()),this.oldValue_=this.value_,this.oldValue=this.value},setValue:function(a){this.path&&("function"==typeof this.setValueFn&&(a=this.setValueFn(a)),this.path.setValueFrom(this.object,a))}}),v.prototype=N({__proto__:u.prototype,addPath:function(a,b){if(this.started)throw Error("Cannot add more paths once started.");var b=b instanceof i?b:j(b),c=b?b.getValueFrom(a):void 0;this.observed.push(a,b),this.values.push(c)},start:function(){this.started=!0,this.connect(),this.sync(!0)},getValues:function(){this.observedSet&&this.observedSet.reset();for(var a=!1,b=0;b<this.observed.length;b+=2){var c=this.observed[b+1];if(c){var d=this.observed[b],e=c.getValueFrom(d,this.observedSet),f=this.values[b/2];if(!g(e,f)){if(!a&&!this.valueFn){this.oldValues=this.oldValues||[],this.changeFlags=this.changeFlags||[];for(var h=0;h<this.values.length;h++)this.oldValues[h]=this.values[h],this.changeFlags[h]=!1}this.valueFn||(this.changeFlags[b/2]=!0),this.values[b/2]=e,a=!0}}}return this.observedSet&&this.observedSet.cleanup(),a},check:function(){if(this.getValues()){if(this.valueFn){if(this.value=this.valueFn(this.values),g(this.value,this.oldValue))return!1;this.reportArgs=[this.value,this.oldValue]}else this.reportArgs=[this.values,this.oldValues,this.changeFlags,this.observed];return!0}},sync:function(a){a&&(this.getValues(),this.valueFn&&(this.value=this.valueFn(this.values))),this.valueFn&&(this.oldValue=this.value)},close:function(){if(this.observed){for(var a=0;a<this.observed.length;a+=2){var b=this.observed[a];b&&"function"==typeof b.close&&b.close()}this.observed=void 0,this.values=void 0}p.prototype.close.call(this)}});var db={};db[F]=!0,db[G]=!0,db[I]=!0,u.defineProperty=function(a,b,c){var d=c.object,e=j(c.path),f=w(a,b),g=new u(d,c.path,function(a,b){f&&f(G,b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var eb=0,fb=1,gb=2,hb=3;z.prototype={calcEditDistances:function(a,b,c,d,e,f){for(var g=f-e+1,h=c-b+1,i=new Array(g),j=0;g>j;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(this.equals(a[b+k-1],d[e+j-1]))i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i},spliceOperationsFromEditDistances:function(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(eb):(e.push(fb),d=g),b--,c--):f==h?(e.push(hb),b--,d=h):(e.push(gb),c--,d=i)}else e.push(hb),b--;else e.push(gb),c--;return e.reverse(),e},calcSplices:function(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=this.sharedPrefix(a,d,i)),c==a.length&&f==d.length&&(h=this.sharedSuffix(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=y(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[y(b,[],c-b)];for(var k=this.spliceOperationsFromEditDistances(this.calcEditDistances(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;o<k.length;o++)switch(k[o]){case eb:j&&(l.push(j),j=void 0),m++,n++;break;case fb:j||(j=y(m,[],0)),j.addedCount++,m++,j.removed.push(d[n]),n++;break;case gb:j||(j=y(m,[],0)),j.addedCount++,m++;break;case hb:j||(j=y(m,[],0)),j.removed.push(d[n]),n++}return j&&l.push(j),l},sharedPrefix:function(a,b,c){for(var d=0;c>d;d++)if(!this.equals(a[d],b[d]))return d;return c},sharedSuffix:function(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&this.equals(a[--d],b[--e]);)f++;return f},calculateSplices:function(a,b){return this.calcSplices(a,0,a.length,b,0,b.length)},equals:function(a,b){return a===b}};var ib=new z;a.Observer=p,a.Observer.hasObjectObserve=K,a.ArrayObserver=s,a.ArrayObserver.calculateSplices=function(a,b){return ib.calculateSplices(a,b)},a.ArraySplice=z,a.ObjectObserver=r,a.PathObserver=u,a.CompoundPathObserver=v,a.Path=i,a.Observer.changeRecordTypes={add:F,update:G,reconfigure:H,"delete":I,splice:J}}("undefined"!=typeof global&&global?global:this),"undefined"==typeof WeakMap&&!function(){var a=Object.defineProperty,b=Date.now()%1e9,c=function(){this.name="__st"+(1e9*Math.random()>>>0)+(b++ +"__")};c.prototype={set:function(b,c){var d=b[this.name];d&&d[0]===b?d[1]=c:a(b,this.name,{value:[b,c],writable:!0})},get:function(a){var b;return(b=a[this.name])&&b[0]===a?b[1]:void 0},"delete":function(a){this.set(a,void 0)}},window.WeakMap=c}();var ShadowDOMPolyfill={};!function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function d(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){switch(c){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":return}Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function e(a,b){for(var c=0;c<b.length;c++)if(b[c]in a)return b[c]}function f(a){var b=a.__proto__||Object.getPrototypeOf(a),c=D.get(b);if(c)return c;var d=f(b),e=s(d);return p(b,e,a),e}function g(a,b){n(a,b,!0)}function h(a,b){n(b,a,!1)}function i(a){return/^on[a-z]+$/.test(a)}function j(a){return/^\w[a-zA-Z_0-9]*$/.test(a)}function k(a){return G&&j(a)?new Function("return this.impl."+a):function(){return this.impl[a]}}function l(a){return G&&j(a)?new Function("v","this.impl."+a+" = v"):function(b){this.impl[a]=b}}function m(a){return G&&j(a)?new Function("return this.impl."+a+".apply(this.impl, arguments)"):function(){return this.impl[a].apply(this.impl,arguments)}}function n(b,c,d){Object.getOwnPropertyNames(b).forEach(function(e){if(!(e in c)){J&&b.__lookupGetter__(e);var f;try{f=Object.getOwnPropertyDescriptor(b,e)}catch(g){f=K}var h,j;if(d&&"function"==typeof f.value)return c[e]=m(e),void 0;var n=i(e);h=n?a.getEventHandlerGetter(e):k(e),(f.writable||f.set)&&(j=n?a.getEventHandlerSetter(e):l(e)),Object.defineProperty(c,e,{get:h,set:j,configurable:f.configurable,enumerable:f.enumerable})}})}function o(a,b,c){var e=a.prototype;p(e,b,c),d(b,a)}function p(a,c,d){var e=c.prototype;b(void 0===D.get(a)),D.set(a,c),E.set(e,a),g(a,e),d&&h(e,d)}function q(a,b){return D.get(b.prototype)===a}function r(a){var b=Object.getPrototypeOf(a),c=f(b),d=s(c);return p(b,d,a),d}function s(a){function b(b){a.call(this,b)}return b.prototype=Object.create(a.prototype),b.prototype.constructor=b,b}function t(a){return a instanceof F.EventTarget||a instanceof F.Event||a instanceof F.Range||a instanceof F.DOMImplementation||a instanceof F.CanvasRenderingContext2D||F.WebGLRenderingContext&&a instanceof F.WebGLRenderingContext}function u(a){return a instanceof N||a instanceof M||a instanceof O||a instanceof P||a instanceof L||a instanceof Q||R&&a instanceof R}function v(a){return null===a?null:(b(u(a)),a.polymerWrapper_||(a.polymerWrapper_=new(f(a))(a)))}function w(a){return null===a?null:(b(t(a)),a.impl)}function x(a){return a&&t(a)?w(a):a}function y(a){return a&&!t(a)?v(a):a}function z(a,c){null!==c&&(b(u(a)),b(void 0===c||t(c)),a.polymerWrapper_=c)}function A(a,b,c){Object.defineProperty(a.prototype,b,{get:c,configurable:!0,enumerable:!0})}function B(a,b){A(a,b,function(){return v(this.impl[b])})}function C(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=y(this);return a[b].apply(a,arguments)}})})}var D=new WeakMap,E=new WeakMap,F=Object.create(null),G=!("securityPolicy"in document)||document.securityPolicy.allowsEval;if(G)try{var H=new Function("","return true;");G=H()}catch(I){G=!1}Object.getOwnPropertyNames(window);var J=/Firefox/.test(navigator.userAgent),K={get:function(){},set:function(){},configurable:!0,enumerable:!0},L=window.DOMImplementation,M=window.Event,N=window.Node,O=window.Window,P=window.Range,Q=window.CanvasRenderingContext2D,R=window.WebGLRenderingContext;a.assert=b,a.constructorTable=D,a.defineGetter=A,a.defineWrapGetter=B,a.forwardMethodsToWrapper=C,a.isWrapperFor=q,a.mixin=c,a.nativePrototypeTable=E,a.oneOf=e,a.registerObject=r,a.registerWrapper=o,a.rewrap=z,a.unwrap=w,a.unwrapIfNeeded=x,a.wrap=v,a.wrapIfNeeded=y,a.wrappers=F}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof O.ShadowRoot}function c(a){var b=a.localName;return"content"===b||"shadow"===b}function d(a){return!!a.shadowRoot}function e(a){var b;return a.parentNode||(b=a.defaultView)&&N(b)||null}function f(f,g,h){if(h.length)return h.shift();if(b(f))return j(f)||a.getHostForShadowRoot(f);var i=a.eventParentsTable.get(f);if(i){for(var k=1;k<i.length;k++)h[k-1]=i[k];return i[0]}if(g&&c(f)){var l=f.parentNode;if(l&&d(l))for(var m=a.getShadowTrees(l),n=j(g),k=0;k<m.length;k++)if(m[k].contains(n))return n}return e(f)}function g(a){for(var d=[],e=a,g=[],i=[];e;){var j=null;if(c(e)){j=h(d);var k=d[d.length-1]||e;d.push(k)}else d.length||d.push(e);var l=d[d.length-1];g.push({target:l,currentTarget:e}),b(e)&&d.pop(),e=f(e,j,i)}return g}function h(a){for(var b=a.length-1;b>=0;b--)if(!c(a[b]))return a[b];return null}function i(d,e){for(var g=[];d;){for(var i=[],j=e,l=void 0;j;){var n=null;if(i.length){if(c(j)&&(n=h(i),k(l))){var o=i[i.length-1];i.push(o)}}else i.push(j);if(m(j,d))return i[i.length-1];b(j)&&i.pop(),l=j,j=f(j,n,g)}d=b(d)?a.getHostForShadowRoot(d):d.parentNode}}function j(b){return a.insertionParentTable.get(b)}function k(a){return j(a)}function l(a){for(var b;b=a.parentNode;)a=b;return a}function m(a,b){return l(a)===l(b)}function n(b,c){if(b===c)return!0;if(b instanceof O.ShadowRoot){var d=a.getHostForShadowRoot(b);return n(l(d),c)}return!1}function o(){Z++}function p(){Z--}function q(b){if(!Q.get(b)){if(Q.set(b,!0),b instanceof $){if(Z)return}else a.renderAllPending();var c=N(b.target),d=N(b);return r(d,c)}}function r(a,b){var c=g(b);return"load"===a.type&&2===c.length&&c[0].target instanceof O.Document&&c.shift(),Y.set(a,c),s(a,c)&&t(a,c)&&u(a,c),U.set(a,x.NONE),S.set(a,null),a.defaultPrevented}function s(a,b){for(var c,d=b.length-1;d>0;d--){var e=b[d].target,f=b[d].currentTarget;if(e!==f&&(c=x.CAPTURING_PHASE,!v(b[d],a,c)))return!1}return!0}function t(a,b){var c=x.AT_TARGET;return v(b[0],a,c)}function u(a,b){for(var c,d=a.bubbles,e=1;e<b.length;e++){var f=b[e].target,g=b[e].currentTarget;if(f===g)c=x.AT_TARGET;else{if(!d||W.get(a))continue;c=x.BUBBLING_PHASE}if(!v(b[e],a,c))return}}function v(a,b,c){var d=a.target,e=a.currentTarget,f=P.get(e);if(!f)return!0;if("relatedTarget"in b){var g=M(b);if(g.relatedTarget){var h=N(g.relatedTarget),j=i(e,h);if(j===d)return!0;T.set(b,j)}}U.set(b,c);var k=b.type,l=!1;R.set(b,d),S.set(b,e);for(var m=0;m<f.length;m++){var n=f[m];if(n.removed)l=!0;else if(!(n.type!==k||!n.capture&&c===x.CAPTURING_PHASE||n.capture&&c===x.BUBBLING_PHASE))try{if("function"==typeof n.handler?n.handler.call(e,b):n.handler.handleEvent(b),W.get(b))return!1}catch(o){window.onerror?window.onerror(o.message):console.error(o,o.stack)}}if(l){var p=f.slice();f.length=0;for(var m=0;m<p.length;m++)p[m].removed||f.push(p[m])}return!V.get(b)}function w(a,b,c){this.type=a,this.handler=b,this.capture=Boolean(c)}function x(a,b){return a instanceof _?(this.impl=a,void 0):N(B(_,"Event",a,b))}function y(a){return a&&a.relatedTarget?Object.create(a,{relatedTarget:{value:M(a.relatedTarget)}}):a}function z(a,b,c){var d=window[a],e=function(b,c){return b instanceof d?(this.impl=b,void 0):N(B(d,a,b,c))};return e.prototype=Object.create(b.prototype),c&&K(e.prototype,c),d&&(d.prototype["init"+a]?L(d,e,document.createEvent(a)):L(d,e,new d("temp"))),e}function A(a,b){return function(){arguments[b]=M(arguments[b]);var c=M(this);c[a].apply(c,arguments)}}function B(a,b,c,d){if(jb)return new a(c,y(d));var e=M(document.createEvent(b)),f=ib[b],g=[c];return Object.keys(f).forEach(function(a){var b=null!=d&&a in d?d[a]:f[a];"relatedTarget"===a&&(b=M(b)),g.push(b)}),e["init"+b].apply(e,g),e}function C(a){return"function"==typeof a?!0:a&&a.handleEvent}function D(a){this.impl=a}function E(b){return b instanceof O.ShadowRoot&&(b=a.getHostForShadowRoot(b)),M(b)}function F(a){J(a,mb)}function G(b,c,d,e){a.renderAllPending();for(var f=N(nb.call(c.impl,d,e)),h=g(f,this),i=0;i<h.length;i++){var j=h[i];if(j.currentTarget===b)return j.target}return null}function H(a){return function(){var b=X.get(this);return b&&b[a]&&b[a].value||null}}function I(a){var b=a.slice(2);return function(c){var d=X.get(this);d||(d=Object.create(null),X.set(this,d));var e=d[a];if(e&&this.removeEventListener(b,e.wrapped,!1),"function"==typeof c){var f=function(b){var d=c.call(this,b);d===!1?b.preventDefault():"onbeforeunload"===a&&"string"==typeof d&&(b.returnValue=d)};this.addEventListener(b,f,!1),d[a]={value:c,wrapped:f}}}}var J=a.forwardMethodsToWrapper,K=a.mixin,L=a.registerWrapper,M=a.unwrap,N=a.wrap,O=a.wrappers;new WeakMap;var P=new WeakMap,Q=new WeakMap,R=new WeakMap,S=new WeakMap,T=new WeakMap,U=new WeakMap,V=new WeakMap,W=new WeakMap,X=new WeakMap,Y=new WeakMap,Z=0,$=window.MutationEvent;w.prototype={equals:function(a){return this.handler===a.handler&&this.type===a.type&&this.capture===a.capture},get removed(){return null===this.handler},remove:function(){this.handler=null}};var _=window.Event;x.prototype={get target(){return R.get(this)},get currentTarget(){return S.get(this)},get eventPhase(){return U.get(this)},get path(){var a=new O.NodeList,b=Y.get(this);if(b){for(var c=0,d=b.length-1,e=l(S.get(this)),f=0;d>=f;f++){var g=b[f].currentTarget,h=l(g);n(e,h)&&(f!==d||g instanceof O.Node)&&(a[c++]=g)}a.length=c}return a},stopPropagation:function(){V.set(this,!0)},stopImmediatePropagation:function(){V.set(this,!0),W.set(this,!0)}},L(_,x,document.createEvent("Event"));var ab=z("UIEvent",x),bb=z("CustomEvent",x),cb={get relatedTarget(){return T.get(this)||N(M(this).relatedTarget)}},db=K({initMouseEvent:A("initMouseEvent",14)},cb),eb=K({initFocusEvent:A("initFocusEvent",5)},cb),fb=z("MouseEvent",ab,db),gb=z("FocusEvent",ab,eb),hb=z("MutationEvent",x,{initMutationEvent:A("initMutationEvent",3),get relatedNode(){return N(this.impl.relatedNode)}}),ib=Object.create(null),jb=function(){try{new window.MouseEvent("click")}catch(a){return!1}return!0}();if(!jb){var kb=function(a,b,c){if(c){var d=ib[c];b=K(K({},d),b)}ib[a]=b};kb("Event",{bubbles:!1,cancelable:!1}),kb("CustomEvent",{detail:null},"Event"),kb("UIEvent",{view:null,detail:0},"Event"),kb("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),kb("FocusEvent",{relatedTarget:null},"UIEvent")}var lb=window.EventTarget,mb=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;mb.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),D.prototype={addEventListener:function(a,b,c){if(C(b)){var d=new w(a,b,c),e=P.get(this);if(e){for(var f=0;f<e.length;f++)if(d.equals(e[f]))return}else e=[],P.set(this,e);e.push(d);var g=E(this);g.addEventListener_(a,q,!0)}},removeEventListener:function(a,b,c){c=Boolean(c);var d=P.get(this);if(d){for(var e=0,f=!1,g=0;g<d.length;g++)d[g].type===a&&d[g].capture===c&&(e++,d[g].handler===b&&(f=!0,d[g].remove()));if(f&&1===e){var h=E(this);h.removeEventListener_(a,q,!0)}}},dispatchEvent:function(a){var b=E(this),c=M(a);return Q.set(c,!1),b.dispatchEvent_(c)}},lb&&L(lb,D);var nb=document.elementFromPoint;a.adjustRelatedTarget=i,a.elementFromPoint=G,a.getEventHandlerGetter=H,a.getEventHandlerSetter=I,a.muteMutationEvents=o,a.unmuteMutationEvents=p,a.wrapEventTargetMethods=F,a.wrappers.CustomEvent=bb,a.wrappers.Event=x,a.wrappers.EventTarget=D,a.wrappers.FocusEvent=gb,a.wrappers.MouseEvent=fb,a.wrappers.MutationEvent=hb,a.wrappers.UIEvent=ab}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,{enumerable:!1})}function c(){this.length=0,b(this,"length")}function d(a){if(null==a)return a;for(var b=new c,d=0,e=a.length;e>d;d++)b[d]=f(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(this.impl[b].apply(this.impl,arguments))}}var f=a.wrap;c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){o(a instanceof k)}function c(a,b,c,d){if(!(a instanceof DocumentFragment))return a.parentNode&&a.parentNode.removeChild(a),a.parentNode_=b,a.previousSibling_=c,a.nextSibling_=d,c&&(c.nextSibling_=a),d&&(d.previousSibling_=a),[a];for(var e,f=[];e=a.firstChild;)a.removeChild(e),f.push(e),e.parentNode_=b;for(var g=0;g<f.length;g++)f[g].previousSibling_=f[g-1]||c,f[g].nextSibling_=f[g+1]||d;return c&&(c.nextSibling_=f[0]),d&&(d.previousSibling_=f[f.length-1]),f}function d(a){if(a instanceof DocumentFragment){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}return[a]}function e(a){for(var b=0;b<a.length;b++)a[b].nodeWasAdded_()}function f(a,b){var c=a.nodeType===k.DOCUMENT_NODE?a:a.ownerDocument;c!==b.ownerDocument&&c.adoptNode(b)}function g(b,c){if(c.length){var d=b.ownerDocument;if(d!==c[0].ownerDocument)for(var e=0;e<c.length;e++)a.adoptNodeNoRemove(c[e],d)}}function h(a,b){g(a,b);var c=b.length;if(1===c)return r(b[0]);for(var d=r(a.ownerDocument.createDocumentFragment()),e=0;c>e;e++)d.appendChild(r(b[e]));return d}function i(a){if(a.invalidateShadowRenderer()){for(var b=a.firstChild;b;){o(b.parentNode===a);var c=b.nextSibling,d=r(b),e=d.parentNode;e&&y.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}else for(var c,f=r(a),g=f.firstChild;g;)c=g.nextSibling,y.call(f,g),g=c}function j(a){var b=a.parentNode;return b&&b.invalidateShadowRenderer()}function k(a){o(a instanceof u),l.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0}var l=a.wrappers.EventTarget,m=a.wrappers.NodeList,n=a.defineWrapGetter,o=a.assert,p=a.mixin,q=a.registerWrapper,r=a.unwrap,s=a.wrap,t=a.wrapIfNeeded,u=window.Node,v=u.prototype.appendChild,w=u.prototype.insertBefore,x=u.prototype.replaceChild,y=u.prototype.removeChild,z=u.prototype.compareDocumentPosition;k.prototype=Object.create(l.prototype),p(k.prototype,{appendChild:function(a){b(a);var g;if(this.invalidateShadowRenderer()||j(a)){var i=this.lastChild,k=null;g=c(a,this,i,k),this.lastChild_=g[g.length-1],i||(this.firstChild_=g[0]),v.call(this.impl,h(this,g))}else g=d(a),f(this,a),v.call(this.impl,r(a));return e(g),a},insertBefore:function(a,i){if(!i)return this.appendChild(a);b(a),b(i),o(i.parentNode===this);var k;if(this.invalidateShadowRenderer()||j(a)){var l=i.previousSibling,m=i;k=c(a,this,l,m),this.firstChild===i&&(this.firstChild_=k[0]);var n=r(i),p=n.parentNode;p?w.call(p,h(this,k),n):g(this,k)}else k=d(a),f(this,a),w.call(this.impl,r(a),r(i));return e(k),a},removeChild:function(a){if(b(a),a.parentNode!==this)throw new Error("NotFoundError");var c=r(a);if(this.invalidateShadowRenderer()){var d=this.firstChild,e=this.lastChild,f=a.nextSibling,g=a.previousSibling,h=c.parentNode;h&&y.call(h,c),d===a&&(this.firstChild_=f),e===a&&(this.lastChild_=g),g&&(g.nextSibling_=f),f&&(f.previousSibling_=g),a.previousSibling_=a.nextSibling_=a.parentNode_=void 0}else y.call(this.impl,c);return a},replaceChild:function(a,g){if(b(a),b(g),g.parentNode!==this)throw new Error("NotFoundError");var i,k=r(g);if(this.invalidateShadowRenderer()||j(a)){var l=g.previousSibling,m=g.nextSibling;m===a&&(m=a.nextSibling),i=c(a,this,l,m),this.firstChild===g&&(this.firstChild_=i[0]),this.lastChild===g&&(this.lastChild_=i[i.length-1]),g.previousSibling_=g.nextSibling_=g.parentNode_=void 0,k.parentNode&&x.call(k.parentNode,h(this,i),k)}else i=d(a),f(this,a),x.call(this.impl,r(a),k);return e(i),g},nodeWasAdded_:function(){for(var a=this.firstChild;a;a=a.nextSibling)a.nodeWasAdded_()},hasChildNodes:function(){return null!==this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:s(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:s(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:s(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:s(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:s(this.impl.previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==k.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)a+=b.textContent;return a},set textContent(a){if(this.invalidateShadowRenderer()){if(i(this),""!==a){var b=this.impl.ownerDocument.createTextNode(a);this.appendChild(b)}}else this.impl.textContent=a},get childNodes(){for(var a=new m,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;return a.length=b,a},cloneNode:function(a){if(!this.invalidateShadowRenderer())return s(this.impl.cloneNode(a));var b=s(this.impl.cloneNode(!1));if(a)for(var c=this.firstChild;c;c=c.nextSibling)b.appendChild(c.cloneNode(!0));
-return b},contains:function(a){if(!a)return!1;if(a=t(a),a===this)return!0;var b=a.parentNode;return b?this.contains(b):!1},compareDocumentPosition:function(a){return z.call(this.impl,r(a))}}),n(k,"ownerDocument"),q(u,k,document.createDocumentFragment()),delete k.prototype.querySelector,delete k.prototype.querySelectorAll,k.prototype=p(Object.create(l.prototype),k.prototype),a.wrappers.Node=k}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,c){for(var d,e=a.firstElementChild;e;){if(e.matches(c))return e;if(d=b(e,c))return d;e=e.nextElementSibling}return null}function c(a,b,d){for(var e=a.firstElementChild;e;)e.matches(b)&&(d[d.length++]=e),c(e,b,d),e=e.nextElementSibling;return d}var d={querySelector:function(a){return b(this,a)},querySelectorAll:function(a){return c(this,a,new NodeList)}},e={getElementsByTagName:function(a){return this.querySelectorAll(a)},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){if("*"===a)return this.getElementsByTagName(b);for(var c=new NodeList,d=this.getElementsByTagName(b),e=0,f=0;e<d.length;e++)d[e].namespaceURI===a&&(c[f++]=d[e]);return c.length=f,c}};a.GetElementsByInterface=e,a.SelectorsInterface=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}function c(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}var d=a.wrappers.NodeList,e={get firstElementChild(){return b(this.firstChild)},get lastElementChild(){return c(this.lastChild)},get childElementCount(){for(var a=0,b=this.firstElementChild;b;b=b.nextElementSibling)a++;return a},get children(){for(var a=new d,b=0,c=this.firstElementChild;c;c=c.nextElementSibling)a[b++]=c;return a.length=b,a}},f={get nextElementSibling(){return b(this.nextSibling)},get previousElementSibling(){return c(this.previousSibling)}};a.ChildNodeInterface=f,a.ParentNodeInterface=e}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}var c=a.ChildNodeInterface,d=a.wrappers.Node,e=a.mixin,f=a.registerWrapper,g=window.CharacterData;b.prototype=Object.create(d.prototype),e(b.prototype,{get textContent(){return this.data},set textContent(a){this.data=a}}),e(b.prototype,c),f(g,b,document.createTextNode("")),a.wrappers.CharacterData=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b,c){var d=b.parentNode;if(d&&d.shadowRoot){var e=a.getRendererForHost(d);e.dependsOnAttribute(c)&&e.invalidate()}}function c(a){g.call(this,a)}function d(a,c,d){var e=d||c;Object.defineProperty(a,c,{get:function(){return this.impl[c]},set:function(a){this.impl[c]=a,b(this,e)},configurable:!0,enumerable:!0})}var e=a.ChildNodeInterface,f=a.GetElementsByInterface,g=a.wrappers.Node,h=a.ParentNodeInterface,i=a.SelectorsInterface;a.addWrapNodeListMethod;var j=a.mixin,k=a.oneOf,l=a.registerWrapper,m=a.wrappers,n=window.Element,o=k(n.prototype,["matches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector"]),p=n.prototype[o];c.prototype=Object.create(g.prototype),j(c.prototype,{createShadowRoot:function(){var b=new m.ShadowRoot(this);this.impl.polymerShadowRoot_=b;var c=a.getRendererForHost(this);return c.invalidate(),b},get shadowRoot(){return this.impl.polymerShadowRoot_||null},setAttribute:function(a,c){this.impl.setAttribute(a,c),b(this,a)},removeAttribute:function(a){this.impl.removeAttribute(a),b(this,a)},matches:function(a){return p.call(this.impl,a)}}),c.prototype[o]=function(a){return this.matches(a)},n.prototype.webkitCreateShadowRoot&&(c.prototype.webkitCreateShadowRoot=c.prototype.createShadowRoot),d(c.prototype,"id"),d(c.prototype,"className","class"),j(c.prototype,e),j(c.prototype,f),j(c.prototype,h),j(c.prototype,i),l(n,c),a.matchesName=o,a.wrappers.Element=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a){case"&":return"&amp;";case"<":return"&lt;";case'"':return"&quot;"}}function c(a){return a.replace(r,b)}function d(a){switch(a.nodeType){case Node.ELEMENT_NODE:for(var b,d=a.tagName.toLowerCase(),f="<"+d,g=a.attributes,h=0;b=g[h];h++)f+=" "+b.name+'="'+c(b.value)+'"';return f+=">",s[d]?f:f+e(a)+"</"+d+">";case Node.TEXT_NODE:return c(a.nodeValue);case Node.COMMENT_NODE:return"<!--"+c(a.nodeValue)+"-->";default:throw console.error(a),new Error("not implemented")}}function e(a){for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=d(c);return b}function f(a,b,c){var d=c||"div";a.textContent="";var e=p(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(q(f))}function g(a){l.call(this,a)}function h(b){return function(){return a.renderAllPending(),this.impl[b]}}function i(a){m(g,a,h(a))}function j(b){Object.defineProperty(g.prototype,b,{get:h(b),set:function(c){a.renderAllPending(),this.impl[b]=c},configurable:!0,enumerable:!0})}function k(b){Object.defineProperty(g.prototype,b,{value:function(){return a.renderAllPending(),this.impl[b].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var l=a.wrappers.Element,m=a.defineGetter,n=a.mixin,o=a.registerWrapper,p=a.unwrap,q=a.wrap,r=/&|<|"/g,s={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},t=window.HTMLElement;g.prototype=Object.create(l.prototype),n(g.prototype,{get innerHTML(){return e(this)},set innerHTML(a){this.invalidateShadowRenderer()?f(this,a,this.tagName):this.impl.innerHTML=a},get outerHTML(){return d(this)},set outerHTML(a){var b=this.parentNode;b&&(b.invalidateShadowRenderer(),this.impl.outerHTML=a)}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollWidth"].forEach(i),["scrollLeft","scrollTop"].forEach(j),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(k),o(t,g,document.createElement("b")),a.wrappers.HTMLElement=g,a.getInnerHTML=e,a.setInnerHTML=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.wrap,g=window.HTMLCanvasElement;b.prototype=Object.create(c.prototype),d(b.prototype,{getContext:function(){var a=this.impl.getContext.apply(this.impl,arguments);return a&&f(a)}}),e(g,b,document.createElement("canvas")),a.wrappers.HTMLCanvasElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLContentElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get select(){return this.getAttribute("select")},set select(a){this.setAttribute("select",a)},setAttribute:function(a,b){c.prototype.setAttribute.call(this,a,b),"select"===String(a).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),f&&e(f,b),a.wrappers.HTMLContentElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}function c(a,b){if(!(this instanceof c))throw new TypeError("DOM object constructor cannot be called as a function.");var e=f(document.createElement("img"));void 0!==a&&(e.width=a),void 0!==b&&(e.height=b),d.call(this,e),g(e,this)}var d=a.wrappers.HTMLElement,e=a.registerWrapper,f=a.unwrap,g=a.rewrap,h=window.HTMLImageElement;b.prototype=Object.create(d.prototype),e(h,b,document.createElement("img")),c.prototype=b.prototype,a.wrappers.HTMLImageElement=b,a.wrappers.Image=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{}),f&&e(f,b),a.wrappers.HTMLShadowElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=o.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);o.set(a,b)}return b}function c(a){var c,d=b(a.ownerDocument),e=l(d.createDocumentFragment());for(h();c=a.firstChild;)e.appendChild(c);return k(),e}function d(a){if(e.call(this,a),!p){var b=c(a);n.set(this,m(b))}}var e=a.wrappers.HTMLElement,f=a.getInnerHTML,g=a.mixin,h=a.muteMutationEvents,i=a.registerWrapper,j=a.setInnerHTML,k=a.unmuteMutationEvents,l=a.unwrap,m=a.wrap,n=new WeakMap,o=new WeakMap,p=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),g(d.prototype,{get content(){return p?m(this.impl.content):n.get(this)},get innerHTML(){return f(this.content)},set innerHTML(a){j(this.content,a)}}),p&&i(p,d),a.wrappers.HTMLTemplateElement=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a.localName){case"content":return new c(a);case"shadow":return new e(a);case"template":return new f(a)}d.call(this,a)}var c=a.wrappers.HTMLContentElement,d=a.wrappers.HTMLElement,e=a.wrappers.HTMLShadowElement,f=a.wrappers.HTMLTemplateElement;a.mixin;var g=a.registerWrapper,h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrap,f=a.unwrapIfNeeded,g=a.wrap,h=window.CanvasRenderingContext2D;c(b.prototype,{get canvas(){return g(this.impl.canvas)},drawImage:function(){arguments[0]=f(arguments[0]),this.impl.drawImage.apply(this.impl,arguments)},createPattern:function(){return arguments[0]=e(arguments[0]),this.impl.createPattern.apply(this.impl,arguments)}}),d(h,b),a.wrappers.CanvasRenderingContext2D=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrapIfNeeded,f=a.wrap,g=window.WebGLRenderingContext;g&&(c(b.prototype,{get canvas(){return f(this.impl.canvas)},texImage2D:function(){arguments[5]=e(arguments[5]),this.impl.texImage2D.apply(this.impl,arguments)},texSubImage2D:function(){arguments[6]=e(arguments[6]),this.impl.texSubImage2D.apply(this.impl,arguments)}}),d(g,b),a.wrappers.WebGLRenderingContext=b)}(this.ShadowDOMPolyfill),function(a){"use strict";var b=a.GetElementsByInterface,c=a.ParentNodeInterface,d=a.SelectorsInterface,e=a.mixin,f=a.registerObject,g=f(document.createDocumentFragment());e(g.prototype,c),e(g.prototype,d),e(g.prototype,b);var h=f(document.createTextNode("")),i=f(document.createComment(""));a.wrappers.Comment=i,a.wrappers.DocumentFragment=g,a.wrappers.Text=h}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=i(a.impl.ownerDocument.createDocumentFragment());c.call(this,b),g(b,this);var d=a.shadowRoot;k.set(this,d),j.set(this,a)}var c=a.wrappers.DocumentFragment,d=a.elementFromPoint,e=a.getInnerHTML,f=a.mixin,g=a.rewrap,h=a.setInnerHTML,i=a.unwrap,j=new WeakMap,k=new WeakMap;b.prototype=Object.create(c.prototype),f(b.prototype,{get innerHTML(){return e(this)},set innerHTML(a){h(this,a),this.invalidateShadowRenderer()},get olderShadowRoot(){return k.get(this)||null},invalidateShadowRenderer:function(){return j.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return d(this,this.ownerDocument,a,b)},getElementById:function(a){return this.querySelector("#"+a)}}),a.wrappers.ShadowRoot=b,a.getHostForShadowRoot=function(a){return j.get(a)}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.previousSibling_=a.previousSibling,a.nextSibling_=a.nextSibling,a.parentNode_=a.parentNode}function c(a,c,e){var f=G(a),g=G(c),h=e?G(e):null;if(d(c),b(c),e)a.firstChild===e&&(a.firstChild_=e),e.previousSibling_=e.previousSibling;else{a.lastChild_=a.lastChild,a.lastChild===a.firstChild&&(a.firstChild_=a.firstChild);var i=H(f.lastChild);i&&(i.nextSibling_=i.nextSibling)}f.insertBefore(g,h)}function d(a){var c=G(a),d=c.parentNode;if(d){var e=H(d);b(a),a.previousSibling&&(a.previousSibling.nextSibling_=a),a.nextSibling&&(a.nextSibling.previousSibling_=a),e.lastChild===a&&(e.lastChild_=a),e.firstChild===a&&(e.firstChild_=a),d.removeChild(c)}}function e(a,b){g(b).push(a),x(a,b);var c=J.get(a);c||J.set(a,c=[]),c.push(b)}function f(a){I.set(a,[])}function g(a){return I.get(a)}function h(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function i(a,b,c){for(var d=a.firstChild;d;d=d.nextSibling)if(b(d)){if(c(d)===!1)return}else i(d,b,c)}function j(a,b){var c=b.getAttribute("select");if(!c)return!0;if(c=c.trim(),!c)return!0;if(!(a instanceof y))return!1;if(!M.test(c))return!1;if(":"===c[0]&&!N.test(c))return!1;try{return a.matches(c)}catch(d){return!1}}function k(){for(var a=0;a<P.length;a++)P[a].render();P=[]}function l(){F=null,k()}function m(a){var b=L.get(a);return b||(b=new q(a),L.set(a,b)),b}function n(a){for(;a;a=a.parentNode)if(a instanceof C)return a;return null}function o(a){return m(D(a))}function p(a){this.skip=!1,this.node=a,this.childNodes=[]}function q(a){this.host=a,this.dirty=!1,this.invalidateAttributes(),this.associateNode(a)}function r(a){return a instanceof z}function s(a){return a instanceof z}function t(a){return a instanceof A}function u(a){return a instanceof A}function v(a){return a.shadowRoot}function w(a){for(var b=[],c=a.shadowRoot;c;c=c.olderShadowRoot)b.push(c);return b}function x(a,b){K.set(a,b)}var y=a.wrappers.Element,z=a.wrappers.HTMLContentElement,A=a.wrappers.HTMLShadowElement,B=a.wrappers.Node,C=a.wrappers.ShadowRoot;a.assert;var D=a.getHostForShadowRoot;a.mixin,a.muteMutationEvents;var E=a.oneOf;a.unmuteMutationEvents;var F,G=a.unwrap,H=a.wrap,I=new WeakMap,J=new WeakMap,K=new WeakMap,L=new WeakMap,M=/^[*.:#[a-zA-Z_|]/,N=new RegExp("^:("+["link","visited","target","enabled","disabled","checked","indeterminate","nth-child","nth-last-child","nth-of-type","nth-last-of-type","first-child","last-child","first-of-type","last-of-type","only-of-type"].join("|")+")"),O=E(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout"]),P=[],Q=new ArraySplice;Q.equals=function(a,b){return G(a.node)===b},p.prototype={append:function(a){var b=new p(a);return this.childNodes.push(b),b},sync:function(a){if(!this.skip){for(var b=this.node,e=this.childNodes,f=h(G(b)),g=a||new WeakMap,i=Q.calculateSplices(e,f),j=0,k=0,l=0,m=0;m<i.length;m++){for(var n=i[m];l<n.index;l++)k++,e[j++].sync(g);for(var o=n.removed.length,p=0;o>p;p++){var q=H(f[k++]);g.get(q)||d(q)}for(var r=n.addedCount,s=f[k]&&H(f[k]),p=0;r>p;p++){var t=e[j++],u=t.node;c(b,u,s),g.set(u,!0),t.sync(g)}l+=r}for(var m=l;m<e.length;m++)e[m].sync(g)}}},q.prototype={render:function(a){if(this.dirty){this.invalidateAttributes(),this.treeComposition();var b=this.host,c=b.shadowRoot;this.associateNode(b);for(var d=!e,e=a||new p(b),f=c.firstChild;f;f=f.nextSibling)this.renderNode(c,e,f,!1);d&&e.sync(),this.dirty=!1}},invalidate:function(){if(!this.dirty){if(this.dirty=!0,P.push(this),F)return;F=window[O](l,0)}},renderNode:function(a,b,c,d){if(v(c)){b=b.append(c);var e=m(c);e.dirty=!0,e.render(b)}else r(c)?this.renderInsertionPoint(a,b,c,d):t(c)?this.renderShadowInsertionPoint(a,b,c):this.renderAsAnyDomTree(a,b,c,d)},renderAsAnyDomTree:function(a,b,c,d){if(b=b.append(c),v(c)){var e=m(c);b.skip=!e.dirty,e.render(b)}else for(var f=c.firstChild;f;f=f.nextSibling)this.renderNode(a,b,f,d)},renderInsertionPoint:function(a,b,c,d){var e=g(c);if(e.length){this.associateNode(c);for(var f=0;f<e.length;f++){var h=e[f];r(h)&&d?this.renderInsertionPoint(a,b,h,d):this.renderAsAnyDomTree(a,b,h,d)}}else this.renderFallbackContent(a,b,c);this.associateNode(c.parentNode)},renderShadowInsertionPoint:function(a,b,c){var d=a.olderShadowRoot;if(d){x(d,c),this.associateNode(c.parentNode);for(var e=d.firstChild;e;e=e.nextSibling)this.renderNode(d,b,e,!0)}else this.renderFallbackContent(a,b,c)},renderFallbackContent:function(a,b,c){this.associateNode(c),this.associateNode(c.parentNode);for(var d=c.firstChild;d;d=d.nextSibling)this.renderAsAnyDomTree(a,b,d,!1)},invalidateAttributes:function(){this.attributes=Object.create(null)},updateDependentAttributes:function(a){if(a){var b=this.attributes;/\.\w+/.test(a)&&(b["class"]=!0),/#\w+/.test(a)&&(b.id=!0),a.replace(/\[\s*([^\s=\|~\]]+)/g,function(a,c){b[c]=!0})}},dependsOnAttribute:function(a){return this.attributes[a]},distribute:function(a,b){var c=this;i(a,s,function(a){f(a),c.updateDependentAttributes(a.getAttribute("select"));for(var d=0;d<b.length;d++){var g=b[d];void 0!==g&&j(g,a)&&(e(g,a),b[d]=void 0)}})},treeComposition:function(){for(var a=this.host,b=a.shadowRoot,c=[],d=a.firstChild;d;d=d.nextSibling)if(r(d)){var e=g(d);e&&e.length||(e=h(d)),c.push.apply(c,e)}else c.push(d);for(var f,j;b;){if(f=void 0,i(b,u,function(a){return f=a,!1}),j=f,this.distribute(b,c),j){var k=b.olderShadowRoot;if(k){b=k,x(b,j);continue}break}break}},associateNode:function(a){a.impl.polymerShadowRenderer_=this}},B.prototype.invalidateShadowRenderer=function(){var a=this.impl.polymerShadowRenderer_;return a?(a.invalidate(),!0):!1},z.prototype.getDistributedNodes=function(){return k(),g(this)},A.prototype.nodeWasAdded_=z.prototype.nodeWasAdded_=function(){this.invalidateShadowRenderer();var a,b=n(this);b&&(a=o(b)),this.impl.polymerShadowRenderer_=a,a&&a.invalidate()},a.eventParentsTable=J,a.getRendererForHost=m,a.getShadowTrees=w,a.insertionParentTable=K,a.renderAllPending=k,a.visual={insertBefore:c,remove:d}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b){if(window[b]){d(!a.wrappers[b]);var i=function(a){c.call(this,a)};i.prototype=Object.create(c.prototype),e(i.prototype,{get form(){return h(g(this).form)}}),f(window[b],i,document.createElement(b.slice(4,-7))),a.wrappers[b]=i}}var c=a.wrappers.HTMLElement,d=a.assert,e=a.mixin,f=a.registerWrapper,g=a.unwrap,h=a.wrap,i=["HTMLButtonElement","HTMLFieldSetElement","HTMLInputElement","HTMLKeygenElement","HTMLLabelElement","HTMLLegendElement","HTMLObjectElement","HTMLOptionElement","HTMLOutputElement","HTMLSelectElement","HTMLTextAreaElement"];i.forEach(b)}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){k.call(this,a)}function c(a){var c=document[a];b.prototype[a]=function(){return v(c.apply(this.impl,arguments))}}function d(a,b){y.call(b.impl,u(a)),e(a,b)}function e(a,b){a.shadowRoot&&b.adoptNode(a.shadowRoot),a instanceof n&&f(a,b);for(var c=a.firstChild;c;c=c.nextSibling)e(c,b)}function f(a,b){var c=a.olderShadowRoot;c&&b.adoptNode(c)}function g(a){this.impl=a}function h(a,b){var c=document.implementation[b];a.prototype[b]=function(){return v(c.apply(this.impl,arguments))}}function i(a,b){var c=document.implementation[b];a.prototype[b]=function(){return c.apply(this.impl,arguments)}}var j=a.GetElementsByInterface,k=a.wrappers.Node,l=a.ParentNodeInterface,m=a.SelectorsInterface,n=a.wrappers.ShadowRoot,o=a.defineWrapGetter,p=a.elementFromPoint,q=a.forwardMethodsToWrapper,r=a.matchesName,s=a.mixin,t=a.registerWrapper,u=a.unwrap,v=a.wrap,w=a.wrapEventTargetMethods;a.wrapNodeList;var x=new WeakMap;b.prototype=Object.create(k.prototype),o(b,"documentElement"),o(b,"body"),o(b,"head"),["createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","getElementById"].forEach(c);var y=document.adoptNode;if(s(b.prototype,{adoptNode:function(a){return a.parentNode&&a.parentNode.removeChild(a),d(a,this),a},elementFromPoint:function(a,b){return p(this,this,a,b)}}),document.register){var z=document.register;b.prototype.register=function(b,c){function d(a){return a?(this.impl=a,void 0):document.createElement(b)}var e=c.prototype;if(a.nativePrototypeTable.get(e))throw new Error("NotSupportedError");for(var f,g=Object.getPrototypeOf(e),h=[];g&&!(f=a.nativePrototypeTable.get(g));)h.push(g),g=Object.getPrototypeOf(g);if(!f)throw new Error("NotSupportedError");for(var i=Object.create(f),j=h.length-1;j>=0;j--)i=Object.create(i);return["createdCallback","enteredViewCallback","leftViewCallback","attributeChangedCallback"].forEach(function(a){var b=e[a];b&&(i[a]=function(){b.apply(v(this),arguments)})}),z.call(u(this),b,c.extends?{prototype:i,"extends":c.extends}:{prototype:i}),d.prototype=e,d.prototype.constructor=d,a.constructorTable.set(i,d),a.nativePrototypeTable.set(e,i),d},q([window.HTMLDocument||window.Document],["register"])}q([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement,window.HTMLHtmlElement],["appendChild","compareDocumentPosition","contains","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild",r]),q([window.HTMLDocument||window.Document],["adoptNode","contains","createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","elementFromPoint","getElementById"]),s(b.prototype,j),s(b.prototype,l),s(b.prototype,m),s(b.prototype,{get implementation(){var a=x.get(this);return a?a:(a=new g(u(this).implementation),x.set(this,a),a)}}),t(window.Document,b,document.implementation.createHTMLDocument("")),window.HTMLDocument&&t(window.HTMLDocument,b),w([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]),h(g,"createDocumentType"),h(g,"createDocument"),h(g,"createHTMLDocument"),i(g,"hasFeature"),t(window.DOMImplementation,g),q([window.DOMImplementation],["createDocumentType","createDocument","createHTMLDocument","hasFeature"]),a.adoptNodeNoRemove=d,a.wrappers.DOMImplementation=g,a.wrappers.Document=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.EventTarget,d=a.mixin,e=a.registerWrapper,f=a.unwrap,g=a.unwrapIfNeeded,h=a.wrap,i=a.renderAllPending,j=window.Window;b.prototype=Object.create(c.prototype);var k=window.getComputedStyle;j.prototype.getComputedStyle=function(a,b){return i(),k.call(this||window,g(a),b)},["addEventListener","removeEventListener","dispatchEvent"].forEach(function(a){j.prototype[a]=function(){var b=h(this||window);return b[a].apply(b,arguments)}}),d(b.prototype,{getComputedStyle:function(a,b){return k.call(f(this),g(a),b)}}),e(j,b),a.wrappers.Window=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}function c(a){return new b(a)}function d(a){return a.map(c)}function e(a){var b=this;this.impl=new k(function(c){a.call(b,d(c),b)})}var f=a.defineGetter,g=a.defineWrapGetter,h=a.registerWrapper,i=a.unwrapIfNeeded,j=a.wrapNodeList;a.wrappers;var k=window.MutationObserver||window.WebKitMutationObserver;if(k){var l=window.MutationRecord;b.prototype={get addedNodes(){return j(this.impl.addedNodes)},get removedNodes(){return j(this.impl.removedNodes)}},["target","previousSibling","nextSibling"].forEach(function(a){g(b,a)}),["type","attributeName","attributeNamespace","oldValue"].forEach(function(a){f(b,a,function(){return this.impl[a]})}),l&&h(l,b),window.Node,e.prototype={observe:function(a,b){this.impl.observe(i(a),b)},disconnect:function(){this.impl.disconnect()},takeRecords:function(){return d(this.impl.takeRecords())}},a.wrappers.MutationObserver=e,a.wrappers.MutationRecord=b}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.registerWrapper,d=a.unwrap,e=a.unwrapIfNeeded,f=a.wrap,g=window.Range;b.prototype={get startContainer(){return f(this.impl.startContainer)},get endContainer(){return f(this.impl.endContainer)},get commonAncestorContainer(){return f(this.impl.commonAncestorContainer)},setStart:function(a,b){this.impl.setStart(e(a),b)},setEnd:function(a,b){this.impl.setEnd(e(a),b)},setStartBefore:function(a){this.impl.setStartBefore(e(a))},setStartAfter:function(a){this.impl.setStartAfter(e(a))},setEndBefore:function(a){this.impl.setEndBefore(e(a))},setEndAfter:function(a){this.impl.setEndAfter(e(a))},selectNode:function(a){this.impl.selectNode(e(a))},selectNodeContents:function(a){this.impl.selectNodeContents(e(a))},compareBoundaryPoints:function(a,b){return this.impl.compareBoundaryPoints(a,d(b))},extractContents:function(){return f(this.impl.extractContents())},cloneContents:function(){return f(this.impl.cloneContents())},insertNode:function(a){this.impl.insertNode(e(a))},surroundContents:function(a){this.impl.surroundContents(e(a))},cloneRange:function(){return f(this.impl.cloneRange())},isPointInRange:function(a,b){return this.impl.isPointInRange(e(a),b)},comparePoint:function(a,b){return this.impl.comparePoint(e(a),b)},intersectsNode:function(a){return this.impl.intersectsNode(e(a))}},g.prototype.createContextualFragment&&(b.prototype.createContextualFragment=function(a){return f(this.impl.createContextualFragment(a))}),c(window.Range,b),a.wrappers.Range=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=c[a],d=window[b];if(d){var e=document.createElement(a),f=e.constructor;window[b]=f}}a.isWrapperFor;var c={a:"HTMLAnchorElement",applet:"HTMLAppletElement",area:"HTMLAreaElement",audio:"HTMLAudioElement",br:"HTMLBRElement",base:"HTMLBaseElement",body:"HTMLBodyElement",button:"HTMLButtonElement",dl:"HTMLDListElement",datalist:"HTMLDataListElement",data:"HTMLDataElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",hr:"HTMLHRElement",head:"HTMLHeadElement",h1:"HTMLHeadingElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",input:"HTMLInputElement",li:"HTMLLIElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",link:"HTMLLinkElement",map:"HTMLMapElement",marquee:"HTMLMarqueeElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",del:"HTMLModElement",ol:"HTMLOListElement",object:"HTMLObjectElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",time:"HTMLTimeElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",table:"HTMLTableElement",tr:"HTMLTableRowElement",thead:"HTMLTableSectionElement",tbody:"HTMLTableSectionElement",textarea:"HTMLTextAreaElement",track:"HTMLTrackElement",title:"HTMLTitleElement",ul:"HTMLUListElement",video:"HTMLVideoElement"};Object.keys(c).forEach(b),Object.getOwnPropertyNames(a.wrappers).forEach(function(b){window[b]=a.wrappers[b]}),a.knownElements=c}(this.ShadowDOMPolyfill),function(){var a=window.ShadowDOMPolyfill;a.wrap,Object.defineProperties(HTMLElement.prototype,{webkitShadowRoot:{get:function(){return this.shadowRoot}}}),HTMLElement.prototype.webkitCreateShadowRoot=HTMLElement.prototype.createShadowRoot,window.dartExperimentalFixupGetTag=function(b){function c(a){if(a instanceof d)return"NodeList";if(a instanceof e)return"ShadowRoot";if(window.MutationRecord&&a instanceof MutationRecord)return"MutationRecord";if(window.MutationObserver&&a instanceof MutationObserver)return"MutationObserver";if(a instanceof HTMLTemplateElement)return"HTMLTemplateElement";var c=f(a);if(a!==c){var g=a.constructor;if(g===c.constructor){var h=g._ShadowDOMPolyfill$cacheTag_;return h||(h=Object.prototype.toString.call(c),h=h.substring(8,h.length-1),g._ShadowDOMPolyfill$cacheTag_=h),h}a=c}return b(a)}var d=a.wrappers.NodeList,e=a.wrappers.ShadowRoot,f=a.unwrapIfNeeded;return c}}();var Platform={};!function(a){function b(a,b){var c="";return Array.prototype.forEach.call(a,function(a){c+=a.textContent+"\n\n"}),b||(c=c.replace(n,"")),c}function c(a){var b=document.createElement("style");return b.textContent=a,b}function d(a){var b=c(a);document.head.appendChild(b);var d=b.sheet.cssRules;return b.parentNode.removeChild(b),d}function e(a){for(var b=0,c=[];b<a.length;b++)c.push(a[b].cssText);return c.join("\n\n")}function f(a){a&&g().appendChild(document.createTextNode(a))}function g(){return h||(h=document.createElement("style"),h.setAttribute("ShadowCSSShim","")),h}var h,i={strictStyling:!1,registry:{},shimStyling:function(a,b,d){var e=this.isTypeExtension(d),g=this.registerDefinition(a,b,d);this.strictStyling&&this.applyScopeToContent(a,b),this.insertPolyfillDirectives(g.rootStyles),this.insertPolyfillRules(g.rootStyles);var h=this.stylesToShimmedCssText(g.scopeStyles,b,e);h+=this.extractPolyfillUnscopedRules(g.rootStyles),g.shimmedStyle=c(h),a&&(a.shimmedStyle=g.shimmedStyle);for(var i,j=0,k=g.rootStyles.length;k>j&&(i=g.rootStyles[j]);j++)i.parentNode.removeChild(i);f(h)},registerDefinition:function(a,b,c){var d=this.registry[b]={root:a,name:b,extendsName:c},e=a?a.querySelectorAll("style"):[];e=e?Array.prototype.slice.call(e,0):[],d.rootStyles=e,d.scopeStyles=d.rootStyles;var f=this.registry[d.extendsName];return!f||a&&!a.querySelector("shadow")||(d.scopeStyles=f.scopeStyles.concat(d.scopeStyles)),d},isTypeExtension:function(a){return a&&a.indexOf("-")<0},applyScopeToContent:function(a,b){a&&(Array.prototype.forEach.call(a.querySelectorAll("*"),function(a){a.setAttribute(b,"")}),Array.prototype.forEach.call(a.querySelectorAll("template"),function(a){this.applyScopeToContent(a.content,b)},this))},insertPolyfillDirectives:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillDirectivesInCssText(a.textContent)},this)},insertPolyfillDirectivesInCssText:function(a){return a.replace(o,function(a,b){return b.slice(0,-2)+"{"})},insertPolyfillRules:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillRulesInCssText(a.textContent)},this)},insertPolyfillRulesInCssText:function(a){return a.replace(p,function(a,b){return b.slice(0,-1)})},extractPolyfillUnscopedRules:function(a){var b="";return a&&Array.prototype.forEach.call(a,function(a){b+=this.extractPolyfillUnscopedRulesFromCssText(a.textContent)+"\n\n"},this),b},extractPolyfillUnscopedRulesFromCssText:function(a){for(var b,c="";b=q.exec(a);)c+=b[1].slice(0,-1)+"\n\n";return c},stylesToShimmedCssText:function(a,b,c){return this.shimAtHost(a,b,c)+this.shimScoping(a,b,c)},shimAtHost:function(a,b,c){return a?this.convertAtHostStyles(a,b,c):void 0},convertAtHostStyles:function(a,c,f){var g=b(a),h=this;return g=g.replace(j,function(a,b){return h.scopeHostCss(b,c,f)}),g=e(this.findAtHostRules(d(g),new RegExp("^"+c+u,"m")))},scopeHostCss:function(a,b,c){var d=this;return a.replace(k,function(a,e,f){return d.scopeHostSelector(e,b,c)+" "+f+"\n	"})},scopeHostSelector:function(a,b,c){var d=[],e=a.split(","),f="[is="+b+"]";return e.forEach(function(a){a=a.trim(),a.match(l)?a=a.replace(l,c?f+"$1$3":b+"$1$3"):a.match(m)&&(a=c?f+a:b+a),d.push(a)},this),d.join(", ")},findAtHostRules:function(a,b){return Array.prototype.filter.call(a,this.isHostRule.bind(this,b))},isHostRule:function(a,b){return b.selectorText&&b.selectorText.match(a)||b.cssRules&&this.findAtHostRules(b.cssRules,a).length||b.type==CSSRule.WEBKIT_KEYFRAMES_RULE},shimScoping:function(a,b,c){return a?this.convertScopedStyles(a,b,c):void 0},convertScopedStyles:function(a,c,e){var f=b(a).replace(j,"");f=this.insertPolyfillHostInCssText(f),f=this.convertColonHost(f),f=this.convertPseudos(f),f=this.convertParts(f),f=this.convertCombinators(f);var g=d(f);return f=this.scopeRules(g,c,e)},convertPseudos:function(a){return a.replace(r," [pseudo=$1]")},convertParts:function(a){return a.replace(s," [part=$1]")},convertColonHost:function(a){return a.replace(t,function(a,b,c,d){return c?y+c+d+", "+c+" "+b+d:b+d})},convertCombinators:function(a){return a.replace("^^"," ").replace("^"," ")},scopeRules:function(a,b,c){var d="";return Array.prototype.forEach.call(a,function(a){a.selectorText&&a.style&&a.style.cssText?(d+=this.scopeSelector(a.selectorText,b,c,this.strictStyling)+" {\n	",d+=this.propertiesFromRule(a)+"\n}\n\n"):a.media?(d+="@media "+a.media.mediaText+" {\n",d+=this.scopeRules(a.cssRules,b),d+="\n}\n\n"):a.cssText&&(d+=a.cssText+"\n\n")},this),d},scopeSelector:function(a,b,c,d){var e=[],f=a.split(",");return f.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b,c)&&(a=d?this.applyStrictSelectorScope(a,b):this.applySimpleSelectorScope(a,b,c)),e.push(a)},this),e.join(", ")
-},selectorNeedsScoping:function(a,b,c){var d=c?b:"\\[is="+b+"\\]",e=new RegExp("^("+d+")"+u,"m");return!a.match(e)},applySimpleSelectorScope:function(a,b,c){var d=c?"[is="+b+"]":b;return a.match(z)?(a=a.replace(y,d),a.replace(z,d+" ")):d+" "+a},applyStrictSelectorScope:function(a,b){var c=[" ",">","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim().replace(z,"");return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},insertPolyfillHostInCssText:function(a){return a.replace(v,x).replace(w,x)},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b}},j=/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,k=/([^{]*)({[\s\S]*?})/gim,l=/(.*)((?:\*)|(?:\:scope))(.*)/,m=/^[.\[:]/,n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,o=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,p=/\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,q=/\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,r=/::(x-[^\s{,(]*)/gim,s=/::part\(([^)]*)\)/gim,t=/(-host)(?:\(([^)]*)\))?([^,{]*)/gim,u="([>\\s~+[.,{:][\\s\\S]*)?$",v=/@host/gim,w=/\:host/gim,x="-host",y="-host-no-combinator",z=/-host/gim;if(window.ShadowDOMPolyfill){f("style { display: none !important; }\n");var A=document.querySelector("head");A.insertBefore(g(),A.childNodes[0])}a.ShadowCSS=i}(window.Platform)}
\ No newline at end of file
+if(!HTMLElement.prototype.createShadowRoot||window.__forceShadowDomPolyfill){!function(){Element.prototype.webkitCreateShadowRoot&&(Element.prototype.webkitCreateShadowRoot=function(){return window.ShadowDOMPolyfill.wrapIfNeeded(this).createShadowRoot()})}(),function(a){"use strict";function b(){function a(a){b=a}if("function"!=typeof Object.observe||"function"!=typeof Array.observe)return!1;var b=[],c={};if(Object.observe(c,a),c.id=1,c.id=2,delete c.id,Object.deliverChangeRecords(a),3!==b.length)return!1;if("new"==b[0].type&&"updated"==b[1].type&&"deleted"==b[2].type)F="new",G="updated",H="reconfigured",I="deleted";else if("add"!=b[0].type||"update"!=b[1].type||"delete"!=b[2].type)return console.error("Unexpected change record names for Object.observe. Using dirty-checking instead"),!1;return Object.unobserve(c,a),c=[0],Array.observe(c,a),c[1]=1,c.length=0,Object.deliverChangeRecords(a),2!=b.length?!1:b[0].type!=J||b[1].type!=J?!1:(Array.unobserve(c,a),!0)}function c(){if(a.document&&"securityPolicy"in a.document&&!a.document.securityPolicy.allowsEval)return!1;try{var b=new Function("","return true;");return b()}catch(c){return!1}}function d(a){return+a===a>>>0}function e(a){return+a}function f(a){return a===Object(a)}function g(a,b){return a===b?0!==a||1/a===1/b:M(a)&&M(b)?!0:a!==a&&b!==b}function h(a){return"string"!=typeof a?!1:(a=a.trim(),""==a?!0:"."==a[0]?!1:U.test(a))}function i(a,b){if(b!==V)throw Error("Use Path.get to retrieve path objects");return""==a.trim()?this:d(a)?(this.push(a),this):(a.split(/\s*\.\s*/).filter(function(a){return a}).forEach(function(a){this.push(a)},this),L&&!K&&this.length&&(this.getValueFrom=this.compiledGetValueFromFn()),void 0)}function j(a){if(a instanceof i)return a;null==a&&(a=""),"string"!=typeof a&&(a=String(a));var b=W[a];if(b)return b;if(!h(a))return X;var b=new i(a,V);return W[a]=b,b}function k(b){for(var c=0;Y>c&&b.check();)b.report(),c++;a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=c)}function l(a){for(var b in a)return!1;return!0}function m(a){return l(a.added)&&l(a.removed)&&l(a.changed)}function n(a,b){var c={},d={},e={};for(var f in b){var g=a[f];(void 0===g||g!==b[f])&&(f in a?g!==b[f]&&(e[f]=g):d[f]=void 0)}for(var f in a)f in b||(c[f]=a[f]);return Array.isArray(a)&&a.length!==b.length&&(e.length=a.length),{added:c,removed:d,changed:e}}function o(a,b){var c=b||(Array.isArray(a)?[]:{});for(var d in a)c[d]=a[d];return Array.isArray(a)&&(c.length=a.length),c}function p(a,b,c,d){if(this.closed=!1,this.object=a,this.callback=b,this.target=c,this.token=d,this.reporting=!0,K){var e=this;this.boundInternalCallback=function(a){e.internalCallback(a)}}q(this)}function q(a){$&&(Z.push(a),p._allObserversCount++)}function r(a,b,c,d){p.call(this,a,b,c,d),this.connect(),this.sync(!0)}function s(a,b,c,d){if(!Array.isArray(a))throw Error("Provided object is not an Array");r.call(this,a,b,c,d)}function t(a){this.arr=[],this.callback=a,this.isObserved=!0}function u(a,b,c,d,e,g,h){var b=b instanceof i?b:j(b);return b&&b.length&&f(a)?(p.call(this,a,c,d,e),this.valueFn=g,this.setValueFn=h,this.path=b,this.connect(),this.sync(!0),void 0):(this.value_=b?b.getValueFrom(a):void 0,this.value=g?g(this.value_):this.value_,this.closed=!0,void 0)}function v(a,b,c,d){p.call(this,void 0,a,b,c),this.valueFn=d,this.observed=[],this.values=[],this.value=void 0,this.oldValue=void 0,this.oldValues=void 0,this.changeFlags=void 0,this.started=!1}function w(a,b){if("function"==typeof Object.observe){var c=Object.getNotifier(a);return function(d,e){var f={object:a,type:d,name:b};2===arguments.length&&(f.oldValue=e),c.notify(f)}}}function x(a,b,c){for(var d={},e={},f=0;f<b.length;f++){var g=b[f];db[g.type]?(g.name in c||(c[g.name]=g.oldValue),g.type!=G&&(g.type!=F?g.name in d?(delete d[g.name],delete c[g.name]):e[g.name]=!0:g.name in e?delete e[g.name]:d[g.name]=!0)):(console.error("Unknown changeRecord type: "+g.type),console.error(g))}for(var h in d)d[h]=a[h];for(var h in e)e[h]=void 0;var i={};for(var h in c)if(!(h in d||h in e)){var j=a[h];c[h]!==j&&(i[h]=j)}return{added:d,removed:e,changed:i}}function y(a,b,c){return{index:a,removed:b,addedCount:c}}function z(){}function A(a,b,c,d,e,f){return ib.calcSplices(a,b,c,d,e,f)}function B(a,b,c,d){return c>b||a>d?-1:b==c||d==a?0:c>a?d>b?b-c:d-c:b>d?d-a:b-a}function C(a,b,c,d){for(var e=y(b,c,d),f=!1,g=0,h=0;h<a.length;h++){var i=a[h];if(i.index+=g,!f){var j=B(e.index,e.index+e.removed.length,i.index,i.index+i.addedCount);if(j>=0){a.splice(h,1),h--,g-=i.addedCount-i.removed.length,e.addedCount+=i.addedCount-j;var k=e.removed.length+i.removed.length-j;if(e.addedCount||k){var c=i.removed;if(e.index<i.index){var l=e.removed.slice(0,i.index-e.index);Array.prototype.push.apply(l,c),c=l}if(e.index+e.removed.length>i.index+i.addedCount){var m=e.removed.slice(i.index+i.addedCount-e.index);Array.prototype.push.apply(c,m)}e.removed=c,i.index<e.index&&(e.index=i.index)}else f=!0}else if(e.index<i.index){f=!0,a.splice(h,0,e),h++;var n=e.addedCount-e.removed.length;i.index+=n,g+=n}}}f||a.push(e)}function D(a,b){for(var c=[],f=0;f<b.length;f++){var g=b[f];switch(g.type){case J:C(c,g.index,g.removed.slice(),g.addedCount);break;case F:case G:case I:if(!d(g.name))continue;var h=e(g.name);if(0>h)continue;C(c,h,[g.oldValue],1);break;default:console.error("Unexpected record type: "+JSON.stringify(g))}}return c}function E(a,b){var c=[];return D(a,b).forEach(function(b){return 1==b.addedCount&&1==b.removed.length?(b.removed[0]!==a[b.index]&&c.push(b),void 0):(c=c.concat(A(a,b.index,b.index+b.addedCount,b.removed,0,b.removed.length)),void 0)}),c}var F="add",G="update",H="reconfigure",I="delete",J="splice",K=b(),L=c(),M=a.Number.isNaN||function(b){return"number"==typeof b&&a.isNaN(b)},N="__proto__"in{}?function(a){return a}:function(a){var b=a.__proto__;if(!b)return a;var c=Object.create(b);return Object.getOwnPropertyNames(a).forEach(function(b){Object.defineProperty(c,b,Object.getOwnPropertyDescriptor(a,b))}),c},O="[$_a-zA-Z]",P="[$_a-zA-Z0-9]",Q=O+"+"+P+"*",R="(?:[0-9]|[1-9]+[0-9]+)",S="(?:"+Q+"|"+R+")",T="(?:"+S+")(?:\\s*\\.\\s*"+S+")*",U=new RegExp("^"+T+"$"),V={},W={};i.get=j,i.prototype=N({__proto__:[],valid:!0,toString:function(){return this.join(".")},getValueFrom:function(a,b){for(var c=0;c<this.length;c++){if(null==a)return;b&&b.observe(a),a=a[this[c]]}return a},compiledGetValueFromFn:function(){var a=this.map(function(a){return d(a)?'["'+a+'"]':"."+a}),b="",c="obj";b+="if (obj != null";for(var e=0;e<this.length-1;e++)this[e],c+=a[e],b+=" &&\n     "+c+" != null";return b+=")\n",c+=a[e],b+="  return "+c+";\nelse\n  return undefined;",new Function("obj",b)},setValueFrom:function(a,b){if(!this.length)return!1;for(var c=0;c<this.length-1;c++){if(!f(a))return!1;a=a[this[c]]}return f(a)?(a[this[c]]=b,!0):!1}});var X=new i("",V);X.valid=!1,X.getValueFrom=X.setValueFrom=function(){};var Y=1e3;p.prototype={internalCallback:function(a){this.closed||this.reporting&&this.check(a)&&(this.report(),this.testingResults&&(this.testingResults.anyChanged=!0))},close:function(){this.closed||(this.object&&"function"==typeof this.object.close&&this.object.close(),this.disconnect(),this.object=void 0,this.closed=!0)},deliver:function(a){this.closed||(K?(this.testingResults=a,Object.deliverChangeRecords(this.boundInternalCallback),this.testingResults=void 0):k(this))},report:function(){this.reporting&&(this.sync(!1),this.callback&&(this.reportArgs.push(this.token),this.invokeCallback(this.reportArgs)),this.reportArgs=void 0)},invokeCallback:function(a){try{this.callback.apply(this.target,a)}catch(b){p._errorThrownDuringCallback=!0,console.error("Exception caught during observer callback: "+(b.stack||b))}},reset:function(){this.closed||(K&&(this.reporting=!1,Object.deliverChangeRecords(this.boundInternalCallback),this.reporting=!0),this.sync(!0))}};var Z,$=!K||a.forceCollectObservers;p._allObserversCount=0,$&&(Z=[]);var _=!1,ab="function"==typeof Object.deliverAllChangeRecords;a.Platform=a.Platform||{},a.Platform.performMicrotaskCheckpoint=function(){if(!_){if(ab)return Object.deliverAllChangeRecords(),void 0;if($){_=!0;var b=0,c={};do{b++;var d=Z;Z=[],c.anyChanged=!1;for(var e=0;e<d.length;e++){var f=d[e];f.closed||(K?f.deliver(c):f.check()&&(c.anyChanged=!0,f.report()),Z.push(f))}}while(Y>b&&c.anyChanged);a.testingExposeCycleCount&&(a.dirtyCheckCycleCount=b),p._allObserversCount=Z.length,_=!1}}},$&&(a.Platform.clearObservers=function(){Z=[]}),r.prototype=N({__proto__:p.prototype,connect:function(){K&&Object.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=o(this.object))},check:function(a){var b,c;if(K){if(!a)return!1;c={},b=x(this.object,a,c)}else c=this.oldObject,b=n(this.object,this.oldObject);return m(b)?!1:(this.reportArgs=[b.added||{},b.removed||{},b.changed||{}],this.reportArgs.push(function(a){return c[a]}),!0)},disconnect:function(){K?this.object&&Object.unobserve(this.object,this.boundInternalCallback):this.oldObject=void 0}}),s.prototype=N({__proto__:r.prototype,connect:function(){K&&Array.observe(this.object,this.boundInternalCallback)},sync:function(){K||(this.oldObject=this.object.slice())},check:function(a){var b;if(K){if(!a)return!1;b=E(this.object,a)}else b=A(this.object,0,this.object.length,this.oldObject,0,this.oldObject.length);return b&&b.length?(this.reportArgs=[b],!0):!1}}),s.applySplices=function(a,b,c){c.forEach(function(c){for(var d=[c.index,c.removed.length],e=c.index;e<c.index+c.addedCount;)d.push(b[e]),e++;Array.prototype.splice.apply(a,d)})};var bb=Object.getPrototypeOf({}),cb=Object.getPrototypeOf([]);t.prototype={reset:function(){this.isObserved=!this.isObserved},observe:function(a){if(f(a)&&a!==bb&&a!==cb){var b=this.arr.indexOf(a);b>=0&&this.arr[b+1]===this.isObserved||(0>b&&(b=this.arr.length,this.arr[b]=a,Object.observe(a,this.callback)),this.arr[b+1]=this.isObserved,this.observe(Object.getPrototypeOf(a)))}},cleanup:function(){for(var a=0,b=0,c=this.isObserved;b<this.arr.length;){var d=this.arr[b];this.arr[b+1]==c?(b>a&&(this.arr[a]=d,this.arr[a+1]=c),a+=2):Object.unobserve(d,this.callback),b+=2}this.arr.length=a}},u.prototype=N({__proto__:p.prototype,connect:function(){K&&(this.observedSet=new t(this.boundInternalCallback))},disconnect:function(){this.value=void 0,this.value_=void 0,this.observedSet&&(this.observedSet.reset(),this.observedSet.cleanup(),this.observedSet=void 0)},check:function(){return this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.observedSet&&this.observedSet.cleanup(),g(this.value_,this.oldValue_)?!1:(this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.reportArgs=[this.value,this.oldValue],!0)},sync:function(a){a&&(this.observedSet&&this.observedSet.reset(),this.value_=this.path.getValueFrom(this.object,this.observedSet),this.value=this.valueFn?this.valueFn(this.value_):this.value_,this.observedSet&&this.observedSet.cleanup()),this.oldValue_=this.value_,this.oldValue=this.value},setValue:function(a){this.path&&("function"==typeof this.setValueFn&&(a=this.setValueFn(a)),this.path.setValueFrom(this.object,a))}}),v.prototype=N({__proto__:u.prototype,addPath:function(a,b){if(this.started)throw Error("Cannot add more paths once started.");var b=b instanceof i?b:j(b),c=b?b.getValueFrom(a):void 0;this.observed.push(a,b),this.values.push(c)},start:function(){this.started=!0,this.connect(),this.sync(!0)},getValues:function(){this.observedSet&&this.observedSet.reset();for(var a=!1,b=0;b<this.observed.length;b+=2){var c=this.observed[b+1];if(c){var d=this.observed[b],e=c.getValueFrom(d,this.observedSet),f=this.values[b/2];if(!g(e,f)){if(!a&&!this.valueFn){this.oldValues=this.oldValues||[],this.changeFlags=this.changeFlags||[];for(var h=0;h<this.values.length;h++)this.oldValues[h]=this.values[h],this.changeFlags[h]=!1}this.valueFn||(this.changeFlags[b/2]=!0),this.values[b/2]=e,a=!0}}}return this.observedSet&&this.observedSet.cleanup(),a},check:function(){if(this.getValues()){if(this.valueFn){if(this.value=this.valueFn(this.values),g(this.value,this.oldValue))return!1;this.reportArgs=[this.value,this.oldValue]}else this.reportArgs=[this.values,this.oldValues,this.changeFlags,this.observed];return!0}},sync:function(a){a&&(this.getValues(),this.valueFn&&(this.value=this.valueFn(this.values))),this.valueFn&&(this.oldValue=this.value)},close:function(){if(this.observed){for(var a=0;a<this.observed.length;a+=2){var b=this.observed[a];b&&"function"==typeof b.close&&b.close()}this.observed=void 0,this.values=void 0}p.prototype.close.call(this)}});var db={};db[F]=!0,db[G]=!0,db[I]=!0,u.defineProperty=function(a,b,c){var d=c.object,e=j(c.path),f=w(a,b),g=new u(d,c.path,function(a,b){f&&f(G,b)});return Object.defineProperty(a,b,{get:function(){return e.getValueFrom(d)},set:function(a){e.setValueFrom(d,a)},configurable:!0}),{close:function(){var c=e.getValueFrom(d);f&&g.deliver(),g.close(),Object.defineProperty(a,b,{value:c,writable:!0,configurable:!0})}}};var eb=0,fb=1,gb=2,hb=3;z.prototype={calcEditDistances:function(a,b,c,d,e,f){for(var g=f-e+1,h=c-b+1,i=new Array(g),j=0;g>j;j++)i[j]=new Array(h),i[j][0]=j;for(var k=0;h>k;k++)i[0][k]=k;for(var j=1;g>j;j++)for(var k=1;h>k;k++)if(this.equals(a[b+k-1],d[e+j-1]))i[j][k]=i[j-1][k-1];else{var l=i[j-1][k]+1,m=i[j][k-1]+1;i[j][k]=m>l?l:m}return i},spliceOperationsFromEditDistances:function(a){for(var b=a.length-1,c=a[0].length-1,d=a[b][c],e=[];b>0||c>0;)if(0!=b)if(0!=c){var f,g=a[b-1][c-1],h=a[b-1][c],i=a[b][c-1];f=i>h?g>h?h:g:g>i?i:g,f==g?(g==d?e.push(eb):(e.push(fb),d=g),b--,c--):f==h?(e.push(hb),b--,d=h):(e.push(gb),c--,d=i)}else e.push(hb),b--;else e.push(gb),c--;return e.reverse(),e},calcSplices:function(a,b,c,d,e,f){var g=0,h=0,i=Math.min(c-b,f-e);if(0==b&&0==e&&(g=this.sharedPrefix(a,d,i)),c==a.length&&f==d.length&&(h=this.sharedSuffix(a,d,i-g)),b+=g,e+=g,c-=h,f-=h,0==c-b&&0==f-e)return[];if(b==c){for(var j=y(b,[],0);f>e;)j.removed.push(d[e++]);return[j]}if(e==f)return[y(b,[],c-b)];for(var k=this.spliceOperationsFromEditDistances(this.calcEditDistances(a,b,c,d,e,f)),j=void 0,l=[],m=b,n=e,o=0;o<k.length;o++)switch(k[o]){case eb:j&&(l.push(j),j=void 0),m++,n++;break;case fb:j||(j=y(m,[],0)),j.addedCount++,m++,j.removed.push(d[n]),n++;break;case gb:j||(j=y(m,[],0)),j.addedCount++,m++;break;case hb:j||(j=y(m,[],0)),j.removed.push(d[n]),n++}return j&&l.push(j),l},sharedPrefix:function(a,b,c){for(var d=0;c>d;d++)if(!this.equals(a[d],b[d]))return d;return c},sharedSuffix:function(a,b,c){for(var d=a.length,e=b.length,f=0;c>f&&this.equals(a[--d],b[--e]);)f++;return f},calculateSplices:function(a,b){return this.calcSplices(a,0,a.length,b,0,b.length)},equals:function(a,b){return a===b}};var ib=new z;a.Observer=p,a.Observer.hasObjectObserve=K,a.ArrayObserver=s,a.ArrayObserver.calculateSplices=function(a,b){return ib.calculateSplices(a,b)},a.ArraySplice=z,a.ObjectObserver=r,a.PathObserver=u,a.CompoundPathObserver=v,a.Path=i,a.Observer.changeRecordTypes={add:F,update:G,reconfigure:H,"delete":I,splice:J}}("undefined"!=typeof global&&global?global:this),"undefined"==typeof WeakMap&&!function(){var a=Object.defineProperty,b=Date.now()%1e9,c=function(){this.name="__st"+(1e9*Math.random()>>>0)+(b++ +"__")};c.prototype={set:function(b,c){var d=b[this.name];d&&d[0]===b?d[1]=c:a(b,this.name,{value:[b,c],writable:!0})},get:function(a){var b;return(b=a[this.name])&&b[0]===a?b[1]:void 0},"delete":function(a){this.set(a,void 0)}},window.WeakMap=c}();var ShadowDOMPolyfill={};!function(a){"use strict";function b(a){if(!a)throw new Error("Assertion failed")}function c(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function d(a,b){return Object.getOwnPropertyNames(b).forEach(function(c){switch(c){case"arguments":case"caller":case"length":case"name":case"prototype":case"toString":return}Object.defineProperty(a,c,Object.getOwnPropertyDescriptor(b,c))}),a}function e(a,b){for(var c=0;c<b.length;c++)if(b[c]in a)return b[c]}function f(a){var b=a.__proto__||Object.getPrototypeOf(a),c=D.get(b);if(c)return c;var d=f(b),e=s(d);return p(b,e,a),e}function g(a,b){n(a,b,!0)}function h(a,b){n(b,a,!1)}function i(a){return/^on[a-z]+$/.test(a)}function j(a){return/^\w[a-zA-Z_0-9]*$/.test(a)}function k(a){return G&&j(a)?new Function("return this.impl."+a):function(){return this.impl[a]}}function l(a){return G&&j(a)?new Function("v","this.impl."+a+" = v"):function(b){this.impl[a]=b}}function m(a){return G&&j(a)?new Function("return this.impl."+a+".apply(this.impl, arguments)"):function(){return this.impl[a].apply(this.impl,arguments)}}function n(b,c,d){Object.getOwnPropertyNames(b).forEach(function(e){if(!(e in c)){J&&b.__lookupGetter__(e);var f;try{f=Object.getOwnPropertyDescriptor(b,e)}catch(g){f=K}var h,j;if(d&&"function"==typeof f.value)return c[e]=m(e),void 0;var n=i(e);h=n?a.getEventHandlerGetter(e):k(e),(f.writable||f.set)&&(j=n?a.getEventHandlerSetter(e):l(e)),Object.defineProperty(c,e,{get:h,set:j,configurable:f.configurable,enumerable:f.enumerable})}})}function o(a,b,c){var e=a.prototype;p(e,b,c),d(b,a)}function p(a,c,d){var e=c.prototype;b(void 0===D.get(a)),D.set(a,c),E.set(e,a),g(a,e),d&&h(e,d)}function q(a,b){return D.get(b.prototype)===a}function r(a){var b=Object.getPrototypeOf(a),c=f(b),d=s(c);return p(b,d,a),d}function s(a){function b(b){a.call(this,b)}return b.prototype=Object.create(a.prototype),b.prototype.constructor=b,b}function t(a){return a instanceof F.EventTarget||a instanceof F.Event||a instanceof F.Range||a instanceof F.DOMImplementation||a instanceof F.CanvasRenderingContext2D||F.WebGLRenderingContext&&a instanceof F.WebGLRenderingContext}function u(a){return a instanceof N||a instanceof M||a instanceof O||a instanceof P||a instanceof L||a instanceof Q||R&&a instanceof R}function v(a){return null===a?null:(b(u(a)),a.polymerWrapper_||(a.polymerWrapper_=new(f(a))(a)))}function w(a){return null===a?null:(b(t(a)),a.impl)}function x(a){return a&&t(a)?w(a):a}function y(a){return a&&!t(a)?v(a):a}function z(a,c){null!==c&&(b(u(a)),b(void 0===c||t(c)),a.polymerWrapper_=c)}function A(a,b,c){Object.defineProperty(a.prototype,b,{get:c,configurable:!0,enumerable:!0})}function B(a,b){A(a,b,function(){return v(this.impl[b])})}function C(a,b){a.forEach(function(a){b.forEach(function(b){a.prototype[b]=function(){var a=y(this);return a[b].apply(a,arguments)}})})}var D=new WeakMap,E=new WeakMap,F=Object.create(null),G=!("securityPolicy"in document)||document.securityPolicy.allowsEval;if(G)try{var H=new Function("","return true;");G=H()}catch(I){G=!1}Object.getOwnPropertyNames(window);var J=/Firefox/.test(navigator.userAgent),K={get:function(){},set:function(){},configurable:!0,enumerable:!0},L=window.DOMImplementation,M=window.Event,N=window.Node,O=window.Window,P=window.Range,Q=window.CanvasRenderingContext2D,R=window.WebGLRenderingContext;a.assert=b,a.constructorTable=D,a.defineGetter=A,a.defineWrapGetter=B,a.forwardMethodsToWrapper=C,a.isWrapperFor=q,a.mixin=c,a.nativePrototypeTable=E,a.oneOf=e,a.registerObject=r,a.registerWrapper=o,a.rewrap=z,a.unwrap=w,a.unwrapIfNeeded=x,a.wrap=v,a.wrapIfNeeded=y,a.wrappers=F}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a instanceof O.ShadowRoot}function c(a){var b=a.localName;return"content"===b||"shadow"===b}function d(a){return!!a.shadowRoot}function e(a){var b;return a.parentNode||(b=a.defaultView)&&N(b)||null}function f(f,g,h){if(h.length)return h.shift();if(b(f))return j(f)||f.host;var i=a.eventParentsTable.get(f);if(i){for(var k=1;k<i.length;k++)h[k-1]=i[k];return i[0]}if(g&&c(f)){var l=f.parentNode;if(l&&d(l))for(var m=a.getShadowTrees(l),n=j(g),k=0;k<m.length;k++)if(m[k].contains(n))return n}return e(f)}function g(a){for(var d=[],e=a,g=[],i=[];e;){var j=null;if(c(e)){j=h(d);var k=d[d.length-1]||e;d.push(k)}else d.length||d.push(e);var l=d[d.length-1];g.push({target:l,currentTarget:e}),b(e)&&d.pop(),e=f(e,j,i)}return g}function h(a){for(var b=a.length-1;b>=0;b--)if(!c(a[b]))return a[b];return null}function i(a,d){for(var e=[];a;){for(var g=[],i=d,j=void 0;i;){var l=null;if(g.length){if(c(i)&&(l=h(g),k(j))){var n=g[g.length-1];g.push(n)}}else g.push(i);if(m(i,a))return g[g.length-1];b(i)&&g.pop(),j=i,i=f(i,l,e)}a=b(a)?a.host:a.parentNode}}function j(b){return a.insertionParentTable.get(b)}function k(a){return j(a)}function l(a){for(var b;b=a.parentNode;)a=b;return a}function m(a,b){return l(a)===l(b)}function n(a,b){return a===b?!0:a instanceof O.ShadowRoot?n(l(a.host),b):!1}function o(){Z++}function p(){Z--}function q(b){if(!Q.get(b)){if(Q.set(b,!0),b instanceof $){if(Z)return}else a.renderAllPending();var c=N(b.target),d=N(b);return r(d,c)}}function r(a,b){var c=g(b);return"load"===a.type&&2===c.length&&c[0].target instanceof O.Document&&c.shift(),Y.set(a,c),s(a,c)&&t(a,c)&&u(a,c),U.set(a,x.NONE),S.set(a,null),a.defaultPrevented}function s(a,b){for(var c,d=b.length-1;d>0;d--){var e=b[d].target,f=b[d].currentTarget;if(e!==f&&(c=x.CAPTURING_PHASE,!v(b[d],a,c)))return!1}return!0}function t(a,b){var c=x.AT_TARGET;return v(b[0],a,c)}function u(a,b){for(var c,d=a.bubbles,e=1;e<b.length;e++){var f=b[e].target,g=b[e].currentTarget;if(f===g)c=x.AT_TARGET;else{if(!d||W.get(a))continue;c=x.BUBBLING_PHASE}if(!v(b[e],a,c))return}}function v(a,b,c){var d=a.target,e=a.currentTarget,f=P.get(e);if(!f)return!0;if("relatedTarget"in b){var g=M(b);if(g.relatedTarget){var h=N(g.relatedTarget),j=i(e,h);if(j===d)return!0;T.set(b,j)}}U.set(b,c);var k=b.type,l=!1;R.set(b,d),S.set(b,e);for(var m=0;m<f.length;m++){var n=f[m];if(n.removed)l=!0;else if(!(n.type!==k||!n.capture&&c===x.CAPTURING_PHASE||n.capture&&c===x.BUBBLING_PHASE))try{if("function"==typeof n.handler?n.handler.call(e,b):n.handler.handleEvent(b),W.get(b))return!1}catch(o){window.onerror?window.onerror(o.message):console.error(o,o.stack)}}if(l){var p=f.slice();f.length=0;for(var m=0;m<p.length;m++)p[m].removed||f.push(p[m])}return!V.get(b)}function w(a,b,c){this.type=a,this.handler=b,this.capture=Boolean(c)}function x(a,b){return a instanceof _?(this.impl=a,void 0):N(B(_,"Event",a,b))}function y(a){return a&&a.relatedTarget?Object.create(a,{relatedTarget:{value:M(a.relatedTarget)}}):a}function z(a,b,c){var d=window[a],e=function(b,c){return b instanceof d?(this.impl=b,void 0):N(B(d,a,b,c))};return e.prototype=Object.create(b.prototype),c&&K(e.prototype,c),d&&(d.prototype["init"+a]?L(d,e,document.createEvent(a)):L(d,e,new d("temp"))),e}function A(a,b){return function(){arguments[b]=M(arguments[b]);var c=M(this);c[a].apply(c,arguments)}}function B(a,b,c,d){if(jb)return new a(c,y(d));var e=M(document.createEvent(b)),f=ib[b],g=[c];return Object.keys(f).forEach(function(a){var b=null!=d&&a in d?d[a]:f[a];"relatedTarget"===a&&(b=M(b)),g.push(b)}),e["init"+b].apply(e,g),e}function C(a){return"function"==typeof a?!0:a&&a.handleEvent}function D(a){this.impl=a}function E(a){return a instanceof O.ShadowRoot&&(a=a.host),M(a)}function F(a){J(a,mb)}function G(b,c,d,e){a.renderAllPending();for(var f=N(nb.call(c.impl,d,e)),h=g(f,this),i=0;i<h.length;i++){var j=h[i];if(j.currentTarget===b)return j.target}return null}function H(a){return function(){var b=X.get(this);return b&&b[a]&&b[a].value||null}}function I(a){var b=a.slice(2);return function(c){var d=X.get(this);d||(d=Object.create(null),X.set(this,d));var e=d[a];if(e&&this.removeEventListener(b,e.wrapped,!1),"function"==typeof c){var f=function(b){var d=c.call(this,b);d===!1?b.preventDefault():"onbeforeunload"===a&&"string"==typeof d&&(b.returnValue=d)};this.addEventListener(b,f,!1),d[a]={value:c,wrapped:f}}}}var J=a.forwardMethodsToWrapper,K=a.mixin,L=a.registerWrapper,M=a.unwrap,N=a.wrap,O=a.wrappers;new WeakMap;var P=new WeakMap,Q=new WeakMap,R=new WeakMap,S=new WeakMap,T=new WeakMap,U=new WeakMap,V=new WeakMap,W=new WeakMap,X=new WeakMap,Y=new WeakMap,Z=0,$=window.MutationEvent;w.prototype={equals:function(a){return this.handler===a.handler&&this.type===a.type&&this.capture===a.capture},get removed(){return null===this.handler},remove:function(){this.handler=null}};var _=window.Event;x.prototype={get target(){return R.get(this)},get currentTarget(){return S.get(this)},get eventPhase(){return U.get(this)},get path(){var a=new O.NodeList,b=Y.get(this);if(b){for(var c=0,d=b.length-1,e=l(S.get(this)),f=0;d>=f;f++){var g=b[f].currentTarget,h=l(g);n(e,h)&&(f!==d||g instanceof O.Node)&&(a[c++]=g)}a.length=c}return a},stopPropagation:function(){V.set(this,!0)},stopImmediatePropagation:function(){V.set(this,!0),W.set(this,!0)}},L(_,x,document.createEvent("Event"));var ab=z("UIEvent",x),bb=z("CustomEvent",x),cb={get relatedTarget(){return T.get(this)||N(M(this).relatedTarget)}},db=K({initMouseEvent:A("initMouseEvent",14)},cb),eb=K({initFocusEvent:A("initFocusEvent",5)},cb),fb=z("MouseEvent",ab,db),gb=z("FocusEvent",ab,eb),hb=z("MutationEvent",x,{initMutationEvent:A("initMutationEvent",3),get relatedNode(){return N(this.impl.relatedNode)}}),ib=Object.create(null),jb=function(){try{new window.MouseEvent("click")}catch(a){return!1}return!0}();if(!jb){var kb=function(a,b,c){if(c){var d=ib[c];b=K(K({},d),b)}ib[a]=b};kb("Event",{bubbles:!1,cancelable:!1}),kb("CustomEvent",{detail:null},"Event"),kb("UIEvent",{view:null,detail:0},"Event"),kb("MouseEvent",{screenX:0,screenY:0,clientX:0,clientY:0,ctrlKey:!1,altKey:!1,shiftKey:!1,metaKey:!1,button:0,relatedTarget:null},"UIEvent"),kb("FocusEvent",{relatedTarget:null},"UIEvent")}var lb=window.EventTarget,mb=["addEventListener","removeEventListener","dispatchEvent"];[Node,Window].forEach(function(a){var b=a.prototype;mb.forEach(function(a){Object.defineProperty(b,a+"_",{value:b[a]})})}),D.prototype={addEventListener:function(a,b,c){if(C(b)){var d=new w(a,b,c),e=P.get(this);if(e){for(var f=0;f<e.length;f++)if(d.equals(e[f]))return}else e=[],P.set(this,e);e.push(d);var g=E(this);g.addEventListener_(a,q,!0)}},removeEventListener:function(a,b,c){c=Boolean(c);var d=P.get(this);if(d){for(var e=0,f=!1,g=0;g<d.length;g++)d[g].type===a&&d[g].capture===c&&(e++,d[g].handler===b&&(f=!0,d[g].remove()));if(f&&1===e){var h=E(this);h.removeEventListener_(a,q,!0)}}},dispatchEvent:function(a){var b=E(this),c=M(a);return Q.set(c,!1),b.dispatchEvent_(c)}},lb&&L(lb,D);var nb=document.elementFromPoint;a.adjustRelatedTarget=i,a.elementFromPoint=G,a.getEventHandlerGetter=H,a.getEventHandlerSetter=I,a.muteMutationEvents=o,a.unmuteMutationEvents=p,a.wrapEventTargetMethods=F,a.wrappers.CustomEvent=bb,a.wrappers.Event=x,a.wrappers.EventTarget=D,a.wrappers.FocusEvent=gb,a.wrappers.MouseEvent=fb,a.wrappers.MutationEvent=hb,a.wrappers.UIEvent=ab}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,b){Object.defineProperty(a,b,{enumerable:!1})}function c(){this.length=0,b(this,"length")}function d(a){if(null==a)return a;for(var b=new c,d=0,e=a.length;e>d;d++)b[d]=f(a[d]);return b.length=e,b}function e(a,b){a.prototype[b]=function(){return d(this.impl[b].apply(this.impl,arguments))}}var f=a.wrap;c.prototype={item:function(a){return this[a]}},b(c.prototype,"item"),a.wrappers.NodeList=c,a.addWrapNodeListMethod=e,a.wrapNodeList=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){o(a instanceof k)}function c(a,b,c,d){if(!(a instanceof DocumentFragment))return a.parentNode&&a.parentNode.removeChild(a),a.parentNode_=b,a.previousSibling_=c,a.nextSibling_=d,c&&(c.nextSibling_=a),d&&(d.previousSibling_=a),[a];for(var e=[],f=a.firstChild;f;f=f.nextSibling)e.push(f);for(var g=e.length-1;g>=0;g--)a.removeChild(e[g]),e[g].parentNode_=b;for(var g=0;g<e.length;g++)e[g].previousSibling_=e[g-1]||c,e[g].nextSibling_=e[g+1]||d;return c&&(c.nextSibling_=e[0]),d&&(d.previousSibling_=e[e.length-1]),e}function d(a){if(a instanceof DocumentFragment){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}return[a]}function e(a){for(var b=0;b<a.length;b++)a[b].nodeWasAdded_()}function f(a,b){var c=a.nodeType===k.DOCUMENT_NODE?a:a.ownerDocument;c!==b.ownerDocument&&c.adoptNode(b)}function g(b,c){if(c.length){var d=b.ownerDocument;if(d!==c[0].ownerDocument)for(var e=0;e<c.length;e++)a.adoptNodeNoRemove(c[e],d)}}function h(a,b){g(a,b);var c=b.length;if(1===c)return r(b[0]);for(var d=r(a.ownerDocument.createDocumentFragment()),e=0;c>e;e++)d.appendChild(r(b[e]));return d}function i(a){if(a.invalidateShadowRenderer()){for(var b=a.firstChild;b;){o(b.parentNode===a);var c=b.nextSibling,d=r(b),e=d.parentNode;e&&z.call(e,d),b.previousSibling_=b.nextSibling_=b.parentNode_=null,b=c}a.firstChild_=a.lastChild_=null}else for(var c,f=r(a),g=f.firstChild;g;)c=g.nextSibling,z.call(f,g),g=c}function j(a){var b=a.parentNode;return b&&b.invalidateShadowRenderer()}function k(a){o(a instanceof u),l.call(this,a),this.parentNode_=void 0,this.firstChild_=void 0,this.lastChild_=void 0,this.nextSibling_=void 0,this.previousSibling_=void 0}var l=a.wrappers.EventTarget,m=a.wrappers.NodeList,n=a.defineWrapGetter,o=a.assert,p=a.mixin,q=a.registerWrapper,r=a.unwrap,s=a.wrap,t=a.wrapIfNeeded,u=window.Node,v=window.DocumentFragment,w=u.prototype.appendChild,x=u.prototype.compareDocumentPosition,y=u.prototype.insertBefore,z=u.prototype.removeChild,A=u.prototype.replaceChild,B=/Trident/.test(navigator.userAgent),C=B?function(a,b){try{z.call(a,b)}catch(c){if(!(a instanceof v))throw c}}:function(a,b){z.call(a,b)};k.prototype=Object.create(l.prototype),p(k.prototype,{appendChild:function(a){b(a);var g;if(this.invalidateShadowRenderer()||j(a)){var i=this.lastChild,k=null;g=c(a,this,i,k),this.lastChild_=g[g.length-1],i||(this.firstChild_=g[0]),w.call(this.impl,h(this,g))}else g=d(a),f(this,a),w.call(this.impl,r(a));return e(g),a},insertBefore:function(a,i){if(!i)return this.appendChild(a);b(a),b(i),o(i.parentNode===this);var k;if(this.invalidateShadowRenderer()||j(a)){var l=i.previousSibling,m=i;k=c(a,this,l,m),this.firstChild===i&&(this.firstChild_=k[0]);var n=r(i),p=n.parentNode;p?y.call(p,h(this,k),n):g(this,k)}else k=d(a),f(this,a),y.call(this.impl,r(a),r(i));return e(k),a},removeChild:function(a){if(b(a),a.parentNode!==this){var c=!1;this.childNodes;for(var d=this.firstChild;d;d=d.nextSibling)if(d===a){c=!0;break}if(!c)throw new Error("NotFoundError")}var e=r(a);if(this.invalidateShadowRenderer()){var f=this.firstChild,g=this.lastChild,h=a.nextSibling,i=a.previousSibling,j=e.parentNode;j&&C(j,e),f===a&&(this.firstChild_=h),g===a&&(this.lastChild_=i),i&&(i.nextSibling_=h),h&&(h.previousSibling_=i),a.previousSibling_=a.nextSibling_=a.parentNode_=void 0}else C(this.impl,e);return a},replaceChild:function(a,g){if(b(a),b(g),g.parentNode!==this)throw new Error("NotFoundError");var i,k=r(g);if(this.invalidateShadowRenderer()||j(a)){var l=g.previousSibling,m=g.nextSibling;m===a&&(m=a.nextSibling),i=c(a,this,l,m),this.firstChild===g&&(this.firstChild_=i[0]),this.lastChild===g&&(this.lastChild_=i[i.length-1]),g.previousSibling_=g.nextSibling_=g.parentNode_=void 0,k.parentNode&&A.call(k.parentNode,h(this,i),k)}else i=d(a),f(this,a),A.call(this.impl,r(a),k);return e(i),g},nodeWasAdded_:function(){for(var a=this.firstChild;a;a=a.nextSibling)a.nodeWasAdded_()},hasChildNodes:function(){return null!==this.firstChild},get parentNode(){return void 0!==this.parentNode_?this.parentNode_:s(this.impl.parentNode)},get firstChild(){return void 0!==this.firstChild_?this.firstChild_:s(this.impl.firstChild)},get lastChild(){return void 0!==this.lastChild_?this.lastChild_:s(this.impl.lastChild)},get nextSibling(){return void 0!==this.nextSibling_?this.nextSibling_:s(this.impl.nextSibling)},get previousSibling(){return void 0!==this.previousSibling_?this.previousSibling_:s(this.impl.previousSibling)},get parentElement(){for(var a=this.parentNode;a&&a.nodeType!==k.ELEMENT_NODE;)a=a.parentNode;return a},get textContent(){for(var a="",b=this.firstChild;b;b=b.nextSibling)a+=b.textContent;return a},set textContent(a){if(this.invalidateShadowRenderer()){if(i(this),""!==a){var b=this.impl.ownerDocument.createTextNode(a);this.appendChild(b)}}else this.impl.textContent=a},get childNodes(){for(var a=new m,b=0,c=this.firstChild;c;c=c.nextSibling)a[b++]=c;
+return a.length=b,a},cloneNode:function(a){if(!this.invalidateShadowRenderer())return s(this.impl.cloneNode(a));var b=s(this.impl.cloneNode(!1));if(a)for(var c=this.firstChild;c;c=c.nextSibling)b.appendChild(c.cloneNode(!0));return b},contains:function(a){if(!a)return!1;if(a=t(a),a===this)return!0;var b=a.parentNode;return b?this.contains(b):!1},compareDocumentPosition:function(a){return x.call(this.impl,r(a))}}),n(k,"ownerDocument"),q(u,k,document.createDocumentFragment()),delete k.prototype.querySelector,delete k.prototype.querySelectorAll,k.prototype=p(Object.create(l.prototype),k.prototype),a.wrappers.Node=k}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a,c){for(var d,e=a.firstElementChild;e;){if(e.matches(c))return e;if(d=b(e,c))return d;e=e.nextElementSibling}return null}function c(a,b,d){for(var e=a.firstElementChild;e;)e.matches(b)&&(d[d.length++]=e),c(e,b,d),e=e.nextElementSibling;return d}var d={querySelector:function(a){return b(this,a)},querySelectorAll:function(a){return c(this,a,new NodeList)}},e={getElementsByTagName:function(a){return this.querySelectorAll(a)},getElementsByClassName:function(a){return this.querySelectorAll("."+a)},getElementsByTagNameNS:function(a,b){if("*"===a)return this.getElementsByTagName(b);for(var c=new NodeList,d=this.getElementsByTagName(b),e=0,f=0;e<d.length;e++)d[e].namespaceURI===a&&(c[f++]=d[e]);return c.length=f,c}};a.GetElementsByInterface=e,a.SelectorsInterface=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.nextSibling;return a}function c(a){for(;a&&a.nodeType!==Node.ELEMENT_NODE;)a=a.previousSibling;return a}var d=a.wrappers.NodeList,e={get firstElementChild(){return b(this.firstChild)},get lastElementChild(){return c(this.lastChild)},get childElementCount(){for(var a=0,b=this.firstElementChild;b;b=b.nextElementSibling)a++;return a},get children(){for(var a=new d,b=0,c=this.firstElementChild;c;c=c.nextElementSibling)a[b++]=c;return a.length=b,a}},f={get nextElementSibling(){return b(this.nextSibling)},get previousElementSibling(){return c(this.previousSibling)}};a.ChildNodeInterface=f,a.ParentNodeInterface=e}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}var c=a.ChildNodeInterface,d=a.wrappers.Node,e=a.mixin,f=a.registerWrapper,g=window.CharacterData;b.prototype=Object.create(d.prototype),e(b.prototype,{get textContent(){return this.data},set textContent(a){this.data=a}}),e(b.prototype,c),f(g,b,document.createTextNode("")),a.wrappers.CharacterData=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b,c){var d=b.parentNode;if(d&&d.shadowRoot){var e=a.getRendererForHost(d);e.dependsOnAttribute(c)&&e.invalidate()}}function c(a){g.call(this,a)}function d(a,c,d){var e=d||c;Object.defineProperty(a,c,{get:function(){return this.impl[c]},set:function(a){this.impl[c]=a,b(this,e)},configurable:!0,enumerable:!0})}var e=a.ChildNodeInterface,f=a.GetElementsByInterface,g=a.wrappers.Node,h=a.ParentNodeInterface,i=a.SelectorsInterface;a.addWrapNodeListMethod;var j=a.mixin,k=a.oneOf,l=a.registerWrapper,m=a.wrappers,n=window.Element,o=k(n.prototype,["matches","mozMatchesSelector","msMatchesSelector","webkitMatchesSelector"]),p=n.prototype[o];c.prototype=Object.create(g.prototype),j(c.prototype,{createShadowRoot:function(){var b=new m.ShadowRoot(this);this.impl.polymerShadowRoot_=b;var c=a.getRendererForHost(this);return c.invalidate(),b},get shadowRoot(){return this.impl.polymerShadowRoot_||null},setAttribute:function(a,c){this.impl.setAttribute(a,c),b(this,a)},removeAttribute:function(a){this.impl.removeAttribute(a),b(this,a)},matches:function(a){return p.call(this.impl,a)}}),c.prototype[o]=function(a){return this.matches(a)},n.prototype.webkitCreateShadowRoot&&(c.prototype.webkitCreateShadowRoot=c.prototype.createShadowRoot),d(c.prototype,"id"),d(c.prototype,"className","class"),j(c.prototype,e),j(c.prototype,f),j(c.prototype,h),j(c.prototype,i),l(n,c),a.matchesName=o,a.wrappers.Element=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a){case"&":return"&amp;";case"<":return"&lt;";case'"':return"&quot;"}}function c(a){return a.replace(r,b)}function d(a){switch(a.nodeType){case Node.ELEMENT_NODE:for(var b,d=a.tagName.toLowerCase(),f="<"+d,g=a.attributes,h=0;b=g[h];h++)f+=" "+b.name+'="'+c(b.value)+'"';return f+=">",s[d]?f:f+e(a)+"</"+d+">";case Node.TEXT_NODE:return c(a.nodeValue);case Node.COMMENT_NODE:return"<!--"+c(a.nodeValue)+"-->";default:throw console.error(a),new Error("not implemented")}}function e(a){for(var b="",c=a.firstChild;c;c=c.nextSibling)b+=d(c);return b}function f(a,b,c){var d=c||"div";a.textContent="";var e=p(a.ownerDocument.createElement(d));e.innerHTML=b;for(var f;f=e.firstChild;)a.appendChild(q(f))}function g(a){l.call(this,a)}function h(b){return function(){return a.renderAllPending(),this.impl[b]}}function i(a){m(g,a,h(a))}function j(b){Object.defineProperty(g.prototype,b,{get:h(b),set:function(c){a.renderAllPending(),this.impl[b]=c},configurable:!0,enumerable:!0})}function k(b){Object.defineProperty(g.prototype,b,{value:function(){return a.renderAllPending(),this.impl[b].apply(this.impl,arguments)},configurable:!0,enumerable:!0})}var l=a.wrappers.Element,m=a.defineGetter,n=a.mixin,o=a.registerWrapper,p=a.unwrap,q=a.wrap,r=/&|<|"/g,s={area:!0,base:!0,br:!0,col:!0,command:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0},t=window.HTMLElement;g.prototype=Object.create(l.prototype),n(g.prototype,{get innerHTML(){return e(this)},set innerHTML(a){this.invalidateShadowRenderer()?f(this,a,this.tagName):this.impl.innerHTML=a},get outerHTML(){return d(this)},set outerHTML(a){var b=this.parentNode;b&&(b.invalidateShadowRenderer(),this.impl.outerHTML=a)}}),["clientHeight","clientLeft","clientTop","clientWidth","offsetHeight","offsetLeft","offsetTop","offsetWidth","scrollHeight","scrollWidth"].forEach(i),["scrollLeft","scrollTop"].forEach(j),["getBoundingClientRect","getClientRects","scrollIntoView"].forEach(k),o(t,g,document.createElement("b")),a.wrappers.HTMLElement=g,a.getInnerHTML=e,a.setInnerHTML=f}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=a.wrap,g=window.HTMLCanvasElement;b.prototype=Object.create(c.prototype),d(b.prototype,{getContext:function(){var a=this.impl.getContext.apply(this.impl,arguments);return a&&f(a)}}),e(g,b,document.createElement("canvas")),a.wrappers.HTMLCanvasElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLContentElement;b.prototype=Object.create(c.prototype),d(b.prototype,{get select(){return this.getAttribute("select")},set select(a){this.setAttribute("select",a)},setAttribute:function(a,b){c.prototype.setAttribute.call(this,a,b),"select"===String(a).toLowerCase()&&this.invalidateShadowRenderer(!0)}}),f&&e(f,b),a.wrappers.HTMLContentElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}function c(a,b){if(!(this instanceof c))throw new TypeError("DOM object constructor cannot be called as a function.");var e=f(document.createElement("img"));d.call(this,e),g(e,this),void 0!==a&&(e.width=a),void 0!==b&&(e.height=b)}var d=a.wrappers.HTMLElement,e=a.registerWrapper,f=a.unwrap,g=a.rewrap,h=window.HTMLImageElement;b.prototype=Object.create(d.prototype),e(h,b,document.createElement("img")),c.prototype=b.prototype,a.wrappers.HTMLImageElement=b,a.wrappers.Image=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.mixin,e=a.registerWrapper,f=window.HTMLShadowElement;b.prototype=Object.create(c.prototype),d(b.prototype,{}),f&&e(f,b),a.wrappers.HTMLShadowElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){if(!a.defaultView)return a;var b=o.get(a);if(!b){for(b=a.implementation.createHTMLDocument("");b.lastChild;)b.removeChild(b.lastChild);o.set(a,b)}return b}function c(a){var c,d=b(a.ownerDocument),e=l(d.createDocumentFragment());for(h();c=a.firstChild;)e.appendChild(c);return k(),e}function d(a){if(e.call(this,a),!p){var b=c(a);n.set(this,m(b))}}var e=a.wrappers.HTMLElement,f=a.getInnerHTML,g=a.mixin,h=a.muteMutationEvents,i=a.registerWrapper,j=a.setInnerHTML,k=a.unmuteMutationEvents,l=a.unwrap,m=a.wrap,n=new WeakMap,o=new WeakMap,p=window.HTMLTemplateElement;d.prototype=Object.create(e.prototype),g(d.prototype,{get content(){return p?m(this.impl.content):n.get(this)},get innerHTML(){return f(this.content)},set innerHTML(a){j(this.content,a)}}),p&&i(p,d),a.wrappers.HTMLTemplateElement=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.HTMLElement,d=a.registerWrapper,e=window.HTMLMediaElement;b.prototype=Object.create(c.prototype),d(e,b,document.createElement("audio")),a.wrappers.HTMLMediaElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){d.call(this,a)}function c(a){if(!(this instanceof c))throw new TypeError("DOM object constructor cannot be called as a function.");var b=f(document.createElement("audio"));d.call(this,b),g(b,this),b.setAttribute("preload","auto"),void 0!==a&&b.setAttribute("src",a)}var d=a.wrappers.HTMLMediaElement,e=a.registerWrapper,f=a.unwrap,g=a.rewrap,h=window.HTMLAudioElement;b.prototype=Object.create(d.prototype),e(h,b,document.createElement("audio")),c.prototype=b.prototype,a.wrappers.HTMLAudioElement=b,a.wrappers.Audio=c}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){return a.replace(/\s+/g," ").trim()}function c(a){e.call(this,a)}function d(a,b,c,f){if(!(this instanceof d))throw new TypeError("DOM object constructor cannot be called as a function.");var g=i(document.createElement("option"));e.call(this,g),h(g,this),void 0!==a&&(g.text=a),void 0!==b&&g.setAttribute("value",b),c===!0&&g.setAttribute("selected",""),g.selected=f===!0}var e=a.wrappers.HTMLElement,f=a.mixin,g=a.registerWrapper,h=a.rewrap,i=a.unwrap,j=a.wrap,k=window.HTMLOptionElement;c.prototype=Object.create(e.prototype),f(c.prototype,{get text(){return b(this.textContent)},set text(a){this.textContent=b(String(a))},get form(){return j(i(this).form)}}),g(k,c,document.createElement("option")),d.prototype=c.prototype,a.wrappers.HTMLOptionElement=c,a.wrappers.Option=d}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){switch(a.localName){case"content":return new c(a);case"shadow":return new e(a);case"template":return new f(a)}d.call(this,a)}var c=a.wrappers.HTMLContentElement,d=a.wrappers.HTMLElement,e=a.wrappers.HTMLShadowElement,f=a.wrappers.HTMLTemplateElement;a.mixin;var g=a.registerWrapper,h=window.HTMLUnknownElement;b.prototype=Object.create(d.prototype),g(h,b),a.wrappers.HTMLUnknownElement=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrap,f=a.unwrapIfNeeded,g=a.wrap,h=window.CanvasRenderingContext2D;c(b.prototype,{get canvas(){return g(this.impl.canvas)},drawImage:function(){arguments[0]=f(arguments[0]),this.impl.drawImage.apply(this.impl,arguments)},createPattern:function(){return arguments[0]=e(arguments[0]),this.impl.createPattern.apply(this.impl,arguments)}}),d(h,b),a.wrappers.CanvasRenderingContext2D=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.mixin,d=a.registerWrapper,e=a.unwrapIfNeeded,f=a.wrap,g=window.WebGLRenderingContext;g&&(c(b.prototype,{get canvas(){return f(this.impl.canvas)},texImage2D:function(){arguments[5]=e(arguments[5]),this.impl.texImage2D.apply(this.impl,arguments)},texSubImage2D:function(){arguments[6]=e(arguments[6]),this.impl.texSubImage2D.apply(this.impl,arguments)}}),d(g,b),a.wrappers.WebGLRenderingContext=b)}(this.ShadowDOMPolyfill),function(a){"use strict";var b=a.GetElementsByInterface,c=a.ParentNodeInterface,d=a.SelectorsInterface,e=a.mixin,f=a.registerObject,g=f(document.createDocumentFragment());e(g.prototype,c),e(g.prototype,d),e(g.prototype,b);var h=f(document.createTextNode("")),i=f(document.createComment(""));a.wrappers.Comment=i,a.wrappers.DocumentFragment=g,a.wrappers.Text=h}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=i(a.impl.ownerDocument.createDocumentFragment());c.call(this,b),g(b,this);var d=a.shadowRoot;k.set(this,d),j.set(this,a)}var c=a.wrappers.DocumentFragment,d=a.elementFromPoint,e=a.getInnerHTML,f=a.mixin,g=a.rewrap,h=a.setInnerHTML,i=a.unwrap,j=new WeakMap,k=new WeakMap;b.prototype=Object.create(c.prototype),f(b.prototype,{get innerHTML(){return e(this)},set innerHTML(a){h(this,a),this.invalidateShadowRenderer()},get olderShadowRoot(){return k.get(this)||null},get host(){return j.get(this)||null},invalidateShadowRenderer:function(){return j.get(this).invalidateShadowRenderer()},elementFromPoint:function(a,b){return d(this,this.ownerDocument,a,b)},getElementById:function(a){return this.querySelector("#"+a)}}),a.wrappers.ShadowRoot=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){a.previousSibling_=a.previousSibling,a.nextSibling_=a.nextSibling,a.parentNode_=a.parentNode}function c(a,c,e){var f=F(a),g=F(c),h=e?F(e):null;if(d(c),b(c),e)a.firstChild===e&&(a.firstChild_=e),e.previousSibling_=e.previousSibling;else{a.lastChild_=a.lastChild,a.lastChild===a.firstChild&&(a.firstChild_=a.firstChild);var i=G(f.lastChild);i&&(i.nextSibling_=i.nextSibling)}f.insertBefore(g,h)}function d(a){var c=F(a),d=c.parentNode;if(d){var e=G(d);b(a),a.previousSibling&&(a.previousSibling.nextSibling_=a),a.nextSibling&&(a.nextSibling.previousSibling_=a),e.lastChild===a&&(e.lastChild_=a),e.firstChild===a&&(e.firstChild_=a),d.removeChild(c)}}function e(a,b){g(b).push(a),x(a,b);var c=I.get(a);c||I.set(a,c=[]),c.push(b)}function f(a){H.set(a,[])}function g(a){return H.get(a)}function h(a){for(var b=[],c=0,d=a.firstChild;d;d=d.nextSibling)b[c++]=d;return b}function i(a,b,c){for(var d=a.firstChild;d;d=d.nextSibling)if(b(d)){if(c(d)===!1)return}else i(d,b,c)}function j(a,b){var c=b.getAttribute("select");if(!c)return!0;if(c=c.trim(),!c)return!0;if(!(a instanceof y))return!1;if(!L.test(c))return!1;if(":"===c[0]&&!M.test(c))return!1;try{return a.matches(c)}catch(d){return!1}}function k(){for(var a=0;a<O.length;a++)O[a].render();O=[]}function l(){E=null,k()}function m(a){var b=K.get(a);return b||(b=new q(a),K.set(a,b)),b}function n(a){for(;a;a=a.parentNode)if(a instanceof C)return a;return null}function o(a){return m(a.host)}function p(a){this.skip=!1,this.node=a,this.childNodes=[]}function q(a){this.host=a,this.dirty=!1,this.invalidateAttributes(),this.associateNode(a)}function r(a){return a instanceof z}function s(a){return a instanceof z}function t(a){return a instanceof A}function u(a){return a instanceof A}function v(a){return a.shadowRoot}function w(a){for(var b=[],c=a.shadowRoot;c;c=c.olderShadowRoot)b.push(c);return b}function x(a,b){J.set(a,b)}var y=a.wrappers.Element,z=a.wrappers.HTMLContentElement,A=a.wrappers.HTMLShadowElement,B=a.wrappers.Node,C=a.wrappers.ShadowRoot;a.assert,a.mixin,a.muteMutationEvents;var D=a.oneOf;a.unmuteMutationEvents;var E,F=a.unwrap,G=a.wrap,H=new WeakMap,I=new WeakMap,J=new WeakMap,K=new WeakMap,L=/^[*.:#[a-zA-Z_|]/,M=new RegExp("^:("+["link","visited","target","enabled","disabled","checked","indeterminate","nth-child","nth-last-child","nth-of-type","nth-last-of-type","first-child","last-child","first-of-type","last-of-type","only-of-type"].join("|")+")"),N=D(window,["requestAnimationFrame","mozRequestAnimationFrame","webkitRequestAnimationFrame","setTimeout"]),O=[],P=new ArraySplice;P.equals=function(a,b){return F(a.node)===b},p.prototype={append:function(a){var b=new p(a);return this.childNodes.push(b),b},sync:function(a){if(!this.skip){for(var b=this.node,e=this.childNodes,f=h(F(b)),g=a||new WeakMap,i=P.calculateSplices(e,f),j=0,k=0,l=0,m=0;m<i.length;m++){for(var n=i[m];l<n.index;l++)k++,e[j++].sync(g);for(var o=n.removed.length,p=0;o>p;p++){var q=G(f[k++]);g.get(q)||d(q)}for(var r=n.addedCount,s=f[k]&&G(f[k]),p=0;r>p;p++){var t=e[j++],u=t.node;c(b,u,s),g.set(u,!0),t.sync(g)}l+=r}for(var m=l;m<e.length;m++)e[m].sync(g)}}},q.prototype={render:function(a){if(this.dirty){this.invalidateAttributes(),this.treeComposition();var b=this.host,c=b.shadowRoot;this.associateNode(b);for(var d=!e,e=a||new p(b),f=c.firstChild;f;f=f.nextSibling)this.renderNode(c,e,f,!1);d&&e.sync(),this.dirty=!1}},invalidate:function(){if(!this.dirty){if(this.dirty=!0,O.push(this),E)return;E=window[N](l,0)}},renderNode:function(a,b,c,d){if(v(c)){b=b.append(c);var e=m(c);e.dirty=!0,e.render(b)}else r(c)?this.renderInsertionPoint(a,b,c,d):t(c)?this.renderShadowInsertionPoint(a,b,c):this.renderAsAnyDomTree(a,b,c,d)},renderAsAnyDomTree:function(a,b,c,d){if(b=b.append(c),v(c)){var e=m(c);b.skip=!e.dirty,e.render(b)}else for(var f=c.firstChild;f;f=f.nextSibling)this.renderNode(a,b,f,d)},renderInsertionPoint:function(a,b,c,d){var e=g(c);if(e.length){this.associateNode(c);for(var f=0;f<e.length;f++){var h=e[f];r(h)&&d?this.renderInsertionPoint(a,b,h,d):this.renderAsAnyDomTree(a,b,h,d)}}else this.renderFallbackContent(a,b,c);this.associateNode(c.parentNode)},renderShadowInsertionPoint:function(a,b,c){var d=a.olderShadowRoot;if(d){x(d,c),this.associateNode(c.parentNode);for(var e=d.firstChild;e;e=e.nextSibling)this.renderNode(d,b,e,!0)}else this.renderFallbackContent(a,b,c)},renderFallbackContent:function(a,b,c){this.associateNode(c),this.associateNode(c.parentNode);for(var d=c.firstChild;d;d=d.nextSibling)this.renderAsAnyDomTree(a,b,d,!1)},invalidateAttributes:function(){this.attributes=Object.create(null)},updateDependentAttributes:function(a){if(a){var b=this.attributes;/\.\w+/.test(a)&&(b["class"]=!0),/#\w+/.test(a)&&(b.id=!0),a.replace(/\[\s*([^\s=\|~\]]+)/g,function(a,c){b[c]=!0})}},dependsOnAttribute:function(a){return this.attributes[a]},distribute:function(a,b){var c=this;i(a,s,function(a){f(a),c.updateDependentAttributes(a.getAttribute("select"));for(var d=0;d<b.length;d++){var g=b[d];void 0!==g&&j(g,a)&&(e(g,a),b[d]=void 0)}})},treeComposition:function(){for(var a=this.host,b=a.shadowRoot,c=[],d=a.firstChild;d;d=d.nextSibling)if(r(d)){var e=g(d);e&&e.length||(e=h(d)),c.push.apply(c,e)}else c.push(d);for(var f,j;b;){if(f=void 0,i(b,u,function(a){return f=a,!1}),j=f,this.distribute(b,c),j){var k=b.olderShadowRoot;if(k){b=k,x(b,j);continue}break}break}},associateNode:function(a){a.impl.polymerShadowRenderer_=this}},B.prototype.invalidateShadowRenderer=function(){var a=this.impl.polymerShadowRenderer_;return a?(a.invalidate(),!0):!1},z.prototype.getDistributedNodes=function(){return k(),g(this)},A.prototype.nodeWasAdded_=z.prototype.nodeWasAdded_=function(){this.invalidateShadowRenderer();var a,b=n(this);b&&(a=o(b)),this.impl.polymerShadowRenderer_=a,a&&a.invalidate()},a.eventParentsTable=I,a.getRendererForHost=m,a.getShadowTrees=w,a.insertionParentTable=J,a.renderAllPending=k,a.visual={insertBefore:c,remove:d}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(b){if(window[b]){d(!a.wrappers[b]);var i=function(a){c.call(this,a)};i.prototype=Object.create(c.prototype),e(i.prototype,{get form(){return h(g(this).form)}}),f(window[b],i,document.createElement(b.slice(4,-7))),a.wrappers[b]=i}}var c=a.wrappers.HTMLElement,d=a.assert,e=a.mixin,f=a.registerWrapper,g=a.unwrap,h=a.wrap,i=["HTMLButtonElement","HTMLFieldSetElement","HTMLInputElement","HTMLKeygenElement","HTMLLabelElement","HTMLLegendElement","HTMLObjectElement","HTMLOutputElement","HTMLSelectElement","HTMLTextAreaElement"];i.forEach(b)}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){k.call(this,a)}function c(a){var c=document[a];b.prototype[a]=function(){return v(c.apply(this.impl,arguments))}}function d(a,b){y.call(b.impl,u(a)),e(a,b)}function e(a,b){a.shadowRoot&&b.adoptNode(a.shadowRoot),a instanceof n&&f(a,b);for(var c=a.firstChild;c;c=c.nextSibling)e(c,b)}function f(a,b){var c=a.olderShadowRoot;c&&b.adoptNode(c)}function g(a){this.impl=a}function h(a,b){var c=document.implementation[b];a.prototype[b]=function(){return v(c.apply(this.impl,arguments))}}function i(a,b){var c=document.implementation[b];a.prototype[b]=function(){return c.apply(this.impl,arguments)}}var j=a.GetElementsByInterface,k=a.wrappers.Node,l=a.ParentNodeInterface,m=a.SelectorsInterface,n=a.wrappers.ShadowRoot,o=a.defineWrapGetter,p=a.elementFromPoint,q=a.forwardMethodsToWrapper,r=a.matchesName,s=a.mixin,t=a.registerWrapper,u=a.unwrap,v=a.wrap,w=a.wrapEventTargetMethods;a.wrapNodeList;var x=new WeakMap;b.prototype=Object.create(k.prototype),o(b,"documentElement"),o(b,"body"),o(b,"head"),["createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","getElementById"].forEach(c);var y=document.adoptNode;if(s(b.prototype,{adoptNode:function(a){return a.parentNode&&a.parentNode.removeChild(a),d(a,this),a},elementFromPoint:function(a,b){return p(this,this,a,b)}}),document.register){var z=document.register;b.prototype.register=function(b,c){function d(a){return a?(this.impl=a,void 0):c.extends?document.createElement(c.extends,b):document.createElement(b)}var e=c.prototype;if(a.nativePrototypeTable.get(e))throw new Error("NotSupportedError");for(var f,g=Object.getPrototypeOf(e),h=[];g&&!(f=a.nativePrototypeTable.get(g));)h.push(g),g=Object.getPrototypeOf(g);if(!f)throw new Error("NotSupportedError");for(var i=Object.create(f),j=h.length-1;j>=0;j--)i=Object.create(i);["createdCallback","enteredViewCallback","leftViewCallback","attributeChangedCallback"].forEach(function(a){var b=e[a];b&&(i[a]=function(){b.apply(v(this),arguments)})});var k={prototype:i};return c.extends&&(k.extends=c.extends),z.call(u(this),b,k),d.prototype=e,d.prototype.constructor=d,a.constructorTable.set(i,d),a.nativePrototypeTable.set(e,i),d},q([window.HTMLDocument||window.Document],["register"])}q([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement,window.HTMLHtmlElement],["appendChild","compareDocumentPosition","contains","getElementsByClassName","getElementsByTagName","getElementsByTagNameNS","insertBefore","querySelector","querySelectorAll","removeChild","replaceChild",r]),q([window.HTMLDocument||window.Document],["adoptNode","contains","createComment","createDocumentFragment","createElement","createElementNS","createEvent","createEventNS","createRange","createTextNode","elementFromPoint","getElementById"]),s(b.prototype,j),s(b.prototype,l),s(b.prototype,m),s(b.prototype,{get implementation(){var a=x.get(this);return a?a:(a=new g(u(this).implementation),x.set(this,a),a)}}),t(window.Document,b,document.implementation.createHTMLDocument("")),window.HTMLDocument&&t(window.HTMLDocument,b),w([window.HTMLBodyElement,window.HTMLDocument||window.Document,window.HTMLHeadElement]),h(g,"createDocumentType"),h(g,"createDocument"),h(g,"createHTMLDocument"),i(g,"hasFeature"),t(window.DOMImplementation,g),q([window.DOMImplementation],["createDocumentType","createDocument","createHTMLDocument","hasFeature"]),a.adoptNodeNoRemove=d,a.wrappers.DOMImplementation=g,a.wrappers.Document=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){c.call(this,a)}var c=a.wrappers.EventTarget,d=a.mixin,e=a.registerWrapper,f=a.unwrap,g=a.unwrapIfNeeded,h=a.wrap,i=a.renderAllPending,j=window.Window;b.prototype=Object.create(c.prototype);var k=window.getComputedStyle;j.prototype.getComputedStyle=function(a,b){return i(),k.call(this||window,g(a),b)},["addEventListener","removeEventListener","dispatchEvent"].forEach(function(a){j.prototype[a]=function(){var b=h(this||window);return b[a].apply(b,arguments)}}),d(b.prototype,{getComputedStyle:function(a,b){return k.call(f(this),g(a),b)}}),e(j,b),a.wrappers.Window=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}function c(a){return new b(a)}function d(a){return a.map(c)}function e(a){var b=this;this.impl=new k(function(c){a.call(b,d(c),b)})}var f=a.defineGetter,g=a.defineWrapGetter,h=a.registerWrapper,i=a.unwrapIfNeeded,j=a.wrapNodeList;a.wrappers;var k=window.MutationObserver||window.WebKitMutationObserver;if(k){var l=window.MutationRecord;b.prototype={get addedNodes(){return j(this.impl.addedNodes)},get removedNodes(){return j(this.impl.removedNodes)}},["target","previousSibling","nextSibling"].forEach(function(a){g(b,a)}),["type","attributeName","attributeNamespace","oldValue"].forEach(function(a){f(b,a,function(){return this.impl[a]})}),l&&h(l,b),window.Node,e.prototype={observe:function(a,b){this.impl.observe(i(a),b)},disconnect:function(){this.impl.disconnect()},takeRecords:function(){return d(this.impl.takeRecords())}},a.wrappers.MutationObserver=e,a.wrappers.MutationRecord=b}}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){this.impl=a}var c=a.registerWrapper,d=a.unwrap,e=a.unwrapIfNeeded,f=a.wrap,g=window.Range;b.prototype={get startContainer(){return f(this.impl.startContainer)},get endContainer(){return f(this.impl.endContainer)},get commonAncestorContainer(){return f(this.impl.commonAncestorContainer)},setStart:function(a,b){this.impl.setStart(e(a),b)},setEnd:function(a,b){this.impl.setEnd(e(a),b)},setStartBefore:function(a){this.impl.setStartBefore(e(a))},setStartAfter:function(a){this.impl.setStartAfter(e(a))},setEndBefore:function(a){this.impl.setEndBefore(e(a))},setEndAfter:function(a){this.impl.setEndAfter(e(a))},selectNode:function(a){this.impl.selectNode(e(a))},selectNodeContents:function(a){this.impl.selectNodeContents(e(a))},compareBoundaryPoints:function(a,b){return this.impl.compareBoundaryPoints(a,d(b))},extractContents:function(){return f(this.impl.extractContents())},cloneContents:function(){return f(this.impl.cloneContents())},insertNode:function(a){this.impl.insertNode(e(a))},surroundContents:function(a){this.impl.surroundContents(e(a))},cloneRange:function(){return f(this.impl.cloneRange())},isPointInRange:function(a,b){return this.impl.isPointInRange(e(a),b)},comparePoint:function(a,b){return this.impl.comparePoint(e(a),b)},intersectsNode:function(a){return this.impl.intersectsNode(e(a))}},g.prototype.createContextualFragment&&(b.prototype.createContextualFragment=function(a){return f(this.impl.createContextualFragment(a))}),c(window.Range,b),a.wrappers.Range=b}(this.ShadowDOMPolyfill),function(a){"use strict";function b(a){var b=c[a],d=window[b];if(d){var e=document.createElement(a),f=e.constructor;window[b]=f}}a.isWrapperFor;var c={a:"HTMLAnchorElement",applet:"HTMLAppletElement",area:"HTMLAreaElement",br:"HTMLBRElement",base:"HTMLBaseElement",body:"HTMLBodyElement",button:"HTMLButtonElement",dl:"HTMLDListElement",datalist:"HTMLDataListElement",data:"HTMLDataElement",dir:"HTMLDirectoryElement",div:"HTMLDivElement",embed:"HTMLEmbedElement",fieldset:"HTMLFieldSetElement",font:"HTMLFontElement",form:"HTMLFormElement",frame:"HTMLFrameElement",frameset:"HTMLFrameSetElement",hr:"HTMLHRElement",head:"HTMLHeadElement",h1:"HTMLHeadingElement",html:"HTMLHtmlElement",iframe:"HTMLIFrameElement",input:"HTMLInputElement",li:"HTMLLIElement",label:"HTMLLabelElement",legend:"HTMLLegendElement",link:"HTMLLinkElement",map:"HTMLMapElement",marquee:"HTMLMarqueeElement",menu:"HTMLMenuElement",menuitem:"HTMLMenuItemElement",meta:"HTMLMetaElement",meter:"HTMLMeterElement",del:"HTMLModElement",ol:"HTMLOListElement",object:"HTMLObjectElement",optgroup:"HTMLOptGroupElement",option:"HTMLOptionElement",output:"HTMLOutputElement",p:"HTMLParagraphElement",param:"HTMLParamElement",pre:"HTMLPreElement",progress:"HTMLProgressElement",q:"HTMLQuoteElement",script:"HTMLScriptElement",select:"HTMLSelectElement",source:"HTMLSourceElement",span:"HTMLSpanElement",style:"HTMLStyleElement",time:"HTMLTimeElement",caption:"HTMLTableCaptionElement",col:"HTMLTableColElement",table:"HTMLTableElement",tr:"HTMLTableRowElement",thead:"HTMLTableSectionElement",tbody:"HTMLTableSectionElement",textarea:"HTMLTextAreaElement",track:"HTMLTrackElement",title:"HTMLTitleElement",ul:"HTMLUListElement",video:"HTMLVideoElement"};Object.keys(c).forEach(b),Object.getOwnPropertyNames(a.wrappers).forEach(function(b){window[b]=a.wrappers[b]}),a.knownElements=c}(this.ShadowDOMPolyfill),function(){var a=window.ShadowDOMPolyfill;a.wrap,Object.defineProperties(HTMLElement.prototype,{webkitShadowRoot:{get:function(){return this.shadowRoot}}}),HTMLElement.prototype.webkitCreateShadowRoot=HTMLElement.prototype.createShadowRoot,window.dartExperimentalFixupGetTag=function(b){function c(a){if(a instanceof d)return"NodeList";if(a instanceof e)return"ShadowRoot";if(window.MutationRecord&&a instanceof MutationRecord)return"MutationRecord";if(window.MutationObserver&&a instanceof MutationObserver)return"MutationObserver";if(a instanceof HTMLTemplateElement)return"HTMLTemplateElement";var c=f(a);if(a!==c){var g=a.constructor;if(g===c.constructor){var h=g._ShadowDOMPolyfill$cacheTag_;return h||(h=Object.prototype.toString.call(c),h=h.substring(8,h.length-1),g._ShadowDOMPolyfill$cacheTag_=h),h}a=c}return b(a)}var d=a.wrappers.NodeList,e=a.wrappers.ShadowRoot,f=a.unwrapIfNeeded;return c}}();var Platform={};!function(a){function b(a,b){var c="";return Array.prototype.forEach.call(a,function(a){c+=a.textContent+"\n\n"}),b||(c=c.replace(n,"")),c}function c(a){var b=document.createElement("style");return b.textContent=a,b}function d(a){var b=c(a);document.head.appendChild(b);var d=b.sheet.cssRules;return b.parentNode.removeChild(b),d}function e(a){for(var b=0,c=[];b<a.length;b++)c.push(a[b].cssText);return c.join("\n\n")}function f(a){a&&g().appendChild(document.createTextNode(a))}function g(){return h||(h=document.createElement("style"),h.setAttribute("ShadowCSSShim","")),h}var h,i={strictStyling:!1,registry:{},shimStyling:function(a,b,d){var e=this.isTypeExtension(d),g=this.registerDefinition(a,b,d);this.strictStyling&&this.applyScopeToContent(a,b),this.insertPolyfillDirectives(g.rootStyles),this.insertPolyfillRules(g.rootStyles);var h=this.stylesToShimmedCssText(g.scopeStyles,b,e);h+=this.extractPolyfillUnscopedRules(g.rootStyles),g.shimmedStyle=c(h),a&&(a.shimmedStyle=g.shimmedStyle);for(var i,j=0,k=g.rootStyles.length;k>j&&(i=g.rootStyles[j]);j++)i.parentNode.removeChild(i);f(h)},registerDefinition:function(a,b,c){var d=this.registry[b]={root:a,name:b,extendsName:c},e=a?a.querySelectorAll("style"):[];e=e?Array.prototype.slice.call(e,0):[],d.rootStyles=e,d.scopeStyles=d.rootStyles;var f=this.registry[d.extendsName];return!f||a&&!a.querySelector("shadow")||(d.scopeStyles=f.scopeStyles.concat(d.scopeStyles)),d},isTypeExtension:function(a){return a&&a.indexOf("-")<0},applyScopeToContent:function(a,b){a&&(Array.prototype.forEach.call(a.querySelectorAll("*"),function(a){a.setAttribute(b,"")}),Array.prototype.forEach.call(a.querySelectorAll("template"),function(a){this.applyScopeToContent(a.content,b)},this))},insertPolyfillDirectives:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillDirectivesInCssText(a.textContent)},this)},insertPolyfillDirectivesInCssText:function(a){return a.replace(o,function(a,b){return b.slice(0,-2)+"{"})},insertPolyfillRules:function(a){a&&Array.prototype.forEach.call(a,function(a){a.textContent=this.insertPolyfillRulesInCssText(a.textContent)},this)},insertPolyfillRulesInCssText:function(a){return a.replace(p,function(a,b){return b.slice(0,-1)})},extractPolyfillUnscopedRules:function(a){var b="";return a&&Array.prototype.forEach.call(a,function(a){b+=this.extractPolyfillUnscopedRulesFromCssText(a.textContent)+"\n\n"},this),b},extractPolyfillUnscopedRulesFromCssText:function(a){for(var b,c="";b=q.exec(a);)c+=b[1].slice(0,-1)+"\n\n";return c},stylesToShimmedCssText:function(a,b,c){return this.shimAtHost(a,b,c)+this.shimScoping(a,b,c)},shimAtHost:function(a,b,c){return a?this.convertAtHostStyles(a,b,c):void 0},convertAtHostStyles:function(a,c,f){var g=b(a),h=this;return g=g.replace(j,function(a,b){return h.scopeHostCss(b,c,f)}),g=e(this.findAtHostRules(d(g),this.makeScopeMatcher(c,f)))
+},scopeHostCss:function(a,b,c){var d=this;return a.replace(k,function(a,e,f){return d.scopeHostSelector(e,b,c)+" "+f+"\n	"})},scopeHostSelector:function(a,b,c){var d=[],e=a.split(","),f="[is="+b+"]";return e.forEach(function(a){a=a.trim(),a.match(l)?a=a.replace(l,c?f+"$1$3":b+"$1$3"):a.match(m)&&(a=c?f+a:b+a),d.push(a)},this),d.join(", ")},findAtHostRules:function(a,b){return Array.prototype.filter.call(a,this.isHostRule.bind(this,b))},isHostRule:function(a,b){return b.selectorText&&b.selectorText.match(a)||b.cssRules&&this.findAtHostRules(b.cssRules,a).length||b.type==CSSRule.WEBKIT_KEYFRAMES_RULE},shimScoping:function(a,b,c){return a?this.convertScopedStyles(a,b,c):void 0},convertScopedStyles:function(a,c,e){var f=b(a).replace(j,"");f=this.insertPolyfillHostInCssText(f),f=this.convertColonHost(f),f=this.convertPseudos(f),f=this.convertParts(f),f=this.convertCombinators(f);var g=d(f);return f=this.scopeRules(g,c,e)},convertPseudos:function(a){return a.replace(r," [pseudo=$1]")},convertParts:function(a){return a.replace(s," [part=$1]")},convertColonHost:function(a){return a.replace(t,function(a,b,c,d){return b=y,c?c.match(x)?b+c.replace(x,"")+d:b+c+d+", "+c+" "+b+d:b+d})},convertCombinators:function(a){return a.replace("^^"," ").replace("^"," ")},scopeRules:function(a,b,c){var d="";return Array.prototype.forEach.call(a,function(a){a.selectorText&&a.style&&a.style.cssText?(d+=this.scopeSelector(a.selectorText,b,c,this.strictStyling)+" {\n	",d+=this.propertiesFromRule(a)+"\n}\n\n"):a.media?(d+="@media "+a.media.mediaText+" {\n",d+=this.scopeRules(a.cssRules,b),d+="\n}\n\n"):a.cssText&&(d+=a.cssText+"\n\n")},this),d},scopeSelector:function(a,b,c,d){var e=[],f=a.split(",");return f.forEach(function(a){a=a.trim(),this.selectorNeedsScoping(a,b,c)&&(a=d?this.applyStrictSelectorScope(a,b):this.applySimpleSelectorScope(a,b,c)),e.push(a)},this),e.join(", ")},selectorNeedsScoping:function(a,b,c){var d=this.makeScopeMatcher(b,c);return!a.match(d)},makeScopeMatcher:function(a,b){var c=b?"\\[is=['\"]?"+a+"['\"]?\\]":a;return new RegExp("^("+c+")"+u,"m")},applySimpleSelectorScope:function(a,b,c){var d=c?"[is="+b+"]":b;return a.match(z)?(a=a.replace(y,d),a.replace(z,d+" ")):d+" "+a},applyStrictSelectorScope:function(a,b){var c=[" ",">","+","~"],d=a,e="["+b+"]";return c.forEach(function(a){var b=d.split(a);d=b.map(function(a){var b=a.trim().replace(z,"");return b&&c.indexOf(b)<0&&b.indexOf(e)<0&&(a=b.replace(/([^:]*)(:*)(.*)/,"$1"+e+"$2$3")),a}).join(a)}),d},insertPolyfillHostInCssText:function(a){return a.replace(v,x).replace(w,x)},propertiesFromRule:function(a){var b=a.style.cssText;return a.style.content&&!a.style.content.match(/['"]+/)&&(b="content: '"+a.style.content+"';\n"+a.style.cssText.replace(/content:[^;]*;/g,"")),b}},j=/@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,k=/([^{]*)({[\s\S]*?})/gim,l=/(.*)((?:\*)|(?:\:scope))(.*)/,m=/^[.\[:]/,n=/\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,o=/\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,p=/\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,q=/\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,r=/::(x-[^\s{,(]*)/gim,s=/::part\(([^)]*)\)/gim,t=/(-host)(?:\(([^)]*)\))?([^,{]*)/gim,u="([>\\s~+[.,{:][\\s\\S]*)?$",v=/@host/gim,w=/\:host/gim,x="-host",y="-host-no-combinator",z=/-host/gim;if(window.ShadowDOMPolyfill){f("style { display: none !important; }\n");var A=document.querySelector("head");A.insertBefore(g(),A.childNodes[0])}a.ShadowCSS=i}(window.Platform)}
\ No newline at end of file
diff --git a/pkg/shadow_dom/lib/src/platform/ShadowCSS.js b/pkg/shadow_dom/lib/src/platform/ShadowCSS.js
deleted file mode 100644
index 49fde56..0000000
--- a/pkg/shadow_dom/lib/src/platform/ShadowCSS.js
+++ /dev/null
@@ -1,574 +0,0 @@
-/*
- * Copyright 2012 The Polymer Authors. All rights reserved.
- * Use of this source code is governed by a BSD-style
- * license that can be found in the LICENSE file.
- */
-
-/*
-  This is a limited shim for ShadowDOM css styling.
-  https://dvcs.w3.org/hg/webcomponents/raw-file/tip/spec/shadow/index.html#styles
-
-  The intention here is to support only the styling features which can be
-  relatively simply implemented. The goal is to allow users to avoid the
-  most obvious pitfalls and do so without compromising performance significantly.
-  For ShadowDOM styling that's not covered here, a set of best practices
-  can be provided that should allow users to accomplish more complex styling.
-
-  The following is a list of specific ShadowDOM styling features and a brief
-  discussion of the approach used to shim.
-
-  Shimmed features:
-
-  * @host: ShadowDOM allows styling of the shadowRoot's host element using the
-  @host rule. To shim this feature, the @host styles are reformatted and
-  prefixed with a given scope name and promoted to a document level stylesheet.
-  For example, given a scope name of .foo, a rule like this:
-
-    @host {
-      * {
-        background: red;
-      }
-    }
-
-  becomes:
-
-    .foo {
-      background: red;
-    }
-
-  * encapsultion: Styles defined within ShadowDOM, apply only to
-  dom inside the ShadowDOM. Polymer uses one of two techniques to imlement
-  this feature.
-
-  By default, rules are prefixed with the host element tag name
-  as a descendant selector. This ensures styling does not leak out of the 'top'
-  of the element's ShadowDOM. For example,
-
-  div {
-      font-weight: bold;
-    }
-
-  becomes:
-
-  x-foo div {
-      font-weight: bold;
-    }
-
-  becomes:
-
-
-  Alternatively, if Platform.ShadowCSS.strictStyling is set to true then
-  selectors are scoped by adding an attribute selector suffix to each
-  simple selector that contains the host element tag name. Each element
-  in the element's ShadowDOM template is also given the scope attribute.
-  Thus, these rules match only elements that have the scope attribute.
-  For example, given a scope name of x-foo, a rule like this:
-
-    div {
-      font-weight: bold;
-    }
-
-  becomes:
-
-    div[x-foo] {
-      font-weight: bold;
-    }
-
-  Note that elements that are dynamically added to a scope must have the scope
-  selector added to them manually.
-
-  * ::pseudo: These rules are converted to rules that take advantage of the
-  pseudo attribute. For example, a shadowRoot like this inside an x-foo
-
-    <div pseudo="x-special">Special</div>
-
-  with a rule like this:
-
-    x-foo::x-special { ... }
-
-  becomes:
-
-    x-foo [pseudo=x-special] { ... }
-
-  * ::part(): These rules are converted to rules that take advantage of the
-  part attribute. For example, a shadowRoot like this inside an x-foo
-
-    <div part="special">Special</div>
-
-  with a rule like this:
-
-    x-foo::part(special) { ... }
-
-  becomes:
-
-    x-foo [part=special] { ... }
-
-  Unaddressed ShadowDOM styling features:
-
-  * upper/lower bound encapsulation: Styles which are defined outside a
-  shadowRoot should not cross the ShadowDOM boundary and should not apply
-  inside a shadowRoot.
-
-  This styling behavior is not emulated. Some possible ways to do this that
-  were rejected due to complexity and/or performance concerns include: (1) reset
-  every possible property for every possible selector for a given scope name;
-  (2) re-implement css in javascript.
-
-  As an alternative, users should make sure to use selectors
-  specific to the scope in which they are working.
-
-  * ::distributed: This behavior is not emulated. It's often not necessary
-  to style the contents of a specific insertion point and instead, descendants
-  of the host element can be styled selectively. Users can also create an
-  extra node around an insertion point and style that node's contents
-  via descendent selectors. For example, with a shadowRoot like this:
-
-    <style>
-      content::-webkit-distributed(div) {
-        background: red;
-      }
-    </style>
-    <content></content>
-
-  could become:
-
-    <style>
-      / *@polyfill .content-container div * /
-      content::-webkit-distributed(div) {
-        background: red;
-      }
-    </style>
-    <div class="content-container">
-      <content></content>
-    </div>
-
-  Note the use of @polyfill in the comment above a ShadowDOM specific style
-  declaration. This is a directive to the styling shim to use the selector
-  in comments in lieu of the next selector when running under polyfill.
-*/
-(function(scope) {
-
-var ShadowCSS = {
-  strictStyling: false,
-  registry: {},
-  // Shim styles for a given root associated with a name and extendsName
-  // 1. cache root styles by name
-  // 2. optionally tag root nodes with scope name
-  // 3. shim polyfill directives /* @polyfill */ and /* @polyfill-rule */
-  // 4. shim @host and scoping
-  shimStyling: function(root, name, extendsName) {
-    var typeExtension = this.isTypeExtension(extendsName);
-    // use caching to make working with styles nodes easier and to facilitate
-    // lookup of extendee
-    var def = this.registerDefinition(root, name, extendsName);
-    // find styles and apply shimming...
-    if (this.strictStyling) {
-      this.applyScopeToContent(root, name);
-    }
-    // insert @polyfill and @polyfill-rule rules into style elements
-    // scoping process takes care of shimming these
-    this.insertPolyfillDirectives(def.rootStyles);
-    this.insertPolyfillRules(def.rootStyles);
-    var cssText = this.stylesToShimmedCssText(def.scopeStyles, name,
-        typeExtension);
-    // note: we only need to do rootStyles since these are unscoped.
-    cssText += this.extractPolyfillUnscopedRules(def.rootStyles);
-    // provide shimmedStyle for user extensibility
-    def.shimmedStyle = cssTextToStyle(cssText);
-    if (root) {
-      root.shimmedStyle = def.shimmedStyle;
-    }
-    // remove existing style elements
-    for (var i=0, l=def.rootStyles.length, s; (i<l) && (s=def.rootStyles[i]);
-        i++) {
-      s.parentNode.removeChild(s);
-    }
-    // add style to document
-    addCssToDocument(cssText);
-  },
-  registerDefinition: function(root, name, extendsName) {
-    var def = this.registry[name] = {
-      root: root,
-      name: name,
-      extendsName: extendsName
-    }
-    var styles = root ? root.querySelectorAll('style') : [];
-    styles = styles ? Array.prototype.slice.call(styles, 0) : [];
-    def.rootStyles = styles;
-    def.scopeStyles = def.rootStyles;
-    var extendee = this.registry[def.extendsName];
-    if (extendee && (!root || root.querySelector('shadow'))) {
-      def.scopeStyles = extendee.scopeStyles.concat(def.scopeStyles);
-    }
-    return def;
-  },
-  isTypeExtension: function(extendsName) {
-    return extendsName && extendsName.indexOf('-') < 0;
-  },
-  applyScopeToContent: function(root, name) {
-    if (root) {
-      // add the name attribute to each node in root.
-      Array.prototype.forEach.call(root.querySelectorAll('*'),
-          function(node) {
-            node.setAttribute(name, '');
-          });
-      // and template contents too
-      Array.prototype.forEach.call(root.querySelectorAll('template'),
-          function(template) {
-            this.applyScopeToContent(template.content, name);
-          },
-          this);
-    }
-  },
-  /*
-   * Process styles to convert native ShadowDOM rules that will trip
-   * up the css parser; we rely on decorating the stylesheet with comments.
-   *
-   * For example, we convert this rule:
-   *
-   * (comment start) @polyfill :host menu-item (comment end)
-   * shadow::-webkit-distributed(menu-item) {
-   *
-   * to this:
-   *
-   * scopeName menu-item {
-   *
-  **/
-  insertPolyfillDirectives: function(styles) {
-    if (styles) {
-      Array.prototype.forEach.call(styles, function(s) {
-        s.textContent = this.insertPolyfillDirectivesInCssText(s.textContent);
-      }, this);
-    }
-  },
-  insertPolyfillDirectivesInCssText: function(cssText) {
-    return cssText.replace(cssPolyfillCommentRe, function(match, p1) {
-      // remove end comment delimiter and add block start
-      return p1.slice(0, -2) + '{';
-    });
-  },
-  /*
-   * Process styles to add rules which will only apply under the polyfill
-   *
-   * For example, we convert this rule:
-   *
-   * (comment start) @polyfill-rule :host menu-item {
-   * ... } (comment end)
-   *
-   * to this:
-   *
-   * scopeName menu-item {...}
-   *
-  **/
-  insertPolyfillRules: function(styles) {
-    if (styles) {
-      Array.prototype.forEach.call(styles, function(s) {
-        s.textContent = this.insertPolyfillRulesInCssText(s.textContent);
-      }, this);
-    }
-  },
-  insertPolyfillRulesInCssText: function(cssText) {
-    return cssText.replace(cssPolyfillRuleCommentRe, function(match, p1) {
-      // remove end comment delimiter
-      return p1.slice(0, -1);
-    });
-  },
-  /*
-   * Process styles to add rules which will only apply under the polyfill
-   * and do not process via CSSOM. (CSSOM is destructive to rules on rare
-   * occasions, e.g. -webkit-calc on Safari.)
-   * For example, we convert this rule:
-   *
-   * (comment start) @polyfill-unscoped-rule menu-item {
-   * ... } (comment end)
-   *
-   * to this:
-   *
-   * menu-item {...}
-   *
-  **/
-  extractPolyfillUnscopedRules: function(styles) {
-    var cssText = '';
-    if (styles) {
-      Array.prototype.forEach.call(styles, function(s) {
-        cssText += this.extractPolyfillUnscopedRulesFromCssText(
-            s.textContent) + '\n\n';
-      }, this);
-    }
-    return cssText;
-  },
-  extractPolyfillUnscopedRulesFromCssText: function(cssText) {
-    var r = '', matches;
-    while (matches = cssPolyfillUnscopedRuleCommentRe.exec(cssText)) {
-      r += matches[1].slice(0, -1) + '\n\n';
-    }
-    return r;
-  },
-  // apply @host and scope shimming
-  stylesToShimmedCssText: function(styles, name, typeExtension) {
-    return this.shimAtHost(styles, name, typeExtension) +
-        this.shimScoping(styles, name, typeExtension);
-  },
-  // form: @host { .foo { declarations } }
-  // becomes: scopeName.foo { declarations }
-  shimAtHost: function(styles, name, typeExtension) {
-    if (styles) {
-      return this.convertAtHostStyles(styles, name, typeExtension);
-    }
-  },
-  convertAtHostStyles: function(styles, name, typeExtension) {
-    var cssText = stylesToCssText(styles), self = this;
-    cssText = cssText.replace(hostRuleRe, function(m, p1) {
-      return self.scopeHostCss(p1, name, typeExtension);
-    });
-    cssText = rulesToCss(this.findAtHostRules(cssToRules(cssText),
-      new RegExp('^' + name + selectorReSuffix, 'm')));
-    return cssText;
-  },
-  scopeHostCss: function(cssText, name, typeExtension) {
-    var self = this;
-    return cssText.replace(selectorRe, function(m, p1, p2) {
-      return self.scopeHostSelector(p1, name, typeExtension) + ' ' + p2 + '\n\t';
-    });
-  },
-  // supports scopig by name and  [is=name] syntax
-  scopeHostSelector: function(selector, name, typeExtension) {
-    var r = [], parts = selector.split(','), is = '[is=' + name + ']';
-    parts.forEach(function(p) {
-      p = p.trim();
-      // selector: *|:scope -> name
-      if (p.match(hostElementRe)) {
-        p = p.replace(hostElementRe, typeExtension ? is + '$1$3' :
-            name + '$1$3');
-      // selector: .foo -> name.foo (OR) [bar] -> name[bar]
-      } else if (p.match(hostFixableRe)) {
-        p = typeExtension ? is + p : name + p;
-      }
-      r.push(p);
-    }, this);
-    return r.join(', ');
-  },
-  // consider styles that do not include component name in the selector to be
-  // unscoped and in need of promotion;
-  // for convenience, also consider keyframe rules this way.
-  findAtHostRules: function(cssRules, matcher) {
-    return Array.prototype.filter.call(cssRules,
-      this.isHostRule.bind(this, matcher));
-  },
-  isHostRule: function(matcher, cssRule) {
-    return (cssRule.selectorText && cssRule.selectorText.match(matcher)) ||
-      (cssRule.cssRules && this.findAtHostRules(cssRule.cssRules, matcher).length) ||
-      (cssRule.type == CSSRule.WEBKIT_KEYFRAMES_RULE);
-  },
-  /* Ensure styles are scoped. Pseudo-scoping takes a rule like:
-   *
-   *  .foo {... }
-   *
-   *  and converts this to
-   *
-   *  scopeName .foo { ... }
-  */
-  shimScoping: function(styles, name, typeExtension) {
-    if (styles) {
-      return this.convertScopedStyles(styles, name, typeExtension);
-    }
-  },
-  convertScopedStyles: function(styles, name, typeExtension) {
-    var cssText = stylesToCssText(styles).replace(hostRuleRe, '');
-    cssText = this.insertPolyfillHostInCssText(cssText);
-    cssText = this.convertColonHost(cssText);
-    cssText = this.convertPseudos(cssText);
-    cssText = this.convertParts(cssText);
-    cssText = this.convertCombinators(cssText);
-    var rules = cssToRules(cssText);
-    cssText = this.scopeRules(rules, name, typeExtension);
-    return cssText;
-  },
-  convertPseudos: function(cssText) {
-    return cssText.replace(cssPseudoRe, ' [pseudo=$1]');
-  },
-  convertParts: function(cssText) {
-    return cssText.replace(cssPartRe, ' [part=$1]');
-  },
-  /*
-   * convert a rule like :host(.foo) > .bar { }
-   *
-   * to
-   *
-   * scopeName.foo > .bar, .foo scopeName > .bar { }
-   * TODO(sorvell): file bug since native impl does not do the former yet.
-   * http://jsbin.com/OganOCI/2/edit
-  */
-  convertColonHost: function(cssText) {
-    // p1 = :host, p2 = contents of (), p3 rest of rule
-    return cssText.replace(cssColonHostRe, function(m, p1, p2, p3) {
-      return p2 ? polyfillHostNoCombinator + p2 + p3 + ', '
-          + p2 + ' ' + p1 + p3 :
-          p1 + p3;
-    });
-  },
-  /*
-   * Convert ^ and ^^ combinators by replacing with space.
-  */
-  convertCombinators: function(cssText) {
-    return cssText.replace('^^', ' ').replace('^', ' ');
-  },
-  // change a selector like 'div' to 'name div'
-  scopeRules: function(cssRules, name, typeExtension) {
-    var cssText = '';
-    Array.prototype.forEach.call(cssRules, function(rule) {
-      if (rule.selectorText && (rule.style && rule.style.cssText)) {
-        cssText += this.scopeSelector(rule.selectorText, name, typeExtension,
-          this.strictStyling) + ' {\n\t';
-        cssText += this.propertiesFromRule(rule) + '\n}\n\n';
-      } else if (rule.media) {
-        cssText += '@media ' + rule.media.mediaText + ' {\n';
-        cssText += this.scopeRules(rule.cssRules, name);
-        cssText += '\n}\n\n';
-      } else if (rule.cssText) {
-        cssText += rule.cssText + '\n\n';
-      }
-    }, this);
-    return cssText;
-  },
-  scopeSelector: function(selector, name, typeExtension, strict) {
-    var r = [], parts = selector.split(',');
-    parts.forEach(function(p) {
-      p = p.trim();
-      if (this.selectorNeedsScoping(p, name, typeExtension)) {
-        p = strict ? this.applyStrictSelectorScope(p, name) :
-          this.applySimpleSelectorScope(p, name, typeExtension);
-      }
-      r.push(p);
-    }, this);
-    return r.join(', ');
-  },
-  selectorNeedsScoping: function(selector, name, typeExtension) {
-    var matchScope = typeExtension ? name : '\\[is=' + name + '\\]';
-    var re = new RegExp('^(' + matchScope + ')' + selectorReSuffix, 'm');
-    return !selector.match(re);
-  },
-  // scope via name and [is=name]
-  applySimpleSelectorScope: function(selector, name, typeExtension) {
-    var scoper = typeExtension ? '[is=' + name + ']' : name;
-    if (selector.match(polyfillHostRe)) {
-      selector = selector.replace(polyfillHostNoCombinator, scoper);
-      return selector.replace(polyfillHostRe, scoper + ' ');
-    } else {
-      return scoper + ' ' + selector;
-    }
-  },
-  // return a selector with [name] suffix on each simple selector
-  // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name]
-  applyStrictSelectorScope: function(selector, name) {
-    var splits = [' ', '>', '+', '~'],
-      scoped = selector,
-      attrName = '[' + name + ']';
-    splits.forEach(function(sep) {
-      var parts = scoped.split(sep);
-      scoped = parts.map(function(p) {
-        // remove :host since it should be unnecessary
-        var t = p.trim().replace(polyfillHostRe, '');
-        if (t && (splits.indexOf(t) < 0) && (t.indexOf(attrName) < 0)) {
-          p = t.replace(/([^:]*)(:*)(.*)/, '$1' + attrName + '$2$3')
-        }
-        return p;
-      }).join(sep);
-    });
-    return scoped;
-  },
-  insertPolyfillHostInCssText: function(selector) {
-    return selector.replace(hostRe, polyfillHost).replace(colonHostRe,
-        polyfillHost);
-  },
-  propertiesFromRule: function(rule) {
-    var properties = rule.style.cssText;
-    // TODO(sorvell): Chrome cssom incorrectly removes quotes from the content
-    // property. (https://code.google.com/p/chromium/issues/detail?id=247231)
-    if (rule.style.content && !rule.style.content.match(/['"]+/)) {
-      properties = 'content: \'' + rule.style.content + '\';\n' +
-        rule.style.cssText.replace(/content:[^;]*;/g, '');
-    }
-    return properties;
-  }
-};
-
-var hostRuleRe = /@host[^{]*{(([^}]*?{[^{]*?}[\s\S]*?)+)}/gim,
-    selectorRe = /([^{]*)({[\s\S]*?})/gim,
-    hostElementRe = /(.*)((?:\*)|(?:\:scope))(.*)/,
-    hostFixableRe = /^[.\[:]/,
-    cssCommentRe = /\/\*[^*]*\*+([^/*][^*]*\*+)*\//gim,
-    cssPolyfillCommentRe = /\/\*\s*@polyfill ([^*]*\*+([^/*][^*]*\*+)*\/)([^{]*?){/gim,
-    cssPolyfillRuleCommentRe = /\/\*\s@polyfill-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,
-    cssPolyfillUnscopedRuleCommentRe = /\/\*\s@polyfill-unscoped-rule([^*]*\*+([^/*][^*]*\*+)*)\//gim,
-    cssPseudoRe = /::(x-[^\s{,(]*)/gim,
-    cssPartRe = /::part\(([^)]*)\)/gim,
-    // note: :host pre-processed to -host.
-    cssColonHostRe = /(-host)(?:\(([^)]*)\))?([^,{]*)/gim,
-    selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$',
-    hostRe = /@host/gim,
-    colonHostRe = /\:host/gim,
-    polyfillHost = '-host',
-    /* host name without combinator */
-    polyfillHostNoCombinator = '-host-no-combinator',
-    polyfillHostRe = /-host/gim;
-
-function stylesToCssText(styles, preserveComments) {
-  var cssText = '';
-  Array.prototype.forEach.call(styles, function(s) {
-    cssText += s.textContent + '\n\n';
-  });
-  // strip comments for easier processing
-  if (!preserveComments) {
-    cssText = cssText.replace(cssCommentRe, '');
-  }
-  return cssText;
-}
-
-function cssTextToStyle(cssText) {
-  var style = document.createElement('style');
-  style.textContent = cssText;
-  return style;
-}
-
-function cssToRules(cssText) {
-  var style = cssTextToStyle(cssText);
-  document.head.appendChild(style);
-  var rules = style.sheet.cssRules;
-  style.parentNode.removeChild(style);
-  return rules;
-}
-
-function rulesToCss(cssRules) {
-  for (var i=0, css=[]; i < cssRules.length; i++) {
-    css.push(cssRules[i].cssText);
-  }
-  return css.join('\n\n');
-}
-
-function addCssToDocument(cssText) {
-  if (cssText) {
-    getSheet().appendChild(document.createTextNode(cssText));
-  }
-}
-
-var sheet;
-function getSheet() {
-  if (!sheet) {
-    sheet = document.createElement("style");
-    sheet.setAttribute('ShadowCSSShim', '');
-  }
-  return sheet;
-}
-
-// add polyfill stylesheet to document
-if (window.ShadowDOMPolyfill) {
-  addCssToDocument('style { display: none !important; }\n');
-  var head = document.querySelector('head');
-  head.insertBefore(getSheet(), head.childNodes[0]);
-}
-
-// exports
-scope.ShadowCSS = ShadowCSS;
-
-})(window.Platform);
diff --git a/pkg/shadow_dom/tool/build.json b/pkg/shadow_dom/tool/build.json
index 7834f81..8c2b7be 100644
--- a/pkg/shadow_dom/tool/build.json
+++ b/pkg/shadow_dom/tool/build.json
@@ -4,6 +4,6 @@
   "../../../third_party/polymer/ShadowDOM/build.json",
   "../lib/src/platform/patches-shadowdom-polyfill.js",
   "../lib/src/platform/platform-init.js",
-  "../lib/src/platform/ShadowCSS.js",
+  "../../../third_party/polymer/platform/src/ShadowCSS.js",
   "build/end-if.js"
 ]
diff --git a/pkg/shadow_dom/tool/build.sh b/pkg/shadow_dom/tool/build.sh
index b10ebe7..10cd859 100755
--- a/pkg/shadow_dom/tool/build.sh
+++ b/pkg/shadow_dom/tool/build.sh
@@ -16,7 +16,9 @@
 POLYMER_REMOTE=https://github.com/Polymer
 POLYMER_DIR=../../../third_party/polymer
 
-for NAME in ShadowDOM observe-js WeakMap; do
+NEWLINE=$'\n'
+REVISIONS=""
+for NAME in ShadowDOM observe-js WeakMap platform; do
   GIT_REMOTE="$POLYMER_REMOTE/$NAME.git"
   GIT_DIR="$POLYMER_DIR/$NAME"
   echo "*** Syncing $GIT_DIR from $GIT_REMOTE"
@@ -28,6 +30,9 @@
   else
     git clone $GIT_REMOTE $GIT_DIR
   fi
+  pushd $GIT_DIR > /dev/null
+  REVISIONS="$REVISIONS $NEWLINE  $NAME is at revision `git rev-parse HEAD`"
+  popd
 done
 
 echo '*** Installing NPM prerequisites'
@@ -35,3 +40,5 @@
 
 echo '*** Running grunt'
 grunt
+
+echo "*** Revision hash to use in commit message: $REVISIONS"
diff --git a/runtime/bin/builtin.dart b/runtime/bin/builtin.dart
index 7546f40..8d8145e 100644
--- a/runtime/bin/builtin.dart
+++ b/runtime/bin/builtin.dart
@@ -4,6 +4,13 @@
 
 library builtin;
 import 'dart:io';
+// import 'root_library'; happens here from C Code
+
+// The root library (aka the script) is imported into this library. The
+// standalone embedder uses this to lookup the main entrypoint in the
+// root library's namespace.
+Function _getMainClosure() => main;
+
 
 // Corelib 'print' implementation.
 void _print(arg) {
diff --git a/runtime/bin/main.cc b/runtime/bin/main.cc
index fae077d..62af0f3 100644
--- a/runtime/bin/main.cc
+++ b/runtime/bin/main.cc
@@ -897,6 +897,14 @@
     ASSERT(bytes_written);
     delete snapshot_file;
   } else {
+    // Lookup the library of the root script.
+    Dart_Handle root_lib = Dart_RootLibrary();
+    // Import the root library into the builtin library so that we can easily
+    // lookup the main entry point exported from the root library.
+    Dart_Handle builtin_lib =
+        Builtin::LoadAndCheckLibrary(Builtin::kBuiltinLibrary);
+    result = Dart_LibraryImportLibrary(builtin_lib, root_lib, Dart_Null());
+
     if (has_compile_all) {
       result = Dart_CompileAll();
       if (Dart_IsError(result)) {
@@ -911,60 +919,65 @@
       }
     }
 
-    // Lookup the library of the root script.
-    Dart_Handle library = Dart_RootLibrary();
-    if (Dart_IsNull(library)) {
+    if (Dart_IsNull(root_lib)) {
       return ErrorExit(kErrorExitCode,
                        "Unable to find root library for '%s'\n",
                        script_name);
     }
-    // Set debug breakpoint if specified on the command line.
-    if (breakpoint_at != NULL) {
-      result = SetBreakpoint(breakpoint_at, library);
-      if (Dart_IsError(result)) {
-        return ErrorExit(kErrorExitCode,
-                         "Error setting breakpoint at '%s': %s\n",
-                         breakpoint_at,
-                         Dart_GetError(result));
-      }
-    }
     if (has_print_script) {
       result = GenerateScriptSource();
       if (Dart_IsError(result)) {
         return DartErrorExit(result);
       }
     } else {
-      // Lookup and invoke the top level main function.
-      // The top-level function may accept up to two arguments:
-      //   main(List<String> args, var message).
-      // However most commonly it either accepts one (the args list) or
-      // none.
-      // If the message is optional, main(args, [message]), it is invoked with
-      // one argument only.
-      Dart_Handle main_args[2];
-      main_args[0] = CreateRuntimeOptions(&dart_options);
-      main_args[1] = Dart_Null();
-      // First try with 1 argument.
-      result = Dart_Invoke(library, DartUtils::NewString("main"), 1, main_args);
-      // TODO(iposva): Return a special error type for mismatched argument
-      // counts from Dart_Invoke to avoid the string comparison.
-      const char* expected_error = "Dart_Invoke: wrong argument count for "
-          "function 'main': ";
-      intptr_t length = strlen(expected_error);
-      if (Dart_IsError(result) &&
-          strncmp(expected_error, Dart_GetError(result), length) == 0) {
-        // Try with two arguments.
-        result =
-            Dart_Invoke(library, DartUtils::NewString("main"), 2, main_args);
-        if (Dart_IsError(result) &&
-            strncmp(expected_error, Dart_GetError(result), length) == 0) {
-          // Finally try with 0 arguments.
-          result = Dart_Invoke(library, DartUtils::NewString("main"), 0, NULL);
+      // The helper function _getMainClosure creates a closure for the main
+      // entry point which is either explicitly or implictly exported from the
+      // root library.
+      Dart_Handle main_closure = Dart_Invoke(
+          builtin_lib, Dart_NewStringFromCString("_getMainClosure"), 0, NULL);
+      if (Dart_IsError(main_closure)) {
+        return DartErrorExit(result);
+      }
+
+      // Set debug breakpoint if specified on the command line before calling
+      // the main function.
+      if (breakpoint_at != NULL) {
+        result = SetBreakpoint(breakpoint_at, root_lib);
+        if (Dart_IsError(result)) {
+          return ErrorExit(kErrorExitCode,
+                           "Error setting breakpoint at '%s': %s\n",
+                           breakpoint_at,
+                           Dart_GetError(result));
         }
       }
+
+      // Call _startIsolate in the isolate library to enable dispatching the
+      // initial startup message.
+      Dart_Handle isolate_args[2];
+      isolate_args[0] = main_closure;
+      isolate_args[1] = Dart_True();
+
+      Dart_Handle isolate_lib = Dart_LookupLibrary(
+          Dart_NewStringFromCString("dart:isolate"));
+      result = Dart_Invoke(isolate_lib,
+                           Dart_NewStringFromCString("_startIsolate"),
+                           2, isolate_args);
+
+      // Setup the arguments in the initial startup message and leave the
+      // replyTo and message fields empty.
+      Dart_Handle initial_startup_msg = Dart_NewList(3);
+      result = Dart_ListSetAt(initial_startup_msg, 1,
+                              CreateRuntimeOptions(&dart_options));
       if (Dart_IsError(result)) {
         return DartErrorExit(result);
       }
+      Dart_Port main_port = Dart_GetMainPortId();
+      bool posted = Dart_Post(main_port, initial_startup_msg);
+      if (!posted) {
+        return ErrorExit(kErrorExitCode,
+                         "Failed posting startup message to main "
+                         "isolate control port.");
+      }
 
       // Keep handling messages until the last active receive port is closed.
       result = Dart_RunLoop();
diff --git a/runtime/bin/socket_patch.dart b/runtime/bin/socket_patch.dart
index 2c1990d..e57d193 100644
--- a/runtime/bin/socket_patch.dart
+++ b/runtime/bin/socket_patch.dart
@@ -814,7 +814,7 @@
 
   List<int> read([int len]) {
     if (_isMacOSTerminalInput) {
-      var available = available();
+      var available = this.available();
       if (available == 0) return null;
       var data = _socket.read(len);
       if (data == null || data.length < available) {
diff --git a/runtime/bin/vmservice/client/web/index.html b/runtime/bin/vmservice/client/web/index.html
index c2dbabd..48a9cbd 100644
--- a/runtime/bin/vmservice/client/web/index.html
+++ b/runtime/bin/vmservice/client/web/index.html
@@ -5,11 +5,7 @@
   <link type="text/css" rel="stylesheet" 
                         href="bootstrap_css/css/bootstrap.min.css" />
   <link rel="import" href="packages/observatory/observatory_elements.html">
-  <script type='application/dart'>
-    import 'package:polymer/init.dart';
-    // this export won't be needed after we fix issue 14542
-    export 'package:polymer/init.dart';
-	</script>
+  <script type='application/dart'>export 'package:polymer/init.dart';</script>
   <script src="packages/browser/dart.js"></script>
 </head>
 <body>
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 6fe83fe..c346ea4 100755
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -2154,8 +2154,7 @@
 /* TODO(turnidge): Finish documenting this section. */
 
 typedef enum {
-  Dart_kLibraryTag = 0,
-  Dart_kImportTag,
+  Dart_kImportTag = 0,
   Dart_kSourceTag,
   Dart_kCanonicalizeUrl
 } Dart_LibraryTag;
diff --git a/runtime/lib/collection_patch.dart b/runtime/lib/collection_patch.dart
index cdee5c4..81aa289 100644
--- a/runtime/lib/collection_patch.dart
+++ b/runtime/lib/collection_patch.dart
@@ -562,7 +562,7 @@
 
   bool contains(Object object) {
     int index = _hashCode(object) & (_buckets.length - 1);
-    HashSetEntry entry = _buckets[index];
+    _HashSetEntry entry = _buckets[index];
     while (entry != null) {
       if (_equals(entry.key, object)) return true;
       entry = entry.next;
@@ -572,7 +572,7 @@
 
   E lookup(Object object) {
     int index = _hashCode(object) & (_buckets.length - 1);
-    HashSetEntry entry = _buckets[index];
+    _HashSetEntry entry = _buckets[index];
     while (entry != null) {
       var key = entry.key;
       if (_equals(key, object)) return key;
@@ -586,7 +586,7 @@
   bool add(E element) {
     int hashCode = _hashCode(element);
     int index = hashCode & (_buckets.length - 1);
-    HashSetEntry entry = _buckets[index];
+    _HashSetEntry entry = _buckets[index];
     while (entry != null) {
       if (_equals(entry.key, element)) return false;
       entry = entry.next;
@@ -641,8 +641,8 @@
   void _filterWhere(bool test(E element), bool removeMatching) {
     int length = _buckets.length;
     for (int index =  0; index < length; index++) {
-      HashSetEntry entry = _buckets[index];
-      HashSetEntry previous = null;
+      _HashSetEntry entry = _buckets[index];
+      _HashSetEntry previous = null;
       while (entry != null) {
         int modificationCount = _modificationCount;
         bool testResult = test(entry.key);
@@ -650,7 +650,7 @@
           throw new ConcurrentModificationError(this);
         }
         if (testResult == removeMatching) {
-          HashSetEntry next = entry.remove();
+          _HashSetEntry next = entry.remove();
           if (previous == null) {
             _buckets[index] = next;
           } else {
diff --git a/runtime/lib/growable_array.dart b/runtime/lib/growable_array.dart
index d3f76db6..c3e6204 100644
--- a/runtime/lib/growable_array.dart
+++ b/runtime/lib/growable_array.dart
@@ -114,7 +114,7 @@
 
   List<T> sublist(int start, [int end]) {
     Arrays.indicesCheck(this, start, end);
-    if (end == null) end = length;
+    if (end == null) end = this.length;
     int length = end - start;
     if (start == end) return <T>[];
     List list = new _GrowableList<T>.withCapacity(length);
diff --git a/runtime/lib/isolate.cc b/runtime/lib/isolate.cc
index df716fc..f900083 100644
--- a/runtime/lib/isolate.cc
+++ b/runtime/lib/isolate.cc
@@ -266,6 +266,12 @@
   if (port.IsError()) {
     Exceptions::PropagateError(Error::Cast(port));
   }
+
+  // The control port is being accessed as a regular port from Dart code. This
+  // is most likely due to the _startIsolate code in dart:isolate. Account for
+  // this by increasing the number of open control ports.
+  isolate->message_handler()->increment_control_ports();
+
   return port.raw();
 }
 
diff --git a/runtime/lib/isolate_patch.dart b/runtime/lib/isolate_patch.dart
index 2a08763..99d0d69 100644
--- a/runtime/lib/isolate_patch.dart
+++ b/runtime/lib/isolate_patch.dart
@@ -110,13 +110,8 @@
 
 class _SendPortImpl implements SendPort {
   /*--- public interface ---*/
-  void send(var message, [SendPort replyTo = null]) {
-    this._sendNow(message, replyTo);
-  }
-
-  void _sendNow(var message, SendPort replyTo) {
-    int replyId = (replyTo == null) ? 0 : replyTo._id;
-    _sendInternal(_id, replyId, message);
+  void send(var message) {
+    _sendInternal(_id, 0, message);
   }
 
   bool operator==(var other) {
@@ -145,6 +140,7 @@
 
   // Forward the implementation of sending messages to the VM. Only port ids
   // are being handed to the VM.
+  // TODO(14731): Remove replyId argument.
   static _sendInternal(int sendId, int replyId, var message)
       native "SendPortImpl_sendInternal_";
 
@@ -178,8 +174,10 @@
     keepAlivePort.close();
 
     SendPort replyTo = message[0];
-    // TODO(floitsch): don't send ok-message if we can't find the entry point.
-    replyTo.send("started");
+    if (replyTo != null) {
+      // TODO(floitsch): don't send ok-message if we can't find the entry point.
+      replyTo.send("started");
+    }
     if (isSpawnUri) {
       assert(message.length == 3);
       List<String> args = message[1];
diff --git a/runtime/lib/mirrors_impl.dart b/runtime/lib/mirrors_impl.dart
index 6f76866..a2ab082 100644
--- a/runtime/lib/mirrors_impl.dart
+++ b/runtime/lib/mirrors_impl.dart
@@ -49,9 +49,10 @@
   void clear() => _throw();
 }
 
-// These values are allowed to be passed directly over the wire.
-bool _isSimpleValue(var value) {
-  return (value == null || value is num || value is String || value is bool);
+class _InternalMirrorError {
+  const _InternalMirrorError(String this._msg);
+  String toString() => _msg;
+  final String _msg;
 }
 
 Map _filterMap(Map<Symbol, dynamic> old_map, bool filter(Symbol key, value)) {
@@ -216,19 +217,6 @@
                        value);
     return reflect(value);
   }
-
-  static _validateArgument(int i, Object arg)
-  {
-    if (arg is Mirror) {
-        if (arg is! InstanceMirror) {
-          throw new MirrorException(
-              'positional argument $i ($arg) was not an InstanceMirror');
-        }
-      } else if (!_isSimpleValue(arg)) {
-        throw new MirrorException(
-            'positional argument $i ($arg) was not a simple value');
-      }
-  }
 }
 
 class _LocalInstanceMirrorImpl extends _LocalObjectMirrorImpl
@@ -1252,7 +1240,7 @@
       } else {
         var parts = MirrorSystem.getName(simpleName).split('.');
         if (parts.length > 2) {
-          throw new MirrorException(
+          throw new _InternalMirrorError(
               'Internal error in MethodMirror.constructorName: '
               'malformed name <$simpleName>');
         } else if (parts.length == 2) {
diff --git a/runtime/lib/simd128.cc b/runtime/lib/simd128.cc
index d2aaf68..2bda632 100644
--- a/runtime/lib/simd128.cc
+++ b/runtime/lib/simd128.cc
@@ -54,8 +54,8 @@
 }
 
 
-DEFINE_NATIVE_ENTRY(Float32x4_fromUint32x4Bits, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, v, arguments->NativeArgAt(1));
+DEFINE_NATIVE_ENTRY(Float32x4_fromInt32x4Bits, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, v, arguments->NativeArgAt(1));
   return Float32x4::New(v.value());
 }
 
@@ -122,7 +122,7 @@
   uint32_t _y = a.y() < b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() < b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() < b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -133,7 +133,7 @@
   uint32_t _y = a.y() <= b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() <= b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() <= b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -144,7 +144,7 @@
   uint32_t _y = a.y() > b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() > b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() > b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -155,7 +155,7 @@
   uint32_t _y = a.y() >= b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() >= b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() >= b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -166,7 +166,7 @@
   uint32_t _y = a.y() == b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() == b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() == b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -177,7 +177,7 @@
   uint32_t _y = a.y() != b.y() ? 0xFFFFFFFF : 0x0;
   uint32_t _z = a.z() != b.z() ? 0xFFFFFFFF : 0x0;
   uint32_t _w = a.w() != b.w() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
@@ -260,8 +260,8 @@
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getSignMask, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_getSignMask, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   uint32_t mx = (self.x() & 0x80000000) >> 31;
   uint32_t my = (self.y() & 0x80000000) >> 31;
   uint32_t mz = (self.z() & 0x80000000) >> 31;
@@ -399,311 +399,311 @@
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_fromInts, 5) {
+DEFINE_NATIVE_ENTRY(Int32x4_fromInts, 5) {
   ASSERT(AbstractTypeArguments::CheckedHandle(
       arguments->NativeArgAt(0)).IsNull());
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(2));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(3));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(4));
-  uint32_t _x = static_cast<uint32_t>(x.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _y = static_cast<uint32_t>(y.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _z = static_cast<uint32_t>(z.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _w = static_cast<uint32_t>(w.AsInt64Value() & 0xFFFFFFFF);
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = static_cast<int32_t>(x.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _y = static_cast<int32_t>(y.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _z = static_cast<int32_t>(z.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _w = static_cast<int32_t>(w.AsInt64Value() & 0xFFFFFFFF);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_fromBools, 5) {
+DEFINE_NATIVE_ENTRY(Int32x4_fromBools, 5) {
   ASSERT(AbstractTypeArguments::CheckedHandle(
       arguments->NativeArgAt(0)).IsNull());
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, x, arguments->NativeArgAt(1));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, y, arguments->NativeArgAt(2));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, z, arguments->NativeArgAt(3));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, w, arguments->NativeArgAt(4));
-  uint32_t _x = x.value() ? 0xFFFFFFFF : 0x0;
-  uint32_t _y = y.value() ? 0xFFFFFFFF : 0x0;
-  uint32_t _z = z.value() ? 0xFFFFFFFF : 0x0;
-  uint32_t _w = w.value() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = x.value() ? 0xFFFFFFFF : 0x0;
+  int32_t _y = y.value() ? 0xFFFFFFFF : 0x0;
+  int32_t _z = z.value() ? 0xFFFFFFFF : 0x0;
+  int32_t _w = w.value() ? 0xFFFFFFFF : 0x0;
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_fromFloat32x4Bits, 2) {
+DEFINE_NATIVE_ENTRY(Int32x4_fromFloat32x4Bits, 2) {
   GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, v, arguments->NativeArgAt(1));
-  return Uint32x4::New(v.value());
+  return Int32x4::New(v.value());
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_or, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
-  uint32_t _x = self.x() | other.x();
-  uint32_t _y = self.y() | other.y();
-  uint32_t _z = self.z() | other.z();
-  uint32_t _w = self.w() | other.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_or, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+  int32_t _x = self.x() | other.x();
+  int32_t _y = self.y() | other.y();
+  int32_t _z = self.z() | other.z();
+  int32_t _w = self.w() | other.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_and, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
-  uint32_t _x = self.x() & other.x();
-  uint32_t _y = self.y() & other.y();
-  uint32_t _z = self.z() & other.z();
-  uint32_t _w = self.w() & other.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_and, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+  int32_t _x = self.x() & other.x();
+  int32_t _y = self.y() & other.y();
+  int32_t _z = self.z() & other.z();
+  int32_t _w = self.w() & other.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_xor, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
-  uint32_t _x = self.x() ^ other.x();
-  uint32_t _y = self.y() ^ other.y();
-  uint32_t _z = self.z() ^ other.z();
-  uint32_t _w = self.w() ^ other.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_xor, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+  int32_t _x = self.x() ^ other.x();
+  int32_t _y = self.y() ^ other.y();
+  int32_t _z = self.z() ^ other.z();
+  int32_t _w = self.w() ^ other.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_add, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
-  uint32_t _x = self.x() + other.x();
-  uint32_t _y = self.y() + other.y();
-  uint32_t _z = self.z() + other.z();
-  uint32_t _w = self.w() + other.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_add, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+  int32_t _x = self.x() + other.x();
+  int32_t _y = self.y() + other.y();
+  int32_t _z = self.z() + other.z();
+  int32_t _w = self.w() + other.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_sub, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, other, arguments->NativeArgAt(1));
-  uint32_t _x = self.x() - other.x();
-  uint32_t _y = self.y() - other.y();
-  uint32_t _z = self.z() - other.z();
-  uint32_t _w = self.w() - other.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+DEFINE_NATIVE_ENTRY(Int32x4_sub, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, other, arguments->NativeArgAt(1));
+  int32_t _x = self.x() - other.x();
+  int32_t _y = self.y() - other.y();
+  int32_t _z = self.z() - other.z();
+  int32_t _w = self.w() - other.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getX, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.x();
+DEFINE_NATIVE_ENTRY(Int32x4_getX, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.x();
   return Integer::New(value);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getY, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.y();
+DEFINE_NATIVE_ENTRY(Int32x4_getY, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.y();
   return Integer::New(value);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getZ, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.z();
+DEFINE_NATIVE_ENTRY(Int32x4_getZ, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.z();
   return Integer::New(value);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getW, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.w();
+DEFINE_NATIVE_ENTRY(Int32x4_getW, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.w();
   return Integer::New(value);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_shuffle, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_shuffle, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(1));
   int64_t m = mask.AsInt64Value();
   ThrowMaskRangeException(m);
-  uint32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
-  uint32_t _x = data[m & 0x3];
-  uint32_t _y = data[(m >> 2) & 0x3];
-  uint32_t _z = data[(m >> 4) & 0x3];
-  uint32_t _w = data[(m >> 6) & 0x3];
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
+  int32_t _x = data[m & 0x3];
+  int32_t _y = data[(m >> 2) & 0x3];
+  int32_t _z = data[(m >> 4) & 0x3];
+  int32_t _w = data[(m >> 6) & 0x3];
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_shuffleMix, 3) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, zw, arguments->NativeArgAt(1));
+DEFINE_NATIVE_ENTRY(Int32x4_shuffleMix, 3) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, zw, arguments->NativeArgAt(1));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, mask, arguments->NativeArgAt(2));
   int64_t m = mask.AsInt64Value();
   ThrowMaskRangeException(m);
-  uint32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
-  uint32_t zw_data[4] = { zw.x(), zw.y(), zw.z(), zw.w() };
-  uint32_t _x = data[m & 0x3];
-  uint32_t _y = data[(m >> 2) & 0x3];
-  uint32_t _z = zw_data[(m >> 4) & 0x3];
-  uint32_t _w = zw_data[(m >> 6) & 0x3];
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t data[4] = { self.x(), self.y(), self.z(), self.w() };
+  int32_t zw_data[4] = { zw.x(), zw.y(), zw.z(), zw.w() };
+  int32_t _x = data[m & 0x3];
+  int32_t _y = data[(m >> 2) & 0x3];
+  int32_t _z = zw_data[(m >> 4) & 0x3];
+  int32_t _w = zw_data[(m >> 6) & 0x3];
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setX, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setX, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, x, arguments->NativeArgAt(1));
-  uint32_t _x = static_cast<uint32_t>(x.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = static_cast<int32_t>(x.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = self.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setY, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setY, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, y, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = static_cast<uint32_t>(y.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = self.x();
+  int32_t _y = static_cast<int32_t>(y.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _z = self.z();
+  int32_t _w = self.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setZ, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setZ, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, z, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = static_cast<uint32_t>(z.AsInt64Value() & 0xFFFFFFFF);
-  uint32_t _w = self.w();
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = static_cast<int32_t>(z.AsInt64Value() & 0xFFFFFFFF);
+  int32_t _w = self.w();
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setW, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setW, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Integer, w, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = static_cast<uint32_t>(w.AsInt64Value() & 0xFFFFFFFF);
-  return Uint32x4::New(_x, _y, _z, _w);
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = static_cast<int32_t>(w.AsInt64Value() & 0xFFFFFFFF);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagX, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.x();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagX, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.x();
   return Bool::Get(value != 0).raw();
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagY, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.y();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagY, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.y();
   return Bool::Get(value != 0).raw();
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagZ, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.z();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagZ, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.z();
   return Bool::Get(value != 0).raw();
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_getFlagW, 1) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
-  uint32_t value = self.w();
+DEFINE_NATIVE_ENTRY(Int32x4_getFlagW, 1) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
+  int32_t value = self.w();
   return Bool::Get(value != 0).raw();
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagX, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagX, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagX, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = self.w();
   _x = flagX.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagY, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagY, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagY, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = self.w();
   _y = flagY.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagZ, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagZ, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagZ, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = self.w();
   _z = flagZ.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_setFlagW, 2) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_setFlagW, 2) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Bool, flagW, arguments->NativeArgAt(1));
-  uint32_t _x = self.x();
-  uint32_t _y = self.y();
-  uint32_t _z = self.z();
-  uint32_t _w = self.w();
+  int32_t _x = self.x();
+  int32_t _y = self.y();
+  int32_t _z = self.z();
+  int32_t _w = self.w();
   _w = flagW.raw() == Bool::True().raw() ? 0xFFFFFFFF : 0x0;
-  return Uint32x4::New(_x, _y, _z, _w);
+  return Int32x4::New(_x, _y, _z, _w);
 }
 
 
-// Used to convert between uint32_t and float32 without breaking strict
+// Used to convert between int32_t and float32 without breaking strict
 // aliasing rules.
-union float32_uint32 {
+union float32_int32 {
   float f;
-  uint32_t u;
-  float32_uint32(float v) {
+  int32_t u;
+  float32_int32(float v) {
     f = v;
   }
-  float32_uint32(uint32_t v) {
+  float32_int32(int32_t v) {
     u = v;
   }
 };
 
 
-DEFINE_NATIVE_ENTRY(Uint32x4_select, 3) {
-  GET_NON_NULL_NATIVE_ARGUMENT(Uint32x4, self, arguments->NativeArgAt(0));
+DEFINE_NATIVE_ENTRY(Int32x4_select, 3) {
+  GET_NON_NULL_NATIVE_ARGUMENT(Int32x4, self, arguments->NativeArgAt(0));
   GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, tv, arguments->NativeArgAt(1));
   GET_NON_NULL_NATIVE_ARGUMENT(Float32x4, fv, arguments->NativeArgAt(2));
-  uint32_t _maskX = self.x();
-  uint32_t _maskY = self.y();
-  uint32_t _maskZ = self.z();
-  uint32_t _maskW = self.w();
+  int32_t _maskX = self.x();
+  int32_t _maskY = self.y();
+  int32_t _maskZ = self.z();
+  int32_t _maskW = self.w();
   // Extract floats and interpret them as masks.
-  float32_uint32 tvx(tv.x());
-  float32_uint32 tvy(tv.y());
-  float32_uint32 tvz(tv.z());
-  float32_uint32 tvw(tv.w());
-  float32_uint32 fvx(fv.x());
-  float32_uint32 fvy(fv.y());
-  float32_uint32 fvz(fv.z());
-  float32_uint32 fvw(fv.w());
+  float32_int32 tvx(tv.x());
+  float32_int32 tvy(tv.y());
+  float32_int32 tvz(tv.z());
+  float32_int32 tvw(tv.w());
+  float32_int32 fvx(fv.x());
+  float32_int32 fvy(fv.y());
+  float32_int32 fvz(fv.z());
+  float32_int32 fvw(fv.w());
   // Perform select.
-  float32_uint32 tempX((_maskX & tvx.u) | (~_maskX & fvx.u));
-  float32_uint32 tempY((_maskY & tvy.u) | (~_maskY & fvy.u));
-  float32_uint32 tempZ((_maskZ & tvz.u) | (~_maskZ & fvz.u));
-  float32_uint32 tempW((_maskW & tvw.u) | (~_maskW & fvw.u));
+  float32_int32 tempX((_maskX & tvx.u) | (~_maskX & fvx.u));
+  float32_int32 tempY((_maskY & tvy.u) | (~_maskY & fvy.u));
+  float32_int32 tempZ((_maskZ & tvz.u) | (~_maskZ & fvz.u));
+  float32_int32 tempW((_maskW & tvw.u) | (~_maskW & fvw.u));
   return Float32x4::New(tempX.f, tempY.f, tempZ.f, tempW.f);
 }
 
diff --git a/runtime/lib/string_patch.dart b/runtime/lib/string_patch.dart
index 5339da4..9d5111b 100644
--- a/runtime/lib/string_patch.dart
+++ b/runtime/lib/string_patch.dart
@@ -468,8 +468,8 @@
 
   List<String> split(Pattern pattern) {
     if ((pattern is String) && pattern.isEmpty) {
-      List<String> result = new List<String>(length);
-      for (int i = 0; i < length; i++) {
+      List<String> result = new List<String>(this.length);
+      for (int i = 0; i < this.length; i++) {
         result[i] = this[i];
       }
       return result;
diff --git a/runtime/lib/typed_data.cc b/runtime/lib/typed_data.cc
index b671aef..703a7f9 100644
--- a/runtime/lib/typed_data.cc
+++ b/runtime/lib/typed_data.cc
@@ -296,7 +296,7 @@
 TYPED_DATA_NATIVES(GetFloat32, SetFloat32, Double, value, 4)
 TYPED_DATA_NATIVES(GetFloat64, SetFloat64, Double, value, 8)
 TYPED_DATA_NATIVES(GetFloat32x4, SetFloat32x4, Float32x4, value, 16)
-TYPED_DATA_NATIVES(GetUint32x4, SetUint32x4, Uint32x4, value, 16)
+TYPED_DATA_NATIVES(GetInt32x4, SetInt32x4, Int32x4, value, 16)
 
 
 DEFINE_NATIVE_ENTRY(ByteData_ToEndianInt16, 2) {
diff --git a/runtime/lib/typed_data.dart b/runtime/lib/typed_data.dart
index 27a41f5..d97e4fe 100644
--- a/runtime/lib/typed_data.dart
+++ b/runtime/lib/typed_data.dart
@@ -244,22 +244,22 @@
 }
 
 
-patch class Uint32x4List {
-  /* patch */ factory Uint32x4List(int length) {
-    return new _Uint32x4Array(length);
+patch class Int32x4List {
+  /* patch */ factory Int32x4List(int length) {
+    return new _Int32x4Array(length);
   }
 
-  /* patch */ factory Uint32x4List.fromList(List<Uint32x4> elements) {
-    var result = new _Uint32x4Array(elements.length);
+  /* patch */ factory Int32x4List.fromList(List<Int32x4> elements) {
+    var result = new _Int32x4Array(elements.length);
     for (int i = 0; i < elements.length; i++) {
       result[i] = elements[i];
     }
     return result;
   }
 
-  /* patch */ factory Uint32x4List.view(ByteBuffer buffer,
+  /* patch */ factory Int32x4List.view(ByteBuffer buffer,
                                         [int offsetInBytes = 0, int length]) {
-    return new _Uint32x4ArrayView(buffer, offsetInBytes, length);
+    return new _Int32x4ArrayView(buffer, offsetInBytes, length);
   }
 }
 
@@ -274,21 +274,21 @@
   /* patch */ factory Float32x4.zero() {
     return new _Float32x4.zero();
   }
-  /* patch */ factory Float32x4.fromUint32x4Bits(Uint32x4 x) {
-    return new _Float32x4.fromUint32x4Bits(x);
+  /* patch */ factory Float32x4.fromInt32x4Bits(Int32x4 x) {
+    return new _Float32x4.fromInt32x4Bits(x);
   }
 }
 
 
-patch class Uint32x4 {
-  /* patch */ factory Uint32x4(int x, int y, int z, int w) {
-    return new _Uint32x4(x, y, z, w);
+patch class Int32x4 {
+  /* patch */ factory Int32x4(int x, int y, int z, int w) {
+    return new _Int32x4(x, y, z, w);
   }
-  /* patch */ factory Uint32x4.bool(bool x, bool y, bool z, bool w) {
-    return new _Uint32x4.bool(x, y, z, w);
+  /* patch */ factory Int32x4.bool(bool x, bool y, bool z, bool w) {
+    return new _Int32x4.bool(x, y, z, w);
   }
-  /* patch */ factory Uint32x4.fromFloat32x4Bits(Float32x4 x) {
-    return new _Uint32x4.fromFloat32x4Bits(x);
+  /* patch */ factory Int32x4.fromFloat32x4Bits(Float32x4 x) {
+    return new _Int32x4.fromFloat32x4Bits(x);
   }
 }
 
@@ -511,7 +511,7 @@
   }
 
   List sublist(int start, [int end]) {
-    if (end == null) end = length;
+    if (end == null) end = this.length;
     int length = end - start;
     _rangeCheck(this.length, start, length);
     List result = _createList(length);
@@ -611,9 +611,9 @@
   void _setFloat32x4(int offsetInBytes, Float32x4 value)
       native "TypedData_SetFloat32x4";
 
-  Uint32x4 _getUint32x4(int offsetInBytes) native "TypedData_GetUint32x4";
-  void _setUint32x4(int offsetInBytes, Uint32x4 value)
-      native "TypedData_SetUint32x4";
+  Int32x4 _getInt32x4(int offsetInBytes) native "TypedData_GetInt32x4";
+  void _setInt32x4(int offsetInBytes, Int32x4 value)
+      native "TypedData_SetInt32x4";
 }
 
 
@@ -1342,64 +1342,64 @@
 }
 
 
-class _Uint32x4Array extends _TypedList implements Uint32x4List {
+class _Int32x4Array extends _TypedList implements Int32x4List {
   // Factory constructors.
 
-  factory _Uint32x4Array(int length) {
+  factory _Int32x4Array(int length) {
     return _new(length);
   }
 
-  factory _Uint32x4Array.view(ByteBuffer buffer,
+  factory _Int32x4Array.view(ByteBuffer buffer,
                               [int offsetInBytes = 0, int length]) {
     if (length == null) {
       length = (buffer.lengthInBytes - offsetInBytes) ~/
-               Uint32x4List.BYTES_PER_ELEMENT;
+               Int32x4List.BYTES_PER_ELEMENT;
     }
-    return new _Uint32x4ArrayView(buffer, offsetInBytes, length);
+    return new _Int32x4ArrayView(buffer, offsetInBytes, length);
   }
 
 
-  Uint32x4 operator[](int index) {
+  Int32x4 operator[](int index) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    return _getIndexedUint32x4(index);
+    return _getIndexedInt32x4(index);
   }
 
-  void operator[]=(int index, Uint32x4 value) {
+  void operator[]=(int index, Int32x4 value) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    _setIndexedUint32x4(index, value);
+    _setIndexedInt32x4(index, value);
   }
 
-  Iterator<Uint32x4> get iterator {
-    return new _TypedListIterator<Uint32x4>(this);
+  Iterator<Int32x4> get iterator {
+    return new _TypedListIterator<Int32x4>(this);
   }
 
 
   // Method(s) implementing the TypedData interface.
 
   int get elementSizeInBytes {
-    return Uint32x4List.BYTES_PER_ELEMENT;
+    return Int32x4List.BYTES_PER_ELEMENT;
   }
 
 
   // Internal utility methods.
 
-  _Uint32x4Array _createList(int length) {
+  _Int32x4Array _createList(int length) {
     return _new(length);
   }
 
-  Uint32x4 _getIndexedUint32x4(int index) {
-    return _getUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT);
+  Int32x4 _getIndexedInt32x4(int index) {
+    return _getInt32x4(index * Int32x4List.BYTES_PER_ELEMENT);
   }
 
-  void _setIndexedUint32x4(int index, Uint32x4 value) {
-    _setUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT, value);
+  void _setIndexedInt32x4(int index, Int32x4 value) {
+    _setInt32x4(index * Int32x4List.BYTES_PER_ELEMENT, value);
   }
 
-  static _Uint32x4Array _new(int length) native "TypedData_Uint32x4Array_new";
+  static _Int32x4Array _new(int length) native "TypedData_Int32x4Array_new";
 }
 
 
@@ -2038,58 +2038,58 @@
 }
 
 
-class _ExternalUint32x4Array extends _TypedList implements Uint32x4List {
+class _ExternalInt32x4Array extends _TypedList implements Int32x4List {
   // Factory constructors.
 
-  factory _ExternalUint32x4Array(int length) {
+  factory _ExternalInt32x4Array(int length) {
     return _new(length);
   }
 
 
   // Method(s) implementing the List interface.
 
-  Uint32x4 operator[](int index) {
+  Int32x4 operator[](int index) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    return _getIndexedUint32x4(index);
+    return _getIndexedInt32x4(index);
   }
 
-  void operator[]=(int index, Uint32x4 value) {
+  void operator[]=(int index, Int32x4 value) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    _setIndexedUint32x4(index, value);
+    _setIndexedInt32x4(index, value);
   }
 
-  Iterator<Uint32x4> get iterator {
-    return new _TypedListIterator<Uint32x4>(this);
+  Iterator<Int32x4> get iterator {
+    return new _TypedListIterator<Int32x4>(this);
   }
 
 
   // Method(s) implementing the TypedData interface.
 
   int get elementSizeInBytes {
-    return Uint32x4List.BYTES_PER_ELEMENT;
+    return Int32x4List.BYTES_PER_ELEMENT;
   }
 
 
   // Internal utility methods.
 
-  Uint32x4List _createList(int length) {
-    return new Uint32x4List(length);
+  Int32x4List _createList(int length) {
+    return new Int32x4List(length);
   }
 
-  Uint32x4 _getIndexedUint32x4(int index) {
-    return _getUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT);
+  Int32x4 _getIndexedInt32x4(int index) {
+    return _getInt32x4(index * Int32x4List.BYTES_PER_ELEMENT);
   }
 
-  void _setIndexedUint32x4(int index, Uint32x4 value) {
-    _setUint32x4(index * Uint32x4List.BYTES_PER_ELEMENT, value);
+  void _setIndexedInt32x4(int index, Int32x4 value) {
+    _setInt32x4(index * Int32x4List.BYTES_PER_ELEMENT, value);
   }
 
-  static _ExternalUint32x4Array _new(int length) native
-      "ExternalTypedData_Uint32x4Array_new";
+  static _ExternalInt32x4Array _new(int length) native
+      "ExternalTypedData_Int32x4Array_new";
 }
 
 
@@ -2098,8 +2098,8 @@
       native "Float32x4_fromDoubles";
   factory _Float32x4.splat(double v) native "Float32x4_splat";
   factory _Float32x4.zero() native "Float32x4_zero";
-  factory _Float32x4.fromUint32x4Bits(Uint32x4 x)
-      native "Float32x4_fromUint32x4Bits";
+  factory _Float32x4.fromInt32x4Bits(Int32x4 x)
+      native "Float32x4_fromInt32x4Bits";
   Float32x4 operator +(Float32x4 other) {
     return _add(other);
   }
@@ -2120,31 +2120,31 @@
     return _div(other);
   }
   Float32x4 _div(Float32x4 other) native "Float32x4_div";
-  Uint32x4 lessThan(Float32x4 other) {
+  Int32x4 lessThan(Float32x4 other) {
     return _cmplt(other);
   }
-  Uint32x4 _cmplt(Float32x4 other) native "Float32x4_cmplt";
-  Uint32x4 lessThanOrEqual(Float32x4 other) {
+  Int32x4 _cmplt(Float32x4 other) native "Float32x4_cmplt";
+  Int32x4 lessThanOrEqual(Float32x4 other) {
     return _cmplte(other);
   }
-  Uint32x4 _cmplte(Float32x4 other) native "Float32x4_cmplte";
-  Uint32x4 greaterThan(Float32x4 other) {
+  Int32x4 _cmplte(Float32x4 other) native "Float32x4_cmplte";
+  Int32x4 greaterThan(Float32x4 other) {
     return _cmpgt(other);
   }
-  Uint32x4 _cmpgt(Float32x4 other) native "Float32x4_cmpgt";
-  Uint32x4 greaterThanOrEqual(Float32x4 other) {
+  Int32x4 _cmpgt(Float32x4 other) native "Float32x4_cmpgt";
+  Int32x4 greaterThanOrEqual(Float32x4 other) {
     return _cmpgte(other);
   }
-  Uint32x4 _cmpgte(Float32x4 other) native "Float32x4_cmpgte";
-  Uint32x4 equal(Float32x4 other) {
+  Int32x4 _cmpgte(Float32x4 other) native "Float32x4_cmpgte";
+  Int32x4 equal(Float32x4 other) {
     return _cmpequal(other);
   }
-  Uint32x4 _cmpequal(Float32x4 other)
+  Int32x4 _cmpequal(Float32x4 other)
       native "Float32x4_cmpequal";
-  Uint32x4 notEqual(Float32x4 other) {
+  Int32x4 notEqual(Float32x4 other) {
     return _cmpnequal(other);
   }
-  Uint32x4 _cmpnequal(Float32x4 other)
+  Int32x4 _cmpnequal(Float32x4 other)
       native "Float32x4_cmpnequal";
   Float32x4 scale(double s) {
     return _scale(s);
@@ -2197,59 +2197,59 @@
 }
 
 
-class _Uint32x4 implements Uint32x4 {
-  factory _Uint32x4(int x, int y, int z, int w)
-      native "Uint32x4_fromInts";
-  factory _Uint32x4.bool(bool x, bool y, bool z, bool w)
-      native "Uint32x4_fromBools";
-  factory _Uint32x4.fromFloat32x4Bits(Float32x4 x)
-      native "Uint32x4_fromFloat32x4Bits";
-  Uint32x4 operator |(Uint32x4 other) {
+class _Int32x4 implements Int32x4 {
+  factory _Int32x4(int x, int y, int z, int w)
+      native "Int32x4_fromInts";
+  factory _Int32x4.bool(bool x, bool y, bool z, bool w)
+      native "Int32x4_fromBools";
+  factory _Int32x4.fromFloat32x4Bits(Float32x4 x)
+      native "Int32x4_fromFloat32x4Bits";
+  Int32x4 operator |(Int32x4 other) {
     return _or(other);
   }
-  Uint32x4 _or(Uint32x4 other) native "Uint32x4_or";
-  Uint32x4 operator &(Uint32x4 other) {
+  Int32x4 _or(Int32x4 other) native "Int32x4_or";
+  Int32x4 operator &(Int32x4 other) {
     return _and(other);
   }
-  Uint32x4 _and(Uint32x4 other) native "Uint32x4_and";
-  Uint32x4 operator ^(Uint32x4 other) {
+  Int32x4 _and(Int32x4 other) native "Int32x4_and";
+  Int32x4 operator ^(Int32x4 other) {
     return _xor(other);
   }
-  Uint32x4 _xor(Uint32x4 other) native "Uint32x4_xor";
-  Uint32x4 operator +(Uint32x4 other) {
+  Int32x4 _xor(Int32x4 other) native "Int32x4_xor";
+  Int32x4 operator +(Int32x4 other) {
     return _add(other);
   }
-  Uint32x4 _add(Uint32x4 other) native "Uint32x4_add";
-  Uint32x4 operator -(Uint32x4 other) {
+  Int32x4 _add(Int32x4 other) native "Int32x4_add";
+  Int32x4 operator -(Int32x4 other) {
     return _sub(other);
   }
-  Uint32x4 _sub(Uint32x4 other) native "Uint32x4_sub";
-  int get x native "Uint32x4_getX";
-  int get y native "Uint32x4_getY";
-  int get z native "Uint32x4_getZ";
-  int get w native "Uint32x4_getW";
-  int get signMask native "Uint32x4_getSignMask";
-  Uint32x4 shuffle(int mask) native "Uint32x4_shuffle";
-  Uint32x4 shuffleMix(Uint32x4 zw, int mask) native "Uint32x4_shuffleMix";
-  Uint32x4 withX(int x) native "Uint32x4_setX";
-  Uint32x4 withY(int y) native "Uint32x4_setY";
-  Uint32x4 withZ(int z) native "Uint32x4_setZ";
-  Uint32x4 withW(int w) native "Uint32x4_setW";
-  bool get flagX native "Uint32x4_getFlagX";
-  bool get flagY native "Uint32x4_getFlagY";
-  bool get flagZ native "Uint32x4_getFlagZ";
-  bool get flagW native "Uint32x4_getFlagW";
-  Uint32x4 withFlagX(bool x) native "Uint32x4_setFlagX";
-  Uint32x4 withFlagY(bool y) native "Uint32x4_setFlagY";
-  Uint32x4 withFlagZ(bool z) native "Uint32x4_setFlagZ";
-  Uint32x4 withFlagW(bool w) native "Uint32x4_setFlagW";
+  Int32x4 _sub(Int32x4 other) native "Int32x4_sub";
+  int get x native "Int32x4_getX";
+  int get y native "Int32x4_getY";
+  int get z native "Int32x4_getZ";
+  int get w native "Int32x4_getW";
+  int get signMask native "Int32x4_getSignMask";
+  Int32x4 shuffle(int mask) native "Int32x4_shuffle";
+  Int32x4 shuffleMix(Int32x4 zw, int mask) native "Int32x4_shuffleMix";
+  Int32x4 withX(int x) native "Int32x4_setX";
+  Int32x4 withY(int y) native "Int32x4_setY";
+  Int32x4 withZ(int z) native "Int32x4_setZ";
+  Int32x4 withW(int w) native "Int32x4_setW";
+  bool get flagX native "Int32x4_getFlagX";
+  bool get flagY native "Int32x4_getFlagY";
+  bool get flagZ native "Int32x4_getFlagZ";
+  bool get flagW native "Int32x4_getFlagW";
+  Int32x4 withFlagX(bool x) native "Int32x4_setFlagX";
+  Int32x4 withFlagY(bool y) native "Int32x4_setFlagY";
+  Int32x4 withFlagZ(bool z) native "Int32x4_setFlagZ";
+  Int32x4 withFlagW(bool w) native "Int32x4_setFlagW";
   Float32x4 select(Float32x4 trueValue,
                           Float32x4 falseValue) {
     return _select(trueValue, falseValue);
   }
   Float32x4 _select(Float32x4 trueValue,
                            Float32x4 falseValue)
-      native "Uint32x4_select";
+      native "Int32x4_select";
 }
 
 class _TypedListIterator<E> implements Iterator<E> {
@@ -2925,54 +2925,54 @@
 }
 
 
-class _Uint32x4ArrayView extends _TypedListView implements Uint32x4List {
+class _Int32x4ArrayView extends _TypedListView implements Int32x4List {
   // Constructor.
-  _Uint32x4ArrayView(ByteBuffer buffer, [int _offsetInBytes = 0, int _length])
+  _Int32x4ArrayView(ByteBuffer buffer, [int _offsetInBytes = 0, int _length])
     : super(buffer, _offsetInBytes,
             _defaultIfNull(_length,
                            ((buffer.lengthInBytes - _offsetInBytes) ~/
-                            Uint32x4List.BYTES_PER_ELEMENT))) {
+                            Int32x4List.BYTES_PER_ELEMENT))) {
     _rangeCheck(buffer.lengthInBytes,
                 offsetInBytes,
-                length * Uint32x4List.BYTES_PER_ELEMENT);
-    _offsetAlignmentCheck(_offsetInBytes, Uint32x4List.BYTES_PER_ELEMENT);
+                length * Int32x4List.BYTES_PER_ELEMENT);
+    _offsetAlignmentCheck(_offsetInBytes, Int32x4List.BYTES_PER_ELEMENT);
   }
 
 
   // Method(s) implementing List interface.
 
-  Uint32x4 operator[](int index) {
+  Int32x4 operator[](int index) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    return _typedData._getUint32x4(offsetInBytes +
-                                   (index * Uint32x4List.BYTES_PER_ELEMENT));
+    return _typedData._getInt32x4(offsetInBytes +
+                                   (index * Int32x4List.BYTES_PER_ELEMENT));
   }
 
-  void operator[]=(int index, Uint32x4 value) {
+  void operator[]=(int index, Int32x4 value) {
     if (index < 0 || index >= length) {
       _throwRangeError(index, length);
     }
-    _typedData._setUint32x4(offsetInBytes +
-                            (index * Uint32x4List.BYTES_PER_ELEMENT), value);
+    _typedData._setInt32x4(offsetInBytes +
+                            (index * Int32x4List.BYTES_PER_ELEMENT), value);
   }
 
-  Iterator<Uint32x4> get iterator {
-    return new _TypedListIterator<Uint32x4>(this);
+  Iterator<Int32x4> get iterator {
+    return new _TypedListIterator<Int32x4>(this);
   }
 
 
   // Method(s) implementing TypedData interface.
 
   int get elementSizeInBytes {
-    return Uint32x4List.BYTES_PER_ELEMENT;
+    return Int32x4List.BYTES_PER_ELEMENT;
   }
 
 
   // Internal utility methods.
 
-  Uint32x4List _createList(int length) {
-    return new Uint32x4List(length);
+  Int32x4List _createList(int length) {
+    return new Int32x4List(length);
   }
 }
 
diff --git a/runtime/platform/globals.h b/runtime/platform/globals.h
index f3dbb88..7ee14fb 100644
--- a/runtime/platform/globals.h
+++ b/runtime/platform/globals.h
@@ -81,7 +81,7 @@
     storage[3] = v[3];
     return *this;
   }
-  simd128_value_t& readFrom(const uint32_t* v) {
+  simd128_value_t& readFrom(const int32_t* v) {
     const float* vv = reinterpret_cast<const float*>(v);
     storage[0] = vv[0];
     storage[1] = vv[1];
@@ -99,7 +99,7 @@
     v[2] = storage[2];
     v[3] = storage[3];
   }
-  void writeTo(uint32_t* v) {
+  void writeTo(int32_t* v) {
     float* vv = reinterpret_cast<float*>(v);
     vv[0] = storage[0];
     vv[1] = storage[1];
diff --git a/runtime/vm/bootstrap_natives.h b/runtime/vm/bootstrap_natives.h
index 550efdd..95f39c4 100644
--- a/runtime/vm/bootstrap_natives.h
+++ b/runtime/vm/bootstrap_natives.h
@@ -144,7 +144,7 @@
   V(TypedData_Float32Array_new, 1)                                             \
   V(TypedData_Float64Array_new, 1)                                             \
   V(TypedData_Float32x4Array_new, 1)                                           \
-  V(TypedData_Uint32x4Array_new, 1)                                            \
+  V(TypedData_Int32x4Array_new, 1)                                            \
   V(ExternalTypedData_Int8Array_new, 1)                                        \
   V(ExternalTypedData_Uint8Array_new, 1)                                       \
   V(ExternalTypedData_Uint8ClampedArray_new, 1)                                \
@@ -157,7 +157,7 @@
   V(ExternalTypedData_Float32Array_new, 1)                                     \
   V(ExternalTypedData_Float64Array_new, 1)                                     \
   V(ExternalTypedData_Float32x4Array_new, 1)                                   \
-  V(ExternalTypedData_Uint32x4Array_new, 1)                                    \
+  V(ExternalTypedData_Int32x4Array_new, 1)                                    \
   V(TypedData_length, 1)                                                       \
   V(TypedData_setRange, 5)                                                     \
   V(TypedData_GetInt8, 2)                                                      \
@@ -182,8 +182,8 @@
   V(TypedData_SetFloat64, 3)                                                   \
   V(TypedData_GetFloat32x4, 2)                                                 \
   V(TypedData_SetFloat32x4, 3)                                                 \
-  V(TypedData_GetUint32x4, 2)                                                  \
-  V(TypedData_SetUint32x4, 3)                                                  \
+  V(TypedData_GetInt32x4, 2)                                                  \
+  V(TypedData_SetInt32x4, 3)                                                  \
   V(ByteData_ToEndianInt16, 2)                                                 \
   V(ByteData_ToEndianUint16, 2)                                                \
   V(ByteData_ToEndianInt32, 2)                                                 \
@@ -194,7 +194,7 @@
   V(ByteData_ToEndianFloat64, 2)                                               \
   V(Float32x4_fromDoubles, 5)                                                  \
   V(Float32x4_splat, 2)                                                        \
-  V(Float32x4_fromUint32x4Bits, 2)                                             \
+  V(Float32x4_fromInt32x4Bits, 2)                                             \
   V(Float32x4_zero, 1)                                                         \
   V(Float32x4_add, 2)                                                          \
   V(Float32x4_negate, 1)                                                       \
@@ -226,34 +226,34 @@
   V(Float32x4_sqrt, 1)                                                         \
   V(Float32x4_reciprocal, 1)                                                   \
   V(Float32x4_reciprocalSqrt, 1)                                               \
-  V(Uint32x4_fromInts, 5)                                                      \
-  V(Uint32x4_fromBools, 5)                                                     \
-  V(Uint32x4_fromFloat32x4Bits, 2)                                             \
-  V(Uint32x4_or, 2)                                                            \
-  V(Uint32x4_and, 2)                                                           \
-  V(Uint32x4_xor, 2)                                                           \
-  V(Uint32x4_add, 2)                                                           \
-  V(Uint32x4_sub, 2)                                                           \
-  V(Uint32x4_getX, 1)                                                          \
-  V(Uint32x4_getY, 1)                                                          \
-  V(Uint32x4_getZ, 1)                                                          \
-  V(Uint32x4_getW, 1)                                                          \
-  V(Uint32x4_setX, 2)                                                          \
-  V(Uint32x4_setY, 2)                                                          \
-  V(Uint32x4_setZ, 2)                                                          \
-  V(Uint32x4_setW, 2)                                                          \
-  V(Uint32x4_getSignMask, 1)                                                   \
-  V(Uint32x4_shuffle, 2)                                                       \
-  V(Uint32x4_shuffleMix, 3)                                                    \
-  V(Uint32x4_getFlagX, 1)                                                      \
-  V(Uint32x4_getFlagY, 1)                                                      \
-  V(Uint32x4_getFlagZ, 1)                                                      \
-  V(Uint32x4_getFlagW, 1)                                                      \
-  V(Uint32x4_setFlagX, 2)                                                      \
-  V(Uint32x4_setFlagY, 2)                                                      \
-  V(Uint32x4_setFlagZ, 2)                                                      \
-  V(Uint32x4_setFlagW, 2)                                                      \
-  V(Uint32x4_select, 3)                                                        \
+  V(Int32x4_fromInts, 5)                                                      \
+  V(Int32x4_fromBools, 5)                                                     \
+  V(Int32x4_fromFloat32x4Bits, 2)                                             \
+  V(Int32x4_or, 2)                                                            \
+  V(Int32x4_and, 2)                                                           \
+  V(Int32x4_xor, 2)                                                           \
+  V(Int32x4_add, 2)                                                           \
+  V(Int32x4_sub, 2)                                                           \
+  V(Int32x4_getX, 1)                                                          \
+  V(Int32x4_getY, 1)                                                          \
+  V(Int32x4_getZ, 1)                                                          \
+  V(Int32x4_getW, 1)                                                          \
+  V(Int32x4_setX, 2)                                                          \
+  V(Int32x4_setY, 2)                                                          \
+  V(Int32x4_setZ, 2)                                                          \
+  V(Int32x4_setW, 2)                                                          \
+  V(Int32x4_getSignMask, 1)                                                   \
+  V(Int32x4_shuffle, 2)                                                       \
+  V(Int32x4_shuffleMix, 3)                                                    \
+  V(Int32x4_getFlagX, 1)                                                      \
+  V(Int32x4_getFlagY, 1)                                                      \
+  V(Int32x4_getFlagZ, 1)                                                      \
+  V(Int32x4_getFlagW, 1)                                                      \
+  V(Int32x4_setFlagX, 2)                                                      \
+  V(Int32x4_setFlagY, 2)                                                      \
+  V(Int32x4_setFlagZ, 2)                                                      \
+  V(Int32x4_setFlagW, 2)                                                      \
+  V(Int32x4_select, 3)                                                        \
   V(Isolate_mainPort, 0)                                                       \
   V(Isolate_spawnFunction, 1)                                                  \
   V(Isolate_spawnUri, 1)                                                       \
diff --git a/runtime/vm/dart_api_message.cc b/runtime/vm/dart_api_message.cc
index 0208c40..f8d7794 100644
--- a/runtime/vm/dart_api_message.cc
+++ b/runtime/vm/dart_api_message.cc
@@ -291,11 +291,12 @@
       if (type != Dart_TypedData_kInvalid) {
         object->type =
             static_cast<Dart_CObject_Type>(Dart_CObject_Internal::kView);
-        ReadObjectImpl();  // Skip type arguments.
+        Dart_CObject_Internal* cls =
+            reinterpret_cast<Dart_CObject_Internal*>(ReadObjectImpl());
+        ASSERT(cls == object->cls);
         object->internal.as_view.buffer = ReadObjectImpl();
         object->internal.as_view.offset_in_bytes = ReadSmiValue();
         object->internal.as_view.length = ReadSmiValue();
-        ReadObjectImpl();  // Skip last field.
 
         // The buffer is fully read now as typed data objects are
         // serialized in-line.
@@ -317,7 +318,9 @@
       }
     } else if (strcmp("dart:isolate", library_uri) == 0 &&
                strncmp("_SendPortImpl@", class_name, 14) == 0) {
-      ReadObjectImpl();  // Skip type arguments.
+      Dart_CObject_Internal* cls =
+          reinterpret_cast<Dart_CObject_Internal*>(ReadObjectImpl());
+      ASSERT(cls == object->cls);
       // Read the port id.
       Dart_CObject* port = ReadObjectImpl();
       if (port->type == Dart_CObject_kInt32) {
@@ -327,7 +330,6 @@
         object->type = Dart_CObject_kSendPort;
         object->value.as_send_port = port->value.as_int64;
       }
-      ReadObjectImpl();  // Skip last field.
     } else {
       // TODO(sgjesse): Handle other instances. Currently this will
       // skew the reading as the fields of the instance is not read.
diff --git a/runtime/vm/debugger.cc b/runtime/vm/debugger.cc
index 5e023b4..884706e 100644
--- a/runtime/vm/debugger.cc
+++ b/runtime/vm/debugger.cc
@@ -1484,6 +1484,11 @@
 
 void Debugger::OneTimeBreakAtEntry(const Function& target_function) {
   InstrumentForStepping(target_function);
+  if (target_function.HasImplicitClosureFunction()) {
+    const Function& closure_func =
+        Function::Handle(target_function.ImplicitClosureFunction());
+    InstrumentForStepping(closure_func);
+  }
 }
 
 
diff --git a/runtime/vm/deferred_objects.cc b/runtime/vm/deferred_objects.cc
index 76f5be7..5a6412d 100644
--- a/runtime/vm/deferred_objects.cc
+++ b/runtime/vm/deferred_objects.cc
@@ -54,17 +54,17 @@
 }
 
 
-void DeferredUint32x4::Materialize() {
-  RawUint32x4** uint32x4_slot = reinterpret_cast<RawUint32x4**>(slot());
-  RawUint32x4* raw_uint32x4 = Uint32x4::New(value());
-  *uint32x4_slot = raw_uint32x4;
+void DeferredInt32x4::Materialize() {
+  RawInt32x4** int32x4_slot = reinterpret_cast<RawInt32x4**>(slot());
+  RawInt32x4* raw_int32x4 = Int32x4::New(value());
+  *int32x4_slot = raw_int32x4;
 
   if (FLAG_trace_deoptimization_verbose) {
-    uint32_t x = raw_uint32x4->x();
-    uint32_t y = raw_uint32x4->y();
-    uint32_t z = raw_uint32x4->z();
-    uint32_t w = raw_uint32x4->w();
-    OS::PrintErr("materializing Uint32x4 at %" Px ": %x,%x,%x,%x\n",
+    uint32_t x = raw_int32x4->x();
+    uint32_t y = raw_int32x4->y();
+    uint32_t z = raw_int32x4->z();
+    uint32_t w = raw_int32x4->w();
+    OS::PrintErr("materializing Int32x4 at %" Px ": %x,%x,%x,%x\n",
                  reinterpret_cast<uword>(slot()), x, y, z, w);
   }
 }
diff --git a/runtime/vm/deferred_objects.h b/runtime/vm/deferred_objects.h
index 7e2c3c9..ae2e29f 100644
--- a/runtime/vm/deferred_objects.h
+++ b/runtime/vm/deferred_objects.h
@@ -86,9 +86,9 @@
 };
 
 
-class DeferredUint32x4 : public DeferredSlot {
+class DeferredInt32x4 : public DeferredSlot {
  public:
-  DeferredUint32x4(simd128_value_t value, RawInstance** slot,
+  DeferredInt32x4(simd128_value_t value, RawInstance** slot,
                    DeferredSlot* next)
       : DeferredSlot(slot, next), value_(value) { }
 
@@ -99,7 +99,7 @@
  private:
   const simd128_value_t value_;
 
-  DISALLOW_COPY_AND_ASSIGN(DeferredUint32x4);
+  DISALLOW_COPY_AND_ASSIGN(DeferredInt32x4);
 };
 
 
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc
index c5266d1..ea2e147 100644
--- a/runtime/vm/deopt_instructions.cc
+++ b/runtime/vm/deopt_instructions.cc
@@ -190,7 +190,7 @@
     case DeoptInstr::kDoubleStackSlot:
     case DeoptInstr::kInt64StackSlot:
     case DeoptInstr::kFloat32x4StackSlot:
-    case DeoptInstr::kUint32x4StackSlot:
+    case DeoptInstr::kInt32x4StackSlot:
     case DeoptInstr::kPp:
     case DeoptInstr::kCallerPp:
     case DeoptInstr::kMaterializedObjectRef:
@@ -200,7 +200,7 @@
     case DeoptInstr::kFpuRegister:
     case DeoptInstr::kInt64FpuRegister:
     case DeoptInstr::kFloat32x4FpuRegister:
-    case DeoptInstr::kUint32x4FpuRegister:
+    case DeoptInstr::kInt32x4FpuRegister:
       // TODO(turnidge): Sometimes we encounter a deopt instruction
       // with a register source while deoptimizing frames during
       // debugging but we haven't saved our register set.  This
@@ -506,15 +506,15 @@
 };
 
 
-class DeoptUint32x4StackSlotInstr : public DeoptInstr {
+class DeoptInt32x4StackSlotInstr : public DeoptInstr {
  public:
-  explicit DeoptUint32x4StackSlotInstr(intptr_t source_index)
+  explicit DeoptInt32x4StackSlotInstr(intptr_t source_index)
       : stack_slot_index_(source_index) {
     ASSERT(stack_slot_index_ >= 0);
   }
 
   virtual intptr_t source_index() const { return stack_slot_index_; }
-  virtual DeoptInstr::Kind kind() const { return kUint32x4StackSlot; }
+  virtual DeoptInstr::Kind kind() const { return kInt32x4StackSlot; }
 
   virtual const char* ToCString() const {
     return Isolate::Current()->current_zone()->PrintToString(
@@ -527,14 +527,14 @@
     simd128_value_t* source_addr = reinterpret_cast<simd128_value_t*>(
         deopt_context->GetSourceFrameAddressAt(source_index));
     *reinterpret_cast<RawSmi**>(dest_addr) = Smi::New(0);
-    deopt_context->DeferUint32x4Materialization(
-        *source_addr, reinterpret_cast<RawUint32x4**>(dest_addr));
+    deopt_context->DeferInt32x4Materialization(
+        *source_addr, reinterpret_cast<RawInt32x4**>(dest_addr));
   }
 
  private:
   const intptr_t stack_slot_index_;  // First argument is 0, always >= 0.
 
-  DISALLOW_COPY_AND_ASSIGN(DeoptUint32x4StackSlotInstr);
+  DISALLOW_COPY_AND_ASSIGN(DeoptInt32x4StackSlotInstr);
 };
 
 
@@ -744,13 +744,13 @@
 
 
 // Deoptimization instruction moving an XMM register.
-class DeoptUint32x4FpuRegisterInstr: public DeoptInstr {
+class DeoptInt32x4FpuRegisterInstr: public DeoptInstr {
  public:
-  explicit DeoptUint32x4FpuRegisterInstr(intptr_t reg_as_int)
+  explicit DeoptInt32x4FpuRegisterInstr(intptr_t reg_as_int)
       : reg_(static_cast<FpuRegister>(reg_as_int)) {}
 
   virtual intptr_t source_index() const { return static_cast<intptr_t>(reg_); }
-  virtual DeoptInstr::Kind kind() const { return kUint32x4FpuRegister; }
+  virtual DeoptInstr::Kind kind() const { return kInt32x4FpuRegister; }
 
   virtual const char* ToCString() const {
     return Isolate::Current()->current_zone()->PrintToString(
@@ -760,14 +760,14 @@
   void Execute(DeoptContext* deopt_context, intptr_t* dest_addr) {
     simd128_value_t value = deopt_context->FpuRegisterValueAsSimd128(reg_);
     *reinterpret_cast<RawSmi**>(dest_addr) = Smi::New(0);
-    deopt_context->DeferUint32x4Materialization(
-        value, reinterpret_cast<RawUint32x4**>(dest_addr));
+    deopt_context->DeferInt32x4Materialization(
+        value, reinterpret_cast<RawInt32x4**>(dest_addr));
   }
 
  private:
   const FpuRegister reg_;
 
-  DISALLOW_COPY_AND_ASSIGN(DeoptUint32x4FpuRegisterInstr);
+  DISALLOW_COPY_AND_ASSIGN(DeoptInt32x4FpuRegisterInstr);
 };
 
 
@@ -1069,8 +1069,8 @@
     case kInt64StackSlot: return new DeoptInt64StackSlotInstr(source_index);
     case kFloat32x4StackSlot:
         return new DeoptFloat32x4StackSlotInstr(source_index);
-    case kUint32x4StackSlot:
-        return new DeoptUint32x4StackSlotInstr(source_index);
+    case kInt32x4StackSlot:
+        return new DeoptInt32x4StackSlotInstr(source_index);
     case kRetAddress: return new DeoptRetAddressInstr(source_index);
     case kConstant: return new DeoptConstantInstr(source_index);
     case kRegister: return new DeoptRegisterInstr(source_index);
@@ -1078,8 +1078,8 @@
     case kInt64FpuRegister: return new DeoptInt64FpuRegisterInstr(source_index);
     case kFloat32x4FpuRegister:
         return new DeoptFloat32x4FpuRegisterInstr(source_index);
-    case kUint32x4FpuRegister:
-        return new DeoptUint32x4FpuRegisterInstr(source_index);
+    case kInt32x4FpuRegister:
+        return new DeoptInt32x4FpuRegisterInstr(source_index);
     case kPcMarker: return new DeoptPcMarkerInstr(source_index);
     case kPp: return new DeoptPpInstr(source_index);
     case kCallerFp: return new DeoptCallerFpInstr();
@@ -1214,8 +1214,8 @@
     } else if (value->definition()->representation() == kUnboxedFloat32x4) {
       deopt_instr = new DeoptFloat32x4FpuRegisterInstr(source_loc.fpu_reg());
     } else {
-      ASSERT(value->definition()->representation() == kUnboxedUint32x4);
-      deopt_instr = new DeoptUint32x4FpuRegisterInstr(source_loc.fpu_reg());
+      ASSERT(value->definition()->representation() == kUnboxedInt32x4);
+      deopt_instr = new DeoptInt32x4FpuRegisterInstr(source_loc.fpu_reg());
     }
   } else if (source_loc.IsStackSlot()) {
     ASSERT(value->definition()->representation() == kTagged);
@@ -1234,8 +1234,8 @@
     if (value->definition()->representation() == kUnboxedFloat32x4) {
       deopt_instr = new DeoptFloat32x4StackSlotInstr(source_index);
     } else {
-      ASSERT(value->definition()->representation() == kUnboxedUint32x4);
-      deopt_instr = new DeoptUint32x4StackSlotInstr(source_index);
+      ASSERT(value->definition()->representation() == kUnboxedInt32x4);
+      deopt_instr = new DeoptInt32x4StackSlotInstr(source_index);
     }
   } else if (source_loc.IsInvalid() &&
              value->definition()->IsMaterializeObject()) {
diff --git a/runtime/vm/deopt_instructions.h b/runtime/vm/deopt_instructions.h
index 36b1b7f..f55c120 100644
--- a/runtime/vm/deopt_instructions.h
+++ b/runtime/vm/deopt_instructions.h
@@ -134,9 +134,9 @@
         deferred_boxes_);
   }
 
-  void DeferUint32x4Materialization(simd128_value_t value,
-                                    RawUint32x4** slot) {
-    deferred_boxes_ = new DeferredUint32x4(
+  void DeferInt32x4Materialization(simd128_value_t value,
+                                    RawInt32x4** slot) {
+    deferred_boxes_ = new DeferredInt32x4(
         value,
         reinterpret_cast<RawInstance**>(slot),
         deferred_boxes_);
@@ -210,12 +210,12 @@
     kFpuRegister,
     kInt64FpuRegister,
     kFloat32x4FpuRegister,
-    kUint32x4FpuRegister,
+    kInt32x4FpuRegister,
     kStackSlot,
     kDoubleStackSlot,
     kInt64StackSlot,
     kFloat32x4StackSlot,
-    kUint32x4StackSlot,
+    kInt32x4StackSlot,
     kPcMarker,
     kPp,
     kCallerFp,
diff --git a/runtime/vm/flow_graph_allocator.cc b/runtime/vm/flow_graph_allocator.cc
index ab2d296..f40c175 100644
--- a/runtime/vm/flow_graph_allocator.cc
+++ b/runtime/vm/flow_graph_allocator.cc
@@ -605,7 +605,7 @@
   if ((instr->representation() == kUnboxedDouble) ||
       (instr->representation() == kUnboxedMint) ||
       (instr->representation() == kUnboxedFloat32x4) ||
-      (instr->representation() == kUnboxedUint32x4)) {
+      (instr->representation() == kUnboxedInt32x4)) {
     return Location::kFpuRegister;
   } else {
     return Location::kRegister;
@@ -1601,7 +1601,7 @@
   // parallel move resolution.
   const bool need_quad = (register_kind_ == Location::kFpuRegister) &&
       ((range->representation() == kUnboxedFloat32x4) ||
-       (range->representation() == kUnboxedUint32x4));
+       (range->representation() == kUnboxedInt32x4));
 
   // Search for a free spill slot among allocated: the value in it should be
   // dead and its type should match (e.g. it should not be a part of the quad if
@@ -1650,7 +1650,7 @@
 
     Location location;
     if ((range->representation() == kUnboxedFloat32x4) ||
-        (range->representation() == kUnboxedUint32x4)) {
+        (range->representation() == kUnboxedInt32x4)) {
       ASSERT(need_quad);
       location = Location::QuadStackSlot(slot_idx);
     } else {
diff --git a/runtime/vm/flow_graph_builder.cc b/runtime/vm/flow_graph_builder.cc
index 296c27a..b231788 100644
--- a/runtime/vm/flow_graph_builder.cc
+++ b/runtime/vm/flow_graph_builder.cc
@@ -2241,7 +2241,7 @@
       case kTypedDataFloat32ArrayCid:
       case kTypedDataFloat64ArrayCid:
       case kTypedDataFloat32x4ArrayCid:
-      case kTypedDataUint32x4ArrayCid:
+      case kTypedDataInt32x4ArrayCid:
         return function_class.id();
       default:
         return kDynamicCid;  // Unknown.
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 199b4f3..a7affc9 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -84,8 +84,8 @@
           Isolate::Current()->object_store()->double_class())),
       float32x4_class_(Class::ZoneHandle(
           Isolate::Current()->object_store()->float32x4_class())),
-      uint32x4_class_(Class::ZoneHandle(
-          Isolate::Current()->object_store()->uint32x4_class())),
+      int32x4_class_(Class::ZoneHandle(
+          Isolate::Current()->object_store()->int32x4_class())),
       list_class_(Class::ZoneHandle(
           Library::Handle(Library::CoreLibrary()).
               LookupClass(Symbols::List()))),
@@ -505,7 +505,7 @@
           it.SetCurrentLocation(Location::DoubleStackSlot(index));
           break;
         case kUnboxedFloat32x4:
-        case kUnboxedUint32x4:
+        case kUnboxedInt32x4:
           it.SetCurrentLocation(Location::QuadStackSlot(index));
           break;
         default:
diff --git a/runtime/vm/flow_graph_compiler.h b/runtime/vm/flow_graph_compiler.h
index 18c9028..debf138 100644
--- a/runtime/vm/flow_graph_compiler.h
+++ b/runtime/vm/flow_graph_compiler.h
@@ -429,7 +429,7 @@
 
   const Class& double_class() const { return double_class_; }
   const Class& float32x4_class() const { return float32x4_class_; }
-  const Class& uint32x4_class() const { return uint32x4_class_; }
+  const Class& int32x4_class() const { return int32x4_class_; }
 
   void SaveLiveRegisters(LocationSummary* locs);
   void RestoreLiveRegisters(LocationSummary* locs);
@@ -598,7 +598,7 @@
 
   const Class& double_class_;
   const Class& float32x4_class_;
-  const Class& uint32x4_class_;
+  const Class& int32x4_class_;
   const Class& list_class_;
 
   ParallelMoveResolver parallel_move_resolver_;
diff --git a/runtime/vm/flow_graph_optimizer.cc b/runtime/vm/flow_graph_optimizer.cc
index cda4032..378d474 100644
--- a/runtime/vm/flow_graph_optimizer.cc
+++ b/runtime/vm/flow_graph_optimizer.cc
@@ -393,13 +393,13 @@
     converted = new UnboxFloat32x4Instr(use->CopyWithType(), deopt_id);
   } else if ((from == kUnboxedFloat32x4) && (to == kTagged)) {
     converted = new BoxFloat32x4Instr(use->CopyWithType());
-  } else if ((from == kTagged) && (to == kUnboxedUint32x4)) {
-    ASSERT((deopt_target != NULL) || (use->Type()->ToCid() == kUint32x4Cid));
+  } else if ((from == kTagged) && (to == kUnboxedInt32x4)) {
+    ASSERT((deopt_target != NULL) || (use->Type()->ToCid() == kInt32x4Cid));
     const intptr_t deopt_id = (deopt_target != NULL) ?
         deopt_target->DeoptimizationTarget() : Isolate::kNoDeoptId;
-    converted = new UnboxUint32x4Instr(use->CopyWithType(), deopt_id);
-  } else if ((from == kUnboxedUint32x4) && (to == kTagged)) {
-    converted = new BoxUint32x4Instr(use->CopyWithType());
+    converted = new UnboxInt32x4Instr(use->CopyWithType(), deopt_id);
+  } else if ((from == kUnboxedInt32x4) && (to == kTagged)) {
+    converted = new BoxInt32x4Instr(use->CopyWithType());
   } else {
     // We have failed to find a suitable conversion instruction.
     // Insert two "dummy" conversion instructions with the correct
@@ -412,8 +412,8 @@
     Definition* boxed = NULL;
     if (from == kUnboxedDouble) {
       boxed = new BoxDoubleInstr(use->CopyWithType());
-    } else if (from == kUnboxedUint32x4) {
-      boxed = new BoxUint32x4Instr(use->CopyWithType());
+    } else if (from == kUnboxedInt32x4) {
+      boxed = new BoxInt32x4Instr(use->CopyWithType());
     } else if (from == kUnboxedFloat32x4) {
       boxed = new BoxFloat32x4Instr(use->CopyWithType());
     } else if (from == kUnboxedMint) {
@@ -426,8 +426,8 @@
     Value* to_value = new Value(boxed);
     if (to == kUnboxedDouble) {
       converted = new UnboxDoubleInstr(to_value, deopt_id);
-    } else if (to == kUnboxedUint32x4) {
-      converted = new UnboxUint32x4Instr(to_value, deopt_id);
+    } else if (to == kUnboxedInt32x4) {
+      converted = new UnboxInt32x4Instr(to_value, deopt_id);
     } else if (to == kUnboxedFloat32x4) {
       converted = new UnboxFloat32x4Instr(to_value, deopt_id);
     } else if (to == kUnboxedMint) {
@@ -492,9 +492,9 @@
         unboxed = kUnboxedFloat32x4;
       }
       break;
-    case kUint32x4Cid:
+    case kInt32x4Cid:
       if (ShouldInlineSimd()) {
-        unboxed = kUnboxedUint32x4;
+        unboxed = kUnboxedInt32x4;
       }
       break;
   }
@@ -510,7 +510,7 @@
 
 void FlowGraphOptimizer::SelectRepresentations() {
   // Convervatively unbox all phis that were proven to be of Double,
-  // Float32x4, or Uint32x4 type.
+  // Float32x4, or Int32x4 type.
   for (intptr_t i = 0; i < block_order_.length(); ++i) {
     JoinEntryInstr* join_entry = block_order_[i]->AsJoinEntry();
     if (join_entry != NULL) {
@@ -812,9 +812,9 @@
     case MethodRecognizer::kFloat32x4ArraySetIndexed:
       return kTypedDataFloat32x4ArrayCid;
 
-    case MethodRecognizer::kUint32x4ArrayGetIndexed:
-    case MethodRecognizer::kUint32x4ArraySetIndexed:
-      return kTypedDataUint32x4ArrayCid;
+    case MethodRecognizer::kInt32x4ArrayGetIndexed:
+    case MethodRecognizer::kInt32x4ArraySetIndexed:
+      return kTypedDataInt32x4ArrayCid;
 
     default:
       break;
@@ -976,7 +976,7 @@
                                                          : kEmitStoreBarrier;
   if (!value_check.IsNull()) {
     // No store barrier needed because checked value is a smi, an unboxed mint,
-    // an unboxed double, an unboxed Float32x4, or unboxed Uint32x4.
+    // an unboxed double, an unboxed Float32x4, or unboxed Int32x4.
     needs_store_barrier = kNoStoreBarrier;
     Instruction* check =
         GetCheckClass(stored_value, value_check, call->deopt_id());
@@ -1122,10 +1122,10 @@
       return InlineByteArrayViewLoad(call, receiver, receiver_cid,
                                      kTypedDataFloat32x4ArrayCid,
                                      ic_data, entry, last);
-    case MethodRecognizer::kByteArrayBaseGetUint32x4:
+    case MethodRecognizer::kByteArrayBaseGetInt32x4:
       if (!ShouldInlineSimd()) return false;
       return InlineByteArrayViewLoad(call, receiver, receiver_cid,
-                                     kTypedDataUint32x4ArrayCid,
+                                     kTypedDataInt32x4ArrayCid,
                                      ic_data, entry, last);
     default:
       return false;
@@ -1370,8 +1370,8 @@
         operands_type = kDoubleCid;
       } else if (HasOnlyTwoOf(ic_data, kFloat32x4Cid)) {
         operands_type = kFloat32x4Cid;
-      } else if (HasOnlyTwoOf(ic_data, kUint32x4Cid)) {
-        operands_type = kUint32x4Cid;
+      } else if (HasOnlyTwoOf(ic_data, kInt32x4Cid)) {
+        operands_type = kInt32x4Cid;
       } else {
         return false;
       }
@@ -1415,8 +1415,8 @@
         operands_type = kSmiCid;
       } else if (HasTwoMintOrSmi(ic_data)) {
         operands_type = kMintCid;
-      } else if (HasOnlyTwoOf(ic_data, kUint32x4Cid)) {
-        operands_type = kUint32x4Cid;
+      } else if (HasOnlyTwoOf(ic_data, kInt32x4Cid)) {
+        operands_type = kInt32x4Cid;
       } else {
         return false;
       }
@@ -1490,8 +1490,8 @@
     }
   } else if (operands_type == kFloat32x4Cid) {
     return InlineFloat32x4BinaryOp(call, op_kind);
-  } else if (operands_type == kUint32x4Cid) {
-    return InlineUint32x4BinaryOp(call, op_kind);
+  } else if (operands_type == kInt32x4Cid) {
+    return InlineInt32x4BinaryOp(call, op_kind);
   } else if (op_kind == Token::kMOD) {
     // TODO(vegorov): implement fast path code for modulo.
     ASSERT(operands_type == kSmiCid);
@@ -1755,7 +1755,7 @@
 }
 
 
-bool FlowGraphOptimizer::InlineUint32x4Getter(InstanceCallInstr* call,
+bool FlowGraphOptimizer::InlineInt32x4Getter(InstanceCallInstr* call,
                                               MethodRecognizer::Kind getter) {
   if (!ShouldInlineSimd()) {
     return false;
@@ -1767,15 +1767,15 @@
                 call->env(),
                 call);
   intptr_t mask = 0;
-  if ((getter == MethodRecognizer::kUint32x4Shuffle) ||
-      (getter == MethodRecognizer::kUint32x4ShuffleMix)) {
+  if ((getter == MethodRecognizer::kInt32x4Shuffle) ||
+      (getter == MethodRecognizer::kInt32x4ShuffleMix)) {
     // Extract shuffle mask.
     Definition* mask_definition = NULL;
-    if (getter == MethodRecognizer::kUint32x4Shuffle) {
+    if (getter == MethodRecognizer::kInt32x4Shuffle) {
       ASSERT(call->ArgumentCount() == 2);
       mask_definition = call->ArgumentAt(1);
     } else {
-      ASSERT(getter == MethodRecognizer::kUint32x4ShuffleMix);
+      ASSERT(getter == MethodRecognizer::kInt32x4ShuffleMix);
       ASSERT(call->ArgumentCount() == 3);
       mask_definition = call->ArgumentAt(2);
     }
@@ -1795,14 +1795,14 @@
       return false;
     }
   }
-  if (getter == MethodRecognizer::kUint32x4GetSignMask) {
+  if (getter == MethodRecognizer::kInt32x4GetSignMask) {
     Simd32x4GetSignMaskInstr* instr = new Simd32x4GetSignMaskInstr(
         getter,
         new Value(call->ArgumentAt(0)),
         call->deopt_id());
     ReplaceCall(call, instr);
     return true;
-  } else if (getter == MethodRecognizer::kUint32x4ShuffleMix) {
+  } else if (getter == MethodRecognizer::kInt32x4ShuffleMix) {
     Simd32x4ShuffleMixInstr* instr = new Simd32x4ShuffleMixInstr(
         getter,
         new Value(call->ArgumentAt(0)),
@@ -1811,7 +1811,7 @@
         call->deopt_id());
     ReplaceCall(call, instr);
     return true;
-  } else if (getter == MethodRecognizer::kUint32x4Shuffle) {
+  } else if (getter == MethodRecognizer::kInt32x4Shuffle) {
     Simd32x4ShuffleInstr* instr = new Simd32x4ShuffleInstr(
         getter,
         new Value(call->ArgumentAt(0)),
@@ -1820,7 +1820,7 @@
     ReplaceCall(call, instr);
     return true;
   } else {
-    Uint32x4GetFlagInstr* instr = new Uint32x4GetFlagInstr(
+    Int32x4GetFlagInstr* instr = new Int32x4GetFlagInstr(
         getter,
         new Value(call->ArgumentAt(0)),
         call->deopt_id());
@@ -1862,7 +1862,7 @@
 }
 
 
-bool FlowGraphOptimizer::InlineUint32x4BinaryOp(InstanceCallInstr* call,
+bool FlowGraphOptimizer::InlineInt32x4BinaryOp(InstanceCallInstr* call,
                                                 Token::Kind op_kind) {
   if (!ShouldInlineSimd()) {
     return false;
@@ -1885,10 +1885,10 @@
                 call->env(),
                 call);
   // Replace call.
-  BinaryUint32x4OpInstr* uint32x4_bin_op =
-      new BinaryUint32x4OpInstr(op_kind, new Value(left), new Value(right),
+  BinaryInt32x4OpInstr* int32x4_bin_op =
+      new BinaryInt32x4OpInstr(op_kind, new Value(left), new Value(right),
                                 call->deopt_id());
-  ReplaceCall(call, uint32x4_bin_op);
+  ReplaceCall(call, int32x4_bin_op);
   return true;
 }
 
@@ -1987,7 +1987,7 @@
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
       return true;
     default:
       return false;
@@ -2161,8 +2161,8 @@
         return BuildByteArrayViewLoad(call, kTypedDataFloat64ArrayCid);
       case MethodRecognizer::kByteArrayBaseGetFloat32x4:
         return BuildByteArrayViewLoad(call, kTypedDataFloat32x4ArrayCid);
-      case MethodRecognizer::kByteArrayBaseGetUint32x4:
-        return BuildByteArrayViewLoad(call, kTypedDataUint32x4ArrayCid);
+      case MethodRecognizer::kByteArrayBaseGetInt32x4:
+        return BuildByteArrayViewLoad(call, kTypedDataInt32x4ArrayCid);
 
       // ByteArray setters.
       case MethodRecognizer::kByteArrayBaseSetInt8:
@@ -2183,8 +2183,8 @@
         return BuildByteArrayViewStore(call, kTypedDataFloat64ArrayCid);
       case MethodRecognizer::kByteArrayBaseSetFloat32x4:
         return BuildByteArrayViewStore(call, kTypedDataFloat32x4ArrayCid);
-      case MethodRecognizer::kByteArrayBaseSetUint32x4:
-        return BuildByteArrayViewStore(call, kTypedDataUint32x4ArrayCid);
+      case MethodRecognizer::kByteArrayBaseSetInt32x4:
+        return BuildByteArrayViewStore(call, kTypedDataInt32x4ArrayCid);
       default:
         // Unsupported method.
         return false;
@@ -2195,8 +2195,8 @@
     return TryInlineFloat32x4Method(call, recognized_kind);
   }
 
-  if ((class_ids[0] == kUint32x4Cid) && (ic_data.NumberOfChecks() == 1)) {
-    return TryInlineUint32x4Method(call, recognized_kind);
+  if ((class_ids[0] == kInt32x4Cid) && (ic_data.NumberOfChecks() == 1)) {
+    return TryInlineInt32x4Method(call, recognized_kind);
   }
 
   if (recognized_kind == MethodRecognizer::kIntegerLeftShiftWithMask32) {
@@ -2288,9 +2288,9 @@
                                       call->deopt_id());
     ReplaceCall(call, con);
     return true;
-  } else if (recognized_kind == MethodRecognizer::kFloat32x4FromUint32x4Bits) {
-    Uint32x4ToFloat32x4Instr* cast =
-        new Uint32x4ToFloat32x4Instr(new Value(call->ArgumentAt(1)),
+  } else if (recognized_kind == MethodRecognizer::kFloat32x4FromInt32x4Bits) {
+    Int32x4ToFloat32x4Instr* cast =
+        new Int32x4ToFloat32x4Instr(new Value(call->ArgumentAt(1)),
                                     call->deopt_id());
     ReplaceCall(call, cast);
     return true;
@@ -2299,14 +2299,14 @@
 }
 
 
-bool FlowGraphOptimizer::TryInlineUint32x4Constructor(
+bool FlowGraphOptimizer::TryInlineInt32x4Constructor(
     StaticCallInstr* call,
     MethodRecognizer::Kind recognized_kind) {
   if (!ShouldInlineSimd()) {
     return false;
   }
-  if (recognized_kind == MethodRecognizer::kUint32x4BoolConstructor) {
-    Uint32x4BoolConstructorInstr* con = new Uint32x4BoolConstructorInstr(
+  if (recognized_kind == MethodRecognizer::kInt32x4BoolConstructor) {
+    Int32x4BoolConstructorInstr* con = new Int32x4BoolConstructorInstr(
         new Value(call->ArgumentAt(1)),
         new Value(call->ArgumentAt(2)),
         new Value(call->ArgumentAt(3)),
@@ -2314,9 +2314,9 @@
         call->deopt_id());
     ReplaceCall(call, con);
     return true;
-  } else if (recognized_kind == MethodRecognizer::kUint32x4FromFloat32x4Bits) {
-    Float32x4ToUint32x4Instr* cast =
-        new Float32x4ToUint32x4Instr(new Value(call->ArgumentAt(1)),
+  } else if (recognized_kind == MethodRecognizer::kInt32x4FromFloat32x4Bits) {
+    Float32x4ToInt32x4Instr* cast =
+        new Float32x4ToInt32x4Instr(new Value(call->ArgumentAt(1)),
                                      call->deopt_id());
     ReplaceCall(call, cast);
     return true;
@@ -2480,7 +2480,7 @@
 }
 
 
-bool FlowGraphOptimizer::TryInlineUint32x4Method(
+bool FlowGraphOptimizer::TryInlineInt32x4Method(
     InstanceCallInstr* call,
     MethodRecognizer::Kind recognized_kind) {
   if (!ShouldInlineSimd()) {
@@ -2488,18 +2488,18 @@
   }
   ASSERT(call->HasICData());
   switch (recognized_kind) {
-    case MethodRecognizer::kUint32x4ShuffleMix:
-    case MethodRecognizer::kUint32x4Shuffle:
-    case MethodRecognizer::kUint32x4GetFlagX:
-    case MethodRecognizer::kUint32x4GetFlagY:
-    case MethodRecognizer::kUint32x4GetFlagZ:
-    case MethodRecognizer::kUint32x4GetFlagW:
-    case MethodRecognizer::kUint32x4GetSignMask:
-      ASSERT(call->ic_data()->HasReceiverClassId(kUint32x4Cid));
+    case MethodRecognizer::kInt32x4ShuffleMix:
+    case MethodRecognizer::kInt32x4Shuffle:
+    case MethodRecognizer::kInt32x4GetFlagX:
+    case MethodRecognizer::kInt32x4GetFlagY:
+    case MethodRecognizer::kInt32x4GetFlagZ:
+    case MethodRecognizer::kInt32x4GetFlagW:
+    case MethodRecognizer::kInt32x4GetSignMask:
+      ASSERT(call->ic_data()->HasReceiverClassId(kInt32x4Cid));
       ASSERT(call->ic_data()->HasOneTarget());
-      return InlineUint32x4Getter(call, recognized_kind);
+      return InlineInt32x4Getter(call, recognized_kind);
 
-    case MethodRecognizer::kUint32x4Select: {
+    case MethodRecognizer::kInt32x4Select: {
       Definition* mask = call->ArgumentAt(0);
       Definition* trueValue = call->ArgumentAt(1);
       Definition* falseValue = call->ArgumentAt(2);
@@ -2510,7 +2510,7 @@
                     call->deopt_id(),
                     call->env(),
                     call);
-      Uint32x4SelectInstr* select = new Uint32x4SelectInstr(
+      Int32x4SelectInstr* select = new Int32x4SelectInstr(
           new Value(mask),
           new Value(trueValue),
           new Value(falseValue),
@@ -2518,10 +2518,10 @@
       ReplaceCall(call, select);
       return true;
     }
-    case MethodRecognizer::kUint32x4WithFlagX:
-    case MethodRecognizer::kUint32x4WithFlagY:
-    case MethodRecognizer::kUint32x4WithFlagZ:
-    case MethodRecognizer::kUint32x4WithFlagW: {
+    case MethodRecognizer::kInt32x4WithFlagX:
+    case MethodRecognizer::kInt32x4WithFlagY:
+    case MethodRecognizer::kInt32x4WithFlagZ:
+    case MethodRecognizer::kInt32x4WithFlagW: {
       Definition* left = call->ArgumentAt(0);
       Definition* flag = call->ArgumentAt(1);
       // Type check left.
@@ -2531,7 +2531,7 @@
                     call->deopt_id(),
                     call->env(),
                     call);
-      Uint32x4SetFlagInstr* setFlag = new Uint32x4SetFlagInstr(
+      Int32x4SetFlagInstr* setFlag = new Int32x4SetFlagInstr(
           recognized_kind,
           new Value(left),
           new Value(flag),
@@ -2675,7 +2675,7 @@
 bool FlowGraphOptimizer::BuildByteArrayViewLoad(InstanceCallInstr* call,
                                                 intptr_t view_cid) {
   bool simd_view = (view_cid == kTypedDataFloat32x4ArrayCid) ||
-                   (view_cid == kTypedDataUint32x4ArrayCid);
+                   (view_cid == kTypedDataInt32x4ArrayCid);
   if (simd_view && !ShouldInlineSimd()) {
     return false;
   }
@@ -2725,7 +2725,7 @@
 bool FlowGraphOptimizer::BuildByteArrayViewStore(InstanceCallInstr* call,
                                                  intptr_t view_cid) {
   bool simd_view = (view_cid == kTypedDataFloat32x4ArrayCid) ||
-                   (view_cid == kTypedDataUint32x4ArrayCid);
+                   (view_cid == kTypedDataInt32x4ArrayCid);
   if (simd_view && !ShouldInlineSimd()) {
     return false;
   }
@@ -2780,14 +2780,14 @@
       value_check.AddReceiverCheck(kDoubleCid, target);
       break;
     }
-    case kTypedDataUint32x4ArrayCid: {
-      // Check that value is always Uint32x4.
+    case kTypedDataInt32x4ArrayCid: {
+      // Check that value is always Int32x4.
       value_check = ICData::New(flow_graph_->parsed_function().function(),
                                 call->function_name(),
                                 Object::empty_array(),  // Dummy args. descr.
                                 Isolate::kNoDeoptId,
                                 1);
-      value_check.AddReceiverCheck(kUint32x4Cid, target);
+      value_check.AddReceiverCheck(kInt32x4Cid, target);
       break;
     }
     case kTypedDataFloat32x4ArrayCid: {
@@ -3136,8 +3136,8 @@
              (recognized_kind == MethodRecognizer::kFloat32x4Splat) ||
              (recognized_kind == MethodRecognizer::kFloat32x4Constructor)) {
     TryInlineFloat32x4Constructor(call, recognized_kind);
-  } else if (recognized_kind == MethodRecognizer::kUint32x4BoolConstructor) {
-    TryInlineUint32x4Constructor(call, recognized_kind);
+  } else if (recognized_kind == MethodRecognizer::kInt32x4BoolConstructor) {
+    TryInlineInt32x4Constructor(call, recognized_kind);
   } else if (recognized_kind == MethodRecognizer::kObjectConstructor) {
     // Remove the original push arguments.
     for (intptr_t i = 0; i < call->ArgumentCount(); ++i) {
@@ -6992,40 +6992,40 @@
 }
 
 
-void ConstantPropagator::VisitFloat32x4ToUint32x4(
-    Float32x4ToUint32x4Instr* instr) {
+void ConstantPropagator::VisitFloat32x4ToInt32x4(
+    Float32x4ToInt32x4Instr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitUint32x4BoolConstructor(
-    Uint32x4BoolConstructorInstr* instr) {
+void ConstantPropagator::VisitInt32x4BoolConstructor(
+    Int32x4BoolConstructorInstr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitUint32x4GetFlag(Uint32x4GetFlagInstr* instr) {
+void ConstantPropagator::VisitInt32x4GetFlag(Int32x4GetFlagInstr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitUint32x4SetFlag(Uint32x4SetFlagInstr* instr) {
+void ConstantPropagator::VisitInt32x4SetFlag(Int32x4SetFlagInstr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitUint32x4Select(Uint32x4SelectInstr* instr) {
+void ConstantPropagator::VisitInt32x4Select(Int32x4SelectInstr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitUint32x4ToFloat32x4(
-    Uint32x4ToFloat32x4Instr* instr) {
+void ConstantPropagator::VisitInt32x4ToFloat32x4(
+    Int32x4ToFloat32x4Instr* instr) {
   SetValue(instr, non_constant_);
 }
 
 
-void ConstantPropagator::VisitBinaryUint32x4Op(BinaryUint32x4OpInstr* instr) {
+void ConstantPropagator::VisitBinaryInt32x4Op(BinaryInt32x4OpInstr* instr) {
   SetValue(instr, non_constant_);
 }
 
@@ -7097,7 +7097,7 @@
 }
 
 
-void ConstantPropagator::VisitUnboxUint32x4(UnboxUint32x4Instr* instr) {
+void ConstantPropagator::VisitUnboxInt32x4(UnboxInt32x4Instr* instr) {
   const Object& value = instr->value()->definition()->constant_value();
   if (IsNonConstant(value)) {
     SetValue(instr, non_constant_);
@@ -7108,7 +7108,7 @@
 }
 
 
-void ConstantPropagator::VisitBoxUint32x4(BoxUint32x4Instr* instr) {
+void ConstantPropagator::VisitBoxInt32x4(BoxInt32x4Instr* instr) {
   const Object& value = instr->value()->definition()->constant_value();
   if (IsNonConstant(value)) {
     SetValue(instr, non_constant_);
diff --git a/runtime/vm/flow_graph_optimizer.h b/runtime/vm/flow_graph_optimizer.h
index 2940c6b..bd26fdd 100644
--- a/runtime/vm/flow_graph_optimizer.h
+++ b/runtime/vm/flow_graph_optimizer.h
@@ -110,11 +110,11 @@
   bool TryInlineInstanceMethod(InstanceCallInstr* call);
   bool TryInlineFloat32x4Constructor(StaticCallInstr* call,
                                      MethodRecognizer::Kind recognized_kind);
-  bool TryInlineUint32x4Constructor(StaticCallInstr* call,
+  bool TryInlineInt32x4Constructor(StaticCallInstr* call,
                                     MethodRecognizer::Kind recognized_kind);
   bool TryInlineFloat32x4Method(InstanceCallInstr* call,
                                 MethodRecognizer::Kind recognized_kind);
-  bool TryInlineUint32x4Method(InstanceCallInstr* call,
+  bool TryInlineInt32x4Method(InstanceCallInstr* call,
                                MethodRecognizer::Kind recognized_kind);
   void ReplaceWithInstanceOf(InstanceCallInstr* instr);
   void ReplaceWithTypeCast(InstanceCallInstr* instr);
@@ -187,11 +187,11 @@
 
   bool InlineFloat32x4Getter(InstanceCallInstr* call,
                              MethodRecognizer::Kind getter);
-  bool InlineUint32x4Getter(InstanceCallInstr* call,
+  bool InlineInt32x4Getter(InstanceCallInstr* call,
                             MethodRecognizer::Kind getter);
   bool InlineFloat32x4BinaryOp(InstanceCallInstr* call,
                                Token::Kind op_kind);
-  bool InlineUint32x4BinaryOp(InstanceCallInstr* call,
+  bool InlineInt32x4BinaryOp(InstanceCallInstr* call,
                               Token::Kind op_kind);
   void InlineImplicitInstanceGetter(InstanceCallInstr* call);
 
diff --git a/runtime/vm/flow_graph_type_propagator.cc b/runtime/vm/flow_graph_type_propagator.cc
index 6dc3a61..9c4a1f4 100644
--- a/runtime/vm/flow_graph_type_propagator.cc
+++ b/runtime/vm/flow_graph_type_propagator.cc
@@ -1056,8 +1056,8 @@
       (op_kind() == MethodRecognizer::kFloat32x4ShuffleW)) {
     return CompileType::FromCid(kDoubleCid);
   }
-  if ((op_kind() == MethodRecognizer::kUint32x4Shuffle)) {
-    return CompileType::FromCid(kUint32x4Cid);
+  if ((op_kind() == MethodRecognizer::kInt32x4Shuffle)) {
+    return CompileType::FromCid(kInt32x4Cid);
   }
   ASSERT((op_kind() == MethodRecognizer::kFloat32x4Shuffle));
   return CompileType::FromCid(kFloat32x4Cid);
@@ -1065,8 +1065,8 @@
 
 
 CompileType Simd32x4ShuffleMixInstr::ComputeType() const {
-  if (op_kind() == MethodRecognizer::kUint32x4ShuffleMix) {
-    return CompileType::FromCid(kUint32x4Cid);
+  if (op_kind() == MethodRecognizer::kInt32x4ShuffleMix) {
+    return CompileType::FromCid(kInt32x4Cid);
   }
   ASSERT((op_kind() == MethodRecognizer::kFloat32x4ShuffleMix));
   return CompileType::FromCid(kFloat32x4Cid);
@@ -1094,7 +1094,7 @@
 
 
 CompileType Float32x4ComparisonInstr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
@@ -1128,38 +1128,38 @@
 }
 
 
-CompileType Float32x4ToUint32x4Instr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType Float32x4ToInt32x4Instr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
-CompileType Uint32x4BoolConstructorInstr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType Int32x4BoolConstructorInstr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
-CompileType Uint32x4GetFlagInstr::ComputeType() const {
+CompileType Int32x4GetFlagInstr::ComputeType() const {
   return CompileType::FromCid(kBoolCid);
 }
 
 
-CompileType Uint32x4SelectInstr::ComputeType() const {
+CompileType Int32x4SelectInstr::ComputeType() const {
   return CompileType::FromCid(kFloat32x4Cid);
 }
 
 
-CompileType Uint32x4SetFlagInstr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType Int32x4SetFlagInstr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
-CompileType Uint32x4ToFloat32x4Instr::ComputeType() const {
+CompileType Int32x4ToFloat32x4Instr::ComputeType() const {
   return CompileType::FromCid(kFloat32x4Cid);
 }
 
 
-CompileType BinaryUint32x4OpInstr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType BinaryInt32x4OpInstr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
@@ -1193,13 +1193,13 @@
 }
 
 
-CompileType UnboxUint32x4Instr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType UnboxInt32x4Instr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
-CompileType BoxUint32x4Instr::ComputeType() const {
-  return CompileType::FromCid(kUint32x4Cid);
+CompileType BoxInt32x4Instr::ComputeType() const {
+  return CompileType::FromCid(kInt32x4Cid);
 }
 
 
diff --git a/runtime/vm/freelist.h b/runtime/vm/freelist.h
index 072348a..8ec1ac4 100644
--- a/runtime/vm/freelist.h
+++ b/runtime/vm/freelist.h
@@ -43,6 +43,7 @@
     FakeInstance() { }
     static cpp_vtable vtable() { return 0; }
     static intptr_t InstanceSize() { return 0; }
+    static intptr_t NextFieldOffset() { return -kWordSize; }
     static const ClassId kClassId = kFreeListElement;
     static bool IsInstance() { return true; }
 
diff --git a/runtime/vm/il_printer.cc b/runtime/vm/il_printer.cc
index cfeca9b..202bb3c 100644
--- a/runtime/vm/il_printer.cc
+++ b/runtime/vm/il_printer.cc
@@ -625,8 +625,8 @@
   if (op_kind() == MethodRecognizer::kFloat32x4GetSignMask) {
     f->Print("Float32x4.getSignMask ");
   } else {
-    ASSERT(op_kind() == MethodRecognizer::kUint32x4GetSignMask);
-    f->Print("Uint32x4.getSignMask ");
+    ASSERT(op_kind() == MethodRecognizer::kInt32x4GetSignMask);
+    f->Print("Int32x4.getSignMask ");
   }
   value()->PrintTo(f);
 }
@@ -707,8 +707,8 @@
 }
 
 
-void Float32x4ToUint32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Float32x4.toUint32x4 ");
+void Float32x4ToInt32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Float32x4.toInt32x4 ");
   left()->PrintTo(f);
 }
 
@@ -716,8 +716,8 @@
 
 
 
-void Uint32x4BoolConstructorInstr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Uint32x4.bool(");
+void Int32x4BoolConstructorInstr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Int32x4.bool(");
   value0()->PrintTo(f);
   f->Print(", ");
   value1()->PrintTo(f);
@@ -729,22 +729,22 @@
 }
 
 
-void Uint32x4GetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Uint32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
+void Int32x4GetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Int32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
   value()->PrintTo(f);
 }
 
 
-void Uint32x4SetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Uint32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
+void Int32x4SetFlagInstr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Int32x4.%s ", MethodRecognizer::KindToCString(op_kind()));
   value()->PrintTo(f);
   f->Print(", ");
   flagValue()->PrintTo(f);
 }
 
 
-void Uint32x4SelectInstr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Uint32x4.select ");
+void Int32x4SelectInstr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Int32x4.select ");
   mask()->PrintTo(f);
   f->Print(", ");
   trueValue()->PrintTo(f);
@@ -753,13 +753,13 @@
 }
 
 
-void Uint32x4ToFloat32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
-  f->Print("Uint32x4.toFloat32x4 ");
+void Int32x4ToFloat32x4Instr::PrintOperandsTo(BufferFormatter* f) const {
+  f->Print("Int32x4.toFloat32x4 ");
   left()->PrintTo(f);
 }
 
 
-void BinaryUint32x4OpInstr::PrintOperandsTo(BufferFormatter* f) const {
+void BinaryInt32x4OpInstr::PrintOperandsTo(BufferFormatter* f) const {
   f->Print("%s, ", Token::Str(op_kind()));
   left()->PrintTo(f);
   f->Print(", ");
diff --git a/runtime/vm/intermediate_language.cc b/runtime/vm/intermediate_language.cc
index 50e3caf..52f7fb0 100644
--- a/runtime/vm/intermediate_language.cc
+++ b/runtime/vm/intermediate_language.cc
@@ -1517,15 +1517,15 @@
 }
 
 
-Definition* BoxUint32x4Instr::Canonicalize(FlowGraph* flow_graph) {
+Definition* BoxInt32x4Instr::Canonicalize(FlowGraph* flow_graph) {
   if (input_use_list() == NULL) {
     // Environments can accomodate any representation. No need to box.
     return value()->definition();
   }
 
-  // Fold away BoxUint32x4(UnboxUint32x4(v)).
-  UnboxUint32x4Instr* defn = value()->definition()->AsUnboxUint32x4();
-  if ((defn != NULL) && (defn->value()->Type()->ToCid() == kUint32x4Cid)) {
+  // Fold away BoxInt32x4(UnboxInt32x4(v)).
+  UnboxInt32x4Instr* defn = value()->definition()->AsUnboxInt32x4();
+  if ((defn != NULL) && (defn->value()->Type()->ToCid() == kInt32x4Cid)) {
     return defn->value()->definition();
   }
 
@@ -1533,9 +1533,9 @@
 }
 
 
-Definition* UnboxUint32x4Instr::Canonicalize(FlowGraph* flow_graph) {
-  // Fold away UnboxUint32x4(BoxUint32x4(v)).
-  BoxUint32x4Instr* defn = value()->definition()->AsBoxUint32x4();
+Definition* UnboxInt32x4Instr::Canonicalize(FlowGraph* flow_graph) {
+  // Fold away UnboxInt32x4(BoxInt32x4(v)).
+  BoxInt32x4Instr* defn = value()->definition()->AsBoxInt32x4();
   return (defn != NULL) ? defn->value()->definition() : this;
 }
 
diff --git a/runtime/vm/intermediate_language.h b/runtime/vm/intermediate_language.h
index b4e6878..ea91a10 100644
--- a/runtime/vm/intermediate_language.h
+++ b/runtime/vm/intermediate_language.h
@@ -53,7 +53,7 @@
   V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 185163470)               \
   V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 1356392173)              \
   V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 1239681356)          \
-  V(_TypedList, _getUint32x4, ByteArrayBaseGetUint32x4, 1499091330)            \
+  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 163795162)               \
   V(_TypedList, _setInt8, ByteArrayBaseSetInt8, 1443265945)                    \
   V(_TypedList, _setUint8, ByteArrayBaseSetUint8, 1864204733)                  \
   V(_TypedList, _setInt16, ByteArrayBaseSetInt16, 1807419109)                  \
@@ -63,7 +63,7 @@
   V(_TypedList, _setFloat32, ByteArrayBaseSetFloat32, 1457395244)              \
   V(_TypedList, _setFloat64, ByteArrayBaseSetFloat64, 49127618)                \
   V(_TypedList, _setFloat32x4, ByteArrayBaseSetFloat32x4, 1261559935)          \
-  V(_TypedList, _setUint32x4, ByteArrayBaseSetUint32x4, 691480480)             \
+  V(_TypedList, _setInt32x4, ByteArrayBaseSetInt32x4, 1871750680)              \
   V(_GrowableList, get:length, GrowableArrayLength, 1654225242)                \
   V(_GrowableList, get:_capacity, GrowableArrayCapacity, 817090003)            \
   V(_GrowableList, _setData, GrowableArraySetData, 1375509957)                 \
@@ -92,8 +92,8 @@
   V(Float32x4, Float32x4., Float32x4Constructor, 786169160)                    \
   V(Float32x4, Float32x4.zero, Float32x4Zero, 1589383280)                      \
   V(Float32x4, Float32x4.splat, Float32x4Splat, 62513275)                      \
-  V(Float32x4, Float32x4.fromUint32x4Bits, Float32x4FromUint32x4Bits,          \
-      770033146)                                                               \
+  V(Float32x4, Float32x4.fromInt32x4Bits, Float32x4FromInt32x4Bits,            \
+      1933861675)                                                              \
   V(_Float32x4, shuffle, Float32x4Shuffle, 1178727105)                         \
   V(_Float32x4, shuffleMix, Float32x4ShuffleMix, 927956119)                    \
   V(_Float32x4, get:x, Float32x4ShuffleX, 1351717838)                          \
@@ -101,12 +101,12 @@
   V(_Float32x4, get:z, Float32x4ShuffleZ, 2144923721)                          \
   V(_Float32x4, get:w, Float32x4ShuffleW, 1447699119)                          \
   V(_Float32x4, get:signMask, Float32x4GetSignMask, 1198849347)                \
-  V(_Float32x4, _cmpequal, Float32x4Equal, 2141256163)                         \
-  V(_Float32x4, _cmpgt, Float32x4GreaterThan, 696292270)                       \
-  V(_Float32x4, _cmpgte, Float32x4GreaterThanOrEqual, 1199333164)              \
-  V(_Float32x4, _cmplt, Float32x4LessThan, 943396590)                          \
-  V(_Float32x4, _cmplte, Float32x4LessThanOrEqual, 57211241)                   \
-  V(_Float32x4, _cmpnequal, Float32x4NotEqual, 1234888884)                     \
+  V(_Float32x4, _cmpequal, Float32x4Equal, 1944929844)                         \
+  V(_Float32x4, _cmpgt, Float32x4GreaterThan, 499965951)                       \
+  V(_Float32x4, _cmpgte, Float32x4GreaterThanOrEqual, 1003006845)              \
+  V(_Float32x4, _cmplt, Float32x4LessThan, 747070271)                          \
+  V(_Float32x4, _cmplte, Float32x4LessThanOrEqual, 2008368570)                 \
+  V(_Float32x4, _cmpnequal, Float32x4NotEqual, 1038562565)                     \
   V(_Float32x4, _min, Float32x4Min, 1166664658)                                \
   V(_Float32x4, _max, Float32x4Max, 343968921)                                 \
   V(_Float32x4, _scale, Float32x4Scale, 803505531)                             \
@@ -120,21 +120,21 @@
   V(_Float32x4, withY, Float32x4WithY, 1806065938)                             \
   V(_Float32x4, withZ, Float32x4WithZ, 320659034)                              \
   V(_Float32x4, withW, Float32x4WithW, 1108437255)                             \
-  V(Uint32x4, Uint32x4.bool, Uint32x4BoolConstructor, 517444095)               \
-  V(Uint32x4, Uint32x4.fromFloat32x4Bits, Uint32x4FromFloat32x4Bits,           \
-      1080034855)                                                              \
-  V(_Uint32x4, get:flagX, Uint32x4GetFlagX, 1674696792)                        \
-  V(_Uint32x4, get:flagY, Uint32x4GetFlagY, 2013200152)                        \
-  V(_Uint32x4, get:flagZ, Uint32x4GetFlagZ, 944733935)                         \
-  V(_Uint32x4, get:flagW, Uint32x4GetFlagW, 22746169)                          \
-  V(_Uint32x4, get:signMask, Uint32x4GetSignMask, 1858144083)                  \
-  V(_Uint32x4, shuffle, Uint32x4Shuffle, 146209630)                            \
-  V(_Uint32x4, shuffleMix, Uint32x4ShuffleMix, 1251494596)                     \
-  V(_Uint32x4, select, Uint32x4Select, 72244182)                               \
-  V(_Uint32x4, withFlagX, Uint32x4WithFlagX, 1475542073)                       \
-  V(_Uint32x4, withFlagY, Uint32x4WithFlagY, 830610988)                        \
-  V(_Uint32x4, withFlagZ, Uint32x4WithFlagZ, 1714792414)                       \
-  V(_Uint32x4, withFlagW, Uint32x4WithFlagW, 1516924162)                       \
+  V(Int32x4, Int32x4.bool, Int32x4BoolConstructor, 1477593884)                 \
+  V(Int32x4, Int32x4.fromFloat32x4Bits, Int32x4FromFloat32x4Bits,              \
+      1955567428)                                                              \
+  V(_Int32x4, get:flagX, Int32x4GetFlagX, 729235803)                           \
+  V(_Int32x4, get:flagY, Int32x4GetFlagY, 430840849)                           \
+  V(_Int32x4, get:flagZ, Int32x4GetFlagZ, 1981076496)                          \
+  V(_Int32x4, get:flagW, Int32x4GetFlagW, 629356099)                           \
+  V(_Int32x4, get:signMask, Int32x4GetSignMask, 1598787746)                    \
+  V(_Int32x4, shuffle, Int32x4Shuffle, 599391160)                              \
+  V(_Int32x4, shuffleMix, Int32x4ShuffleMix, 1491641197)                       \
+  V(_Int32x4, select, Int32x4Select, 598942806)                                \
+  V(_Int32x4, withFlagX, Int32x4WithFlagX, 63248661)                           \
+  V(_Int32x4, withFlagY, Int32x4WithFlagY, 1498755850)                         \
+  V(_Int32x4, withFlagZ, Int32x4WithFlagZ, 457856832)                          \
+  V(_Int32x4, withFlagW, Int32x4WithFlagW, 690638779)                          \
   V(_List, [], ObjectArrayGetIndexed, 1079829188)                              \
   V(_List, []=, ObjectArraySetIndexed, 748954698)                              \
   V(_ImmutableList, [], ImmutableArrayGetIndexed, 25983597)                    \
@@ -166,8 +166,8 @@
   V(_Uint32Array, []=, Uint32ArraySetIndexed, 1980947178)                      \
   V(_Float32x4Array, [], Float32x4ArrayGetIndexed, 1901126825)                 \
   V(_Float32x4Array, []=, Float32x4ArraySetIndexed, 1419416331)                \
-  V(_Uint32x4Array, [], Uint32x4ArrayGetIndexed, 1340743913)                   \
-  V(_Uint32x4Array, []=, Uint32x4ArraySetIndexed, 1326924628)                  \
+  V(_Int32x4Array, [], Int32x4ArrayGetIndexed, 1675579883)                     \
+  V(_Int32x4Array, []=, Int32x4ArraySetIndexed, 809970636)                     \
 
 
 // A list of core function that should always be inlined.
@@ -192,7 +192,7 @@
   V(_TypedList, _getFloat32, ByteArrayBaseGetFloat32, 185163470)               \
   V(_TypedList, _getFloat64, ByteArrayBaseGetFloat64, 1356392173)              \
   V(_TypedList, _getFloat32x4, ByteArrayBaseGetFloat32x4, 1239681356)          \
-  V(_TypedList, _getUint32x4, ByteArrayBaseGetUint32x4, 1499091330)            \
+  V(_TypedList, _getInt32x4, ByteArrayBaseGetInt32x4, 163795162)               \
 
 // Class that recognizes the name and owner of a function and returns the
 // corresponding enum. See RECOGNIZED_LIST above for list of recognizable
@@ -660,8 +660,8 @@
   M(BoxDouble)                                                                 \
   M(BoxFloat32x4)                                                              \
   M(UnboxFloat32x4)                                                            \
-  M(BoxUint32x4)                                                               \
-  M(UnboxUint32x4)                                                             \
+  M(BoxInt32x4)                                                               \
+  M(UnboxInt32x4)                                                             \
   M(UnboxInteger)                                                              \
   M(BoxInteger)                                                                \
   M(BinaryMintOp)                                                              \
@@ -688,14 +688,14 @@
   M(Float32x4ZeroArg)                                                          \
   M(Float32x4Clamp)                                                            \
   M(Float32x4With)                                                             \
-  M(Float32x4ToUint32x4)                                                       \
+  M(Float32x4ToInt32x4)                                                       \
   M(MaterializeObject)                                                         \
-  M(Uint32x4BoolConstructor)                                                   \
-  M(Uint32x4GetFlag)                                                           \
-  M(Uint32x4Select)                                                            \
-  M(Uint32x4SetFlag)                                                           \
-  M(Uint32x4ToFloat32x4)                                                       \
-  M(BinaryUint32x4Op)                                                          \
+  M(Int32x4BoolConstructor)                                                   \
+  M(Int32x4GetFlag)                                                           \
+  M(Int32x4Select)                                                            \
+  M(Int32x4SetFlag)                                                           \
+  M(Int32x4ToFloat32x4)                                                       \
+  M(BinaryInt32x4Op)                                                          \
 
 
 #define FORWARD_DECLARATION(type) class type##Instr;
@@ -960,7 +960,7 @@
   friend class UnboxIntegerInstr;
   friend class UnboxDoubleInstr;
   friend class UnboxFloat32x4Instr;
-  friend class UnboxUint32x4Instr;
+  friend class UnboxInt32x4Instr;
   friend class BinaryDoubleOpInstr;
   friend class BinaryFloat32x4OpInstr;
   friend class Float32x4ZeroInstr;
@@ -976,13 +976,13 @@
   friend class Float32x4ZeroArgInstr;
   friend class Float32x4ClampInstr;
   friend class Float32x4WithInstr;
-  friend class Float32x4ToUint32x4Instr;
-  friend class Uint32x4BoolConstructorInstr;
-  friend class Uint32x4GetFlagInstr;
-  friend class Uint32x4SetFlagInstr;
-  friend class Uint32x4SelectInstr;
-  friend class Uint32x4ToFloat32x4Instr;
-  friend class BinaryUint32x4OpInstr;
+  friend class Float32x4ToInt32x4Instr;
+  friend class Int32x4BoolConstructorInstr;
+  friend class Int32x4GetFlagInstr;
+  friend class Int32x4SetFlagInstr;
+  friend class Int32x4SelectInstr;
+  friend class Int32x4ToFloat32x4Instr;
+  friend class BinaryInt32x4OpInstr;
   friend class BinaryMintOpInstr;
   friend class BinarySmiOpInstr;
   friend class UnarySmiOpInstr;
@@ -4571,9 +4571,9 @@
 };
 
 
-class BoxUint32x4Instr : public TemplateDefinition<1> {
+class BoxInt32x4Instr : public TemplateDefinition<1> {
  public:
-  explicit BoxUint32x4Instr(Value* value) {
+  explicit BoxInt32x4Instr(Value* value) {
     SetInputAt(0, value);
   }
 
@@ -4583,10 +4583,10 @@
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT(idx == 0);
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
-  DECLARE_INSTRUCTION(BoxUint32x4)
+  DECLARE_INSTRUCTION(BoxInt32x4)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
@@ -4599,7 +4599,7 @@
   Definition* Canonicalize(FlowGraph* flow_graph);
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(BoxUint32x4Instr);
+  DISALLOW_COPY_AND_ASSIGN(BoxInt32x4Instr);
 };
 
 
@@ -4702,9 +4702,9 @@
 };
 
 
-class UnboxUint32x4Instr : public TemplateDefinition<1> {
+class UnboxInt32x4Instr : public TemplateDefinition<1> {
  public:
-  UnboxUint32x4Instr(Value* value, intptr_t deopt_id) {
+  UnboxInt32x4Instr(Value* value, intptr_t deopt_id) {
     SetInputAt(0, value);
     deopt_id_ = deopt_id;
   }
@@ -4712,11 +4712,11 @@
   Value* value() const { return inputs_[0]; }
 
   virtual bool CanDeoptimize() const {
-    return (value()->Type()->ToCid() != kUint32x4Cid);
+    return (value()->Type()->ToCid() != kInt32x4Cid);
   }
 
   virtual Representation representation() const {
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual bool AllowsCSE() const { return true; }
@@ -4724,7 +4724,7 @@
   virtual EffectSet Dependencies() const { return EffectSet::None(); }
   virtual bool AttributesEqual(Instruction* other) const { return true; }
 
-  DECLARE_INSTRUCTION(UnboxUint32x4)
+  DECLARE_INSTRUCTION(UnboxInt32x4)
   virtual CompileType ComputeType() const;
 
   virtual bool MayThrow() const { return false; }
@@ -4732,7 +4732,7 @@
   Definition* Canonicalize(FlowGraph* flow_graph);
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(UnboxUint32x4Instr);
+  DISALLOW_COPY_AND_ASSIGN(UnboxInt32x4Instr);
 };
 
 
@@ -5021,8 +5021,8 @@
         (op_kind_ == MethodRecognizer::kFloat32x4ShuffleW)) {
       return kUnboxedDouble;
     }
-    if ((op_kind_ == MethodRecognizer::kUint32x4Shuffle)) {
-      return kUnboxedUint32x4;
+    if ((op_kind_ == MethodRecognizer::kInt32x4Shuffle)) {
+      return kUnboxedInt32x4;
     }
     ASSERT((op_kind_ == MethodRecognizer::kFloat32x4Shuffle));
     return kUnboxedFloat32x4;
@@ -5037,8 +5037,8 @@
         (op_kind_ == MethodRecognizer::kFloat32x4Shuffle)) {
       return kUnboxedFloat32x4;
     }
-    ASSERT((op_kind_ == MethodRecognizer::kUint32x4Shuffle));
-    return kUnboxedUint32x4;
+    ASSERT((op_kind_ == MethodRecognizer::kInt32x4Shuffle));
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -5090,8 +5090,8 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-    if (op_kind() == MethodRecognizer::kUint32x4ShuffleMix) {
-      return kUnboxedUint32x4;
+    if (op_kind() == MethodRecognizer::kInt32x4ShuffleMix) {
+      return kUnboxedInt32x4;
     }
     ASSERT(op_kind() == MethodRecognizer::kFloat32x4ShuffleMix);
     return kUnboxedFloat32x4;
@@ -5099,8 +5099,8 @@
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT((idx == 0) || (idx == 1));
-    if (op_kind() == MethodRecognizer::kUint32x4ShuffleMix) {
-      return kUnboxedUint32x4;
+    if (op_kind() == MethodRecognizer::kInt32x4ShuffleMix) {
+      return kUnboxedInt32x4;
     }
     ASSERT(op_kind() == MethodRecognizer::kFloat32x4ShuffleMix);
     return kUnboxedFloat32x4;
@@ -5288,7 +5288,7 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5634,9 +5634,9 @@
 };
 
 
-class Float32x4ToUint32x4Instr : public TemplateDefinition<1> {
+class Float32x4ToInt32x4Instr : public TemplateDefinition<1> {
  public:
-  Float32x4ToUint32x4Instr(Value* left, intptr_t deopt_id) {
+  Float32x4ToInt32x4Instr(Value* left, intptr_t deopt_id) {
     SetInputAt(0, left);
     deopt_id_ = deopt_id;
   }
@@ -5648,7 +5648,7 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5662,7 +5662,7 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Float32x4ToUint32x4)
+  DECLARE_INSTRUCTION(Float32x4ToInt32x4)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
@@ -5673,13 +5673,13 @@
   virtual bool MayThrow() const { return false; }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(Float32x4ToUint32x4Instr);
+  DISALLOW_COPY_AND_ASSIGN(Float32x4ToInt32x4Instr);
 };
 
 
-class Uint32x4BoolConstructorInstr : public TemplateDefinition<4> {
+class Int32x4BoolConstructorInstr : public TemplateDefinition<4> {
  public:
-  Uint32x4BoolConstructorInstr(Value* value0, Value* value1, Value* value2,
+  Int32x4BoolConstructorInstr(Value* value0, Value* value1, Value* value2,
                                Value* value3, intptr_t deopt_id) {
     SetInputAt(0, value0);
     SetInputAt(1, value1);
@@ -5698,7 +5698,7 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5712,7 +5712,7 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Uint32x4BoolConstructor)
+  DECLARE_INSTRUCTION(Int32x4BoolConstructor)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
@@ -5723,13 +5723,13 @@
   virtual bool MayThrow() const { return false; }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(Uint32x4BoolConstructorInstr);
+  DISALLOW_COPY_AND_ASSIGN(Int32x4BoolConstructorInstr);
 };
 
 
-class Uint32x4GetFlagInstr : public TemplateDefinition<1> {
+class Int32x4GetFlagInstr : public TemplateDefinition<1> {
  public:
-  Uint32x4GetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
+  Int32x4GetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
                        intptr_t deopt_id)
       : op_kind_(op_kind) {
     SetInputAt(0, value);
@@ -5750,7 +5750,7 @@
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT(idx == 0);
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -5759,14 +5759,14 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Uint32x4GetFlag)
+  DECLARE_INSTRUCTION(Int32x4GetFlag)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
   virtual EffectSet Effects() const { return EffectSet::None(); }
   virtual EffectSet Dependencies() const { return EffectSet::None(); }
   virtual bool AttributesEqual(Instruction* other) const {
-    return op_kind() == other->AsUint32x4GetFlag()->op_kind();
+    return op_kind() == other->AsInt32x4GetFlag()->op_kind();
   }
 
   virtual bool MayThrow() const { return false; }
@@ -5774,7 +5774,7 @@
  private:
   const MethodRecognizer::Kind op_kind_;
 
-  DISALLOW_COPY_AND_ASSIGN(Uint32x4GetFlagInstr);
+  DISALLOW_COPY_AND_ASSIGN(Int32x4GetFlagInstr);
 };
 
 
@@ -5803,8 +5803,8 @@
     if (op_kind_ == MethodRecognizer::kFloat32x4GetSignMask) {
       return kUnboxedFloat32x4;
     }
-    ASSERT(op_kind_ == MethodRecognizer::kUint32x4GetSignMask);
-    return kUnboxedUint32x4;
+    ASSERT(op_kind_ == MethodRecognizer::kInt32x4GetSignMask);
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -5832,9 +5832,9 @@
 };
 
 
-class Uint32x4SelectInstr : public TemplateDefinition<3> {
+class Int32x4SelectInstr : public TemplateDefinition<3> {
  public:
-  Uint32x4SelectInstr(Value* mask, Value* trueValue, Value* falseValue,
+  Int32x4SelectInstr(Value* mask, Value* trueValue, Value* falseValue,
                       intptr_t deopt_id) {
     SetInputAt(0, mask);
     SetInputAt(1, trueValue);
@@ -5857,7 +5857,7 @@
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT((idx == 0) || (idx == 1) || (idx == 2));
     if (idx == 0) {
-      return kUnboxedUint32x4;
+      return kUnboxedInt32x4;
     }
     return kUnboxedFloat32x4;
   }
@@ -5868,7 +5868,7 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Uint32x4Select)
+  DECLARE_INSTRUCTION(Int32x4Select)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
@@ -5879,13 +5879,13 @@
   virtual bool MayThrow() const { return false; }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(Uint32x4SelectInstr);
+  DISALLOW_COPY_AND_ASSIGN(Int32x4SelectInstr);
 };
 
 
-class Uint32x4SetFlagInstr : public TemplateDefinition<2> {
+class Int32x4SetFlagInstr : public TemplateDefinition<2> {
  public:
-  Uint32x4SetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
+  Int32x4SetFlagInstr(MethodRecognizer::Kind op_kind, Value* value,
                        Value* flagValue, intptr_t deopt_id)
       : op_kind_(op_kind) {
     SetInputAt(0, value);
@@ -5903,7 +5903,7 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-      return kUnboxedUint32x4;
+      return kUnboxedInt32x4;
   }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
@@ -5911,7 +5911,7 @@
     if (idx == 1) {
       return kTagged;
     }
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -5920,14 +5920,14 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Uint32x4SetFlag)
+  DECLARE_INSTRUCTION(Int32x4SetFlag)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
   virtual EffectSet Effects() const { return EffectSet::None(); }
   virtual EffectSet Dependencies() const { return EffectSet::None(); }
   virtual bool AttributesEqual(Instruction* other) const {
-    return op_kind() == other->AsUint32x4SetFlag()->op_kind();
+    return op_kind() == other->AsInt32x4SetFlag()->op_kind();
   }
 
   virtual bool MayThrow() const { return false; }
@@ -5935,13 +5935,13 @@
  private:
   const MethodRecognizer::Kind op_kind_;
 
-  DISALLOW_COPY_AND_ASSIGN(Uint32x4SetFlagInstr);
+  DISALLOW_COPY_AND_ASSIGN(Int32x4SetFlagInstr);
 };
 
 
-class Uint32x4ToFloat32x4Instr : public TemplateDefinition<1> {
+class Int32x4ToFloat32x4Instr : public TemplateDefinition<1> {
  public:
-  Uint32x4ToFloat32x4Instr(Value* left, intptr_t deopt_id) {
+  Int32x4ToFloat32x4Instr(Value* left, intptr_t deopt_id) {
     SetInputAt(0, left);
     deopt_id_ = deopt_id;
   }
@@ -5958,7 +5958,7 @@
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT(idx == 0);
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -5967,7 +5967,7 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(Uint32x4ToFloat32x4)
+  DECLARE_INSTRUCTION(Int32x4ToFloat32x4)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
@@ -5978,13 +5978,13 @@
   virtual bool MayThrow() const { return false; }
 
  private:
-  DISALLOW_COPY_AND_ASSIGN(Uint32x4ToFloat32x4Instr);
+  DISALLOW_COPY_AND_ASSIGN(Int32x4ToFloat32x4Instr);
 };
 
 
-class BinaryUint32x4OpInstr : public TemplateDefinition<2> {
+class BinaryInt32x4OpInstr : public TemplateDefinition<2> {
  public:
-  BinaryUint32x4OpInstr(Token::Kind op_kind,
+  BinaryInt32x4OpInstr(Token::Kind op_kind,
                         Value* left,
                         Value* right,
                         intptr_t deopt_id)
@@ -6004,12 +6004,12 @@
   virtual bool CanDeoptimize() const { return false; }
 
   virtual Representation representation() const {
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual Representation RequiredInputRepresentation(intptr_t idx) const {
     ASSERT((idx == 0) || (idx == 1));
-    return kUnboxedUint32x4;
+    return kUnboxedInt32x4;
   }
 
   virtual intptr_t DeoptimizationTarget() const {
@@ -6018,14 +6018,14 @@
     return deopt_id_;
   }
 
-  DECLARE_INSTRUCTION(BinaryUint32x4Op)
+  DECLARE_INSTRUCTION(BinaryInt32x4Op)
   virtual CompileType ComputeType() const;
 
   virtual bool AllowsCSE() const { return true; }
   virtual EffectSet Effects() const { return EffectSet::None(); }
   virtual EffectSet Dependencies() const { return EffectSet::None(); }
   virtual bool AttributesEqual(Instruction* other) const {
-    return op_kind() == other->AsBinaryUint32x4Op()->op_kind();
+    return op_kind() == other->AsBinaryInt32x4Op()->op_kind();
   }
 
   virtual bool MayThrow() const { return false; }
@@ -6033,7 +6033,7 @@
  private:
   const Token::Kind op_kind_;
 
-  DISALLOW_COPY_AND_ASSIGN(BinaryUint32x4OpInstr);
+  DISALLOW_COPY_AND_ASSIGN(BinaryInt32x4OpInstr);
 };
 
 class BinaryMintOpInstr : public TemplateDefinition<2> {
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index 3c613e8..43ab8a1 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -979,8 +979,8 @@
       return CompileType::FromCid(kDoubleCid);
     case kTypedDataFloat32x4ArrayCid:
       return CompileType::FromCid(kFloat32x4Cid);
-    case kTypedDataUint32x4ArrayCid:
-      return CompileType::FromCid(kUint32x4Cid);
+    case kTypedDataInt32x4ArrayCid:
+      return CompileType::FromCid(kInt32x4Cid);
 
     case kTypedDataInt8ArrayCid:
     case kTypedDataUint8ArrayCid:
@@ -1030,8 +1030,8 @@
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
       return kUnboxedDouble;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
     default:
@@ -1053,7 +1053,7 @@
   locs->set_in(1, Location::WritableRegister());
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     locs->set_out(Location::RequiresFpuRegister());
   } else {
     locs->set_out(Location::RequiresRegister());
@@ -1106,7 +1106,7 @@
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedMint) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     QRegister result = locs()->out().fpu_reg();
     DRegister dresult0 = EvenDRegisterOf(result);
     DRegister dresult1 = OddDRegisterOf(result);
@@ -1131,7 +1131,7 @@
         element_address = Address(index.reg(), 0);
         __ vldrd(dresult0, element_address);
         break;
-      case kTypedDataUint32x4ArrayCid:
+      case kTypedDataInt32x4ArrayCid:
       case kTypedDataFloat32x4ArrayCid:
         __ add(index.reg(), index.reg(), ShifterOperand(array));
         __ LoadDFromOffset(dresult0, index.reg(), 0);
@@ -1217,8 +1217,8 @@
       return kUnboxedDouble;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     default:
       UNREACHABLE();
       return kTagged;
@@ -1256,7 +1256,7 @@
       break;
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:  // TODO(srdjan): Support Float64 constants.
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
@@ -1397,7 +1397,7 @@
       __ StoreDToOffset(in2, index.reg(), 0);
       break;
     }
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid: {
       QRegister in = locs()->in(2).fpu_reg();
       DRegister din0 = EvenDRegisterOf(in);
@@ -1523,7 +1523,7 @@
           __ CompareImmediate(value_cid_reg, kNullCid);
           __ b(&no_fixed_length, EQ);
           // Check for typed data array.
-          __ CompareImmediate(value_cid_reg, kTypedDataUint32x4ArrayCid);
+          __ CompareImmediate(value_cid_reg, kTypedDataInt32x4ArrayCid);
           __ b(&no_fixed_length, GT);
           __ CompareImmediate(value_cid_reg, kTypedDataInt8ArrayCid);
           // Could still be a regular array.
@@ -1603,7 +1603,7 @@
         __ CompareImmediate(value_cid_reg, kNullCid);
         __ b(&no_fixed_length, EQ);
         // Check for typed data array.
-        __ CompareImmediate(value_cid_reg, kTypedDataUint32x4ArrayCid);
+        __ CompareImmediate(value_cid_reg, kTypedDataInt32x4ArrayCid);
         __ b(&no_fixed_length, GT);
         __ CompareImmediate(value_cid_reg, kTypedDataInt8ArrayCid);
         // Could still be a regular array.
@@ -2886,7 +2886,7 @@
 }
 
 
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -2899,18 +2899,18 @@
 }
 
 
-class BoxUint32x4SlowPath : public SlowPathCode {
+class BoxInt32x4SlowPath : public SlowPathCode {
  public:
-  explicit BoxUint32x4SlowPath(BoxUint32x4Instr* instruction)
+  explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction)
       : instruction_(instruction) { }
 
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
-    __ Comment("BoxUint32x4SlowPath");
+    __ Comment("BoxInt32x4SlowPath");
     __ Bind(entry_label());
-    const Class& uint32x4_class = compiler->uint32x4_class();
+    const Class& int32x4_class = compiler->int32x4_class();
     const Code& stub =
-        Code::Handle(StubCode::GetAllocationStubForClass(uint32x4_class));
-    const ExternalLabel label(uint32x4_class.ToCString(), stub.EntryPoint());
+        Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class));
+    const ExternalLabel label(int32x4_class.ToCString(), stub.EntryPoint());
 
     LocationSummary* locs = instruction_->locs();
     locs->live_registers()->Remove(locs->out());
@@ -2927,12 +2927,12 @@
   }
 
  private:
-  BoxUint32x4Instr* instruction_;
+  BoxInt32x4Instr* instruction_;
 };
 
 
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  BoxUint32x4SlowPath* slow_path = new BoxUint32x4SlowPath(this);
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  BoxInt32x4SlowPath* slow_path = new BoxInt32x4SlowPath(this);
   compiler->AddSlowPathCode(slow_path);
 
   Register out_reg = locs()->out().reg();
@@ -2940,21 +2940,21 @@
   DRegister value_even = EvenDRegisterOf(value);
   DRegister value_odd = OddDRegisterOf(value);
 
-  __ TryAllocate(compiler->uint32x4_class(),
+  __ TryAllocate(compiler->int32x4_class(),
                  slow_path->entry_label(),
                  out_reg);
   __ Bind(slow_path->exit_label());
   __ StoreDToOffset(value_even, out_reg,
-      Uint32x4::value_offset() - kHeapObjectTag);
+      Int32x4::value_offset() - kHeapObjectTag);
   __ StoreDToOffset(value_odd, out_reg,
-      Uint32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
+      Int32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
 }
 
 
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t value_cid = value()->Type()->ToCid();
   const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps = value_cid == kUint32x4Cid ? 0 : 1;
+  const intptr_t kNumTemps = value_cid == kInt32x4Cid ? 0 : 1;
   LocationSummary* summary =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
   summary->set_in(0, Location::RequiresRegister());
@@ -2967,26 +2967,26 @@
 }
 
 
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const intptr_t value_cid = value()->Type()->ToCid();
   const Register value = locs()->in(0).reg();
   const QRegister result = locs()->out().fpu_reg();
 
-  if (value_cid != kUint32x4Cid) {
+  if (value_cid != kInt32x4Cid) {
     const Register temp = locs()->temp(0).reg();
     Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
     __ tst(value, ShifterOperand(kSmiTagMask));
     __ b(deopt, EQ);
-    __ CompareClassId(value, kUint32x4Cid, temp);
+    __ CompareClassId(value, kInt32x4Cid, temp);
     __ b(deopt, NE);
   }
 
   const DRegister result_even = EvenDRegisterOf(result);
   const DRegister result_odd = OddDRegisterOf(result);
   __ LoadDFromOffset(result_even, value,
-      Uint32x4::value_offset() - kHeapObjectTag);
+      Int32x4::value_offset() - kHeapObjectTag);
   __ LoadDFromOffset(result_odd, value,
-      Uint32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
+      Int32x4::value_offset() + 2*kWordSize - kHeapObjectTag);
 }
 
 
@@ -3091,7 +3091,7 @@
       __ vdup(kWord, result, dvalue1, 1);
       __ vcvtds(dresult0, sresult0);
       break;
-    case MethodRecognizer::kUint32x4Shuffle:
+    case MethodRecognizer::kInt32x4Shuffle:
     case MethodRecognizer::kFloat32x4Shuffle:
       if (mask_ == 0x00) {
         __ vdup(kWord, result, dvalue0, 0);
@@ -3155,7 +3155,7 @@
 
   switch (op_kind()) {
     case MethodRecognizer::kFloat32x4ShuffleMix:
-    case MethodRecognizer::kUint32x4ShuffleMix:
+    case MethodRecognizer::kInt32x4ShuffleMix:
       // TODO(zra): Investigate better instruction sequences for shuffle masks.
       SRegister left_svalues[4];
       SRegister right_svalues[4];
@@ -3524,7 +3524,7 @@
 }
 
 
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3535,7 +3535,7 @@
 }
 
 
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister value = locs()->in(0).fpu_reg();
   QRegister result = locs()->out().fpu_reg();
 
@@ -3545,7 +3545,7 @@
 }
 
 
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 4;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3561,7 +3561,7 @@
 }
 
 
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   Register v0 = locs()->in(0).reg();
   Register v1 = locs()->in(1).reg();
   Register v2 = locs()->in(2).reg();
@@ -3592,7 +3592,7 @@
 }
 
 
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3604,7 +3604,7 @@
 }
 
 
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister value = locs()->in(0).fpu_reg();
   Register result = locs()->out().reg();
 
@@ -3616,16 +3616,16 @@
   SRegister svalue3 = OddSRegisterOf(dvalue1);
 
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4GetFlagX:
+    case MethodRecognizer::kInt32x4GetFlagX:
       __ vmovrs(result, svalue0);
       break;
-    case MethodRecognizer::kUint32x4GetFlagY:
+    case MethodRecognizer::kInt32x4GetFlagY:
       __ vmovrs(result, svalue1);
       break;
-    case MethodRecognizer::kUint32x4GetFlagZ:
+    case MethodRecognizer::kInt32x4GetFlagZ:
       __ vmovrs(result, svalue2);
       break;
-    case MethodRecognizer::kUint32x4GetFlagW:
+    case MethodRecognizer::kInt32x4GetFlagW:
       __ vmovrs(result, svalue3);
       break;
     default: UNREACHABLE();
@@ -3637,7 +3637,7 @@
 }
 
 
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 3;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3651,7 +3651,7 @@
 }
 
 
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister mask = locs()->in(0).fpu_reg();
   QRegister trueValue = locs()->in(1).fpu_reg();
   QRegister falseValue = locs()->in(2).fpu_reg();
@@ -3672,7 +3672,7 @@
 }
 
 
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3685,7 +3685,7 @@
 }
 
 
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister mask = locs()->in(0).fpu_reg();
   Register flag = locs()->in(1).reg();
   QRegister result = locs()->out().fpu_reg();
@@ -3705,16 +3705,16 @@
   __ LoadImmediate(TMP, 0xffffffff, EQ);
   __ LoadImmediate(TMP, 0, NE);
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4WithFlagX:
+    case MethodRecognizer::kInt32x4WithFlagX:
       __ vmovsr(sresult0, TMP);
       break;
-    case MethodRecognizer::kUint32x4WithFlagY:
+    case MethodRecognizer::kInt32x4WithFlagY:
       __ vmovsr(sresult1, TMP);
       break;
-    case MethodRecognizer::kUint32x4WithFlagZ:
+    case MethodRecognizer::kInt32x4WithFlagZ:
       __ vmovsr(sresult2, TMP);
       break;
-    case MethodRecognizer::kUint32x4WithFlagW:
+    case MethodRecognizer::kInt32x4WithFlagW:
       __ vmovsr(sresult3, TMP);
       break;
     default: UNREACHABLE();
@@ -3722,7 +3722,7 @@
 }
 
 
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3733,7 +3733,7 @@
 }
 
 
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister value = locs()->in(0).fpu_reg();
   QRegister result = locs()->out().fpu_reg();
 
@@ -3743,7 +3743,7 @@
 }
 
 
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3755,7 +3755,7 @@
 }
 
 
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   QRegister left = locs()->in(0).fpu_reg();
   QRegister right = locs()->in(1).fpu_reg();
   QRegister result = locs()->out().fpu_reg();
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index ba97036..160fe52 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -1050,8 +1050,8 @@
       return CompileType::FromCid(kDoubleCid);
     case kTypedDataFloat32x4ArrayCid:
       return CompileType::FromCid(kFloat32x4Cid);
-    case kTypedDataUint32x4ArrayCid:
-      return CompileType::FromCid(kUint32x4Cid);
+    case kTypedDataInt32x4ArrayCid:
+      return CompileType::FromCid(kInt32x4Cid);
 
     case kTypedDataInt8ArrayCid:
     case kTypedDataUint8ArrayCid:
@@ -1103,8 +1103,8 @@
       return kUnboxedDouble;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     default:
       UNIMPLEMENTED();
       return kTagged;
@@ -1130,7 +1130,7 @@
   }
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     locs->set_out(Location::RequiresFpuRegister());
   } else {
     locs->set_out(Location::RequiresRegister());
@@ -1163,7 +1163,7 @@
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedMint) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     XmmRegister result = locs()->out().fpu_reg();
     if ((index_scale() == 1) && index.IsRegister()) {
       __ SmiUntag(index.reg());
@@ -1185,7 +1185,7 @@
       case kTypedDataFloat64ArrayCid:
         __ movsd(result, element_address);
         break;
-      case kTypedDataUint32x4ArrayCid:
+      case kTypedDataInt32x4ArrayCid:
       case kTypedDataFloat32x4ArrayCid:
         __ movups(result, element_address);
         break;
@@ -1272,8 +1272,8 @@
       return kUnboxedDouble;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     default:
       UNIMPLEMENTED();
       return kTagged;
@@ -1334,7 +1334,7 @@
       // TODO(srdjan): Support Float64 constants.
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
@@ -1455,7 +1455,7 @@
     case kTypedDataFloat64ArrayCid:
       __ movsd(element_address, locs()->in(2).fpu_reg());
       break;
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       __ movups(element_address, locs()->in(2).fpu_reg());
       break;
@@ -1585,7 +1585,7 @@
           __ cmpl(value_cid_reg, Immediate(kNullCid));
           __ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
           // Check for typed data array.
-          __ cmpl(value_cid_reg, Immediate(kTypedDataUint32x4ArrayCid));
+          __ cmpl(value_cid_reg, Immediate(kTypedDataInt32x4ArrayCid));
           // Not a typed array or a regular array.
           __ j(GREATER, &no_fixed_length, Assembler::kNearJump);
           __ cmpl(value_cid_reg, Immediate(kTypedDataInt8ArrayCid));
@@ -1672,7 +1672,7 @@
         __ cmpl(value_cid_reg, Immediate(kNullCid));
         __ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
         // Check for typed data array.
-        __ cmpl(value_cid_reg, Immediate(kTypedDataUint32x4ArrayCid));
+        __ cmpl(value_cid_reg, Immediate(kTypedDataInt32x4ArrayCid));
         // Not a typed array or a regular array.
         __ j(GREATER, &no_fixed_length, Assembler::kNearJump);
         __ cmpl(value_cid_reg, Immediate(kTypedDataInt8ArrayCid));
@@ -2984,7 +2984,7 @@
 }
 
 
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -2997,18 +2997,18 @@
 }
 
 
-class BoxUint32x4SlowPath : public SlowPathCode {
+class BoxInt32x4SlowPath : public SlowPathCode {
  public:
-  explicit BoxUint32x4SlowPath(BoxUint32x4Instr* instruction)
+  explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction)
       : instruction_(instruction) { }
 
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
-    __ Comment("BoxUint32x4SlowPath");
+    __ Comment("BoxInt32x4SlowPath");
     __ Bind(entry_label());
-    const Class& uint32x4_class = compiler->uint32x4_class();
+    const Class& int32x4_class = compiler->int32x4_class();
     const Code& stub =
-        Code::Handle(StubCode::GetAllocationStubForClass(uint32x4_class));
-    const ExternalLabel label(uint32x4_class.ToCString(), stub.EntryPoint());
+        Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class));
+    const ExternalLabel label(int32x4_class.ToCString(), stub.EntryPoint());
 
     LocationSummary* locs = instruction_->locs();
     locs->live_registers()->Remove(locs->out());
@@ -3025,30 +3025,30 @@
   }
 
  private:
-  BoxUint32x4Instr* instruction_;
+  BoxInt32x4Instr* instruction_;
 };
 
 
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  BoxUint32x4SlowPath* slow_path = new BoxUint32x4SlowPath(this);
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  BoxInt32x4SlowPath* slow_path = new BoxInt32x4SlowPath(this);
   compiler->AddSlowPathCode(slow_path);
 
   Register out_reg = locs()->out().reg();
   XmmRegister value = locs()->in(0).fpu_reg();
 
-  __ TryAllocate(compiler->uint32x4_class(),
+  __ TryAllocate(compiler->int32x4_class(),
                  slow_path->entry_label(),
                  Assembler::kFarJump,
                  out_reg);
   __ Bind(slow_path->exit_label());
-  __ movups(FieldAddress(out_reg, Uint32x4::value_offset()), value);
+  __ movups(FieldAddress(out_reg, Int32x4::value_offset()), value);
 }
 
 
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t value_cid = value()->Type()->ToCid();
   const intptr_t kNumInputs = 1;
-  const intptr_t kNumTemps = value_cid == kUint32x4Cid ? 0 : 1;
+  const intptr_t kNumTemps = value_cid == kInt32x4Cid ? 0 : 1;
   LocationSummary* summary =
       new LocationSummary(kNumInputs, kNumTemps, LocationSummary::kNoCall);
   summary->set_in(0, Location::RequiresRegister());
@@ -3061,20 +3061,20 @@
 }
 
 
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const intptr_t value_cid = value()->Type()->ToCid();
   const Register value = locs()->in(0).reg();
   const XmmRegister result = locs()->out().fpu_reg();
 
-  if (value_cid != kUint32x4Cid) {
+  if (value_cid != kInt32x4Cid) {
     const Register temp = locs()->temp(0).reg();
     Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
     __ testl(value, Immediate(kSmiTagMask));
     __ j(ZERO, deopt);
-    __ CompareClassId(value, kUint32x4Cid, temp);
+    __ CompareClassId(value, kInt32x4Cid, temp);
     __ j(NOT_EQUAL, deopt);
   }
-  __ movups(result, FieldAddress(value, Uint32x4::value_offset()));
+  __ movups(result, FieldAddress(value, Int32x4::value_offset()));
 }
 
 
@@ -3169,7 +3169,7 @@
       __ cvtss2sd(value, value);
       break;
     case MethodRecognizer::kFloat32x4Shuffle:
-    case MethodRecognizer::kUint32x4Shuffle:
+    case MethodRecognizer::kInt32x4Shuffle:
       __ shufps(value, value, Immediate(mask_));
       break;
     default: UNREACHABLE();
@@ -3196,7 +3196,7 @@
   ASSERT(locs()->out().fpu_reg() == left);
   switch (op_kind()) {
     case MethodRecognizer::kFloat32x4ShuffleMix:
-    case MethodRecognizer::kUint32x4ShuffleMix:
+    case MethodRecognizer::kInt32x4ShuffleMix:
       __ shufps(left, right, Immediate(mask_));
       break;
     default: UNREACHABLE();
@@ -3549,7 +3549,7 @@
 }
 
 
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3560,12 +3560,12 @@
 }
 
 
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // NOP.
 }
 
 
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 4;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3579,7 +3579,7 @@
 }
 
 
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   Register v0 = locs()->in(0).reg();
   Register v1 = locs()->in(1).reg();
   Register v2 = locs()->in(2).reg();
@@ -3627,7 +3627,7 @@
 }
 
 
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3638,7 +3638,7 @@
 }
 
 
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister value = locs()->in(0).fpu_reg();
   Register result = locs()->out().reg();
   Label done;
@@ -3647,16 +3647,16 @@
   // Move value to stack.
   __ movups(Address(ESP, 0), value);
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4GetFlagX:
+    case MethodRecognizer::kInt32x4GetFlagX:
       __ movl(result, Address(ESP, 0));
       break;
-    case MethodRecognizer::kUint32x4GetFlagY:
+    case MethodRecognizer::kInt32x4GetFlagY:
       __ movl(result, Address(ESP, 4));
       break;
-    case MethodRecognizer::kUint32x4GetFlagZ:
+    case MethodRecognizer::kInt32x4GetFlagZ:
       __ movl(result, Address(ESP, 8));
       break;
-    case MethodRecognizer::kUint32x4GetFlagW:
+    case MethodRecognizer::kInt32x4GetFlagW:
       __ movl(result, Address(ESP, 12));
       break;
     default: UNREACHABLE();
@@ -3672,7 +3672,7 @@
 }
 
 
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 3;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3686,7 +3686,7 @@
 }
 
 
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister mask = locs()->in(0).fpu_reg();
   XmmRegister trueValue = locs()->in(1).fpu_reg();
   XmmRegister falseValue = locs()->in(2).fpu_reg();
@@ -3706,7 +3706,7 @@
 }
 
 
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3718,7 +3718,7 @@
 }
 
 
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister mask = locs()->in(0).fpu_reg();
   Register flag = locs()->in(1).reg();
   ASSERT(mask == locs()->out().fpu_reg());
@@ -3729,25 +3729,25 @@
   __ CompareObject(flag, Bool::True());
   __ j(NOT_EQUAL, &falsePath);
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4WithFlagX:
+    case MethodRecognizer::kInt32x4WithFlagX:
       __ movl(Address(ESP, 0), Immediate(0xFFFFFFFF));
       __ jmp(&exitPath);
       __ Bind(&falsePath);
       __ movl(Address(ESP, 0), Immediate(0x0));
     break;
-    case MethodRecognizer::kUint32x4WithFlagY:
+    case MethodRecognizer::kInt32x4WithFlagY:
       __ movl(Address(ESP, 4), Immediate(0xFFFFFFFF));
       __ jmp(&exitPath);
       __ Bind(&falsePath);
       __ movl(Address(ESP, 4), Immediate(0x0));
     break;
-    case MethodRecognizer::kUint32x4WithFlagZ:
+    case MethodRecognizer::kInt32x4WithFlagZ:
       __ movl(Address(ESP, 8), Immediate(0xFFFFFFFF));
       __ jmp(&exitPath);
       __ Bind(&falsePath);
       __ movl(Address(ESP, 8), Immediate(0x0));
     break;
-    case MethodRecognizer::kUint32x4WithFlagW:
+    case MethodRecognizer::kInt32x4WithFlagW:
       __ movl(Address(ESP, 12), Immediate(0xFFFFFFFF));
       __ jmp(&exitPath);
       __ Bind(&falsePath);
@@ -3762,7 +3762,7 @@
 }
 
 
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3773,12 +3773,12 @@
 }
 
 
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // NOP.
 }
 
 
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3790,7 +3790,7 @@
 }
 
 
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister left = locs()->in(0).fpu_reg();
   XmmRegister right = locs()->in(1).fpu_reg();
   ASSERT(left == locs()->out().fpu_reg());
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
index ae873ee..77e0ffc 100644
--- a/runtime/vm/intermediate_language_mips.cc
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -1039,8 +1039,8 @@
       return CompileType::FromCid(kDoubleCid);
     case kTypedDataFloat32x4ArrayCid:
       return CompileType::FromCid(kFloat32x4Cid);
-    case kTypedDataUint32x4ArrayCid:
-      return CompileType::FromCid(kUint32x4Cid);
+    case kTypedDataInt32x4ArrayCid:
+      return CompileType::FromCid(kInt32x4Cid);
 
     case kTypedDataInt8ArrayCid:
     case kTypedDataUint8ArrayCid:
@@ -1090,8 +1090,8 @@
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
       return kUnboxedDouble;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
     default:
@@ -1113,7 +1113,7 @@
   locs->set_in(1, Location::WritableRegister());
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     locs->set_out(Location::RequiresFpuRegister());
   } else {
     locs->set_out(Location::RequiresRegister());
@@ -1173,7 +1173,7 @@
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedMint) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     DRegister result = locs()->out().fpu_reg();
     switch (class_id()) {
       case kTypedDataInt32ArrayCid:
@@ -1191,7 +1191,7 @@
         __ LoadDFromOffset(result, index.reg(),
             FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag);
         break;
-      case kTypedDataUint32x4ArrayCid:
+      case kTypedDataInt32x4ArrayCid:
       case kTypedDataFloat32x4ArrayCid:
         UNIMPLEMENTED();
         break;
@@ -1275,8 +1275,8 @@
       return kUnboxedDouble;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     default:
       UNIMPLEMENTED();
       return kTagged;
@@ -1318,7 +1318,7 @@
       locs->AddTemp(Location::RequiresFpuRegister());
       // Fall through.
     case kTypedDataFloat64ArrayCid:  // TODO(srdjan): Support Float64 constants.
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
@@ -1458,7 +1458,7 @@
       __ StoreDToOffset(locs()->in(2).fpu_reg(), index.reg(),
           FlowGraphCompiler::DataOffsetFor(class_id()) - kHeapObjectTag);
       break;
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       UNIMPLEMENTED();
       break;
@@ -1586,7 +1586,7 @@
           __ BranchSignedLess(CMPRES1, 0, &skip_length_check);
           __ BranchEqual(value_cid_reg, kNullCid, &no_fixed_length);
           // Check for typed data array.
-          __ BranchSignedGreater(value_cid_reg, kTypedDataUint32x4ArrayCid,
+          __ BranchSignedGreater(value_cid_reg, kTypedDataInt32x4ArrayCid,
                                  &no_fixed_length);
           __ BranchSignedLess(value_cid_reg, kTypedDataInt8ArrayCid,
                               &check_array);
@@ -1662,7 +1662,7 @@
         Label check_array, length_set, no_fixed_length;
         __ BranchEqual(value_cid_reg, kNullCid, &no_fixed_length);
         // Check for typed data array.
-        __ BranchSignedGreater(value_cid_reg, kTypedDataUint32x4ArrayCid,
+        __ BranchSignedGreater(value_cid_reg, kTypedDataInt32x4ArrayCid,
                                &no_fixed_length);
         __ BranchSignedLess(value_cid_reg, kTypedDataInt8ArrayCid,
                             &check_array);
@@ -2910,24 +2910,24 @@
 }
 
 
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
@@ -3102,35 +3102,35 @@
 }
 
 
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
@@ -3146,46 +3146,46 @@
 }
 
 
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
 
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
   UNIMPLEMENTED();
   return NULL;
 }
 
 
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   UNIMPLEMENTED();
 }
 
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index fcf2db7..e2dfa5d 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -1035,8 +1035,8 @@
       return CompileType::FromCid(kDoubleCid);
     case kTypedDataFloat32x4ArrayCid:
       return CompileType::FromCid(kFloat32x4Cid);
-    case kTypedDataUint32x4ArrayCid:
-      return CompileType::FromCid(kUint32x4Cid);
+    case kTypedDataInt32x4ArrayCid:
+      return CompileType::FromCid(kInt32x4Cid);
 
     case kTypedDataInt8ArrayCid:
     case kTypedDataUint8ArrayCid:
@@ -1077,8 +1077,8 @@
     case kTypedDataFloat32ArrayCid:
     case kTypedDataFloat64ArrayCid:
       return kUnboxedDouble;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
     default:
@@ -1109,7 +1109,7 @@
   }
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     locs->set_out(Location::RequiresFpuRegister());
   } else {
     locs->set_out(Location::RequiresRegister());
@@ -1144,7 +1144,7 @@
 
   if ((representation() == kUnboxedDouble) ||
       (representation() == kUnboxedFloat32x4) ||
-      (representation() == kUnboxedUint32x4)) {
+      (representation() == kUnboxedInt32x4)) {
     if ((index_scale() == 1) && index.IsRegister()) {
       __ SmiUntag(index.reg());
     }
@@ -1158,7 +1158,7 @@
     } else if (class_id() == kTypedDataFloat64ArrayCid) {
       __ movsd(result, element_address);
     } else {
-      ASSERT((class_id() == kTypedDataUint32x4ArrayCid) ||
+      ASSERT((class_id() == kTypedDataInt32x4ArrayCid) ||
              (class_id() == kTypedDataFloat32x4ArrayCid));
       __ movups(result, element_address);
     }
@@ -1230,8 +1230,8 @@
       return kUnboxedDouble;
     case kTypedDataFloat32x4ArrayCid:
       return kUnboxedFloat32x4;
-    case kTypedDataUint32x4ArrayCid:
-      return kUnboxedUint32x4;
+    case kTypedDataInt32x4ArrayCid:
+      return kUnboxedInt32x4;
     default:
       UNIMPLEMENTED();
       return kTagged;
@@ -1289,7 +1289,7 @@
       // TODO(srdjan): Support Float64 constants.
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       locs->set_in(2, Location::RequiresFpuRegister());
       break;
@@ -1407,7 +1407,7 @@
     case kTypedDataFloat64ArrayCid:
       __ movsd(element_address, locs()->in(2).fpu_reg());
       break;
-    case kTypedDataUint32x4ArrayCid:
+    case kTypedDataInt32x4ArrayCid:
     case kTypedDataFloat32x4ArrayCid:
       __ movups(element_address, locs()->in(2).fpu_reg());
       break;
@@ -1542,7 +1542,7 @@
           __ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
           // Check for typed data array.
           __ CompareImmediate(
-              value_cid_reg, Immediate(kTypedDataUint32x4ArrayCid), PP);
+              value_cid_reg, Immediate(kTypedDataInt32x4ArrayCid), PP);
           // Not a typed array or a regular array.
           __ j(GREATER, &no_fixed_length, Assembler::kNearJump);
           __ CompareImmediate(
@@ -1622,7 +1622,7 @@
         __ j(EQUAL, &no_fixed_length, Assembler::kNearJump);
         // Check for typed data array.
         __ CompareImmediate(value_cid_reg,
-                            Immediate(kTypedDataUint32x4ArrayCid), PP);
+                            Immediate(kTypedDataInt32x4ArrayCid), PP);
         // Not a typed array or a regular array.
         __ j(GREATER, &no_fixed_length);
         __ CompareImmediate(
@@ -3006,7 +3006,7 @@
 }
 
 
-LocationSummary* BoxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* BoxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3019,18 +3019,18 @@
 }
 
 
-class BoxUint32x4SlowPath : public SlowPathCode {
+class BoxInt32x4SlowPath : public SlowPathCode {
  public:
-  explicit BoxUint32x4SlowPath(BoxUint32x4Instr* instruction)
+  explicit BoxInt32x4SlowPath(BoxInt32x4Instr* instruction)
       : instruction_(instruction) { }
 
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
-    __ Comment("BoxUint32x4SlowPath");
+    __ Comment("BoxInt32x4SlowPath");
     __ Bind(entry_label());
-    const Class& uint32x4_class = compiler->uint32x4_class();
+    const Class& int32x4_class = compiler->int32x4_class();
     const Code& stub =
-        Code::Handle(StubCode::GetAllocationStubForClass(uint32x4_class));
-    const ExternalLabel label(uint32x4_class.ToCString(), stub.EntryPoint());
+        Code::Handle(StubCode::GetAllocationStubForClass(int32x4_class));
+    const ExternalLabel label(int32x4_class.ToCString(), stub.EntryPoint());
 
     LocationSummary* locs = instruction_->locs();
     locs->live_registers()->Remove(locs->out());
@@ -3047,28 +3047,28 @@
   }
 
  private:
-  BoxUint32x4Instr* instruction_;
+  BoxInt32x4Instr* instruction_;
 };
 
 
-void BoxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
-  BoxUint32x4SlowPath* slow_path = new BoxUint32x4SlowPath(this);
+void BoxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+  BoxInt32x4SlowPath* slow_path = new BoxInt32x4SlowPath(this);
   compiler->AddSlowPathCode(slow_path);
 
   Register out_reg = locs()->out().reg();
   XmmRegister value = locs()->in(0).fpu_reg();
 
-  __ TryAllocate(compiler->uint32x4_class(),
+  __ TryAllocate(compiler->int32x4_class(),
                  slow_path->entry_label(),
                  Assembler::kFarJump,
                  out_reg,
                  PP);
   __ Bind(slow_path->exit_label());
-  __ movups(FieldAddress(out_reg, Uint32x4::value_offset()), value);
+  __ movups(FieldAddress(out_reg, Int32x4::value_offset()), value);
 }
 
 
-LocationSummary* UnboxUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* UnboxInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3079,19 +3079,19 @@
 }
 
 
-void UnboxUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void UnboxInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   const intptr_t value_cid = value()->Type()->ToCid();
   const Register value = locs()->in(0).reg();
   const XmmRegister result = locs()->out().fpu_reg();
 
-  if (value_cid != kUint32x4Cid) {
+  if (value_cid != kInt32x4Cid) {
     Label* deopt = compiler->AddDeoptStub(deopt_id_, kDeoptCheckClass);
     __ testq(value, Immediate(kSmiTagMask));
     __ j(ZERO, deopt);
-    __ CompareClassId(value, kUint32x4Cid);
+    __ CompareClassId(value, kInt32x4Cid);
     __ j(NOT_EQUAL, deopt);
   }
-  __ movups(result, FieldAddress(value, Uint32x4::value_offset()));
+  __ movups(result, FieldAddress(value, Int32x4::value_offset()));
 }
 
 
@@ -3185,7 +3185,7 @@
       __ cvtss2sd(value, value);
       break;
     case MethodRecognizer::kFloat32x4Shuffle:
-    case MethodRecognizer::kUint32x4Shuffle:
+    case MethodRecognizer::kInt32x4Shuffle:
       __ shufps(value, value, Immediate(mask_));
       break;
     default: UNREACHABLE();
@@ -3212,7 +3212,7 @@
   ASSERT(locs()->out().fpu_reg() == left);
   switch (op_kind()) {
     case MethodRecognizer::kFloat32x4ShuffleMix:
-    case MethodRecognizer::kUint32x4ShuffleMix:
+    case MethodRecognizer::kInt32x4ShuffleMix:
       __ shufps(left, right, Immediate(mask_));
       break;
     default: UNREACHABLE();
@@ -3565,7 +3565,7 @@
 }
 
 
-LocationSummary* Float32x4ToUint32x4Instr::MakeLocationSummary() const {
+LocationSummary* Float32x4ToInt32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3576,12 +3576,12 @@
 }
 
 
-void Float32x4ToUint32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Float32x4ToInt32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // NOP.
 }
 
 
-LocationSummary* Uint32x4BoolConstructorInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4BoolConstructorInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 4;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3596,7 +3596,7 @@
 }
 
 
-void Uint32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4BoolConstructorInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   Register v0 = locs()->in(0).reg();
   Register v1 = locs()->in(1).reg();
   Register v2 = locs()->in(2).reg();
@@ -3650,7 +3650,7 @@
 }
 
 
-LocationSummary* Uint32x4GetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4GetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3661,7 +3661,7 @@
 }
 
 
-void Uint32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4GetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister value = locs()->in(0).fpu_reg();
   Register result = locs()->out().reg();
   Label done;
@@ -3670,16 +3670,16 @@
   // Move value to stack.
   __ movups(Address(RSP, 0), value);
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4GetFlagX:
+    case MethodRecognizer::kInt32x4GetFlagX:
       __ movl(result, Address(RSP, 0));
       break;
-    case MethodRecognizer::kUint32x4GetFlagY:
+    case MethodRecognizer::kInt32x4GetFlagY:
       __ movl(result, Address(RSP, 4));
       break;
-    case MethodRecognizer::kUint32x4GetFlagZ:
+    case MethodRecognizer::kInt32x4GetFlagZ:
       __ movl(result, Address(RSP, 8));
       break;
-    case MethodRecognizer::kUint32x4GetFlagW:
+    case MethodRecognizer::kInt32x4GetFlagW:
       __ movl(result, Address(RSP, 12));
       break;
     default: UNREACHABLE();
@@ -3695,7 +3695,7 @@
 }
 
 
-LocationSummary* Uint32x4SelectInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SelectInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 3;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3709,7 +3709,7 @@
 }
 
 
-void Uint32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SelectInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister mask = locs()->in(0).fpu_reg();
   XmmRegister trueValue = locs()->in(1).fpu_reg();
   XmmRegister falseValue = locs()->in(2).fpu_reg();
@@ -3729,7 +3729,7 @@
 }
 
 
-LocationSummary* Uint32x4SetFlagInstr::MakeLocationSummary() const {
+LocationSummary* Int32x4SetFlagInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 1;
   LocationSummary* summary =
@@ -3742,7 +3742,7 @@
 }
 
 
-void Uint32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4SetFlagInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister mask = locs()->in(0).fpu_reg();
   Register flag = locs()->in(1).reg();
   Register temp = locs()->temp(0).reg();
@@ -3754,7 +3754,7 @@
   __ CompareObject(flag, Bool::True(), PP);
   __ j(NOT_EQUAL, &falsePath);
   switch (op_kind()) {
-    case MethodRecognizer::kUint32x4WithFlagX:
+    case MethodRecognizer::kInt32x4WithFlagX:
       __ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
       __ movl(Address(RSP, 0), temp);
       __ jmp(&exitPath);
@@ -3762,7 +3762,7 @@
       __ LoadImmediate(temp, Immediate(0x0), PP);
       __ movl(Address(RSP, 0), temp);
     break;
-    case MethodRecognizer::kUint32x4WithFlagY:
+    case MethodRecognizer::kInt32x4WithFlagY:
       __ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
       __ movl(Address(RSP, 4), temp);
       __ jmp(&exitPath);
@@ -3770,7 +3770,7 @@
       __ LoadImmediate(temp, Immediate(0x0), PP);
       __ movl(Address(RSP, 4), temp);
     break;
-    case MethodRecognizer::kUint32x4WithFlagZ:
+    case MethodRecognizer::kInt32x4WithFlagZ:
       __ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
       __ movl(Address(RSP, 8), temp);
       __ jmp(&exitPath);
@@ -3778,7 +3778,7 @@
       __ LoadImmediate(temp, Immediate(0x0), PP);
       __ movl(Address(RSP, 8), temp);
     break;
-    case MethodRecognizer::kUint32x4WithFlagW:
+    case MethodRecognizer::kInt32x4WithFlagW:
       __ LoadImmediate(temp, Immediate(0xFFFFFFFF), PP);
       __ movl(Address(RSP, 12), temp);
       __ jmp(&exitPath);
@@ -3795,7 +3795,7 @@
 }
 
 
-LocationSummary* Uint32x4ToFloat32x4Instr::MakeLocationSummary() const {
+LocationSummary* Int32x4ToFloat32x4Instr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 1;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3806,12 +3806,12 @@
 }
 
 
-void Uint32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void Int32x4ToFloat32x4Instr::EmitNativeCode(FlowGraphCompiler* compiler) {
   // NOP.
 }
 
 
-LocationSummary* BinaryUint32x4OpInstr::MakeLocationSummary() const {
+LocationSummary* BinaryInt32x4OpInstr::MakeLocationSummary() const {
   const intptr_t kNumInputs = 2;
   const intptr_t kNumTemps = 0;
   LocationSummary* summary =
@@ -3823,7 +3823,7 @@
 }
 
 
-void BinaryUint32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
+void BinaryInt32x4OpInstr::EmitNativeCode(FlowGraphCompiler* compiler) {
   XmmRegister left = locs()->in(0).fpu_reg();
   XmmRegister right = locs()->in(1).fpu_reg();
   ASSERT(left == locs()->out().fpu_reg());
diff --git a/runtime/vm/intrinsifier.h b/runtime/vm/intrinsifier.h
index cc80d32..bfba629 100644
--- a/runtime/vm/intrinsifier.h
+++ b/runtime/vm/intrinsifier.h
@@ -119,7 +119,7 @@
   V(_Float32Array, _new, TypedData_Float32Array_new, 1931183334)               \
   V(_Float64Array, _new, TypedData_Float64Array_new, 2119419798)               \
   V(_Float32x4Array, _new, TypedData_Float32x4Array_new, 435301615)            \
-  V(_Uint32x4Array, _new, TypedData_Uint32x4Array_new, 71945244)               \
+  V(_Int32x4Array, _new, TypedData_Int32x4Array_new, 1734048395)               \
   V(_Int8Array, ., TypedData_Int8Array_factory, 810750844)                     \
   V(_Uint8Array, ., TypedData_Uint8Array_factory, 1246070930)                  \
   V(_Uint8ClampedArray, ., TypedData_Uint8ClampedArray_factory, 1882603960)    \
@@ -132,7 +132,7 @@
   V(_Float32Array, ., TypedData_Float32Array_factory, 1986018007)              \
   V(_Float64Array, ., TypedData_Float64Array_factory, 1863852388)              \
   V(_Float32x4Array, ., TypedData_Float32x4Array_factory, 1144749257)          \
-  V(_Uint32x4Array, ., TypedData_Uint32x4Array_factory, 966782236)             \
+  V(_Int32x4Array, ., TypedData_Int32x4Array_factory, 1189356537)              \
 
 
 // TODO(srdjan): Implement _FixedSizeArrayIterator, get:current and
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 49eb208..37b6dbe 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -535,10 +535,6 @@
     args.SetAt(0, Instance::Handle(func.ImplicitStaticClosure()));
     args.SetAt(1, is_spawn_uri ? Bool::True() : Bool::False());
 
-    // Dispatching through _startIsolate will open a control port as a live
-    // port. Account for this by increasing the number of open control ports.
-    isolate->message_handler()->increment_control_ports();
-
     const Library& lib = Library::Handle(Library::IsolateLibrary());
     const String& entry_name = String::Handle(String::New("_startIsolate"));
     const Function& entry_point =
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index bd3d0be..35e6613 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -48,7 +48,7 @@
 class RawInteger;
 class RawError;
 class RawFloat32x4;
-class RawUint32x4;
+class RawInt32x4;
 class Simulator;
 class StackResource;
 class StackZone;
diff --git a/runtime/vm/locations.h b/runtime/vm/locations.h
index 8e34046..6d93f71 100644
--- a/runtime/vm/locations.h
+++ b/runtime/vm/locations.h
@@ -22,7 +22,7 @@
   kUnboxedDouble,
   kUnboxedMint,
   kUnboxedFloat32x4,
-  kUnboxedUint32x4,
+  kUnboxedInt32x4,
   kNumRepresentations
 };
 
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 98a8c9c..b097151 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -480,7 +480,7 @@
     cls.raw_ = class_class_;
     cls.set_handle_vtable(fake.vtable());
     cls.set_instance_size(Class::InstanceSize());
-    cls.set_next_field_offset(Class::InstanceSize());
+    cls.set_next_field_offset(Class::NextFieldOffset());
     cls.set_id(Class::kClassId);
     cls.set_state_bits(0);
     cls.set_is_finalized();
@@ -1148,13 +1148,13 @@
 
   CLASS_LIST_TYPED_DATA(REGISTER_EXT_TYPED_DATA_CLASS);
 #undef REGISTER_EXT_TYPED_DATA_CLASS
-  // Register Float32x4 and Uint32x4 in the object store.
+  // Register Float32x4 and Int32x4 in the object store.
   cls = Class::New<Float32x4>();
   object_store->set_float32x4_class(cls);
   RegisterPrivateClass(cls, Symbols::_Float32x4(), lib);
-  cls = Class::New<Uint32x4>();
-  object_store->set_uint32x4_class(cls);
-  RegisterPrivateClass(cls, Symbols::_Uint32x4(), lib);
+  cls = Class::New<Int32x4>();
+  object_store->set_int32x4_class(cls);
+  RegisterPrivateClass(cls, Symbols::_Int32x4(), lib);
 
   cls = Class::New<Instance>(kIllegalCid);
   RegisterClass(cls, Symbols::Float32x4(), lib);
@@ -1166,13 +1166,13 @@
   object_store->set_float32x4_type(type);
 
   cls = Class::New<Instance>(kIllegalCid);
-  RegisterClass(cls, Symbols::Uint32x4(), lib);
+  RegisterClass(cls, Symbols::Int32x4(), lib);
   cls.set_num_type_arguments(0);
   cls.set_num_own_type_arguments(0);
   cls.set_is_prefinalized();
   pending_classes.Add(cls);
   type = Type::NewNonParameterizedType(cls);
-  object_store->set_uint32x4_type(type);
+  object_store->set_int32x4_type(type);
 
   object_store->set_typed_data_classes(typed_data_classes);
 
@@ -1308,8 +1308,8 @@
   cls = Class::New<Float32x4>();
   object_store->set_float32x4_class(cls);
 
-  cls = Class::New<Uint32x4>();
-  object_store->set_uint32x4_class(cls);
+  cls = Class::New<Int32x4>();
+  object_store->set_int32x4_class(cls);
 
 #define REGISTER_TYPED_DATA_CLASS(clazz)                                       \
   cls = Class::NewTypedDataClass(kTypedData##clazz##Cid);
@@ -1534,8 +1534,8 @@
       return Symbols::List().raw();
     case kFloat32x4Cid:
       return Symbols::Float32x4().raw();
-    case kUint32x4Cid:
-      return Symbols::Uint32x4().raw();
+    case kInt32x4Cid:
+      return Symbols::Int32x4().raw();
     case kTypedDataInt8ArrayCid:
     case kExternalTypedDataInt8ArrayCid:
       return Symbols::Int8List().raw();
@@ -1662,7 +1662,7 @@
   FakeObject fake;
   result.set_handle_vtable(fake.vtable());
   result.set_instance_size(FakeObject::InstanceSize());
-  result.set_next_field_offset(FakeObject::InstanceSize());
+  result.set_next_field_offset(FakeObject::NextFieldOffset());
   ASSERT((FakeObject::kClassId != kInstanceCid));
   result.set_id(FakeObject::kClassId);
   result.set_state_bits(0);
@@ -2032,7 +2032,8 @@
   intptr_t offset = 0;
   intptr_t type_args_field_offset = kNoTypeArguments;
   if (super.IsNull()) {
-    offset = sizeof(RawObject);
+    offset = Instance::NextFieldOffset();
+    ASSERT(offset > 0);
   } else {
     ASSERT(super.is_finalized() || super.is_prefinalized());
     type_args_field_offset = super.type_arguments_field_offset();
@@ -2056,7 +2057,7 @@
     }
   }
   set_type_arguments_field_offset(type_args_field_offset);
-  ASSERT(offset != 0);
+  ASSERT(offset > 0);
   Field& field = Field::Handle();
   intptr_t len = flds.Length();
   for (intptr_t i = 0; i < len; i++) {
@@ -2394,7 +2395,7 @@
   ASSERT(fake.IsInstance());
   result.set_handle_vtable(fake.vtable());
   result.set_instance_size(FakeInstance::InstanceSize());
-  result.set_next_field_offset(FakeInstance::InstanceSize());
+  result.set_next_field_offset(FakeInstance::NextFieldOffset());
   result.set_id(index);
   result.set_state_bits(0);
   result.set_type_arguments_field_offset_in_words(kNoTypeArguments);
@@ -2426,7 +2427,7 @@
   const Class& result = Class::Handle(New(name, script, token_pos));
   // Instances of a signature class can only be closures.
   result.set_instance_size(Closure::InstanceSize());
-  result.set_next_field_offset(Closure::InstanceSize());
+  result.set_next_field_offset(Closure::NextFieldOffset());
   // Signature classes extend the _FunctionImpl class.
   result.set_super_type(Type::Handle(
       Isolate::Current()->object_store()->function_impl_type()));
@@ -2498,7 +2499,7 @@
     cls.set_super_type(Type::Handle(Type::ObjectType()));
     // Compute instance size. First word contains a pointer to a properly
     // sized typed array once the first native field has been set.
-    intptr_t instance_size = sizeof(RawObject) + kWordSize;
+    intptr_t instance_size = sizeof(RawInstance) + kWordSize;
     cls.set_instance_size(RoundedAllocationSize(instance_size));
     cls.set_next_field_offset(instance_size);
     cls.set_num_native_fields(field_count);
@@ -2526,7 +2527,7 @@
   }
   Class& result = Class::Handle(New<String>(class_id));
   result.set_instance_size(instance_size);
-  result.set_next_field_offset(instance_size);
+  result.set_next_field_offset(String::NextFieldOffset());
   result.set_is_prefinalized();
   return result.raw();
 }
@@ -2537,7 +2538,7 @@
   intptr_t instance_size = TypedData::InstanceSize();
   Class& result = Class::Handle(New<TypedData>(class_id));
   result.set_instance_size(instance_size);
-  result.set_next_field_offset(instance_size);
+  result.set_next_field_offset(TypedData::NextFieldOffset());
   result.set_is_prefinalized();
   return result.raw();
 }
@@ -2547,7 +2548,7 @@
   ASSERT(RawObject::IsTypedDataViewClassId(class_id));
   Class& result = Class::Handle(New<Instance>(class_id));
   result.set_instance_size(0);
-  result.set_next_field_offset(0);
+  result.set_next_field_offset(-kWordSize);
   return result.raw();
 }
 
@@ -2557,7 +2558,7 @@
   intptr_t instance_size = ExternalTypedData::InstanceSize();
   Class& result = Class::Handle(New<ExternalTypedData>(class_id));
   result.set_instance_size(instance_size);
-  result.set_next_field_offset(instance_size);
+  result.set_next_field_offset(ExternalTypedData::NextFieldOffset());
   result.set_is_prefinalized();
   return result.raw();
 }
@@ -2736,157 +2737,179 @@
 // type T by class 'other' parameterized with 'other_type_arguments'.
 // This class and class 'other' do not need to be finalized, however, they must
 // be resolved as well as their interfaces.
-bool Class::TypeTest(
-    TypeTestKind test_kind,
+bool Class::TypeTestNonRecursive(
+    const Class& cls,
+    Class::TypeTestKind test_kind,
     const AbstractTypeArguments& type_arguments,
     const Class& other,
     const AbstractTypeArguments& other_type_arguments,
-    Error* bound_error) const {
-  ASSERT(!IsVoidClass());
-  // Check for DynamicType.
-  // Each occurrence of DynamicType in type T is interpreted as the dynamic
-  // type, a supertype of all types.
-  if (other.IsDynamicClass()) {
-    return true;
-  }
-  // In the case of a subtype test, each occurrence of DynamicType in type S is
-  // interpreted as the bottom type, a subtype of all types.
-  // However, DynamicType is not more specific than any type.
-  if (IsDynamicClass()) {
-    return test_kind == kIsSubtypeOf;
-  }
-  // Check for NullType, which is only a subtype of ObjectType, of DynamicType,
-  // or of itself, and which is more specific than any type.
-  if (IsNullClass()) {
-    // We already checked for other.IsDynamicClass() above.
-    return (test_kind == kIsMoreSpecificThan) ||
-        other.IsObjectClass() || other.IsNullClass();
-  }
-  // Check for ObjectType. Any type that is not NullType or DynamicType (already
-  // checked above), is more specific than ObjectType.
-  if (other.IsObjectClass()) {
-    return true;
-  }
-  // Check for reflexivity.
-  if (raw() == other.raw()) {
-    const intptr_t len = NumTypeArguments();
-    if (len == 0) {
+    Error* bound_error) {
+  // Use the thsi object as if it was the receiver of this method, but instead
+  // of recursing reset it to the super class and loop.
+  Class& thsi = Class::Handle(cls.raw());
+  while (true) {
+    ASSERT(!thsi.IsVoidClass());
+    // Check for DynamicType.
+    // Each occurrence of DynamicType in type T is interpreted as the dynamic
+    // type, a supertype of all types.
+    if (other.IsDynamicClass()) {
       return true;
     }
-    // Since we do not truncate the type argument vector of a subclass (see
-    // below), we only check a prefix of the proper length.
-    // Check for covariance.
-    if (other_type_arguments.IsNull() || other_type_arguments.IsRaw(len)) {
+    // In the case of a subtype test, each occurrence of DynamicType in type S
+    // is interpreted as the bottom type, a subtype of all types.
+    // However, DynamicType is not more specific than any type.
+    if (thsi.IsDynamicClass()) {
+      return test_kind == Class::kIsSubtypeOf;
+    }
+    // Check for NullType, which is only a subtype of ObjectType, of
+    // DynamicType, or of itself, and which is more specific than any type.
+    if (thsi.IsNullClass()) {
+      // We already checked for other.IsDynamicClass() above.
+      return (test_kind == Class::kIsMoreSpecificThan) ||
+      other.IsObjectClass() || other.IsNullClass();
+    }
+    // Check for ObjectType. Any type that is not NullType or DynamicType
+    // (already checked above), is more specific than ObjectType.
+    if (other.IsObjectClass()) {
       return true;
     }
-    if (type_arguments.IsNull() || type_arguments.IsRaw(len)) {
-      // Other type can't be more specific than this one because for that
-      // it would have to have all dynamic type arguments which is checked
-      // above.
-      return test_kind == kIsSubtypeOf;
-    }
-    return type_arguments.TypeTest(test_kind,
-                                   other_type_arguments,
-                                   len,
-                                   bound_error);
-  }
-  const bool other_is_function_class = other.IsFunctionClass();
-  if (other.IsSignatureClass() || other_is_function_class) {
-    const Function& other_fun = Function::Handle(other.signature_function());
-    if (IsSignatureClass()) {
-      if (other_is_function_class) {
+    // Check for reflexivity.
+    if (thsi.raw() == other.raw()) {
+      const intptr_t len = thsi.NumTypeArguments();
+      if (len == 0) {
         return true;
       }
-      // Check for two function types.
-      const Function& fun = Function::Handle(signature_function());
-      return fun.TypeTest(test_kind,
-                          type_arguments,
-                          other_fun,
-                          other_type_arguments,
-                          bound_error);
-    }
-    // Check if type S has a call() method of function type T.
-    Function& function =
-        Function::Handle(LookupDynamicFunction(Symbols::Call()));
-    if (function.IsNull()) {
-      // Walk up the super_class chain.
-      Class& cls = Class::Handle(SuperClass());
-      while (!cls.IsNull() && function.IsNull()) {
-        function = cls.LookupDynamicFunction(Symbols::Call());
-        cls = cls.SuperClass();
+      // Since we do not truncate the type argument vector of a subclass (see
+      // below), we only check a prefix of the proper length.
+      // Check for covariance.
+      if (other_type_arguments.IsNull() || other_type_arguments.IsRaw(len)) {
+        return true;
       }
+      if (type_arguments.IsNull() || type_arguments.IsRaw(len)) {
+        // Other type can't be more specific than this one because for that
+        // it would have to have all dynamic type arguments which is checked
+        // above.
+        return test_kind == Class::kIsSubtypeOf;
+      }
+      return type_arguments.TypeTest(test_kind,
+                                     other_type_arguments,
+                                     len,
+                                     bound_error);
     }
-    if (!function.IsNull()) {
-      if (other_is_function_class ||
-          function.TypeTest(test_kind,
+    const bool other_is_function_class = other.IsFunctionClass();
+    if (other.IsSignatureClass() || other_is_function_class) {
+      const Function& other_fun = Function::Handle(other.signature_function());
+      if (thsi.IsSignatureClass()) {
+        if (other_is_function_class) {
+          return true;
+        }
+        // Check for two function types.
+        const Function& fun = Function::Handle(thsi.signature_function());
+        return fun.TypeTest(test_kind,
                             type_arguments,
                             other_fun,
                             other_type_arguments,
-                            bound_error)) {
-        return true;
+                            bound_error);
+      }
+      // Check if type S has a call() method of function type T.
+      Function& function =
+      Function::Handle(thsi.LookupDynamicFunction(Symbols::Call()));
+      if (function.IsNull()) {
+        // Walk up the super_class chain.
+        Class& cls = Class::Handle(thsi.SuperClass());
+        while (!cls.IsNull() && function.IsNull()) {
+          function = cls.LookupDynamicFunction(Symbols::Call());
+          cls = cls.SuperClass();
+        }
+      }
+      if (!function.IsNull()) {
+        if (other_is_function_class ||
+            function.TypeTest(test_kind,
+                              type_arguments,
+                              other_fun,
+                              other_type_arguments,
+                              bound_error)) {
+              return true;
+            }
       }
     }
-  }
-  // Check for 'direct super type' specified in the implements clause
-  // and check for transitivity at the same time.
-  Array& interfaces = Array::Handle(this->interfaces());
-  AbstractType& interface = AbstractType::Handle();
-  Class& interface_class = Class::Handle();
-  AbstractTypeArguments& interface_args = AbstractTypeArguments::Handle();
-  Error& error = Error::Handle();
-  for (intptr_t i = 0; i < interfaces.Length(); i++) {
-    interface ^= interfaces.At(i);
-    if (!interface.IsFinalized()) {
-      // We may be checking bounds at finalization time. Skipping this
-      // unfinalized interface will postpone bound checking to run time.
-      continue;
-    }
-    error = Error::null();
-    if (interface.IsMalboundedWithError(&error)) {
-      // Return the first bound error to the caller if it requests it.
-      if ((bound_error != NULL) && bound_error->IsNull()) {
-        ASSERT(!error.IsNull());
-        *bound_error = error.raw();
+    // Check for 'direct super type' specified in the implements clause
+    // and check for transitivity at the same time.
+    Array& interfaces = Array::Handle(thsi.interfaces());
+    AbstractType& interface = AbstractType::Handle();
+    Class& interface_class = Class::Handle();
+    AbstractTypeArguments& interface_args = AbstractTypeArguments::Handle();
+    Error& error = Error::Handle();
+    for (intptr_t i = 0; i < interfaces.Length(); i++) {
+      interface ^= interfaces.At(i);
+      if (!interface.IsFinalized()) {
+        // We may be checking bounds at finalization time. Skipping this
+        // unfinalized interface will postpone bound checking to run time.
+        continue;
       }
-      continue;  // Another interface may work better.
-    }
-    interface_class = interface.type_class();
-    interface_args = interface.arguments();
-    if (!interface_args.IsNull() && !interface_args.IsInstantiated()) {
-      // This type class implements an interface that is parameterized with
-      // generic type(s), e.g. it implements List<T>.
-      // The uninstantiated type T must be instantiated using the type
-      // parameters of this type before performing the type test.
-      // The type arguments of this type that are referred to by the type
-      // parameters of the interface are at the end of the type vector,
-      // after the type arguments of the super type of this type.
-      // The index of the type parameters is adjusted upon finalization.
       error = Error::null();
-      interface_args = interface_args.InstantiateFrom(type_arguments, &error);
-      if (!error.IsNull()) {
+      if (interface.IsMalboundedWithError(&error)) {
         // Return the first bound error to the caller if it requests it.
         if ((bound_error != NULL) && bound_error->IsNull()) {
+          ASSERT(!error.IsNull());
           *bound_error = error.raw();
         }
         continue;  // Another interface may work better.
       }
+      interface_class = interface.type_class();
+      interface_args = interface.arguments();
+      if (!interface_args.IsNull() && !interface_args.IsInstantiated()) {
+        // This type class implements an interface that is parameterized with
+        // generic type(s), e.g. it implements List<T>.
+        // The uninstantiated type T must be instantiated using the type
+        // parameters of this type before performing the type test.
+        // The type arguments of this type that are referred to by the type
+        // parameters of the interface are at the end of the type vector,
+        // after the type arguments of the super type of this type.
+        // The index of the type parameters is adjusted upon finalization.
+        error = Error::null();
+        interface_args = interface_args.InstantiateFrom(type_arguments, &error);
+        if (!error.IsNull()) {
+          // Return the first bound error to the caller if it requests it.
+          if ((bound_error != NULL) && bound_error->IsNull()) {
+            *bound_error = error.raw();
+          }
+          continue;  // Another interface may work better.
+        }
+      }
+      if (interface_class.TypeTest(test_kind,
+                                   interface_args,
+                                   other,
+                                   other_type_arguments,
+                                   bound_error)) {
+        return true;
+      }
     }
-    if (interface_class.TypeTest(test_kind,
-                                 interface_args,
-                                 other,
-                                 other_type_arguments,
-                                 bound_error)) {
-      return true;
+    // "Recurse" up the class hierarchy until we have reached the top.
+    thsi = thsi.SuperClass();
+    if (thsi.IsNull()) {
+      return false;
     }
   }
-  const Class& super_class = Class::Handle(SuperClass());
-  if (super_class.IsNull()) {
-    return false;
-  }
-  // Instead of truncating the type argument vector to the length of the super
-  // type argument vector, we make sure that the code works with a vector that
-  // is longer than necessary.
-  return super_class.TypeTest(test_kind,
+  UNREACHABLE();
+  return false;
+}
+
+
+// If test_kind == kIsSubtypeOf, checks if type S is a subtype of type T.
+// If test_kind == kIsMoreSpecificThan, checks if S is more specific than T.
+// Type S is specified by this class parameterized with 'type_arguments', and
+// type T by class 'other' parameterized with 'other_type_arguments'.
+// This class and class 'other' do not need to be finalized, however, they must
+// be resolved as well as their interfaces.
+bool Class::TypeTest(
+                     TypeTestKind test_kind,
+                     const AbstractTypeArguments& type_arguments,
+                     const Class& other,
+                     const AbstractTypeArguments& other_type_arguments,
+                     Error* bound_error) const {
+  return TypeTestNonRecursive(*this,
+                              test_kind,
                               type_arguments,
                               other,
                               other_type_arguments,
@@ -10829,7 +10852,7 @@
     ASSERT(instance_size != 0);
     uword this_addr = reinterpret_cast<uword>(this->raw_ptr());
     uword other_addr = reinterpret_cast<uword>(other.raw_ptr());
-    for (intptr_t offset = sizeof(RawObject);
+    for (intptr_t offset = Instance::NextFieldOffset();
          offset < instance_size;
          offset += kWordSize) {
       if ((*reinterpret_cast<RawObject**>(this_addr + offset)) !=
@@ -11409,9 +11432,9 @@
 }
 
 
-bool AbstractType::IsUint32x4Type() const {
+bool AbstractType::IsInt32x4Type() const {
   return HasResolvedTypeClass() &&
-      (type_class() == Type::Handle(Type::Uint32x4()).type_class());
+      (type_class() == Type::Handle(Type::Int32x4()).type_class());
 }
 
 
@@ -11574,8 +11597,8 @@
 }
 
 
-RawType* Type::Uint32x4() {
-  return Isolate::Current()->object_store()->uint32x4_type();
+RawType* Type::Int32x4() {
+  return Isolate::Current()->object_store()->int32x4_type();
 }
 
 
@@ -15052,14 +15075,14 @@
 }
 
 
-RawUint32x4* Uint32x4::New(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3,
-                           Heap::Space space) {
-  ASSERT(Isolate::Current()->object_store()->uint32x4_class() !=
+RawInt32x4* Int32x4::New(int32_t v0, int32_t v1, int32_t v2, int32_t v3,
+                         Heap::Space space) {
+  ASSERT(Isolate::Current()->object_store()->int32x4_class() !=
          Class::null());
-  Uint32x4& result = Uint32x4::Handle();
+  Int32x4& result = Int32x4::Handle();
   {
-    RawObject* raw = Object::Allocate(Uint32x4::kClassId,
-                                      Uint32x4::InstanceSize(),
+    RawObject* raw = Object::Allocate(Int32x4::kClassId,
+                                      Int32x4::InstanceSize(),
                                       space);
     NoGCScope no_gc;
     result ^= raw;
@@ -15072,13 +15095,13 @@
 }
 
 
-RawUint32x4* Uint32x4::New(simd128_value_t value, Heap::Space space) {
-  ASSERT(Isolate::Current()->object_store()->float32x4_class() !=
+RawInt32x4* Int32x4::New(simd128_value_t value, Heap::Space space) {
+  ASSERT(Isolate::Current()->object_store()->int32x4_class() !=
          Class::null());
-  Uint32x4& result = Uint32x4::Handle();
+  Int32x4& result = Int32x4::Handle();
   {
-    RawObject* raw = Object::Allocate(Uint32x4::kClassId,
-                                      Uint32x4::InstanceSize(),
+    RawObject* raw = Object::Allocate(Int32x4::kClassId,
+                                      Int32x4::InstanceSize(),
                                       space);
     NoGCScope no_gc;
     result ^= raw;
@@ -15088,62 +15111,62 @@
 }
 
 
-void Uint32x4::set_x(uint32_t value) const {
+void Int32x4::set_x(int32_t value) const {
   raw_ptr()->value_[0] = value;
 }
 
 
-void Uint32x4::set_y(uint32_t value) const {
+void Int32x4::set_y(int32_t value) const {
   raw_ptr()->value_[1] = value;
 }
 
 
-void Uint32x4::set_z(uint32_t value) const {
+void Int32x4::set_z(int32_t value) const {
   raw_ptr()->value_[2] = value;
 }
 
 
-void Uint32x4::set_w(uint32_t value) const {
+void Int32x4::set_w(int32_t value) const {
   raw_ptr()->value_[3] = value;
 }
 
 
-uint32_t Uint32x4::x() const {
+int32_t Int32x4::x() const {
   return raw_ptr()->value_[0];
 }
 
 
-uint32_t Uint32x4::y() const {
+int32_t Int32x4::y() const {
   return raw_ptr()->value_[1];
 }
 
 
-uint32_t Uint32x4::z() const {
+int32_t Int32x4::z() const {
   return raw_ptr()->value_[2];
 }
 
 
-uint32_t Uint32x4::w() const {
+int32_t Int32x4::w() const {
   return raw_ptr()->value_[3];
 }
 
 
-simd128_value_t Uint32x4::value() const {
+simd128_value_t Int32x4::value() const {
   return simd128_value_t().readFrom(&raw_ptr()->value_[0]);
 }
 
 
-void Uint32x4::set_value(simd128_value_t value) const {
+void Int32x4::set_value(simd128_value_t value) const {
   value.writeTo(&raw_ptr()->value_[0]);
 }
 
 
-const char* Uint32x4::ToCString() const {
+const char* Int32x4::ToCString() const {
   const char* kFormat = "[%08x, %08x, %08x, %08x]";
-  uint32_t _x = x();
-  uint32_t _y = y();
-  uint32_t _z = z();
-  uint32_t _w = w();
+  int32_t _x = x();
+  int32_t _y = y();
+  int32_t _z = z();
+  int32_t _w = w();
   // Calculate the size of the string.
   intptr_t len = OS::SNPrint(NULL, 0, kFormat, _x, _y, _z, _w) + 1;
   char* chars = Isolate::Current()->current_zone()->Alloc<char>(len);
@@ -15152,7 +15175,7 @@
 }
 
 
-void Uint32x4::PrintToJSONStream(JSONStream* stream, bool ref) const {
+void Int32x4::PrintToJSONStream(JSONStream* stream, bool ref) const {
   JSONObject jsobj(stream);
 }
 
@@ -15170,7 +15193,7 @@
   4,   // kTypedDataFloat32ArrayCid.
   8,   // kTypedDataFloat64ArrayCid.
   16,  // kTypedDataFloat32x4ArrayCid.
-  16,  // kTypedDataUint32x4ArrayCid.
+  16,  // kTypedDataInt32x4ArrayCid.
 };
 
 
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 281062a..2b48af2 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -201,6 +201,9 @@
     ASSERT(raw() != null());                                                   \
     return raw()->ptr();                                                       \
   }                                                                            \
+  static intptr_t NextFieldOffset() {                                          \
+    return -kWordSize;                                                         \
+  }                                                                            \
   SNAPSHOT_READER_SUPPORT(object)                                              \
   friend class Isolate;                                                        \
   friend class StackFrame;                                                     \
@@ -528,6 +531,11 @@
   RawObject* raw_;  // The raw object reference.
 
  private:
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
+
   static void InitializeObject(uword address, intptr_t id, intptr_t size);
 
   static void RegisterClass(const Class& cls,
@@ -655,7 +663,8 @@
     set_next_field_offset_in_words(value_in_bytes / kWordSize);
   }
   void set_next_field_offset_in_words(intptr_t value) const {
-    ASSERT((Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
+    ASSERT((value == -1) ||
+           (Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
             (value == raw_ptr()->instance_size_in_words_)) ||
            (!Utils::IsAligned((value * kWordSize), kObjectAlignment) &&
             ((value + 1) == raw_ptr()->instance_size_in_words_)));
@@ -1083,6 +1092,7 @@
   RawFunction* CreateInvocationDispatcher(const String& target_name,
                                           const Array& args_desc,
                                           RawFunction::Kind kind) const;
+
   void CalculateFieldOffsets() const;
 
   // Initial value for the cached number of type arguments.
@@ -1121,6 +1131,14 @@
                 const AbstractTypeArguments& other_type_arguments,
                 Error* bound_error) const;
 
+  static bool TypeTestNonRecursive(
+      const Class& cls,
+      TypeTestKind test_kind,
+      const AbstractTypeArguments& type_arguments,
+      const Class& other,
+      const AbstractTypeArguments& other_type_arguments,
+      Error* bound_error);
+
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Class, Object);
   friend class AbstractType;
   friend class Instance;
@@ -1144,6 +1162,7 @@
   static intptr_t InstanceSize() {
     return RoundedAllocationSize(sizeof(RawUnresolvedClass));
   }
+
   static RawUnresolvedClass* New(const LibraryPrefix& library_prefix,
                                  const String& ident,
                                  intptr_t token_pos);
@@ -1384,6 +1403,7 @@
       const AbstractTypeArguments& value) const;
   void set_instantiator_type_arguments(
       const AbstractTypeArguments& value) const;
+
   static RawInstantiatedTypeArguments* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(InstantiatedTypeArguments,
@@ -1408,6 +1428,7 @@
  private:
   void set_patched_class(const Class& value) const;
   void set_source_class(const Class& value) const;
+
   static RawPatchClass* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(PatchClass, Object);
@@ -1859,7 +1880,6 @@
     return kind() == RawFunction::kSignatureFunction;
   }
 
-
   static intptr_t InstanceSize() {
     return RoundedAllocationSize(sizeof(RawFunction));
   }
@@ -1946,6 +1966,7 @@
   void set_num_optional_parameters(intptr_t value) const;  // Encoded value.
   void set_kind_tag(intptr_t value) const;
   void set_data(const Object& value) const;
+
   static RawFunction* New();
 
   void BuildSignatureParameters(bool instantiate,
@@ -2212,6 +2233,7 @@
   void set_kind_bits(intptr_t value) const {
     raw_ptr()->kind_bits_ = static_cast<uint8_t>(value);
   }
+
   static RawField* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Field, Object);
@@ -2378,6 +2400,7 @@
   void set_source(const String& value) const;
   void set_kind(RawScript::Kind value) const;
   void set_tokens(const TokenStream& value) const;
+
   static RawScript* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(Script, Object);
@@ -2592,6 +2615,7 @@
  private:
   static const int kInitialImportsCapacity = 4;
   static const int kImportsCapacityIncrement = 8;
+
   static RawLibrary* New();
 
   void set_num_imports(intptr_t value) const {
@@ -2654,6 +2678,7 @@
   void set_name(const String& value) const;
   void set_imports(const Array& value) const;
   void set_num_imports(intptr_t value) const;
+
   static RawLibraryPrefix* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(LibraryPrefix, Object);
@@ -2679,6 +2704,7 @@
   static RawNamespace* New(const Library& library,
                            const Array& show_names,
                            const Array& hide_names);
+
  private:
   static RawNamespace* New();
 
@@ -2988,6 +3014,7 @@
   static const intptr_t kMaxHandlers = 1024 * 1024;
 
   void set_handled_types_data(const Array& value) const;
+
   FINAL_HEAP_OBJECT_IMPLEMENTATION(ExceptionHandlers, Object);
   friend class Class;
 };
@@ -3745,6 +3772,7 @@
 
  private:
   void set_message(const String& message) const;
+
   static RawApiError* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(ApiError, Error);
@@ -3770,6 +3798,7 @@
 
  private:
   void set_message(const String& message) const;
+
   static RawLanguageError* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(LanguageError, Error);
@@ -3913,10 +3942,16 @@
   }
   bool IsValidFieldOffset(int offset) const;
 
+  static intptr_t NextFieldOffset() {
+    return sizeof(RawInstance);
+  }
+
   // TODO(iposva): Determine if this gets in the way of Smi.
   HEAP_OBJECT_IMPLEMENTATION(Instance, Object);
   friend class Class;
   friend class Closure;
+  friend class SnapshotWriter;
+  friend class StubCode;
   friend class TypedDataView;
 };
 
@@ -4007,8 +4042,8 @@
   // Check if this type represents the 'Float32x4' type.
   bool IsFloat32x4Type() const;
 
-  // Check if this type represents the 'Uint32x4' type.
-  bool IsUint32x4Type() const;
+  // Check if this type represents the 'Int32x4' type.
+  bool IsInt32x4Type() const;
 
   // Check if this type represents the 'num' type.
   bool IsNumberType() const;
@@ -4129,8 +4164,8 @@
   // The 'Float32x4' type.
   static RawType* Float32x4();
 
-  // The 'Uint32x4' type.
-  static RawType* Uint32x4();
+  // The 'Int32x4' type.
+  static RawType* Int32x4();
 
   // The 'num' type.
   static RawType* Number();
@@ -4225,6 +4260,7 @@
   void set_name(const String& value) const;
   void set_token_pos(intptr_t token_pos) const;
   void set_type_state(int8_t state) const;
+
   static RawTypeParameter* New();
 
   FINAL_HEAP_OBJECT_IMPLEMENTATION(TypeParameter, AbstractType);
@@ -4478,11 +4514,17 @@
   }
 
  private:
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
+
   static intptr_t ValueFromRaw(uword raw_value) {
     intptr_t value = raw_value;
     ASSERT((value & kSmiTagMask) == kSmiTag);
     return (value >> kSmiTagShift);
   }
+
   static cpp_vtable handle_vtable_;
 
   Smi() : Integer() {}
@@ -5201,6 +5243,11 @@
                                             intptr_t tags,
                                             Snapshot::Kind kind);
 
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
+
   friend class Class;
   friend class String;
   friend class SnapshotReader;
@@ -5267,6 +5314,11 @@
                                             intptr_t tags,
                                             Snapshot::Kind kind);
 
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
+
   friend class Class;
   friend class String;
   friend class SnapshotReader;
@@ -5436,6 +5488,11 @@
   }
 
  private:
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
+
   static RawImmutableArray* raw(const Array& array) {
     return reinterpret_cast<RawImmutableArray*>(array.raw());
   }
@@ -5594,36 +5651,36 @@
 };
 
 
-class Uint32x4 : public Instance {
+class Int32x4 : public Instance {
  public:
-  static RawUint32x4* New(uint32_t value0, uint32_t value1, uint32_t value2,
-                          uint32_t value3, Heap::Space space = Heap::kNew);
-  static RawUint32x4* New(simd128_value_t value,
+  static RawInt32x4* New(int32_t value0, int32_t value1, int32_t value2,
+                          int32_t value3, Heap::Space space = Heap::kNew);
+  static RawInt32x4* New(simd128_value_t value,
                           Heap::Space space = Heap::kNew);
 
-  uint32_t x() const;
-  uint32_t y() const;
-  uint32_t z() const;
-  uint32_t w() const;
+  int32_t x() const;
+  int32_t y() const;
+  int32_t z() const;
+  int32_t w() const;
 
-  void set_x(uint32_t x) const;
-  void set_y(uint32_t y) const;
-  void set_z(uint32_t z) const;
-  void set_w(uint32_t w) const;
+  void set_x(int32_t x) const;
+  void set_y(int32_t y) const;
+  void set_z(int32_t z) const;
+  void set_w(int32_t w) const;
 
   simd128_value_t value() const;
   void set_value(simd128_value_t value) const;
 
   static intptr_t InstanceSize() {
-    return RoundedAllocationSize(sizeof(RawUint32x4));
+    return RoundedAllocationSize(sizeof(RawInt32x4));
   }
 
   static intptr_t value_offset() {
-    return OFFSET_OF(RawUint32x4, value_);
+    return OFFSET_OF(RawInt32x4, value_);
   }
 
  private:
-  FINAL_HEAP_OBJECT_IMPLEMENTATION(Uint32x4, Instance);
+  FINAL_HEAP_OBJECT_IMPLEMENTATION(Int32x4, Instance);
   friend class Class;
 };
 
@@ -5675,7 +5732,7 @@
   TYPED_GETTER_SETTER(Float32, float)
   TYPED_GETTER_SETTER(Float64, double)
   TYPED_GETTER_SETTER(Float32x4, simd128_value_t)
-  TYPED_GETTER_SETTER(Uint32x4, simd128_value_t)
+  TYPED_GETTER_SETTER(Int32x4, simd128_value_t)
 
 #undef TYPED_GETTER_SETTER
 
@@ -5809,7 +5866,7 @@
   TYPED_GETTER_SETTER(Float32, float)
   TYPED_GETTER_SETTER(Float64, double)
   TYPED_GETTER_SETTER(Float32x4, simd128_value_t)
-  TYPED_GETTER_SETTER(Uint32x4, simd128_value_t);
+  TYPED_GETTER_SETTER(Int32x4, simd128_value_t);
 
 #undef TYPED_GETTER_SETTER
 
@@ -5907,7 +5964,7 @@
   }
 
   static intptr_t NumberOfFields() {
-    return (kLengthOffset - kTypeArguments);
+    return kLengthOffset;
   }
 
   static intptr_t data_offset() {
@@ -5931,10 +5988,9 @@
 
  private:
   enum {
-    kTypeArguments = 1,
-    kDataOffset = 2,
-    kOffsetInBytesOffset = 3,
-    kLengthOffset = 4,
+    kDataOffset = 1,
+    kOffsetInBytesOffset = 2,
+    kLengthOffset = 3,
   };
 };
 
@@ -6007,6 +6063,10 @@
                           const Context& value) {
     closure.StorePointer(ContextAddr(closure), value.raw());
   }
+  static intptr_t NextFieldOffset() {
+    // Indicates this class cannot be extended by dart code.
+    return -kWordSize;
+  }
 
   friend class Class;
 };
diff --git a/runtime/vm/object_store.cc b/runtime/vm/object_store.cc
index a5dddc1..4ec3410 100644
--- a/runtime/vm/object_store.cc
+++ b/runtime/vm/object_store.cc
@@ -41,7 +41,7 @@
     immutable_array_class_(Class::null()),
     growable_object_array_class_(Class::null()),
     float32x4_class_(Class::null()),
-    uint32x4_class_(Class::null()),
+    int32x4_class_(Class::null()),
     typed_data_classes_(Array::null()),
     error_class_(Class::null()),
     stacktrace_class_(Class::null()),
diff --git a/runtime/vm/object_store.h b/runtime/vm/object_store.h
index 2bc8cc5..1f51483 100644
--- a/runtime/vm/object_store.h
+++ b/runtime/vm/object_store.h
@@ -195,15 +195,15 @@
   RawType* float32x4_type() const { return float32x4_type_; }
   void set_float32x4_type(const Type& value) { float32x4_type_ = value.raw(); }
 
-  RawClass* uint32x4_class() const {
-    return uint32x4_class_;
+  RawClass* int32x4_class() const {
+    return int32x4_class_;
   }
-  void set_uint32x4_class(const Class& value) {
-    uint32x4_class_ = value.raw();
+  void set_int32x4_class(const Class& value) {
+    int32x4_class_ = value.raw();
   }
 
-  RawType* uint32x4_type() const { return uint32x4_type_; }
-  void set_uint32x4_type(const Type& value) { uint32x4_type_ = value.raw(); }
+  RawType* int32x4_type() const { return int32x4_type_; }
+  void set_int32x4_type(const Type& value) { int32x4_type_ = value.raw(); }
 
   RawArray* typed_data_classes() const {
     return typed_data_classes_;
@@ -441,7 +441,7 @@
   RawClass* double_class_;
   RawType* double_type_;
   RawType* float32x4_type_;
-  RawType* uint32x4_type_;
+  RawType* int32x4_type_;
   RawType* string_type_;
   RawClass* one_byte_string_class_;
   RawClass* two_byte_string_class_;
@@ -454,7 +454,7 @@
   RawClass* immutable_array_class_;
   RawClass* growable_object_array_class_;
   RawClass* float32x4_class_;
-  RawClass* uint32x4_class_;
+  RawClass* int32x4_class_;
   RawArray* typed_data_classes_;
   RawClass* error_class_;
   RawClass* stacktrace_class_;
diff --git a/runtime/vm/parser.cc b/runtime/vm/parser.cc
index 91023c5..bf8ccaa 100644
--- a/runtime/vm/parser.cc
+++ b/runtime/vm/parser.cc
@@ -4839,8 +4839,8 @@
 
 
 RawObject* Parser::CallLibraryTagHandler(Dart_LibraryTag tag,
-                                          intptr_t token_pos,
-                                          const String& url) {
+                                         intptr_t token_pos,
+                                         const String& url) {
   Dart_LibraryTagHandler handler = isolate()->library_tag_handler();
   if (handler == NULL) {
     if (url.StartsWith(Symbols::DartScheme())) {
@@ -5408,10 +5408,8 @@
   TRACE_PARSER("ParseVariableDeclaration");
   ASSERT(IsIdentifier());
   const intptr_t ident_pos = TokenPos();
-  LocalVariable* variable =
-      new LocalVariable(ident_pos, *CurrentLiteral(), type);
-  ASSERT(current_block_ != NULL);
-  ASSERT(current_block_->scope != NULL);
+  const String& ident = *CurrentLiteral();
+  LocalVariable* variable = new LocalVariable(ident_pos, ident, type);
   ConsumeToken();  // Variable identifier.
   AstNode* initialization = NULL;
   if (CurrentToken() == Token::kASSIGN) {
@@ -5432,6 +5430,27 @@
     AstNode* null_expr = new LiteralNode(ident_pos, Instance::ZoneHandle());
     initialization = new StoreLocalNode(ident_pos, variable, null_expr);
   }
+
+  ASSERT(current_block_ != NULL);
+  const intptr_t previous_pos =
+  current_block_->scope->PreviousReferencePos(ident);
+  if (previous_pos >= 0) {
+    ASSERT(!script_.IsNull());
+    if (previous_pos > ident_pos) {
+      ErrorMsg(ident_pos,
+               "initializer of '%s' may not refer to itself",
+               ident.ToCString());
+
+    } else {
+      intptr_t line_number;
+      script_.GetTokenLocation(previous_pos, &line_number, NULL);
+      ErrorMsg(ident_pos,
+               "identifier '%s' previously used in line %" Pd "",
+               ident.ToCString(),
+               line_number);
+    }
+  }
+
   // Add variable to scope after parsing the initalizer expression.
   // The expression must not be able to refer to the variable.
   if (!current_block_->scope->AddVariable(variable)) {
@@ -5546,8 +5565,24 @@
                (LookaheadToken(1) != Token::kLPAREN)) {
       result_type = ParseType(ClassFinalizer::kCanonicalize);
     }
+    const intptr_t name_pos = TokenPos();
     variable_name = ExpectIdentifier("function name expected");
     function_name = variable_name;
+
+    // Check that the function name has not been referenced
+    // before this declaration.
+    ASSERT(current_block_ != NULL);
+    const intptr_t previous_pos =
+        current_block_->scope->PreviousReferencePos(*function_name);
+    if (previous_pos >= 0) {
+      ASSERT(!script_.IsNull());
+      intptr_t line_number;
+      script_.GetTokenLocation(previous_pos, &line_number, NULL);
+      ErrorMsg(name_pos,
+               "identifier '%s' previously used in line %" Pd "",
+               function_name->ToCString(),
+               line_number);
+    }
   }
 
   if (CurrentToken() != Token::kLPAREN) {
@@ -8918,6 +8953,9 @@
   TRACE_PARSER("ResolveIdentInLocalScope");
   // First try to find the identifier in the nested local scopes.
   LocalVariable* local = LookupLocalScope(ident);
+  if (current_block_ != NULL) {
+    current_block_->scope->AddReferencedName(ident_pos, ident);
+  }
   if (local != NULL) {
     if (node != NULL) {
       if (local->IsConst()) {
@@ -9262,6 +9300,11 @@
   }
   QualIdent type_name;
   if (finalization == ClassFinalizer::kIgnore) {
+    if (!is_top_level_ && (current_block_ != NULL)) {
+      // Add the library prefix or type class name to the list of referenced
+      // names of this scope, even if the type is ignored.
+      current_block_->scope->AddReferencedName(TokenPos(), *CurrentLiteral());
+    }
     SkipQualIdent();
   } else {
     ParseQualIdent(&type_name);
diff --git a/runtime/vm/raw_object.cc b/runtime/vm/raw_object.cc
index 95ce178..361006f 100644
--- a/runtime/vm/raw_object.cc
+++ b/runtime/vm/raw_object.cc
@@ -742,11 +742,11 @@
 }
 
 
-intptr_t RawUint32x4::VisitUint32x4Pointers(
-    RawUint32x4* raw_obj,
+intptr_t RawInt32x4::VisitInt32x4Pointers(
+    RawInt32x4* raw_obj,
     ObjectPointerVisitor* visitor) {
     ASSERT(raw_obj->IsHeapObject());
-    return Uint32x4::InstanceSize();
+    return Int32x4::InstanceSize();
 }
 
 
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index 0eb68b8..0d17902 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -68,7 +68,7 @@
     V(WeakProperty)                                                            \
     V(MirrorReference)                                                         \
     V(Float32x4)                                                               \
-    V(Uint32x4)                                                                \
+    V(Int32x4)                                                                \
 
 #define CLASS_LIST_ARRAYS(V)                                                   \
   V(Array)                                                                     \
@@ -94,7 +94,7 @@
   V(Float32Array)                                                              \
   V(Float64Array)                                                              \
   V(Float32x4Array)                                                            \
-  V(Uint32x4Array)                                                             \
+  V(Int32x4Array)                                                             \
 
 #define CLASS_LIST_FOR_HANDLES(V)                                              \
   CLASS_LIST_NO_OBJECT_NOR_STRING_NOR_ARRAY(V)                                 \
@@ -1412,17 +1412,17 @@
 };
 
 
-class RawUint32x4 : public RawInstance {
-  RAW_HEAP_OBJECT_IMPLEMENTATION(Uint32x4);
+class RawInt32x4 : public RawInstance {
+  RAW_HEAP_OBJECT_IMPLEMENTATION(Int32x4);
 
-  uint32_t value_[4];
+  int32_t value_[4];
 
   friend class SnapshotReader;
  public:
-  uint32_t x() const { return value_[0]; }
-  uint32_t y() const { return value_[1]; }
-  uint32_t z() const { return value_[2]; }
-  uint32_t w() const { return value_[3]; }
+  int32_t x() const { return value_[0]; }
+  int32_t y() const { return value_[1]; }
+  int32_t z() const { return value_[2]; }
+  int32_t w() const { return value_[3]; }
 };
 
 
@@ -1650,10 +1650,10 @@
          kTypedDataFloat32ArrayCid == kTypedDataInt8ArrayCid + 9 &&
          kTypedDataFloat64ArrayCid == kTypedDataInt8ArrayCid + 10 &&
          kTypedDataFloat32x4ArrayCid == kTypedDataInt8ArrayCid + 11 &&
-         kTypedDataUint32x4ArrayCid == kTypedDataInt8ArrayCid + 12 &&
+         kTypedDataInt32x4ArrayCid == kTypedDataInt8ArrayCid + 12 &&
          kTypedDataInt8ArrayViewCid == kTypedDataInt8ArrayCid + 13);
   return (index >= kTypedDataInt8ArrayCid &&
-          index <= kTypedDataUint32x4ArrayCid);
+          index <= kTypedDataInt32x4ArrayCid);
 }
 
 
@@ -1670,7 +1670,7 @@
          kTypedDataFloat32ArrayViewCid == kTypedDataInt8ArrayViewCid + 9 &&
          kTypedDataFloat64ArrayViewCid == kTypedDataInt8ArrayViewCid + 10 &&
          kTypedDataFloat32x4ArrayViewCid == kTypedDataInt8ArrayViewCid + 11 &&
-         kTypedDataUint32x4ArrayViewCid == kTypedDataInt8ArrayViewCid + 12 &&
+         kTypedDataInt32x4ArrayViewCid == kTypedDataInt8ArrayViewCid + 12 &&
          kByteDataViewCid == kTypedDataInt8ArrayViewCid + 13 &&
          kExternalTypedDataInt8ArrayCid == kTypedDataInt8ArrayViewCid + 14);
   return (index >= kTypedDataInt8ArrayViewCid &&
@@ -1702,11 +1702,11 @@
           kExternalTypedDataInt8ArrayCid + 10) &&
          (kExternalTypedDataFloat32x4ArrayCid ==
           kExternalTypedDataInt8ArrayCid + 11) &&
-         (kExternalTypedDataUint32x4ArrayCid ==
+         (kExternalTypedDataInt32x4ArrayCid ==
           kExternalTypedDataInt8ArrayCid + 12) &&
          (kNullCid == kExternalTypedDataInt8ArrayCid + 13));
   return (index >= kExternalTypedDataInt8ArrayCid &&
-          index <= kExternalTypedDataUint32x4ArrayCid);
+          index <= kExternalTypedDataInt32x4ArrayCid);
 }
 
 
diff --git a/runtime/vm/raw_object_snapshot.cc b/runtime/vm/raw_object_snapshot.cc
index 27ad524..db525ec 100644
--- a/runtime/vm/raw_object_snapshot.cc
+++ b/runtime/vm/raw_object_snapshot.cc
@@ -2227,7 +2227,7 @@
 }
 
 
-RawUint32x4* Uint32x4::ReadFrom(SnapshotReader* reader,
+RawInt32x4* Int32x4::ReadFrom(SnapshotReader* reader,
                                       intptr_t object_id,
                                       intptr_t tags,
                                       Snapshot::Kind kind) {
@@ -2239,12 +2239,12 @@
   uint32_t value3 = reader->Read<uint32_t>();
 
   // Create a Float32x4 object.
-  Uint32x4& simd = Uint32x4::ZoneHandle(reader->isolate(), Uint32x4::null());
+  Int32x4& simd = Int32x4::ZoneHandle(reader->isolate(), Int32x4::null());
 
   if (kind == Snapshot::kFull) {
-    simd = reader->NewUint32x4(value0, value1, value2, value3);
+    simd = reader->NewInt32x4(value0, value1, value2, value3);
   } else {
-    simd = Uint32x4::New(value0, value1, value2, value3, HEAP_SPACE(kind));
+    simd = Int32x4::New(value0, value1, value2, value3, HEAP_SPACE(kind));
   }
   reader->AddBackRef(object_id, &simd, kIsDeserialized);
   // Set the object tags.
@@ -2253,7 +2253,7 @@
 }
 
 
-void RawUint32x4::WriteTo(SnapshotWriter* writer,
+void RawInt32x4::WriteTo(SnapshotWriter* writer,
                              intptr_t object_id,
                              Snapshot::Kind kind) {
   ASSERT(writer != NULL);
@@ -2262,7 +2262,7 @@
   writer->WriteInlinedObjectHeader(object_id);
 
   // Write out the class and tags information.
-  writer->WriteIndexedObject(kUint32x4Cid);
+  writer->WriteIndexedObject(kInt32x4Cid);
   writer->WriteIntptrValue(writer->GetObjectTags(this));
 
   // Write out the mask values.
diff --git a/runtime/vm/scopes.cc b/runtime/vm/scopes.cc
index cac6212..baa8f96 100644
--- a/runtime/vm/scopes.cc
+++ b/runtime/vm/scopes.cc
@@ -30,7 +30,8 @@
       begin_token_pos_(0),
       end_token_pos_(0),
       variables_(),
-      labels_() {
+      labels_(),
+      referenced_() {
   // Hook this node into the children of the parent, unless the parent has a
   // different function_level, since the local scope of a nested function can
   // be discarded after it has been parsed.
@@ -82,6 +83,48 @@
 }
 
 
+NameReference* LocalScope::FindReference(const String& name) const {
+  intptr_t num_references = referenced_.length();
+  for (intptr_t i = 0; i < num_references; i++) {
+    if (name.Equals(referenced_[i]->name())) {
+      return referenced_[i];
+    }
+  }
+  return NULL;
+}
+
+
+void LocalScope::AddReferencedName(intptr_t token_pos,
+                                   const String& name) {
+  if (LocalLookupVariable(name) != NULL) {
+    return;
+  }
+  NameReference* ref = FindReference(name);
+  if (ref != NULL) {
+    ref->set_token_pos(token_pos);
+    return;
+  }
+  ref = new NameReference(token_pos, name);
+  referenced_.Add(ref);
+  // Add name reference in innermost enclosing scopes that do not
+  // define a local variable with this name.
+  LocalScope* scope = this->parent();
+  while (scope != NULL && (scope->LocalLookupVariable(name) == NULL)) {
+    scope->referenced_.Add(ref);
+    scope = scope->parent();
+  }
+}
+
+
+intptr_t LocalScope::PreviousReferencePos(const String& name) const {
+  NameReference* ref = FindReference(name);
+  if (ref != NULL) {
+    return ref->token_pos();
+  }
+  return -1;
+}
+
+
 void LocalScope::AllocateContextVariable(LocalVariable* variable,
                                          LocalScope** context_owner) {
   ASSERT(variable->is_captured());
diff --git a/runtime/vm/scopes.h b/runtime/vm/scopes.h
index a8b8d70..9227dea 100644
--- a/runtime/vm/scopes.h
+++ b/runtime/vm/scopes.h
@@ -117,6 +117,21 @@
 };
 
 
+class NameReference : public ZoneAllocated {
+ public:
+  NameReference(intptr_t token_pos, const String& name)
+    : token_pos_(token_pos),
+      name_(name) {
+  }
+  const String& name() const { return name_; }
+  intptr_t token_pos() const { return token_pos_; }
+  void set_token_pos(intptr_t value) { token_pos_ = value; }
+ private:
+  intptr_t token_pos_;
+  const String& name_;
+};
+
+
 class SourceLabel : public ZoneAllocated {
  public:
   enum Kind {
@@ -306,6 +321,12 @@
   // this local scope.
   int NumCapturedVariables() const;
 
+  // Add a reference to the given name into this scope and the enclosing
+  // scopes that do not have a local variable declaration for this name
+  // already.
+  void AddReferencedName(intptr_t token_pos, const String& name);
+  intptr_t PreviousReferencePos(const String& name) const;
+
   // Allocate both captured and non-captured variables declared in this scope
   // and in its children scopes of the same function level. Allocating means
   // assigning a frame slot index or a context slot index.
@@ -354,6 +375,8 @@
 
   void CollectLocalVariables(GrowableArray<VarDesc>* vars, int16_t* scope_id);
 
+  NameReference* FindReference(const String& name) const;
+
   static const int kUnitializedContextLevel = INT_MIN;
   LocalScope* parent_;
   LocalScope* child_;
@@ -367,6 +390,10 @@
   GrowableArray<LocalVariable*> variables_;
   GrowableArray<SourceLabel*> labels_;
 
+  // List of names referenced in this scope and its children that
+  // are not resolved to local variables.
+  GrowableArray<NameReference*> referenced_;
+
   DISALLOW_COPY_AND_ASSIGN(LocalScope);
 };
 
diff --git a/runtime/vm/snapshot.cc b/runtime/vm/snapshot.cc
index 5584104..c05a8fa 100644
--- a/runtime/vm/snapshot.cc
+++ b/runtime/vm/snapshot.cc
@@ -32,7 +32,7 @@
 static bool IsObjectStoreClassId(intptr_t class_id) {
   // Check if this is a class which is stored in the object store.
   return (class_id == kObjectCid ||
-          (class_id >= kInstanceCid && class_id <= kUint32x4Cid) ||
+          (class_id >= kInstanceCid && class_id <= kInt32x4Cid) ||
           class_id == kArrayCid ||
           class_id == kImmutableArrayCid ||
           RawObject::IsStringClassId(class_id) ||
@@ -622,13 +622,13 @@
 }
 
 
-RawUint32x4* SnapshotReader::NewUint32x4(uint32_t v0, uint32_t v1, uint32_t v2,
+RawInt32x4* SnapshotReader::NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2,
                                          uint32_t v3) {
   ASSERT(kind_ == Snapshot::kFull);
   ASSERT(isolate()->no_gc_scope_depth() != 0);
-  cls_ = object_store()->uint32x4_class();
-  RawUint32x4* obj = reinterpret_cast<RawUint32x4*>(
-      AllocateUninitialized(cls_, Uint32x4::InstanceSize()));
+  cls_ = object_store()->int32x4_class();
+  RawInt32x4* obj = reinterpret_cast<RawInt32x4*>(
+      AllocateUninitialized(cls_, Int32x4::InstanceSize()));
   obj->ptr()->value_[0] = v0;
   obj->ptr()->value_[1] = v1;
   obj->ptr()->value_[2] = v2;
@@ -790,30 +790,39 @@
       ASSERT(!cls_.IsNull());
       instance_size = cls_.instance_size();
     }
-    intptr_t offset = Object::InstanceSize();
+    intptr_t next_field_offset = cls_.next_field_offset();
+    intptr_t type_argument_field_offset = cls_.type_arguments_field_offset();
+    ASSERT(next_field_offset > 0);
+    // Instance::NextFieldOffset() returns the offset of the first field in
+    // a Dart object.
+    intptr_t offset = Instance::NextFieldOffset();
     intptr_t result_cid = result->GetClassId();
-    while (offset < instance_size) {
+    while (offset < next_field_offset) {
       obj_ = ReadObjectRef();
       result->SetFieldAtOffset(offset, obj_);
-      if (kind_ == Snapshot::kMessage) {
+      if ((offset != type_argument_field_offset) &&
+          (kind_ == Snapshot::kMessage)) {
         // TODO(fschneider): Consider hoisting these lookups out of the loop.
         // This would involve creating a handle, since cls_ can't be reused
         // across the call to ReadObjectRef.
         cls_ = isolate()->class_table()->At(result_cid);
         array_ = cls_.OffsetToFieldMap();
         field_ ^= array_.At(offset >> kWordSizeLog2);
-        // Entries can be null because offset can be outside of instance fields
-        // due to rounded allocation size.
-        if (!field_.IsNull()) {
-          ASSERT(field_.Offset() == offset);
-          field_.UpdateGuardedCidAndLength(obj_);
-        }
+        ASSERT(!field_.IsNull());
+        ASSERT(field_.Offset() == offset);
+        field_.UpdateGuardedCidAndLength(obj_);
       }
       // TODO(fschneider): Verify the guarded cid and length for other kinds of
       // snapshot (kFull, kScript) with asserts.
       offset += kWordSize;
     }
     if (kind_ == Snapshot::kFull) {
+      // We create an uninitialized object in the case of full snapshots, so
+      // we need to initialize any remaining padding area with the Null object.
+      while (offset < instance_size) {
+        result->SetFieldAtOffset(offset, Object::null_object());
+        offset += kWordSize;
+      }
       result->SetCreatedFromSnapshot();
     } else if (result->IsCanonical()) {
       *result = result->CheckAndCanonicalize(NULL);
@@ -1387,9 +1396,9 @@
   CheckIfSerializable(cls);
 
   // Object is regular dart instance.
-  intptr_t instance_size =
-      cls->ptr()->instance_size_in_words_ << kWordSizeLog2;
-  ASSERT(instance_size != 0);
+  intptr_t next_field_offset =
+      cls->ptr()->next_field_offset_in_words_ << kWordSizeLog2;
+  ASSERT(next_field_offset > 0);
 
   // Write out the serialization header value for this object.
   WriteInlinedObjectHeader(object_id);
@@ -1404,8 +1413,10 @@
   WriteObjectImpl(cls);
 
   // Write out all the fields for the object.
-  intptr_t offset = Object::InstanceSize();
-  while (offset < instance_size) {
+  // Instance::NextFieldOffset() returns the offset of the first field in
+  // a Dart object.
+  intptr_t offset = Instance::NextFieldOffset();
+  while (offset < next_field_offset) {
     WriteObjectRef(*reinterpret_cast<RawObject**>(
         reinterpret_cast<uword>(raw->ptr()) + offset));
     offset += kWordSize;
diff --git a/runtime/vm/snapshot.h b/runtime/vm/snapshot.h
index ff65e52..4288f1d 100644
--- a/runtime/vm/snapshot.h
+++ b/runtime/vm/snapshot.h
@@ -45,7 +45,7 @@
 class RawFunction;
 class RawGrowableObjectArray;
 class RawFloat32x4;
-class RawUint32x4;
+class RawInt32x4;
 class RawImmutableArray;
 class RawLanguageError;
 class RawLibrary;
@@ -271,7 +271,7 @@
   RawLiteralToken* NewLiteralToken();
   RawGrowableObjectArray* NewGrowableObjectArray();
   RawFloat32x4* NewFloat32x4(float v0, float v1, float v2, float v3);
-  RawUint32x4* NewUint32x4(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3);
+  RawInt32x4* NewInt32x4(uint32_t v0, uint32_t v1, uint32_t v2, uint32_t v3);
   RawApiError* NewApiError();
   RawLanguageError* NewLanguageError();
   RawObject* NewInteger(int64_t value);
diff --git a/runtime/vm/stub_code_arm.cc b/runtime/vm/stub_code_arm.cc
index 768ca07..46dfb04 100644
--- a/runtime/vm/stub_code_arm.cc
+++ b/runtime/vm/stub_code_arm.cc
@@ -1165,13 +1165,13 @@
     if (instance_size < (kInlineInstanceSize * kWordSize)) {
       // Check if the object contains any non-header fields.
       // Small objects are initialized using a consecutive set of writes.
-      for (intptr_t current_offset = sizeof(RawObject);
+      for (intptr_t current_offset = Instance::NextFieldOffset();
            current_offset < instance_size;
            current_offset += kWordSize) {
         __ StoreToOffset(kWord, R0, R2, current_offset);
       }
     } else {
-      __ add(R4, R2, ShifterOperand(sizeof(RawObject)));
+      __ add(R4, R2, ShifterOperand(Instance::NextFieldOffset()));
       // Loop until the whole object is initialized.
       // R0: raw null.
       // R2: new object.
diff --git a/runtime/vm/stub_code_ia32.cc b/runtime/vm/stub_code_ia32.cc
index 5e83dd6..a0cd794 100644
--- a/runtime/vm/stub_code_ia32.cc
+++ b/runtime/vm/stub_code_ia32.cc
@@ -1195,13 +1195,13 @@
     if (instance_size < (kInlineInstanceSize * kWordSize)) {
       // Check if the object contains any non-header fields.
       // Small objects are initialized using a consecutive set of writes.
-      for (intptr_t current_offset = sizeof(RawObject);
+      for (intptr_t current_offset = Instance::NextFieldOffset();
            current_offset < instance_size;
            current_offset += kWordSize) {
         __ movl(Address(EAX, current_offset), raw_null);
       }
     } else {
-      __ leal(ECX, Address(EAX, sizeof(RawObject)));
+      __ leal(ECX, Address(EAX, Instance::NextFieldOffset()));
       // Loop until the whole object is initialized.
       // EAX: new object.
       // EBX: next object start.
diff --git a/runtime/vm/stub_code_mips.cc b/runtime/vm/stub_code_mips.cc
index 4ddc9b0..f4eb818 100644
--- a/runtime/vm/stub_code_mips.cc
+++ b/runtime/vm/stub_code_mips.cc
@@ -1344,13 +1344,13 @@
     if (instance_size < (kInlineInstanceSize * kWordSize)) {
       // Check if the object contains any non-header fields.
       // Small objects are initialized using a consecutive set of writes.
-      for (intptr_t current_offset = sizeof(RawObject);
+      for (intptr_t current_offset = Instance::NextFieldOffset();
            current_offset < instance_size;
            current_offset += kWordSize) {
         __ sw(T7, Address(T2, current_offset));
       }
     } else {
-      __ addiu(T4, T2, Immediate(sizeof(RawObject)));
+      __ addiu(T4, T2, Immediate(Instance::NextFieldOffset()));
       // Loop until the whole object is initialized.
       // T2: new object.
       // T3: next object start.
diff --git a/runtime/vm/stub_code_x64.cc b/runtime/vm/stub_code_x64.cc
index 31abeec..49eec4b 100644
--- a/runtime/vm/stub_code_x64.cc
+++ b/runtime/vm/stub_code_x64.cc
@@ -1187,13 +1187,13 @@
     if (instance_size < (kInlineInstanceSize * kWordSize)) {
       // Check if the object contains any non-header fields.
       // Small objects are initialized using a consecutive set of writes.
-      for (intptr_t current_offset = sizeof(RawObject);
+      for (intptr_t current_offset = Instance::NextFieldOffset();
            current_offset < instance_size;
            current_offset += kWordSize) {
         __ movq(Address(RAX, current_offset), R12);
       }
     } else {
-      __ leaq(RCX, Address(RAX, sizeof(RawObject)));
+      __ leaq(RCX, Address(RAX, Instance::NextFieldOffset()));
       // Loop until the whole object is initialized.
       // RAX: new object.
       // RBX: next object start.
diff --git a/runtime/vm/symbols.h b/runtime/vm/symbols.h
index a9a3095..fbafada 100644
--- a/runtime/vm/symbols.h
+++ b/runtime/vm/symbols.h
@@ -133,9 +133,9 @@
   V(Int, "int")                                                                \
   V(Double, "double")                                                          \
   V(_Float32x4, "_Float32x4")                                                  \
-  V(_Uint32x4, "_Uint32x4")                                                    \
+  V(_Int32x4, "_Int32x4")                                                    \
   V(Float32x4, "Float32x4")                                                    \
-  V(Uint32x4, "Uint32x4")                                                      \
+  V(Int32x4, "Int32x4")                                                      \
   V(Int8List, "Int8List")                                                      \
   V(Int8ListFactory, "Int8List.")                                              \
   V(Uint8List, "Uint8List")                                                    \
@@ -156,8 +156,8 @@
   V(Uint64ListFactory, "Uint64List.")                                          \
   V(Float32x4List, "Float32x4List")                                            \
   V(Float32x4ListFactory, "Float32x4List.")                                    \
-  V(Uint32x4List, "Uint32x4List")                                              \
-  V(Uint32x4ListFactory, "Uint32x4List.")                                      \
+  V(Int32x4List, "Int32x4List")                                              \
+  V(Int32x4ListFactory, "Int32x4List.")                                      \
   V(Float32List, "Float32List")                                                \
   V(Float32ListFactory, "Float32List.")                                        \
   V(Float64List, "Float64List")                                                \
@@ -182,8 +182,8 @@
   V(_Uint64ArrayFactory, "_Uint64Array.")                                      \
   V(_Float32x4Array, "_Float32x4Array")                                        \
   V(_Float32x4ArrayFactory, "_Float32x4Array.")                                \
-  V(_Uint32x4Array, "_Uint32x4Array")                                          \
-  V(_Uint32x4ArrayFactory, "_Uint32x4Array.")                                  \
+  V(_Int32x4Array, "_Int32x4Array")                                          \
+  V(_Int32x4ArrayFactory, "_Int32x4Array.")                                  \
   V(_Float32Array, "_Float32Array")                                            \
   V(_Float32ArrayFactory, "_Float32Array.")                                    \
   V(_Float64Array, "_Float64Array")                                            \
@@ -200,7 +200,7 @@
   V(_Float32ArrayView, "_Float32ArrayView")                                    \
   V(_Float64ArrayView, "_Float64ArrayView")                                    \
   V(_Float32x4ArrayView, "_Float32x4ArrayView")                                \
-  V(_Uint32x4ArrayView, "_Uint32x4ArrayView")                                  \
+  V(_Int32x4ArrayView, "_Int32x4ArrayView")                                  \
   V(_ExternalInt8Array, "_ExternalInt8Array")                                  \
   V(_ExternalUint8Array, "_ExternalUint8Array")                                \
   V(_ExternalUint8ClampedArray, "_ExternalUint8ClampedArray")                  \
@@ -211,7 +211,7 @@
   V(_ExternalInt64Array, "_ExternalInt64Array")                                \
   V(_ExternalUint64Array, "_ExternalUint64Array")                              \
   V(_ExternalFloat32x4Array, "_ExternalFloat32x4Array")                        \
-  V(_ExternalUint32x4Array, "_ExternalUint32x4Array")                          \
+  V(_ExternalInt32x4Array, "_ExternalInt32x4Array")                          \
   V(_ExternalFloat32Array, "_ExternalFloat32Array")                            \
   V(_ExternalFloat64Array, "_ExternalFloat64Array")                            \
   V(ByteData, "ByteData")                                                      \
diff --git a/sdk/lib/_internal/compiler/implementation/compiler.dart b/sdk/lib/_internal/compiler/implementation/compiler.dart
index 067ee88..e0de9ff 100644
--- a/sdk/lib/_internal/compiler/implementation/compiler.dart
+++ b/sdk/lib/_internal/compiler/implementation/compiler.dart
@@ -416,7 +416,9 @@
   LibraryElement jsHelperLibrary;
   LibraryElement interceptorsLibrary;
   LibraryElement foreignLibrary;
+
   LibraryElement mainApp;
+  FunctionElement mainFunction;
 
   /// Initialized when dart:mirrors is loaded.
   LibraryElement mirrorsLibrary;
@@ -1025,7 +1027,7 @@
   void compileLoadedLibraries() {
     Element main = null;
     if (mainApp != null) {
-      main = mainApp.find(MAIN);
+      main = mainApp.findExported(MAIN);
       if (main == null) {
         if (!analyzeOnly) {
           // Allow analyze only of libraries with no main.
@@ -1042,14 +1044,19 @@
               "Use '--analyze-all' to analyze all code in the library."});
         }
       } else {
-        if (!main.isFunction()) {
+        if (main.isErroneous()) {
+          reportFatalError(
+              main,
+              MessageKind.GENERIC,
+              {'text': "Error: Cannot determine which '$MAIN' to use."});
+        } else if (!main.isFunction()) {
           reportFatalError(
               main,
               MessageKind.GENERIC,
               {'text': "Error: '$MAIN' is not a function."});
         }
-        FunctionElement mainMethod = main;
-        FunctionSignature parameters = mainMethod.computeSignature(this);
+        mainFunction = main;
+        FunctionSignature parameters = mainFunction.computeSignature(this);
         if (parameters.parameterCount > 2) {
           int index = 0;
           parameters.forEachParameter((Element parameter) {
@@ -1110,7 +1117,7 @@
     if (hasIsolateSupport()) {
       enqueuer.codegen.addToWorkList(
           isolateHelperLibrary.find(Compiler.START_ROOT_ISOLATE));
-      enqueuer.codegen.registerGetOfStaticFunction(mainApp.find(MAIN));
+      enqueuer.codegen.registerGetOfStaticFunction(main);
     }
     if (enabledNoSuchMethod) {
       backend.enableNoSuchMethod(enqueuer.codegen);
diff --git a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
index 1deab48..be1ffda 100644
--- a/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
+++ b/sdk/lib/_internal/compiler/implementation/dart_backend/placeholder_collector.dart
@@ -163,7 +163,7 @@
   TreeElements treeElements;
 
   LibraryElement get coreLibrary => compiler.coreLibrary;
-  FunctionElement get entryFunction => compiler.mainApp.find(Compiler.MAIN);
+  FunctionElement get entryFunction => compiler.mainFunction;
   DartBackend get backend => compiler.backend;
 
   get currentFunctionScope => functionScopes.putIfAbsent(
diff --git a/sdk/lib/_internal/compiler/implementation/elements/elements.dart b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
index 8af9dfc..f994bf4 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/elements.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/elements.dart
@@ -694,6 +694,7 @@
 
   Element find(String elementName);
   Element findLocal(String elementName);
+  Element findExported(String elementName);
   void forEachExport(f(Element element));
 
   bool hasLibraryName();
diff --git a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
index 56a35e9..1bb6491 100644
--- a/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
+++ b/sdk/lib/_internal/compiler/implementation/elements/modelx.dart
@@ -902,6 +902,14 @@
     return result;
   }
 
+  Element findExported(String elementName) {
+    for (Link link = exports; !link.isEmpty; link = link.tail) {
+      Element element = link.head;
+      if (element.name == elementName) return element;
+    }
+    return null;
+  }
+
   void forEachExport(f(Element element)) {
     exports.forEach((Element e) => f(e));
   }
diff --git a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
index cdceeec..2fb385f 100644
--- a/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_backend/backend.dart
@@ -1109,7 +1109,6 @@
         analyzeTypeArgument(type, argument);
       });
     }
-    // TODO(ngeoffray): Also handle T a (in checked mode).
   }
 
   void registerClassUsingVariableExpression(ClassElement cls) {
diff --git a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
index 6205fed..dd2d293 100644
--- a/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
+++ b/sdk/lib/_internal/compiler/implementation/js_emitter/code_emitter_task.dart
@@ -959,7 +959,7 @@
 
   emitMain(CodeBuffer buffer) {
     if (compiler.isMockCompilation) return;
-    Element main = compiler.mainApp.find(Compiler.MAIN);
+    Element main = compiler.mainFunction;
     String mainCall = null;
     if (compiler.hasIsolateSupport()) {
       Element isolateMain =
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
index 2519c4f..9fc4daf 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/builder.dart
@@ -2024,6 +2024,8 @@
     push(attachPosition(instruction, node));
   }
 
+  HInstruction peek() => stack.last;
+
   HInstruction pop() {
     return stack.removeLast();
   }
@@ -4519,6 +4521,17 @@
     }
   }
 
+  void setRtiIfNeeded(HInstruction object, Node node) {
+    InterfaceType type = elements.getType(node);
+    if (!backend.classNeedsRti(type.element) || type.treatAsRaw) return;
+    List<HInstruction> arguments = <HInstruction>[];
+    for (DartType argument in type.typeArguments) {
+      arguments.add(analyzeTypeArgument(argument));
+    }
+    callSetRuntimeTypeInfo(type.element, arguments, object);
+    compiler.enqueuer.codegen.registerInstantiatedType(type, elements);
+  }
+
   visitLiteralList(LiteralList node) {
     HInstruction instruction;
 
@@ -4534,6 +4547,7 @@
       }
       instruction = buildLiteralList(inputs);
       add(instruction);
+      setRtiIfNeeded(instruction, node);
     }
 
     TypeMask type =
@@ -4736,6 +4750,7 @@
     add(keyValuePairs);
     TypeMask mapType = new TypeMask.nonNullSubtype(backend.mapLiteralClass);
     pushInvokeStatic(node, backend.getMapMaker(), [keyValuePairs], mapType);
+    setRtiIfNeeded(peek(), node);
   }
 
   visitLiteralMapEntry(LiteralMapEntry node) {
diff --git a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
index 6b83cda..c9878c9 100644
--- a/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
+++ b/sdk/lib/_internal/compiler/implementation/ssa/optimize.dart
@@ -1508,14 +1508,14 @@
     HInstruction input = instruction.expression;
     for (HIf ifUser in ifUsers) {
       changeUsesDominatedBy(ifUser.thenBlock, input, convertedType);
-      // TODO(ngeoffray): Also change uses for the else block on a HType
-      // that knows it is not of a specific Type.
+      // TODO(ngeoffray): Also change uses for the else block on a type
+      // that knows it is not of a specific type.
     }
 
     for (HIf ifUser in notIfUsers) {
       changeUsesDominatedBy(ifUser.elseBlock, input, convertedType);
-      // TODO(ngeoffray): Also change uses for the then block on a HType
-      // that knows it is not of a specific Type.
+      // TODO(ngeoffray): Also change uses for the then block on a type
+      // that knows it is not of a specific type.
     }
   }
 }
diff --git a/sdk/lib/_internal/lib/async_patch.dart b/sdk/lib/_internal/lib/async_patch.dart
index 07b1cd2..8d6bb26 100644
--- a/sdk/lib/_internal/lib/async_patch.dart
+++ b/sdk/lib/_internal/lib/async_patch.dart
@@ -35,7 +35,7 @@
 }
 
 // TODO(ahe): This should not only apply to this isolate.
-final _loadedLibraries = <String, Completer<bool>>{};
+final Map<String, Future<bool>> _loadedLibraries = <String, Future<bool>>{};
 
 Future<bool> _load(String libraryName, String uri) {
   // TODO(ahe): Validate libraryName.  Kasper points out that you want
diff --git a/sdk/lib/_internal/lib/isolate_helper.dart b/sdk/lib/_internal/lib/isolate_helper.dart
index bf3caa2..d13871b 100644
--- a/sdk/lib/_internal/lib/isolate_helper.dart
+++ b/sdk/lib/_internal/lib/isolate_helper.dart
@@ -729,7 +729,7 @@
 
   const _NativeJsSendPort(this._receivePort, int isolateId) : super(isolateId);
 
-  void send(var message, [SendPort replyTo]) {
+  void send(var message) {
     _waitForPendingPorts(message, () {
       // Check that the isolate still runs and the port is still open
       final isolate = _globalState.isolates[_isolateId];
@@ -775,7 +775,7 @@
   const _WorkerSendPort(this._workerId, int isolateId, this._receivePortId)
       : super(isolateId);
 
-  void send(var message, [SendPort replyTo]) {
+  void send(var message) {
     _waitForPendingPorts(message, () {
       final workerMessage = _serializeMessage({
           'command': 'message',
@@ -846,9 +846,9 @@
     _idCount++;
   }
 
-  void send(var message, [SendPort replyTo]) {
+  void send(var message) {
     if (_port != null) {
-      _port.send(message, replyTo);
+      _port.send(message);
     } else {
       pending.add(message);
     }
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index c2a2227..0987614 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -9664,6 +9664,11 @@
   @DomName('Element.namespaceUri')
   String get namespaceUri => _namespaceUri;
 
+  /**
+   * The string representation of this element.
+   *
+   * This is equivalent to reading the [localName] property.
+   */
   String toString() => localName;
 
   /**
@@ -11088,10 +11093,26 @@
   @DocsEditable()
   void _removeAttributeNS(String namespaceURI, String localName) native;
 
+  /**
+   * Scrolls the element by a number of lines.
+   *
+   * ## Other resources
+   *
+   * * [scrollByLines]
+   * (http://docs.webplatform.org/wiki/dom/methods/scrollByLines) from WebPlatform.org.
+   */
   @DomName('Element.scrollByLines')
   @DocsEditable()
   void scrollByLines(int lines) native;
 
+  /**
+   * Scrolls the element by a number of pages.
+   *
+   * ## Other resources
+   *
+   * * [scrollByPages]
+   * (http://docs.webplatform.org/wiki/dom/methods/scrollByPages) from WebPlatform.org.
+   */
   @DomName('Element.scrollByPages')
   @DocsEditable()
   void scrollByPages(int pages) native;
@@ -11117,6 +11138,17 @@
   void setAttributeNS(String namespaceURI, String qualifiedName, String value) native;
 
   @JSName('webkitGetRegionFlowRanges')
+  /**
+   * Returns an array of ranges of fragments in the flow.
+   *
+   * ## Other resources
+   *
+   * * [CSS regions and exclusions tutorial]
+   * (http://www.html5rocks.com/en/tutorials/regions/adobe/) from HTML5Rocks.
+   * * [Regions](http://html.adobe.com/webplatform/layout/regions/) from Adobe.
+   * * [CSS regions specification]
+   * (http://www.w3.org/TR/css3-regions/) from W3C.
+   */
   @DomName('Element.webkitGetRegionFlowRanges')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -11128,6 +11160,17 @@
   List<Range> getRegionFlowRanges() native;
 
   @JSName('webkitRequestFullscreen')
+  /**
+   * Displays this element fullscreen.
+   *
+   * ## Other resources
+   *
+   * * [Using the full-screen API]
+   * (http://docs.webplatform.org/wiki/tutorials/using_the_full-screen_api)
+   * tutorial from WebPlatform.org.
+   * * [Fullscreen specification]
+   * (http://www.w3.org/TR/fullscreen/) from W3C.
+   */
   @DomName('Element.webkitRequestFullscreen')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -11137,6 +11180,18 @@
   void requestFullscreen() native;
 
   @JSName('webkitRequestPointerLock')
+  /**
+   * Locks the mouse pointer to this element.
+   *
+   * ## Other resources
+   *
+   * * [Pointer lock and first person shooter controls]
+   * (http://www.html5rocks.com/en/tutorials/pointerlock/intro/) tutorial from
+   * HTML5Rocks.
+   *
+   * * [Pointer lock specification]
+   * (http://www.w3.org/TR/pointerlock/) from W3C.
+   */
   @DomName('Element.webkitRequestPointerLock')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
diff --git a/sdk/lib/html/dartium/html_dartium.dart b/sdk/lib/html/dartium/html_dartium.dart
index 85ca975..bb278e1a 100644
--- a/sdk/lib/html/dartium/html_dartium.dart
+++ b/sdk/lib/html/dartium/html_dartium.dart
@@ -10054,6 +10054,11 @@
   @DomName('Element.namespaceUri')
   String get namespaceUri => _namespaceUri;
 
+  /**
+   * The string representation of this element.
+   *
+   * This is equivalent to reading the [localName] property.
+   */
   String toString() => localName;
 
   /**
@@ -11234,10 +11239,26 @@
   @DocsEditable()
   void _removeAttributeNS(String namespaceURI, String localName) native "Element_removeAttributeNS_Callback";
 
+  /**
+   * Scrolls the element by a number of lines.
+   *
+   * ## Other resources
+   *
+   * * [scrollByLines]
+   * (http://docs.webplatform.org/wiki/dom/methods/scrollByLines) from WebPlatform.org.
+   */
   @DomName('Element.scrollByLines')
   @DocsEditable()
   void scrollByLines(int lines) native "Element_scrollByLines_Callback";
 
+  /**
+   * Scrolls the element by a number of pages.
+   *
+   * ## Other resources
+   *
+   * * [scrollByPages]
+   * (http://docs.webplatform.org/wiki/dom/methods/scrollByPages) from WebPlatform.org.
+   */
   @DomName('Element.scrollByPages')
   @DocsEditable()
   void scrollByPages(int pages) native "Element_scrollByPages_Callback";
@@ -11276,6 +11297,17 @@
   @DocsEditable()
   void setAttributeNS(String namespaceURI, String qualifiedName, String value) native "Element_setAttributeNS_Callback";
 
+  /**
+   * Returns an array of ranges of fragments in the flow.
+   *
+   * ## Other resources
+   *
+   * * [CSS regions and exclusions tutorial]
+   * (http://www.html5rocks.com/en/tutorials/regions/adobe/) from HTML5Rocks.
+   * * [Regions](http://html.adobe.com/webplatform/layout/regions/) from Adobe.
+   * * [CSS regions specification]
+   * (http://www.w3.org/TR/css3-regions/) from W3C.
+   */
   @DomName('Element.webkitGetRegionFlowRanges')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -11290,6 +11322,17 @@
   // http://dev.w3.org/2006/webapi/selectors-api2/#matches
   bool matches(String selectors) native "Element_webkitMatchesSelector_Callback";
 
+  /**
+   * Displays this element fullscreen.
+   *
+   * ## Other resources
+   *
+   * * [Using the full-screen API]
+   * (http://docs.webplatform.org/wiki/tutorials/using_the_full-screen_api)
+   * tutorial from WebPlatform.org.
+   * * [Fullscreen specification]
+   * (http://www.w3.org/TR/fullscreen/) from W3C.
+   */
   @DomName('Element.webkitRequestFullscreen')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
@@ -11298,6 +11341,18 @@
   // https://dvcs.w3.org/hg/fullscreen/raw-file/tip/Overview.html#dom-element-requestfullscreen
   void requestFullscreen() native "Element_webkitRequestFullscreen_Callback";
 
+  /**
+   * Locks the mouse pointer to this element.
+   *
+   * ## Other resources
+   *
+   * * [Pointer lock and first person shooter controls]
+   * (http://www.html5rocks.com/en/tutorials/pointerlock/intro/) tutorial from
+   * HTML5Rocks.
+   *
+   * * [Pointer lock specification]
+   * (http://www.w3.org/TR/pointerlock/) from W3C.
+   */
   @DomName('Element.webkitRequestPointerLock')
   @DocsEditable()
   @SupportedBrowser(SupportedBrowser.CHROME)
diff --git a/sdk/lib/isolate/isolate.dart b/sdk/lib/isolate/isolate.dart
index f7d1aed..6440bc4 100644
--- a/sdk/lib/isolate/isolate.dart
+++ b/sdk/lib/isolate/isolate.dart
@@ -98,10 +98,8 @@
    * is also possible to send object instances (which would be copied in the
    * process). This is currently only supported by the dartvm.  For now, the
    * dart2js compiler only supports the restricted messages described above.
-   *
-   * The second argument [replyTo] is deprecated and its value is ignored.
    */
-  void send(var message, [SendPort replyTo]);
+  void send(var message);
 
   /**
    * Tests whether [other] is a [SendPort] pointing to the same
diff --git a/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart b/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
index e354001..2d0241b 100644
--- a/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
+++ b/sdk/lib/typed_data/dart2js/typed_data_dart2js.dart
@@ -795,9 +795,9 @@
 }
 
 
-class Uint32x4List
-    extends Object with ListMixin<Uint32x4>, FixedLengthListMixin<Uint32x4>
-    implements List<Uint32x4>, TypedData {
+class Int32x4List
+    extends Object with ListMixin<Int32x4>, FixedLengthListMixin<Int32x4>
+    implements List<Int32x4>, TypedData {
 
   final Uint32List _storage;
 
@@ -835,11 +835,11 @@
     return end;
   }
 
-  Uint32x4List(int length) : _storage = new Uint32List(length*4);
+  Int32x4List(int length) : _storage = new Uint32List(length*4);
 
-  Uint32x4List._externalStorage(Uint32List storage) : _storage = storage;
+  Int32x4List._externalStorage(Uint32List storage) : _storage = storage;
 
-  Uint32x4List._slowFromList(List<Uint32x4> list)
+  Int32x4List._slowFromList(List<Int32x4> list)
       : _storage = new Uint32List(list.length * 4) {
     for (int i = 0; i < list.length; i++) {
       var e = list[i];
@@ -850,17 +850,17 @@
     }
   }
 
-  factory Uint32x4List.fromList(List<Uint32x4> list) {
-    if (list is Uint32x4List) {
-      Uint32x4List nativeList = list as Uint32x4List;
-      return new Uint32x4List._externalStorage(
+  factory Int32x4List.fromList(List<Int32x4> list) {
+    if (list is Int32x4List) {
+      Int32x4List nativeList = list as Int32x4List;
+      return new Int32x4List._externalStorage(
           new Uint32List.fromList(nativeList._storage));
     } else {
-      return new Uint32x4List._slowFromList(list);
+      return new Int32x4List._slowFromList(list);
     }
   }
 
-  Uint32x4List.view(ByteBuffer buffer,
+  Int32x4List.view(ByteBuffer buffer,
                      [int byteOffset = 0, int length])
       : _storage = new Uint32List.view(buffer, byteOffset, length);
 
@@ -868,16 +868,16 @@
 
   int get length => _storage.length ~/ 4;
 
-  Uint32x4 operator[](int index) {
+  Int32x4 operator[](int index) {
     _checkIndex(index, length);
     int _x = _storage[(index*4)+0];
     int _y = _storage[(index*4)+1];
     int _z = _storage[(index*4)+2];
     int _w = _storage[(index*4)+3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  void operator[]=(int index, Uint32x4 value) {
+  void operator[]=(int index, Int32x4 value) {
     _checkIndex(index, length);
     _storage[(index*4)+0] = value._storage[0];
     _storage[(index*4)+1] = value._storage[1];
@@ -885,9 +885,9 @@
     _storage[(index*4)+3] = value._storage[3];
   }
 
-  List<Uint32x4> sublist(int start, [int end]) {
+  List<Int32x4> sublist(int start, [int end]) {
     end = _checkSublistArguments(start, end, length);
-    return new Uint32x4List._externalStorage(_storage.sublist(start*4, end*4));
+    return new Int32x4List._externalStorage(_storage.sublist(start*4, end*4));
   }
 }
 
@@ -909,7 +909,7 @@
   }
   Float32x4.zero();
   /// Returns a bit-wise copy of [x] as a Float32x4.
-  Float32x4.fromUint32x4Bits(Uint32x4 x) {
+  Float32x4.fromInt32x4Bits(Int32x4 x) {
     var view = new Float32List.view(x._storage.buffer);
     _storage[0] = view[0];
     _storage[1] = view[1];
@@ -963,72 +963,72 @@
   }
 
   /// Relational less than.
-  Uint32x4 lessThan(Float32x4 other) {
+  Int32x4 lessThan(Float32x4 other) {
     bool _cx = _storage[0] < other._storage[0];
     bool _cy = _storage[1] < other._storage[1];
     bool _cz = _storage[2] < other._storage[2];
     bool _cw = _storage[3] < other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
   }
 
   /// Relational less than or equal.
-  Uint32x4 lessThanOrEqual(Float32x4 other) {
+  Int32x4 lessThanOrEqual(Float32x4 other) {
     bool _cx = _storage[0] <= other._storage[0];
     bool _cy = _storage[1] <= other._storage[1];
     bool _cz = _storage[2] <= other._storage[2];
     bool _cw = _storage[3] <= other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
   }
 
   /// Relational greater than.
-  Uint32x4 greaterThan(Float32x4 other) {
+  Int32x4 greaterThan(Float32x4 other) {
     bool _cx = _storage[0] > other._storage[0];
     bool _cy = _storage[1] > other._storage[1];
     bool _cz = _storage[2] > other._storage[2];
     bool _cw = _storage[3] > other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
   }
 
   /// Relational greater than or equal.
-  Uint32x4 greaterThanOrEqual(Float32x4 other) {
+  Int32x4 greaterThanOrEqual(Float32x4 other) {
     bool _cx = _storage[0] >= other._storage[0];
     bool _cy = _storage[1] >= other._storage[1];
     bool _cz = _storage[2] >= other._storage[2];
     bool _cw = _storage[3] >= other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
   }
 
   /// Relational equal.
-  Uint32x4 equal(Float32x4 other) {
+  Int32x4 equal(Float32x4 other) {
     bool _cx = _storage[0] == other._storage[0];
     bool _cy = _storage[1] == other._storage[1];
     bool _cz = _storage[2] == other._storage[2];
     bool _cw = _storage[3] == other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
   }
 
   /// Relational not-equal.
-  Uint32x4 notEqual(Float32x4 other) {
+  Int32x4 notEqual(Float32x4 other) {
     bool _cx = _storage[0] != other._storage[0];
     bool _cy = _storage[1] != other._storage[1];
     bool _cz = _storage[2] != other._storage[2];
     bool _cw = _storage[3] != other._storage[3];
-    return new Uint32x4(_cx == true ? 0xFFFFFFFF : 0x0,
+    return new Int32x4(_cx == true ? 0xFFFFFFFF : 0x0,
                         _cy == true ? 0xFFFFFFFF : 0x0,
                         _cz == true ? 0xFFFFFFFF : 0x0,
                         _cw == true ? 0xFFFFFFFF : 0x0);
@@ -1472,25 +1472,25 @@
 }
 
 
-class Uint32x4 {
-  final _storage = new Uint32List(4);
+class Int32x4 {
+  final _storage = new Int32List(4);
 
-  Uint32x4(int x, int y, int z, int w) {
+  Int32x4(int x, int y, int z, int w) {
     _storage[0] = x;
     _storage[1] = y;
     _storage[2] = z;
     _storage[3] = w;
   }
 
-  Uint32x4.bool(bool x, bool y, bool z, bool w) {
+  Int32x4.bool(bool x, bool y, bool z, bool w) {
     _storage[0] = x == true ? 0xFFFFFFFF : 0x0;
     _storage[1] = y == true ? 0xFFFFFFFF : 0x0;
     _storage[2] = z == true ? 0xFFFFFFFF : 0x0;
     _storage[3] = w == true ? 0xFFFFFFFF : 0x0;
   }
 
-  /// Returns a bit-wise copy of [x] as a Uint32x4.
-  Uint32x4.fromFloat32x4Bits(Float32x4 x) {
+  /// Returns a bit-wise copy of [x] as a Int32x4.
+  Int32x4.fromFloat32x4Bits(Float32x4 x) {
     var view = new Uint32List.view(x._storage.buffer);
     _storage[0] = view[0];
     _storage[1] = view[1];
@@ -1499,34 +1499,34 @@
   }
 
   /// The bit-wise or operator.
-  Uint32x4 operator|(Uint32x4 other) {
+  Int32x4 operator|(Int32x4 other) {
     int _x = _storage[0] | other._storage[0];
     int _y = _storage[1] | other._storage[1];
     int _z = _storage[2] | other._storage[2];
     int _w = _storage[3] | other._storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
   /// The bit-wise and operator.
-  Uint32x4 operator&(Uint32x4 other) {
+  Int32x4 operator&(Int32x4 other) {
     int _x = _storage[0] & other._storage[0];
     int _y = _storage[1] & other._storage[1];
     int _z = _storage[2] & other._storage[2];
     int _w = _storage[3] & other._storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
   /// The bit-wise xor operator.
-  Uint32x4 operator^(Uint32x4 other) {
+  Int32x4 operator^(Int32x4 other) {
     int _x = _storage[0] ^ other._storage[0];
     int _y = _storage[1] ^ other._storage[1];
     int _z = _storage[2] ^ other._storage[2];
     int _w = _storage[3] ^ other._storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  Uint32x4 operator+(Uint32x4 other) {
-    var r = new Uint32x4(0, 0, 0, 0);
+  Int32x4 operator+(Int32x4 other) {
+    var r = new Int32x4(0, 0, 0, 0);
     r._storage[0] = (_storage[0] + other._storage[0]);
     r._storage[1] = (_storage[1] + other._storage[1]);
     r._storage[2] = (_storage[2] + other._storage[2]);
@@ -1534,8 +1534,8 @@
     return r;
   }
 
-  Uint32x4 operator-(Uint32x4 other) {
-    var r = new Uint32x4(0, 0, 0, 0);
+  Int32x4 operator-(Int32x4 other) {
+    var r = new Int32x4(0, 0, 0, 0);
     r._storage[0] = (_storage[0] - other._storage[0]);
     r._storage[1] = (_storage[1] - other._storage[1]);
     r._storage[2] = (_storage[2] - other._storage[2]);
@@ -1820,7 +1820,7 @@
   static const int WWWW = 0xFF;
 
   /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
-  Uint32x4 shuffle(int mask) {
+  Int32x4 shuffle(int mask) {
     if ((mask < 0) || (mask > 255)) {
       throw new RangeError('mask $mask must be in the range [0..256)');
     }
@@ -1828,13 +1828,13 @@
     int _y = _storage[(mask >> 2) & 0x3];
     int _z = _storage[(mask >> 4) & 0x3];
     int _w = _storage[(mask >> 6) & 0x3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
   /// Shuffle the lane values in [this] and [other]. The returned
-  /// Uint32x4 will have XY lanes from [this] and ZW lanes from [other].
+  /// Int32x4 will have XY lanes from [this] and ZW lanes from [other].
   /// Uses the same [mask] as [shuffle].
-  Uint32x4 shuffleMix(Uint32x4 other, int mask) {
+  Int32x4 shuffleMix(Int32x4 other, int mask) {
     if ((mask < 0) || (mask > 255)) {
       throw new RangeError('mask $mask must be in the range [0..256)');
     }
@@ -1842,43 +1842,43 @@
     int _y = _storage[(mask >> 2) & 0x3];
     int _z = other._storage[(mask >> 4) & 0x3];
     int _w = other._storage[(mask >> 6) & 0x3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new x value.
-  Uint32x4 withX(int x) {
+  /// Returns a new [Int32x4] copied from [this] with a new x value.
+  Int32x4 withX(int x) {
     int _x = x;
     int _y = _storage[1];
     int _z = _storage[2];
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new y value.
-  Uint32x4 withY(int y) {
+  /// Returns a new [Int32x4] copied from [this] with a new y value.
+  Int32x4 withY(int y) {
     int _x = _storage[0];
     int _y = y;
     int _z = _storage[2];
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new z value.
-  Uint32x4 withZ(int z) {
+  /// Returns a new [Int32x4] copied from [this] with a new z value.
+  Int32x4 withZ(int z) {
     int _x = _storage[0];
     int _y = _storage[1];
     int _z = z;
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new w value.
-  Uint32x4 withW(int w) {
+  /// Returns a new [Int32x4] copied from [this] with a new w value.
+  Int32x4 withW(int w) {
     int _x = _storage[0];
     int _y = _storage[1];
     int _z = _storage[2];
     int _w = w;
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
   /// Extracted x value. Returns false for 0, true for any other value.
@@ -1890,48 +1890,48 @@
   /// Extracted w value. Returns false for 0, true for any other value.
   bool get flagW => _storage[3] != 0x0;
 
-  /// Returns a new [Uint32x4] copied from [this] with a new x value.
-  Uint32x4 withFlagX(bool x) {
+  /// Returns a new [Int32x4] copied from [this] with a new x value.
+  Int32x4 withFlagX(bool x) {
     int _x = x == true ? 0xFFFFFFFF : 0x0;
     int _y = _storage[1];
     int _z = _storage[2];
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new y value.
-  Uint32x4 withFlagY(bool y) {
+  /// Returns a new [Int32x4] copied from [this] with a new y value.
+  Int32x4 withFlagY(bool y) {
     int _x = _storage[0];
     int _y = y == true ? 0xFFFFFFFF : 0x0;
     int _z = _storage[2];
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new z value.
-  Uint32x4 withFlagZ(bool z) {
+  /// Returns a new [Int32x4] copied from [this] with a new z value.
+  Int32x4 withFlagZ(bool z) {
     int _x = _storage[0];
     int _y = _storage[1];
     int _z = z == true ? 0xFFFFFFFF : 0x0;
     int _w = _storage[3];
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
-  /// Returns a new [Uint32x4] copied from [this] with a new w value.
-  Uint32x4 withFlagW(bool w) {
+  /// Returns a new [Int32x4] copied from [this] with a new w value.
+  Int32x4 withFlagW(bool w) {
     int _x = _storage[0];
     int _y = _storage[1];
     int _z = _storage[2];
     int _w = w == true ? 0xFFFFFFFF : 0x0;
-    return new Uint32x4(_x, _y, _z, _w);
+    return new Int32x4(_x, _y, _z, _w);
   }
 
   /// Merge [trueValue] and [falseValue] based on [this]' bit mask:
   /// Select bit from [trueValue] when bit in [this] is on.
   /// Select bit from [falseValue] when bit in [this] is off.
   Float32x4 select(Float32x4 trueValue, Float32x4 falseValue) {
-    var trueView = new Uint32List.view(trueValue._storage.buffer);
-    var falseView = new Uint32List.view(falseValue._storage.buffer);
+    var trueView = new Int32List.view(trueValue._storage.buffer);
+    var falseView = new Int32List.view(falseValue._storage.buffer);
     int cmx = _storage[0];
     int cmy = _storage[1];
     int cmz = _storage[2];
@@ -1949,7 +1949,7 @@
     int _z = (cmz & stz) | (~cmz & sfz);
     int _w = (cmw & stw) | (~cmw & sfw);
     var r = new Float32x4(0.0, 0.0, 0.0, 0.0);
-    var rView = new Uint32List.view(r._storage.buffer);
+    var rView = new Int32List.view(r._storage.buffer);
     rView[0] = _x;
     rView[1] = _y;
     rView[2] = _z;
diff --git a/sdk/lib/typed_data/typed_data.dart b/sdk/lib/typed_data/typed_data.dart
index d23d384..4464fea 100644
--- a/sdk/lib/typed_data/typed_data.dart
+++ b/sdk/lib/typed_data/typed_data.dart
@@ -827,26 +827,26 @@
 
 
 /**
- * A fixed-length list of Uint32x4 numbers that is viewable as a
+ * A fixed-length list of Int32x4 numbers that is viewable as a
  * [TypedData]. For long lists, this implementation will be considerably more
  * space- and time-efficient than the default [List] implementation.
  */
-abstract class Uint32x4List implements List<Uint32x4>, TypedData {
+abstract class Int32x4List implements List<Int32x4>, TypedData {
   /**
-   * Creates a [Uint32x4List] of the specified length (in elements),
+   * Creates a [Int32x4List] of the specified length (in elements),
    * all of whose elements are initially zero.
    */
-  external factory Uint32x4List(int length);
+  external factory Int32x4List(int length);
 
   /**
-   * Creates a [Uint32x4List] with the same size as the [elements] list
+   * Creates a [Int32x4List] with the same size as the [elements] list
    * and copies over the elements.
    */
-  external factory Uint32x4List.fromList(List<Uint32x4> elements);
+  external factory Int32x4List.fromList(List<Int32x4> elements);
 
   /**
-   * Creates a [Uint32x4List] _view_ of the specified region in the specified
-   * byte buffer. Changes in the [Uint32x4List] will be visible in the byte
+   * Creates a [Int32x4List] _view_ of the specified region in the specified
+   * byte buffer. Changes in the [Int32x4List] will be visible in the byte
    * buffer and vice versa. If the [offsetInBytes] index of the region is not
    * specified, it defaults to zero (the first byte in the byte buffer).
    * If the length is not specified, it defaults to null, which indicates
@@ -859,7 +859,7 @@
    * Throws [ArgumentError] if [offsetInBytes] is not a multiple of
    * BYTES_PER_ELEMENT.
    */
-  external factory Uint32x4List.view(ByteBuffer buffer,
+  external factory Int32x4List.view(ByteBuffer buffer,
                                       [int offsetInBytes = 0, int length]);
 
   static const int BYTES_PER_ELEMENT = 16;
@@ -875,7 +875,7 @@
   external factory Float32x4(double x, double y, double z, double w);
   external factory Float32x4.splat(double v);
   external factory Float32x4.zero();
-  external factory Float32x4.fromUint32x4Bits(Uint32x4 x);
+  external factory Float32x4.fromInt32x4Bits(Int32x4 x);
 
   /// Addition operator.
   Float32x4 operator+(Float32x4 other);
@@ -889,17 +889,17 @@
   Float32x4 operator/(Float32x4 other);
 
   /// Relational less than.
-  Uint32x4 lessThan(Float32x4 other);
+  Int32x4 lessThan(Float32x4 other);
   /// Relational less than or equal.
-  Uint32x4 lessThanOrEqual(Float32x4 other);
+  Int32x4 lessThanOrEqual(Float32x4 other);
   /// Relational greater than.
-  Uint32x4 greaterThan(Float32x4 other);
+  Int32x4 greaterThan(Float32x4 other);
   /// Relational greater than or equal.
-  Uint32x4 greaterThanOrEqual(Float32x4 other);
+  Int32x4 greaterThanOrEqual(Float32x4 other);
   /// Relational equal.
-  Uint32x4 equal(Float32x4 other);
+  Int32x4 equal(Float32x4 other);
   /// Relational not-equal.
-  Uint32x4 notEqual(Float32x4 other);
+  Int32x4 notEqual(Float32x4 other);
 
   /// Returns a copy of [this] each lane being scaled by [s].
   Float32x4 scale(double s);
@@ -1214,25 +1214,25 @@
 
 
 /**
- * Interface of Dart Uint32x4 and operations.
- * Uint32x4 stores 4 32-bit bit-masks in "lanes".
+ * Interface of Dart Int32x4 and operations.
+ * Int32x4 stores 4 32-bit bit-masks in "lanes".
  * The lanes are "x", "y", "z", and "w" respectively.
  */
-abstract class Uint32x4 {
-  external factory Uint32x4(int x, int y, int z, int w);
-  external factory Uint32x4.bool(bool x, bool y, bool z, bool w);
-  external factory Uint32x4.fromFloat32x4Bits(Float32x4 x);
+abstract class Int32x4 {
+  external factory Int32x4(int x, int y, int z, int w);
+  external factory Int32x4.bool(bool x, bool y, bool z, bool w);
+  external factory Int32x4.fromFloat32x4Bits(Float32x4 x);
 
   /// The bit-wise or operator.
-  Uint32x4 operator|(Uint32x4 other);
+  Int32x4 operator|(Int32x4 other);
   /// The bit-wise and operator.
-  Uint32x4 operator&(Uint32x4 other);
+  Int32x4 operator&(Int32x4 other);
   /// The bit-wise xor operator.
-  Uint32x4 operator^(Uint32x4 other);
+  Int32x4 operator^(Int32x4 other);
   /// Addition operator.
-  Uint32x4 operator+(Uint32x4 other);
+  Int32x4 operator+(Int32x4 other);
   /// Subtraction operator.
-  Uint32x4 operator-(Uint32x4 other);
+  Int32x4 operator-(Int32x4 other);
 
   /// Extract 32-bit mask from x lane.
   int get x;
@@ -1505,21 +1505,21 @@
   static const int WWWW = 0xFF;
 
   /// Shuffle the lane values. [mask] must be one of the 256 shuffle constants.
-  Uint32x4 shuffle(int mask);
+  Int32x4 shuffle(int mask);
 
   /// Shuffle the lane values in [this] and [other]. The returned
-  /// Uint32x4 will have XY lanes from [this] and ZW lanes from [other].
+  /// Int32x4 will have XY lanes from [this] and ZW lanes from [other].
   /// Uses the same [mask] as [shuffle].
-  Uint32x4 shuffleMix(Uint32x4 other, int mask);
+  Int32x4 shuffleMix(Int32x4 other, int mask);
 
-  /// Returns a new [Uint32x4] copied from [this] with a new x value.
-  Uint32x4 withX(int x);
-  /// Returns a new [Uint32x4] copied from [this] with a new y value.
-  Uint32x4 withY(int y);
-  /// Returns a new [Uint32x4] copied from [this] with a new z value.
-  Uint32x4 withZ(int z);
-  /// Returns a new [Uint32x4] copied from [this] with a new w value.
-  Uint32x4 withW(int w);
+  /// Returns a new [Int32x4] copied from [this] with a new x value.
+  Int32x4 withX(int x);
+  /// Returns a new [Int32x4] copied from [this] with a new y value.
+  Int32x4 withY(int y);
+  /// Returns a new [Int32x4] copied from [this] with a new z value.
+  Int32x4 withZ(int z);
+  /// Returns a new [Int32x4] copied from [this] with a new w value.
+  Int32x4 withW(int w);
 
   /// Extracted x value. Returns false for 0, true for any other value.
   bool get flagX;
@@ -1530,14 +1530,14 @@
   /// Extracted w value. Returns false for 0, true for any other value.
   bool get flagW;
 
-  /// Returns a new [Uint32x4] copied from [this] with a new x value.
-  Uint32x4 withFlagX(bool x);
-  /// Returns a new [Uint32x4] copied from [this] with a new y value.
-  Uint32x4 withFlagY(bool y);
-  /// Returns a new [Uint32x4] copied from [this] with a new z value.
-  Uint32x4 withFlagZ(bool z);
-  /// Returns a new [Uint32x4] copied from [this] with a new w value.
-  Uint32x4 withFlagW(bool w);
+  /// Returns a new [Int32x4] copied from [this] with a new x value.
+  Int32x4 withFlagX(bool x);
+  /// Returns a new [Int32x4] copied from [this] with a new y value.
+  Int32x4 withFlagY(bool y);
+  /// Returns a new [Int32x4] copied from [this] with a new z value.
+  Int32x4 withFlagZ(bool z);
+  /// Returns a new [Int32x4] copied from [this] with a new w value.
+  Int32x4 withFlagW(bool w);
 
   /// Merge [trueValue] and [falseValue] based on [this]' bit mask:
   /// Select bit from [trueValue] when bit in [this] is on.
diff --git a/tests/co19/co19-analyzer.status b/tests/co19/co19-analyzer.status
index 35f46d2..d45b668 100644
--- a/tests/co19/co19-analyzer.status
+++ b/tests/co19/co19-analyzer.status
@@ -28,11 +28,7 @@
 Language/07_Classes/1_Instance_Methods_A07_t02: MissingStaticWarning
 
 # TBF: Static members should not be accessible via subclasses.
-Language/07_Classes/7_Static_Methods_A01_t03: MissingStaticWarning
 Language/07_Classes/9_Superclasses/1_Inheritance_and_Overriding_A01_t05: MissingStaticWarning
-Language/08_Interfaces/5_Superinterfaces/1_Inheritance_and_Overriding_A01_t02: MissingStaticWarning
-
-
 
 # co19 issue #442, undefined name "Expect"
 Language/15_Types/4_Interface_Types_A08_t03: fail, OK
@@ -262,8 +258,6 @@
 Language/12_Expressions/04_Booleans/1_Boolean_Conversion_A01_t02: MissingStaticWarning
 
 Language/12_Expressions/15_Method_Invocation/2_Cascaded_Invocation_A01_t19: MissingStaticWarning
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A03_t02: MissingStaticWarning
-Language/12_Expressions/15_Method_Invocation/3_Static_Invocation_A04_t09: MissingStaticWarning
 Language/12_Expressions/19_Conditional_A01_t14: MissingStaticWarning
 Language/12_Expressions/20_Logical_Boolean_Expressions_A01_t10: MissingStaticWarning
 Language/12_Expressions/20_Logical_Boolean_Expressions_A01_t11: MissingStaticWarning
@@ -295,9 +289,19 @@
 Language/05_Variables/05_Variables_A06_t01: MissingCompileTimeError # co19-roll r651: Please triage this failure
 Language/05_Variables/05_Variables_A06_t02: MissingCompileTimeError # co19-roll r651: Please triage this failure
 Language/05_Variables/05_Variables_A06_t03: MissingCompileTimeError # co19-roll r651: Please triage this failure
-Language/07_Classes/8_Static_Variables_A01_t01: MissingStaticWarning # co19-roll r651: Please triage this failure
 Language/12_Expressions/01_Constants_A20_t04: CompileTimeError # co19-roll r651: Please triage this failure
 Language/12_Expressions/04_Booleans/1_Boolean_Conversion_A01_t03: MissingStaticWarning # co19-roll r651: Please triage this failure
 Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t13: CompileTimeError # co19-roll r651: Please triage this failure
 Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t17: MissingCompileTimeError # co19-roll r651: Please triage this failure
 Language/12_Expressions/14_Function_Invocation/3_Unqualified_Invocation_A01_t18: MissingCompileTimeError # co19-roll r651: Please triage this failure
+
+# co19 issue 656
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
diff --git a/tests/co19/co19-co19.status b/tests/co19/co19-co19.status
index 8a2c9ec..91fe674 100644
--- a/tests/co19/co19-co19.status
+++ b/tests/co19/co19-co19.status
@@ -59,6 +59,7 @@
 Language/07_Classes/6_Constructors/3_Constant_Constructors_A05_t04: fail, pass, ok # co19 issue 634
 Language/12_Expressions/12_Instance_Creation/2_Const_A09_t02: fail, pass, ok # co19 issue 634
 Language/12_Expressions/12_Instance_Creation/2_Const_A09_t03: fail, pass, ok # co19 issue 634
+Language/12_Expressions/30_Identifier_Reference_A02_t01: fail, pass, ok # co19 issue 649
 
 Language/05_Variables/05_Variables_A06_t01: fail, pass, ok # co19 issue 624
 Language/05_Variables/05_Variables_A06_t02: fail, pass, ok # co19 issue 624
@@ -68,14 +69,12 @@
 Language/05_Variables/05_Variables_A06_t06: fail, pass, ok # co19 issue 624
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A12_t02: fail # co19-roll r587: Please triage this failure
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A20_t02: fail # co19-roll r587: Please triage this failure
-Language/05_Variables/05_Variables_A11_t01: Fail, MissingCompileTimeError # co19-roll r641: Please triage this failure
 
 # Maybe we should wait until isolate library is sealed before triaging these.
 LibTest/isolate/isolate_api/spawnFunction_A04_t01: fail, timeout # co19-roll r546: Please triage this failure
 LibTest/isolate/isolate_api/streamSpawnFunction_A02_t01: fail, timeout # co19-roll r546: Please triage this failure
 
 Language/12_Expressions/18_Assignment_A04_t09: RuntimeError # co19-roll r607: Please triage this failure
-Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
 LibTest/collection/LinkedList/forEach_A02_t01: RuntimeError # co19-roll r607: Please triage this failure
 LibTest/core/Invocation/namedArguments_A01_t01: RuntimeError # co19-roll r607: Please triage this failure
 LibTest/core/Symbol/Symbol_A01_t04: RuntimeError # co19-roll r607: Please triage this failure
@@ -96,6 +95,8 @@
 
 
 [ $runtime == vm || $runtime == dartium || $compiler == dart2js ]
+Language/14_Libraries_and_Scripts/4_Scripts_A03_t02: FAIL, OK # co19 issue 654
+
 LibTest/math/acos_A01_t01: PASS, FAIL, OK # co19 issue 44
 LibTest/math/asin_A01_t01: PASS, FAIL, OK # co19 issue 44
 LibTest/math/atan_A01_t01: PASS, FAIL, OK # co19 issue 44
diff --git a/tests/co19/co19-dart2dart.status b/tests/co19/co19-dart2dart.status
index b4e5863..4a38fb1 100644
--- a/tests/co19/co19-dart2dart.status
+++ b/tests/co19/co19-dart2dart.status
@@ -10,6 +10,8 @@
 Language/07_Classes/07_Classes_A13_t08: Fail # Missing CT error on member with same name a type parameter
 Language/07_Classes/07_Classes_A13_t09: Fail # Missing CT error on member with same name a type parameter
 
+Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
+
 LibTest/async/Stream/Stream.periodic_A01_t01: Pass, Fail # Issue 12562.
 LibTest/core/Symbol/Symbol_A01_t02: CompileTimeError # co19-roll r607: Please triage this failure
 
@@ -72,6 +74,17 @@
 LibTest/typed_data/Float32x4/withZWInXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXYPairs_A01_t01: Fail # co19 issue 650
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
+
+Language/14_Libraries_and_Scripts/4_Scripts_A03_t02: Fail # co19 issue 654
 
 
 [ $compiler == dart2dart && $system == windows ]
@@ -101,6 +114,7 @@
 Language/03_Overview/1_Scoping_A02_t28: Fail # co19-roll r559: Please triage this failure
 Language/05_Variables/05_Variables_A05_t01: fail # co19-roll r546: Please triage this failure
 Language/05_Variables/05_Variables_A05_t02: fail # co19-roll r546: Please triage this failure
+Language/05_Variables/05_Variables_A11_t01: fail
 Language/07_Classes/1_Instance_Methods_A01_t01: Fail # co19-roll r559: Please triage this failure
 Language/07_Classes/1_Instance_Methods_A01_t02: Fail # co19-roll r559: Please triage this failure
 Language/07_Classes/4_Abstract_Instance_Members_A03_t01: Fail # co19-roll r559: Please triage this failure
diff --git a/tests/co19/co19-dart2js.status b/tests/co19/co19-dart2js.status
index 1a5e702..d7b2a5e 100644
--- a/tests/co19/co19-dart2js.status
+++ b/tests/co19/co19-dart2js.status
@@ -14,6 +14,7 @@
 # Crashes first, please. Then untriaged bugs. There is a section below
 # for co19 bugs.
 [ $compiler == dart2js ]
+Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
 Language/07_Classes/07_Classes_A13_t02: Fail # Missing CT error on member with same name a type parameter
 Language/07_Classes/07_Classes_A13_t03: Fail # Missing CT error on member with same name a type parameter
 Language/07_Classes/07_Classes_A13_t05: Fail # Missing CT error on member with same name a type parameter
@@ -23,6 +24,7 @@
 Language/03_Overview/1_Scoping_A02_t05: CompileTimeError # TODO(ahe): Please triage this failure.
 Language/03_Overview/1_Scoping_A02_t06: CompileTimeError # TODO(ahe): Please triage this failure.
 Language/05_Variables/1_Evaluation_of_Implicit_Variable_Getters_A01_t02: fail # co19-roll r576: Please triage this failure
+Language/05_Variables/05_Variables_A11_t01: fail
 LibTest/core/double/INFINITY_A01_t04: RuntimeError # TODO(ahe): Please triage this failure.
 LibTest/core/double/NEGATIVE_INFINITY_A01_t04: RuntimeError # TODO(ahe): Please triage this failure.
 LibTest/core/List/List_A03_t01: RuntimeError # TODO(kasperl): Please triage this failure.
@@ -58,6 +60,15 @@
 LibTest/typed_data/Float32x4/withZWInXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXYPairs_A01_t01: Fail # co19 issue 650
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
 
 [ $compiler == dart2js && $runtime != ie9 ]
 LibTest/typed_data/ByteData/ByteData_A02_t01: fail # co19-roll r576: Please triage this failure
@@ -513,9 +524,6 @@
 
 [ $compiler == dart2js && $checked ]
 Language/12_Expressions/03_Numbers_A05_t02: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/06_Lists_A09_t01: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/06_Lists_A09_t04: fail # co19-roll r546: Please triage this failure
-Language/12_Expressions/07_Maps_A10_t05: fail # co19-roll r546: Please triage this failure
 Language/12_Expressions/12_Instance_Creation/1_New_A12_t02: fail # co19-roll r546: Please triage this failure
 Language/12_Expressions/19_Conditional_A04_t03: fail # co19-roll r546: Please triage this failure
 Language/12_Expressions/20_Logical_Boolean_Expressions_A03_t01: fail # co19-roll r546: Please triage this failure
diff --git a/tests/co19/co19-dartium.status b/tests/co19/co19-dartium.status
index 5f96286..d816a73 100644
--- a/tests/co19/co19-dartium.status
+++ b/tests/co19/co19-dartium.status
@@ -6,10 +6,10 @@
 *: Skip # running co19 tests on content_shell would make our dartium cycle-times very long
 
 [ $compiler == none && $runtime == dartium ]
+Language/13_Statements/04_Local_Function_Declaration_A04_t01: Fail, MissingCompileTimeError # co19-roll r607: Please triage this failure
 Language/07_Classes/6_Constructors/1_Generative_Constructors_A09_t01: Pass, Fail # Issue 13719: Please triage this failure.
 Language/12_Expressions/12_Spawning_an_Isolate_A01_t01: Fail # Issue 13921
 Language/14_Libraries_and_Scripts/3_Parts_A02_t02: Pass, Timeout # Issue 13719: Please triage this failure.
-Language/14_Libraries_and_Scripts/4_Scripts_A03_t02: Fail # Issue 13719: Please triage this failure.
 Language/14_Libraries_and_Scripts/4_Scripts_A03_t03: Pass # Issue 14478: This should break.
 LibTest/async/Completer/completeError_A02_t01: Pass, Fail # Issue 13719: Please triage this failure.
 LibTest/async/Future/Future_A01_t03: Fail # co19-roll r641: Please triage this failure
diff --git a/tests/co19/co19-runtime.status b/tests/co19/co19-runtime.status
index 48fa47f..fb04972 100644
--- a/tests/co19/co19-runtime.status
+++ b/tests/co19/co19-runtime.status
@@ -61,6 +61,15 @@
 LibTest/typed_data/Float32x4/withZWInXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXY_A01_t01: Fail # co19 issue 650
 LibTest/typed_data/Float32x4/interleaveXYPairs_A01_t01: Fail # co19 issue 650
+LibTest/typed_data/Uint32x4/*: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/Float32x4.fromUint32x4Bits_A01_t02: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/equal_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/notEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/greaterThanOrEqual_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThan_A01_t01: Skip # co19 issue 656
+LibTest/typed_data/Float32x4/lessThanOrEqual_A01_t01: Skip # co19 issue 656
 
 [ $compiler == none && $runtime == vm ]
 LibTest/typed_data/Float32x4/reciprocalSqrt_A01_t01: Pass, Fail # Issue 13398
diff --git a/tests/compiler/dart2js/compiler_helper.dart b/tests/compiler/dart2js/compiler_helper.dart
index 64ef727..30d7484 100644
--- a/tests/compiler/dart2js/compiler_helper.dart
+++ b/tests/compiler/dart2js/compiler_helper.dart
@@ -157,11 +157,7 @@
     case 'subtype': return new types.TypeMask.subtype(element);
     case 'nonNullSubtype': return new types.TypeMask.nonNullSubtype(element);
   }
-  Expect.fail('Unknown HType constructor $how');
-}
-
-ssa.HType findHType(compiler, String name, [String how = 'nonNullExact']) {
-  return new ssa.HType.fromMask(findTypeMask(compiler, name, how), compiler);
+  Expect.fail('Unknown TypeMask constructor $how');
 }
 
 String anyIdentifier = "[a-zA-Z][a-zA-Z0-9]*";
diff --git a/tests/compiler/dart2js/cpa_inference_test.dart b/tests/compiler/dart2js/cpa_inference_test.dart
index 32a90c5..2160670 100644
--- a/tests/compiler/dart2js/cpa_inference_test.dart
+++ b/tests/compiler/dart2js/cpa_inference_test.dart
@@ -1351,9 +1351,9 @@
     final expectedGType = [result.num];
     result.checkNodeHasType('g', expectedGType);
     result.checkNodeHasType('gNull', maybe(expectedGType));
-    final expectedHType = [result.bool];
-    result.checkNodeHasType('h', expectedHType);
-    result.checkNodeHasType('hNull', maybe(expectedHType));
+    final expectedType = [result.bool];
+    result.checkNodeHasType('h', expectedType);
+    result.checkNodeHasType('hNull', maybe(expectedType));
     final expectedIType = [result.base('A'), result.base('B'),
                            result.base('BB'), result.base('C'),
                            result.base('D')];
diff --git a/tests/compiler/dart2js/mock_compiler.dart b/tests/compiler/dart2js/mock_compiler.dart
index 4acd9a2..f028c33 100644
--- a/tests/compiler/dart2js/mock_compiler.dart
+++ b/tests/compiler/dart2js/mock_compiler.dart
@@ -467,6 +467,7 @@
   Uri uri = new Uri(scheme: "source");
   var library = new LibraryElementX(new Script(uri, new MockFile(source)));
   importLibrary(library, compiler.coreLibrary, compiler);
+  library.setExports(<Element>[]);
   return library;
 }
 
diff --git a/tests/compiler/dart2js/type_combination_test.dart b/tests/compiler/dart2js/type_combination_test.dart
index cd09732..ada744d4 100644
--- a/tests/compiler/dart2js/type_combination_test.dart
+++ b/tests/compiler/dart2js/type_combination_test.dart
@@ -374,10 +374,10 @@
 
   rule(jsFixedArray, jsFixedArray, jsFixedArray);
 
-  check(nonPrimitive1, nullType, (type) => type is HBoundedType);
-  check(nonPrimitive2, nullType, (type) => type is HBoundedType);
-  check(nullType, nonPrimitive1, (type) => type.isNullable);
-  check(nullType, nonPrimitive2, (type) => type.isNullable);
+  check(nonPrimitive1, nullType, (type) => type == nonPrimitive1.nullable());
+  check(nonPrimitive2, nullType, (type) => type == nonPrimitive2.nullable());
+  check(nullType, nonPrimitive1, (type) => type == nonPrimitive1.nullable());
+  check(nullType, nonPrimitive2, (type) => type == nonPrimitive2.nullable());
 
   ruleSet.validateCoverage();
 }
diff --git a/tests/compiler/dart2js_extra/runtime_type_isolate.dart b/tests/compiler/dart2js_extra/runtime_type_isolate.dart
index 75815b8..b1b9504 100644
--- a/tests/compiler/dart2js_extra/runtime_type_isolate.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_isolate.dart
@@ -12,5 +12,5 @@
   port.receive((msg, reply) {
     Expect.equals(new Bar().runtimeType.toString(), 'Bar');
   });
-  port.toSendPort().send(null, null);
+  port.sendPort.send(null);
 }
diff --git a/tests/compiler/dart2js_native/dart2js_native.status b/tests/compiler/dart2js_native/dart2js_native.status
index c8e3e7f..439af70 100644
--- a/tests/compiler/dart2js_native/dart2js_native.status
+++ b/tests/compiler/dart2js_native/dart2js_native.status
@@ -10,6 +10,7 @@
 native_no_such_method_exception5_frog_test: Fail  # Issue 9631
 subclassing_super_field_1_test: Fail  # Issue 14096
 subclassing_super_field_2_test: Fail  # Issue 14096
+subclassing_super_call_test: Fail  # Issue 14739
 
 [ $compiler == dart2js && $unminified ]
 fake_thing_test: Fail # Issue 13010
diff --git a/tests/compiler/dart2js_native/subclassing_super_call_test.dart b/tests/compiler/dart2js_native/subclassing_super_call_test.dart
new file mode 100644
index 0000000..ed1157e
--- /dev/null
+++ b/tests/compiler/dart2js_native/subclassing_super_call_test.dart
@@ -0,0 +1,134 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+import 'dart:_foreign_helper' show JS;
+import 'dart:_js_helper' show Creates, setNativeSubclassDispatchRecord;
+import 'dart:_interceptors' show
+    findInterceptorForType, findConstructorForNativeSubclassType;
+
+// Test for super access from classes that extend native classes.
+
+class N1 native "N1" {
+}
+
+class N2 extends N1 native "N2" {
+  N2.init();
+  var text;
+  foo() native;
+}
+
+class AA extends N2 {
+  AA.init() : super.init();
+  var afield;
+  afun() => 'afun:$afield';
+}
+
+class BB extends AA  {
+  BB.init() : super.init();
+
+  get text => super.text;
+  set text(value) => super.text = value;
+  foo() => super.foo();
+
+  get afield => super.afield;
+  set afield(value) => super.afield = value;
+  afun() => super.afun();
+}
+
+BB makeBB() native;
+
+@Creates('=Object')
+getBBPrototype() native;
+
+void setup() native r"""
+function N2() {}
+N2.prototype.foo = function() { return "foo:" + this.text; }
+function BB() {}
+BB.prototype.__proto__ = N2.prototype;
+makeBB = function(){return new BB;};
+
+getBBPrototype = function(){return BB.prototype;};
+""";
+
+var inscrutable;
+
+testSuperOnNative() {
+  BB b1 = makeBB();
+  BB b2 = makeBB();
+
+  var constructor = findConstructorForNativeSubclassType(BB, 'init');
+  Expect.isNotNull(constructor);
+  JS('', '#(#)', constructor, b1);
+  JS('', '#(#)', constructor, b2);
+
+  b1.text = 'one';
+  b2.text = 'two';
+
+  print('b1.text ${inscrutable(b1).text}');
+  print('b2.text ${inscrutable(b2).text}');
+
+  print('b1.foo() ${inscrutable(b1).foo()}');
+  print('b2.foo() ${inscrutable(b2).foo()}');
+
+  Expect.equals('one', b1.text);
+  Expect.equals('two', b1.text);
+
+  Expect.equals('foo:one', b1.foo());
+  Expect.equals('foo:two', b2.foo());
+
+  inscrutable(b1).text = 'three';
+  inscrutable(b2).text = 'four';
+
+  Expect.equals('three', inscrutable(b1).text);
+  Expect.equals('four', inscrutable(b1).text);
+
+  Expect.equals('foo:three', inscrutable(b1).foo());
+  Expect.equals('foo:four', inscrutable(b2).foo());
+}
+
+testSuperOnSubclassOfNative() {
+  BB b1 = makeBB();
+  BB b2 = makeBB();
+
+  var constructor = findConstructorForNativeSubclassType(BB, 'init');
+  Expect.isNotNull(constructor);
+  JS('', '#(#)', constructor, b1);
+  JS('', '#(#)', constructor, b2);
+
+  b1.afield = 'one';
+  b2.afield = 'two';
+
+  print('b1.afield ${inscrutable(b1).afield}');
+  print('b2.afield ${inscrutable(b2).afield}');
+
+  print('b1.afun() ${inscrutable(b1).afun()}');
+  print('b2.afun() ${inscrutable(b2).afun()}');
+
+  Expect.equals('one', b1.afield);
+  Expect.equals('two', b1.afield);
+
+  Expect.equals('afun:one', b1.afun());
+  Expect.equals('afun:two', b2.afun());
+
+
+  inscrutable(b1).afield = 'three';
+  inscrutable(b2).afield = 'four';
+
+  Expect.equals('three', inscrutable(b1).afield);
+  Expect.equals('four', inscrutable(b1).afield);
+
+  Expect.equals('afun:three', inscrutable(b1).afun());
+  Expect.equals('afun:four', inscrutable(b2).afun());
+}
+
+main() {
+  setup();
+  inscrutable = (x) => x;
+
+  setNativeSubclassDispatchRecord(getBBPrototype(), findInterceptorForType(BB));
+
+  testSuperOnNative();
+  testSuperOnSubclassOfNative();
+}
diff --git a/tests/corelib/corelib.status b/tests/corelib/corelib.status
index 90f4ff8..cf4eb74 100644
--- a/tests/corelib/corelib.status
+++ b/tests/corelib/corelib.status
@@ -112,13 +112,11 @@
 map_keys2_test: RuntimeError # Generic types aren't right.
 
 [ $compiler == dart2js ]
-map_values2_test: RuntimeError # Generic types aren't right
+map_values2_test: RuntimeError # Issue 8210
 
 ## Tests failing after merge of experimental library branch.
 [ $compiler == dart2js ]
 # Tests fail due to bug in generics on constants, issue 6827
-iterable_to_list_test: RuntimeError
-iterable_to_set_test: RuntimeError
 
 [ $compiler == dart2dart && $minified ]
 error_stack_trace1_test: Fail # Fails in minified mode, test depends on method names.
diff --git a/tests/html/typed_arrays_simd_test.dart b/tests/html/typed_arrays_simd_test.dart
index f75ad2a..b0e3176 100644
--- a/tests/html/typed_arrays_simd_test.dart
+++ b/tests/html/typed_arrays_simd_test.dart
@@ -37,8 +37,8 @@
 	expect(val2.x, floatEquals(2.0));
 	expect(val2.y, floatEquals(4.0));
 	expect(val2.z, floatEquals(6.0));
-	expect(val2.w, floatEquals(8.0));	
-      }	
+	expect(val2.w, floatEquals(8.0));
+      }
   });
 
   test('test Float32x4List', () {
@@ -68,9 +68,9 @@
       expect(counter.w, floatEquals(21.0));
   });
 
-  test('test Uint32x4', () {
+  test('test Int32x4', () {
       if (Platform.supportsSimd) {
-	final val = new Uint32x4(1, 2, 3, 4);
+	final val = new Int32x4(1, 2, 3, 4);
 	expect(val.x, equals(1));
 	expect(val.y, equals(2));
 	expect(val.z, equals(3));
@@ -79,7 +79,7 @@
 	expect(val2.x, equals(0));
 	expect(val2.y, equals(0));
 	expect(val2.z, equals(0));
-	expect(val2.w, equals(0));	
-      }	
+	expect(val2.w, equals(0));
+      }
   });
 }
diff --git a/tests/isolate/browser/typed_data_message_test.dart b/tests/isolate/browser/typed_data_message_test.dart
index e448390..9432290 100644
--- a/tests/isolate/browser/typed_data_message_test.dart
+++ b/tests/isolate/browser/typed_data_message_test.dart
@@ -66,7 +66,7 @@
     SendPort replyTo = message[1];
     if (data == -1) {
       port.close();
-      replyTo.send(count, null);
+      replyTo.send(count);
     } else {
       // Check if the received object is correct.
       if (count < elements.length) {
@@ -74,7 +74,7 @@
       }
       // Bounce the received object back so that the sender
       // can make sure that the object matches.
-      replyTo.send(data, null);
+      replyTo.send(data);
       count++;
     }
   });
diff --git a/tests/isolate/isolate.status b/tests/isolate/isolate.status
index fa6c738..a31db8c 100644
--- a/tests/isolate/isolate.status
+++ b/tests/isolate/isolate.status
@@ -15,7 +15,7 @@
 isolate2_negative_test: Fail
 isolate_import_negative_test: Fail
 unresolved_ports_test: Pass
-mandel_isolate_test: Fail # issue 14452
+mandel_isolate_test: StaticWarning  # test issue 14782; unittestConfiguration.timeout has only getter in Configuration
 
 [ $compiler == dart2js && $jscl ]
 browser/*: SkipByDesign  # Browser specific tests
@@ -123,11 +123,8 @@
 browser/typed_data_message_test: StaticWarning
 isolate3_negative_test: CompileTimeError
 isolate_import_negative_test: CompileTimeError
-isolate/mint_maker_test: StaticWarning
-isolate/unresolved_ports_test: StaticWarning
-mandel_isolate_stream_test: StaticWarning
-mandel_isolate_test: StaticWarning
 mint_maker_test: StaticWarning
 serialization_test: StaticWarning
-unresolved_ports_test: StaticWarning
+isolate/unresolved_ports_test: StaticWarning
+mandel_isolate_stream_test: StaticWarning
 
diff --git a/tests/isolate/isolate_complex_messages_test.dart b/tests/isolate/isolate_complex_messages_test.dart
index effeffe..3a18ec5 100644
--- a/tests/isolate/isolate_complex_messages_test.dart
+++ b/tests/isolate/isolate_complex_messages_test.dart
@@ -18,12 +18,12 @@
       switch (msg[0]) {
         case "init":
           var remote = msg[1];
-          remote.send(1, null);
-          remote.send("Hello", null);
-          remote.send("World", null);
-          remote.send(const [null, 1, 2, 3, 4], null);
-          remote.send(const [1, 2.0, true, false, 0xffffffffff], null);
-          remote.send(const ["Hello", "World", 0xffffffffff], null);
+          remote.send(1);
+          remote.send("Hello");
+          remote.send("World");
+          remote.send(const [null, 1, 2, 3, 4]);
+          remote.send(const [1, 2.0, true, false, 0xffffffffff]);
+          remote.send(const ["Hello", "World", 0xffffffffff]);
           // Shutdown the LogRunner.
           remote.send(-1);
           break;
diff --git a/tests/language/bailout3_test.dart b/tests/language/bailout3_test.dart
deleted file mode 100644
index ca8441e..0000000
--- a/tests/language/bailout3_test.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "package:expect/expect.dart";
-
-// Test that the return type of a method is being registered for both
-// its bailout and optimized version in dart2js.
-
-var a;
-
-bar() {
-  if (a[0] == 0) {
-    // Force bailout version.
-    bar();
-    // Avoid inlining.
-    throw 0;
-  }
-  for (int i = 0; i < 10; i++) {
-    a[0] = 42;
-  }
-  // This return should say that bar can return an array or unknown.
-  return a;
-}
-
-foo() {
-  if (a[0] == 0) {
-    // Avoid inlining.
-    throw 0;
-  }
-  var a = bar();
-  // This check used to fail because dart2js was assuming [a] was an
-  // array.
-  Expect.equals(1, a.length);
-}
-
-main() {
-  a = new Map();
-  bar();
-  foo();
-}
diff --git a/tests/language/block_scope_test.dart b/tests/language/block_scope_test.dart
deleted file mode 100644
index cc19981..0000000
--- a/tests/language/block_scope_test.dart
+++ /dev/null
@@ -1,72 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import "package:expect/expect.dart";
-
-foo() => 123;
-
-void testShadowingScope1() {
-  var foo = foo();
-  Expect.equals(123, foo);
-}
-
-void testShadowingScope2() {
-  {
-    var foo = foo() + 444;
-    Expect.equals(567, foo);
-  }
-  Expect.equals(123, foo());
-}
-
-void testShadowingCapture1() {
-  var f;
-  {
-    var foo = 888;
-    f = () => foo;
-  }
-  var foo = -888;
-  Expect.equals(888, f());
-}
-
-void testShadowingCapture2() {
-  var f = null;
-  // this one uses a reentrant block
-  for (int i = 0; i < 2; i++) {
-    var foo = i + 888;
-    if (f == null) f = () => foo;
-  }
-  var foo = -888;
-
-  // this could break if it doesn't bind the right "foo"
-  Expect.equals(888, f());
-}
-
-class BlockScopeTest1 {
-  void testShadowingInstanceVar() {
-    if (true) {
-      var foo = foo() + 444;
-      Expect.equals(1221, foo);
-    }
-    Expect.equals(777, foo());
-  }
-  static void testShadowingStatic() {
-    if (true) {
-      var bar = bar() + 444;
-      Expect.equals(1221, bar);
-    }
-    Expect.equals(777, bar());
-  }
-
-  foo() => 777;
-  static bar() => 777;
-}
-
-main() {
-  testShadowingScope1();
-  testShadowingScope2();
-  testShadowingCapture1();
-  testShadowingCapture2();
-  new BlockScopeTest1().testShadowingInstanceVar();
-  BlockScopeTest1.testShadowingStatic();
-}
diff --git a/tests/language/export_ambiguous_main_a.dart b/tests/language/export_ambiguous_main_a.dart
new file mode 100644
index 0000000..4a7b820
--- /dev/null
+++ b/tests/language/export_ambiguous_main_a.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library export_ambiguous_main_a;
+
+main() {
+  print('export_ambiguous_main_a');
+}
diff --git a/tests/language/export_ambiguous_main_b.dart b/tests/language/export_ambiguous_main_b.dart
new file mode 100644
index 0000000..734a620
--- /dev/null
+++ b/tests/language/export_ambiguous_main_b.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library export_ambiguous_main_b;
+
+main() {
+  print('export_ambiguous_main_b');
+}
diff --git a/tests/language/export_ambiguous_main_negative_test.dart b/tests/language/export_ambiguous_main_negative_test.dart
new file mode 100644
index 0000000..6087c67
--- /dev/null
+++ b/tests/language/export_ambiguous_main_negative_test.dart
@@ -0,0 +1,6 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'export_ambiguous_main_a.dart';
+export 'export_ambiguous_main_b.dart';
diff --git a/tests/language/export_double_same_main_test.dart b/tests/language/export_double_same_main_test.dart
new file mode 100644
index 0000000..68ad600
--- /dev/null
+++ b/tests/language/export_double_same_main_test.dart
@@ -0,0 +1,6 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'top_level_entry_test.dart';
+export 'export_main_test.dart' show main;
diff --git a/tests/language/export_main_override_test.dart b/tests/language/export_main_override_test.dart
new file mode 100644
index 0000000..6578288
--- /dev/null
+++ b/tests/language/export_main_override_test.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'top_level_entry_test.dart';
+
+main() {
+  print('export_main_override');
+}
diff --git a/tests/language/export_main_test.dart b/tests/language/export_main_test.dart
new file mode 100644
index 0000000..1e920a7
--- /dev/null
+++ b/tests/language/export_main_test.dart
@@ -0,0 +1,5 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+export 'top_level_entry_test.dart';
diff --git a/tests/language/hello_dart_test.dart b/tests/language/hello_dart_test.dart
index a60a5fa..dac39a4 100644
--- a/tests/language/hello_dart_test.dart
+++ b/tests/language/hello_dart_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 // Simple test program invoked with an option to eagerly
 // compile all code that is loaded in the isolate.
-// VMOptions=--compile_all
+// VMOptions=--compile_all --error-on-bad-type --error-on-bad-override
 
 class HelloDartTest {
   static testMain() {
diff --git a/tests/language/language.status b/tests/language/language.status
index 93c1e4b..fe6ff4e 100644
--- a/tests/language/language.status
+++ b/tests/language/language.status
@@ -48,6 +48,9 @@
 call_test: Fail # Issue 12602
 dynamic_prefix_core_test: Fail # Issue 12478
 
+[ $compiler == none && ($runtime == vm || $runtime == drt || $runtime == dartium) ]
+export_ambiguous_main_negative_test: Fail # Issue 14763
+
 [ $compiler == none && $runtime == drt ]
 mixin_illegal_object_test/01: pass # Issue 10952.
 mixin_illegal_object_test/02: pass # Issue 10952.
diff --git a/tests/language/language_analyzer.status b/tests/language/language_analyzer.status
index bf10504..2b8d307d 100644
--- a/tests/language/language_analyzer.status
+++ b/tests/language/language_analyzer.status
@@ -21,13 +21,15 @@
 method_override7_test/03: Fail # Issue 11496
 method_override8_test/03: Fail # Issue 11496
 
-built_in_identifier_test/none: Fail # Issue 13023
+export_double_same_main_test: Fail # Issue 14772
 
 # Please add new failing tests before this line.
 # Section below is for invalid tests.
 #
 #
 
+ref_before_declaration_test/07: fail # please triage
+ref_before_declaration_test/none: fail # please triage
 
 # test issue 11124, It is warning, not error to don't initialize final field
 field3a_negative_test: Fail # Issue 11124
@@ -134,8 +136,8 @@
 # test issue 13916, Looks as no warning should be in this redirecting factory
 redirecting_factory_infinite_steps_test/01: fail
 
-# test issue  , disallow default values in redirecting factories
-redirecting_factory_default_values_test/none: fail # Issue 14471
+# test issue 14471, has (legitimate) static warning; but not annotated
+redirecting_factory_default_values_test/none: StaticWarning # Test issue 14471; has (legitimate) static warning; but not annotated
 
 # test issue 13956, It is a static type warning if any of the type arguments to k' are not subtypes of the bounds of the corresponding formal type parameters of type.
 default_factory2_test/none: fail
@@ -153,10 +155,6 @@
 # test issue 14228
 black_listed_test/none: fail # test issue 14228, warnings are required but not expected
 
-# test issue 14289
-bailout3_test: fail # test issue 14289
-prefix9_test: fail # test issue 14289
-
 # test issue 14363, "if ((a is B))" has the same effect as "if (a is B)", so no static warning expected
 type_promotion_parameter_test/53: Fail
 
@@ -218,6 +216,7 @@
 dynamic_prefix_core_test: StaticWarning
 empty_block_case_test: StaticWarning
 error_stacktrace_test: StaticWarning
+export_ambiguous_main_negative_test: CompileTimeError
 extend_type_parameter2_negative_test: CompileTimeError
 extend_type_parameter_negative_test: CompileTimeError
 external_test/20: StaticWarning
@@ -313,6 +312,7 @@
 method_override5_test: StaticWarning
 method_override6_test: StaticWarning
 method_override_test: StaticWarning
+mixin_illegal_static_access_test: StaticWarning
 mixin_illegal_syntax_test/13: CompileTimeError
 mixin_typedef_constructor_test: StaticWarning
 mixin_type_parameter2_test: StaticWarning
@@ -392,7 +392,6 @@
 prefix23_test: StaticWarning
 prefix7_negative_test: CompileTimeError
 property_field_override_test: StaticWarning
-redirecting_factory_default_values_test/none: StaticWarning
 redirecting_factory_incompatible_signature_test: StaticWarning
 regress_13494_test: StaticWarning
 return_type_test: StaticWarning
diff --git a/tests/language/language_analyzer2.status b/tests/language/language_analyzer2.status
index 726f14e..5723b00 100644
--- a/tests/language/language_analyzer2.status
+++ b/tests/language/language_analyzer2.status
@@ -23,6 +23,8 @@
 
 built_in_identifier_test/none: Fail # Issue 13023
 
+export_double_same_main_test: Fail # Issue 14772
+
 # Please add new failing tests before this line.
 # Section below is for invalid tests.
 #
@@ -153,10 +155,6 @@
 # test issue 14228
 black_listed_test/none: fail # test issue 14228, warnings are required but not expected
 
-# test issue 14289
-bailout3_test: fail # test issue 14289
-prefix9_test: fail # test issue 14289
-
 # test issue 14363, "if ((a is B))" has the same effect as "if (a is B)", so no static warning expected
 type_promotion_parameter_test/53: Fail
 
@@ -218,6 +216,7 @@
 dynamic_prefix_core_test: StaticWarning
 empty_block_case_test: StaticWarning
 error_stacktrace_test: StaticWarning
+export_ambiguous_main_negative_test: CompileTimeError
 extend_type_parameter2_negative_test: CompileTimeError
 extend_type_parameter_negative_test: CompileTimeError
 external_test/20: StaticWarning
diff --git a/tests/language/language_dart2js.status b/tests/language/language_dart2js.status
index 03368b0..a77739b 100644
--- a/tests/language/language_dart2js.status
+++ b/tests/language/language_dart2js.status
@@ -4,7 +4,6 @@
 
 [ $compiler == dart2js || $compiler == dart2dart ]
 bad_constructor_test/05: CompileTimeError # Issue 13669
-block_scope_test: CompileTimeError # Issue 13204.
 malformed_test/05: MissingCompileTimeError # Issue 12695
 malformed_test/06: MissingCompileTimeError # Issue 12695
 full_stacktrace1_test: Pass, RuntimeError # Issue 12698
@@ -24,6 +23,14 @@
 type_variable_conflict_test/05: Fail # Issue 13702
 type_variable_conflict_test/06: Fail # Issue 13702
 
+ref_before_declaration_test/00: MissingCompileTimeError
+ref_before_declaration_test/01: MissingCompileTimeError
+ref_before_declaration_test/02: MissingCompileTimeError
+ref_before_declaration_test/03: MissingCompileTimeError
+ref_before_declaration_test/04: MissingCompileTimeError
+ref_before_declaration_test/05: MissingCompileTimeError
+ref_before_declaration_test/06: MissingCompileTimeError
+
 # VM specific tests that should not be run by dart2js.
 vm/*: Skip # Issue 12699
 
@@ -130,7 +137,6 @@
 map_literal3_test: CompileTimeError # Issue 12793
 method_override5_test: RuntimeError # Issue 12809
 external_test/13: CompileTimeError # Issue 12887
-instanceof4_test/01: RuntimeError # Issue 12889
 list_literal4_test: RuntimeError # Issue 12890
 map_literal4_test: RuntimeError # Issue 12891
 built_in_identifier_test/01: CompileTimeError # Issue 13022
diff --git a/tests/language/prefix9_test.dart b/tests/language/prefix9_test.dart
deleted file mode 100644
index 6b6bc39..0000000
--- a/tests/language/prefix9_test.dart
+++ /dev/null
@@ -1,26 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-//
-
-import "package:expect/expect.dart";
-
-// Local variables can shadow type parameters and hence should result in an
-// static warning.
-
-class Test<T> {
-  Test.named(T this.fld);
-  T fld;
-}
-
-class Param {
-  Param.named(int this.fld);
-  int fld;
-}
-
-main() {
-  Param test = new Param.named(10);
-  var Param;
-  var i = new Test<Param>.named(test);  // This should be a static warning.
-  Expect.equals(10, i.fld.fld);
-}
diff --git a/tests/language/ref_before_declaration_test.dart b/tests/language/ref_before_declaration_test.dart
new file mode 100644
index 0000000..9ecbac7
--- /dev/null
+++ b/tests/language/ref_before_declaration_test.dart
@@ -0,0 +1,93 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Test compile-time errors for illegal variable declarations if the name
+// has been referenced before the variable is declared.
+
+import 'dart:math' as math;
+
+use(value) => value;
+
+var x = 0;
+final y = 0;
+
+class C {
+  var f;
+  C() : f = 'How do you spell PTSD?';
+
+  void test1() {
+  	use(f);  // Refers to instance field f.
+    var f = 'A shut mouth gathers no foot.';  /// 00: compile-time error
+  }
+
+  void test2() {
+  	void localFunc() {
+      use(f);  // Refers to instance field f.
+  	}
+
+    var f = 'When chemists die, they barium.';  /// 01: compile-time error
+    if (true) {
+      var f = 1; // ok, shadows outer f and instance field f.
+    }
+  }
+
+  void test3() {
+    if (true) {
+      use(x);  // Refers to top-level x.
+      use(y);  // Refers to top-level y.
+    }
+    final x = "I have not yet begun to procrastinate.";  /// 02: compile-time error
+    const y = "Honk if you like peace and quiet!";  /// 03: compile-time error
+  }
+
+  void test4() {
+    void Q() {
+      P();  // Refers to non-existing top-level function P
+    }
+    void P() {  /// 06: compile-time error
+      Q();      /// 06: continued
+    }           /// 06: continued
+
+    Function f = () {x = f;};  /// 07: compile-time error
+  }
+
+  test() {
+    test1();
+    test2();
+    test3();
+    test4();
+  }
+}
+
+void testTypeRef() {
+  String s = 'Can vegetarians eat animal crackers?';
+  var String = "I distinctly remember forgetting that.";  /// 04: compile-time error
+}
+
+void testLibPrefix() {
+  var pie = math.PI;
+  final math = 0;  /// 05: compile-time error
+}
+
+
+void noErrorsExpected() {
+  use(x);
+  for (var x = 0; x < 10; x++) use(x);
+  for (var i = 0; i < 10; i++) var x = 0;
+  if (true) var x = 0;
+  while (false) var x = 0;
+  try { throw "ball"; } catch (x) { use(x); }
+  switch (x) {
+     case 0: var x = 'Does fuzzy logic tickle?';
+  }
+  var int = 007;
+}
+
+void main() {
+  var c = new C();
+  c.test();
+  testTypeRef();
+  testLibPrefix();
+  noErrorsExpected();
+} 
diff --git a/tests/lib/lib.status b/tests/lib/lib.status
index 8244ded..520fa72 100644
--- a/tests/lib/lib.status
+++ b/tests/lib/lib.status
@@ -253,7 +253,6 @@
 mirrors/equality_test/02: StaticWarning # Issue 14524
 mirrors/generic_f_bounded_mixin_application_test: CompileTimeError # Issue 14116
 mirrors/invoke_named_test: StaticWarning # Issue 14522
-mirrors/metadata_allowed_values_test/none: CompileTimeError # Issue 14688
 mirrors/private_symbol_test: StaticWarning # Issue 14524
 mirrors/reflect_class_test: StaticWarning # Issue 14524
 mirrors/type_variable_owner_test: StaticWarning # Issue 14524
diff --git a/tests/lib/typed_data/float32x4_test.dart b/tests/lib/typed_data/float32x4_test.dart
index bc1b164..c7df4a3 100644
--- a/tests/lib/typed_data/float32x4_test.dart
+++ b/tests/lib/typed_data/float32x4_test.dart
@@ -63,39 +63,39 @@
   var n = new Float32x4(2.0, 2.0, 0.001, 0.1);
   var cmp;
   cmp = m.lessThan(n);
-  Expect.equals(0xFFFFFFFF, cmp.x);
+  Expect.equals(-1, cmp.x);
   Expect.equals(0x0, cmp.y);
   Expect.equals(0x0, cmp.z);
-  Expect.equals(0xFFFFFFFF, cmp.w);
+  Expect.equals(-1, cmp.w);
 
   cmp = m.lessThanOrEqual(n);
-  Expect.equals(0xFFFFFFFF, cmp.x);
-  Expect.equals(0xFFFFFFFF, cmp.y);
+  Expect.equals(-1, cmp.x);
+  Expect.equals(-1, cmp.y);
   Expect.equals(0x0, cmp.z);
-  Expect.equals(0xFFFFFFFF, cmp.w);
+  Expect.equals(-1, cmp.w);
 
   cmp = m.equal(n);
   Expect.equals(0x0, cmp.x);
-  Expect.equals(0xFFFFFFFF, cmp.y);
+  Expect.equals(-1, cmp.y);
   Expect.equals(0x0, cmp.z);
   Expect.equals(0x0, cmp.w);
 
   cmp = m.notEqual(n);
-  Expect.equals(0xFFFFFFFF, cmp.x);
+  Expect.equals(-1, cmp.x);
   Expect.equals(0x0, cmp.y);
-  Expect.equals(0xFFFFFFFF, cmp.z);
-  Expect.equals(0xFFFFFFFF, cmp.w);
+  Expect.equals(-1, cmp.z);
+  Expect.equals(-1, cmp.w);
 
   cmp = m.greaterThanOrEqual(n);
   Expect.equals(0x0, cmp.x);
-  Expect.equals(0xFFFFFFFF, cmp.y);
-  Expect.equals(0xFFFFFFFF, cmp.z);
+  Expect.equals(-1, cmp.y);
+  Expect.equals(-1, cmp.z);
   Expect.equals(0x0, cmp.w);
 
   cmp = m.greaterThan(n);
   Expect.equals(0x0, cmp.x);
   Expect.equals(0x0, cmp.y);
-  Expect.equals(0xFFFFFFFF, cmp.z);
+  Expect.equals(-1, cmp.z);
   Expect.equals(0x0, cmp.w);
 }
 
@@ -220,7 +220,7 @@
 }
 
 testSelect() {
-  var m = new Uint32x4.bool(true, true, false, false);
+  var m = new Int32x4.bool(true, true, false, false);
   var t = new Float32x4(1.0, 2.0, 3.0, 4.0);
   var f = new Float32x4(5.0, 6.0, 7.0, 8.0);
   var s = m.select(t, f);
@@ -231,31 +231,31 @@
 }
 
 testConversions() {
-  var m = new Uint32x4(0x3F800000, 0x40000000, 0x40400000, 0x40800000);
-  var n = new Float32x4.fromUint32x4Bits(m);
+  var m = new Int32x4(0x3F800000, 0x40000000, 0x40400000, 0x40800000);
+  var n = new Float32x4.fromInt32x4Bits(m);
   Expect.equals(1.0, n.x);
   Expect.equals(2.0, n.y);
   Expect.equals(3.0, n.z);
   Expect.equals(4.0, n.w);
   n = new Float32x4(5.0, 6.0, 7.0, 8.0);
-  m = new Uint32x4.fromFloat32x4Bits(n);
+  m = new Int32x4.fromFloat32x4Bits(n);
   Expect.equals(0x40A00000, m.x);
   Expect.equals(0x40C00000, m.y);
   Expect.equals(0x40E00000, m.z);
   Expect.equals(0x41000000, m.w);
   // Flip sign using bit-wise operators.
   n = new Float32x4(9.0, 10.0, 11.0, 12.0);
-  m = new Uint32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
-  var nMask = new Uint32x4.fromFloat32x4Bits(n);
+  m = new Int32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
+  var nMask = new Int32x4.fromFloat32x4Bits(n);
   nMask = nMask ^ m; // flip sign.
-  n = new Float32x4.fromUint32x4Bits(nMask);
+  n = new Float32x4.fromInt32x4Bits(nMask);
   Expect.equals(-9.0, n.x);
   Expect.equals(-10.0, n.y);
   Expect.equals(-11.0, n.z);
   Expect.equals(-12.0, n.w);
-  nMask = new Uint32x4.fromFloat32x4Bits(n);
+  nMask = new Int32x4.fromFloat32x4Bits(n);
   nMask = nMask ^ m; // flip sign.
-  n = new Float32x4.fromUint32x4Bits(nMask);
+  n = new Float32x4.fromInt32x4Bits(nMask);
   Expect.equals(9.0, n.x);
   Expect.equals(10.0, n.y);
   Expect.equals(11.0, n.z);
@@ -264,25 +264,25 @@
 
 
 testBitOperators() {
-  var m = new Uint32x4(0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA, 0xAAAAAAAA);
-  var n = new Uint32x4(0x55555555, 0x55555555, 0x55555555, 0x55555555);
-  Expect.equals(0xAAAAAAAA, m.x);
-  Expect.equals(0xAAAAAAAA, m.y);
-  Expect.equals(0xAAAAAAAA, m.z);
-  Expect.equals(0xAAAAAAAA, m.w);
-  Expect.equals(0x55555555, n.x);
-  Expect.equals(0x55555555, n.y);
-  Expect.equals(0x55555555, n.z);
-  Expect.equals(0x55555555, n.w);
+  var m = new Int32x4(0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA, 0xAAAAAAA);
+  var n = new Int32x4(0x5555555, 0x5555555, 0x5555555, 0x5555555);
+  Expect.equals(0xAAAAAAA, m.x);
+  Expect.equals(0xAAAAAAA, m.y);
+  Expect.equals(0xAAAAAAA, m.z);
+  Expect.equals(0xAAAAAAA, m.w);
+  Expect.equals(0x5555555, n.x);
+  Expect.equals(0x5555555, n.y);
+  Expect.equals(0x5555555, n.z);
+  Expect.equals(0x5555555, n.w);
   Expect.equals(true, n.flagX);
   Expect.equals(true, n.flagY);
   Expect.equals(true, n.flagZ);
   Expect.equals(true, n.flagW);
   var o = m|n;  // or
-  Expect.equals(0xFFFFFFFF, o.x);
-  Expect.equals(0xFFFFFFFF, o.y);
-  Expect.equals(0xFFFFFFFF, o.z);
-  Expect.equals(0xFFFFFFFF, o.w);
+  Expect.equals(0xFFFFFFF, o.x);
+  Expect.equals(0xFFFFFFF, o.y);
+  Expect.equals(0xFFFFFFF, o.z);
+  Expect.equals(0xFFFFFFF, o.w);
   Expect.equals(true, o.flagX);
   Expect.equals(true, o.flagY);
   Expect.equals(true, o.flagZ);
@@ -292,14 +292,14 @@
   Expect.equals(0x0, o.y);
   Expect.equals(0x0, o.z);
   Expect.equals(0x0, o.w);
-  n = n.withX(0xAAAAAAAA);
-  n = n.withY(0xAAAAAAAA);
-  n = n.withZ(0xAAAAAAAA);
-  n = n.withW(0xAAAAAAAA);
-  Expect.equals(0xAAAAAAAA, n.x);
-  Expect.equals(0xAAAAAAAA, n.y);
-  Expect.equals(0xAAAAAAAA, n.z);
-  Expect.equals(0xAAAAAAAA, n.w);
+  n = n.withX(0xAAAAAAA);
+  n = n.withY(0xAAAAAAA);
+  n = n.withZ(0xAAAAAAA);
+  n = n.withW(0xAAAAAAA);
+  Expect.equals(0xAAAAAAA, n.x);
+  Expect.equals(0xAAAAAAA, n.y);
+  Expect.equals(0xAAAAAAA, n.z);
+  Expect.equals(0xAAAAAAA, n.w);
   o = m^n;  // xor
   Expect.equals(0x0, o.x);
   Expect.equals(0x0, o.y);
@@ -331,7 +331,7 @@
   Expect.equals(3.0, f.y);
   Expect.equals(2.0, f.z);
   Expect.equals(1.0, f.w);
-  var m = new Uint32x4.bool(false, false, false, false);
+  var m = new Int32x4.bool(false, false, false, false);
   Expect.equals(false, m.flagX);
   Expect.equals(false, m.flagY);
   Expect.equals(false, m.flagZ);
@@ -364,7 +364,7 @@
   Expect.equals(2.0, f.y);
   Expect.equals(3.0, f.z);
   Expect.equals(4.0, f.w);
-  var m = new Uint32x4.bool(false, true, true, false);
+  var m = new Int32x4.bool(false, true, true, false);
   Expect.equals(false, m.flagX);
   Expect.equals(true, m.flagY);
   Expect.equals(true, m.flagZ);
diff --git a/tests/lib/typed_data/float32x4_unbox_regress_test.dart b/tests/lib/typed_data/float32x4_unbox_regress_test.dart
index e179f95..b288fb3 100644
--- a/tests/lib/typed_data/float32x4_unbox_regress_test.dart
+++ b/tests/lib/typed_data/float32x4_unbox_regress_test.dart
@@ -74,7 +74,7 @@
 }
 
 void testComparison(a, b) {
-  Uint32x4 r = a.equal(b);
+  Int32x4 r = a.equal(b);
   Expect.equals(true, r.flagX);
   Expect.equals(false, r.flagY);
   Expect.equals(false, r.flagZ);
diff --git a/tests/lib/typed_data/int32x4_arithmetic_test.dart b/tests/lib/typed_data/int32x4_arithmetic_test.dart
new file mode 100644
index 0000000..37094f8
--- /dev/null
+++ b/tests/lib/typed_data/int32x4_arithmetic_test.dart
@@ -0,0 +1,99 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+// VMOptions=--deoptimization_counter_threshold=1000 --optimization-counter-threshold=10
+
+// Library tag to be able to run in html test framework.
+library uint32x4_arithmetic_test;
+
+import "package:expect/expect.dart";
+import 'dart:typed_data';
+
+testAdd() {
+  var m = new Int32x4(0, 0, 0, 0);
+  var n = new Int32x4(-1, -1, -1, -1);
+  var o = m + n;
+  Expect.equals(-1, o.x);
+  Expect.equals(-1, o.y);
+  Expect.equals(-1, o.z);
+  Expect.equals(-1, o.w);
+
+  m = new Int32x4(0, 0, 0, 0);
+  n = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+  o = m + n;
+  Expect.equals(-1, o.x);
+  Expect.equals(-1, o.y);
+  Expect.equals(-1, o.z);
+  Expect.equals(-1, o.w);
+
+  n = new Int32x4(1, 1, 1, 1);
+  m = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+  o = m + n;
+  Expect.equals(0, o.x);
+  Expect.equals(0, o.y);
+  Expect.equals(0, o.z);
+  Expect.equals(0, o.w);
+
+  n = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+  m = new Int32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
+  o = m + n;
+  Expect.equals(-2, o.x);
+  Expect.equals(-2, o.y);
+  Expect.equals(-2, o.z);
+  Expect.equals(-2, o.w);
+
+  n = new Int32x4(1, 0, 0, 0);
+  m = new Int32x4(2, 0, 0, 0);
+  o = n + m;
+  Expect.equals(3, o.x);
+  Expect.equals(0, o.y);
+  Expect.equals(0, o.z);
+  Expect.equals(0, o.w);
+
+  n = new Int32x4(1, 3, 0, 0);
+  m = new Int32x4(2, 4, 0, 0);
+  o = n + m;
+  Expect.equals(3, o.x);
+  Expect.equals(7, o.y);
+  Expect.equals(0, o.z);
+  Expect.equals(0, o.w);
+
+  n = new Int32x4(1, 3, 5, 0);
+  m = new Int32x4(2, 4, 6, 0);
+  o = n + m;
+  Expect.equals(3, o.x);
+  Expect.equals(7, o.y);
+  Expect.equals(11, o.z);
+  Expect.equals(0, o.w);
+
+  n = new Int32x4(1, 3, 5, 7);
+  m = new Int32x4(-2, -4, -6, -8);
+  o = n + m;
+  Expect.equals(-1, o.x);
+  Expect.equals(-1, o.y);
+  Expect.equals(-1, o.z);
+  Expect.equals(-1, o.w);
+}
+
+testSub() {
+  var m = new Int32x4(0, 0, 0, 0);
+  var n = new Int32x4(1, 1, 1, 1);
+  var o = m - n;
+  Expect.equals(-1, o.x);
+  Expect.equals(-1, o.y);
+  Expect.equals(-1, o.z);
+  Expect.equals(-1, o.w);
+
+  o = n - m;
+  Expect.equals(1, o.x);
+  Expect.equals(1, o.y);
+  Expect.equals(1, o.z);
+  Expect.equals(1, o.w);
+}
+
+main() {
+  for (int i = 0; i < 20; i++) {
+    testAdd();
+    testSub();
+  }
+}
diff --git a/tests/lib/typed_data/uint32x4_list_test.dart b/tests/lib/typed_data/int32x4_list_test.dart
similarity index 87%
rename from tests/lib/typed_data/uint32x4_list_test.dart
rename to tests/lib/typed_data/int32x4_list_test.dart
index b9bae4e..1ee42b6 100644
--- a/tests/lib/typed_data/uint32x4_list_test.dart
+++ b/tests/lib/typed_data/int32x4_list_test.dart
@@ -4,15 +4,15 @@
 // VMOptions=--deoptimization_counter_threshold=1000 --optimization-counter-threshold=10
 
 // Library tag to be able to run in html test framework.
-library uint32x4_list_test;
+library int32x4_list_test;
 
 import 'package:expect/expect.dart';
 import 'dart:typed_data';
 
 testLoadStore(array) {
   Expect.equals(8, array.length);
-  Expect.isTrue(array is List<Uint32x4>);
-  array[0] = new Uint32x4(1, 2, 3, 4);
+  Expect.isTrue(array is List<Int32x4>);
+  array[0] = new Int32x4(1, 2, 3, 4);
   Expect.equals(1, array[0].x);
   Expect.equals(2, array[0].y);
   Expect.equals(3, array[0].z);
@@ -38,8 +38,8 @@
 }
 
 testLoadStoreDeoptDriver() {
-  Uint32x4List list = new Uint32x4List(4);
-  Uint32x4 value = new Uint32x4(1, 2, 3, 4);
+  Int32x4List list = new Int32x4List(4);
+  Int32x4 value = new Int32x4(1, 2, 3, 4);
   for (int i = 0; i < 20; i++) {
     testLoadStoreDeopt(list, 0, value);
   }
@@ -72,15 +72,15 @@
     testLoadStoreDeopt(list, 0, value);
   }
   try {
-    // non-Uint32x4 value.
+    // non-Int32x4 value.
     testLoadStoreDeopt(list, 0, 4.toDouble());
   } catch (_) {}
   for (int i = 0; i < 20; i++) {
     testLoadStoreDeopt(list, 0, value);
   }
   try {
-    // non-Uint32x4List list.
-    testLoadStoreDeopt([new Uint32x4(2, 3, 4, 5)], 0, value);
+    // non-Int32x4List list.
+    testLoadStoreDeopt([new Int32x4(2, 3, 4, 5)], 0, value);
   } catch (_) {}
   for (int i = 0; i < 20; i++) {
     testLoadStoreDeopt(list, 0, value);
@@ -88,7 +88,7 @@
 }
 
 testListZero() {
-  Uint32x4List list = new Uint32x4List(1);
+  Int32x4List list = new Int32x4List(1);
   Expect.equals(0, list[0].x);
   Expect.equals(0, list[0].y);
   Expect.equals(0, list[0].z);
@@ -97,7 +97,7 @@
 
 testView(array) {
   Expect.equals(8, array.length);
-  Expect.isTrue(array is List<Uint32x4>);
+  Expect.isTrue(array is List<Int32x4>);
   Expect.equals(0, array[0].x);
   Expect.equals(1, array[0].y);
   Expect.equals(2, array[0].z);
@@ -110,7 +110,7 @@
 
 testSublist(array) {
   Expect.equals(8, array.length);
-  Expect.isTrue(array is Uint32x4List);
+  Expect.isTrue(array is Int32x4List);
   var a = array.sublist(0, 1);
   Expect.equals(1, a.length);
   Expect.equals(0, a[0].x);
@@ -135,7 +135,7 @@
 main() {
   var list;
 
-  list = new Uint32x4List(8);
+  list = new Int32x4List(8);
   for (int i = 0; i < 20; i++) {
     testLoadStore(list);
   }
@@ -144,7 +144,7 @@
   for (int i = 0; i < uint32List.length; i++) {
     uint32List[i] = i;
   }
-  list = new Uint32x4List.view(uint32List.buffer);
+  list = new Int32x4List.view(uint32List.buffer);
   for (int i = 0; i < 20; i++) {
     testView(list);
   }
diff --git a/tests/lib/typed_data/uint32x4_shuffle_test.dart b/tests/lib/typed_data/int32x4_shuffle_test.dart
similarity index 78%
rename from tests/lib/typed_data/uint32x4_shuffle_test.dart
rename to tests/lib/typed_data/int32x4_shuffle_test.dart
index f3335a8..28e4eeb 100644
--- a/tests/lib/typed_data/uint32x4_shuffle_test.dart
+++ b/tests/lib/typed_data/int32x4_shuffle_test.dart
@@ -10,9 +10,9 @@
 import 'dart:typed_data';
 
 void testShuffle() {
-  var m = new Uint32x4(1, 2, 3, 4);
+  var m = new Int32x4(1, 2, 3, 4);
   var c;
-  c = m.shuffle(Uint32x4.WZYX);
+  c = m.shuffle(Int32x4.WZYX);
   Expect.equals(4, c.x);
   Expect.equals(3, c.y);
   Expect.equals(2, c.z);
@@ -20,7 +20,7 @@
 }
 
 void testShuffleNonConstant(mask) {
-  var m = new Uint32x4(1, 2, 3, 4);
+  var m = new Int32x4(1, 2, 3, 4);
   var c;
   c = m.shuffle(mask);
   if (mask == 1) {
@@ -29,7 +29,7 @@
     Expect.equals(1, c.z);
     Expect.equals(1, c.w);
   } else {
-    Expect.equals(Uint32x4.YYYY + 1, mask);
+    Expect.equals(Int32x4.YYYY + 1, mask);
     Expect.equals(3, c.x);
     Expect.equals(2, c.y);
     Expect.equals(2, c.z);
@@ -38,9 +38,9 @@
 }
 
 void testShuffleMix() {
-  var m = new Uint32x4(1, 2, 3, 4);
-  var n = new Uint32x4(5, 6, 7, 8);
-  var c = m.shuffleMix(n, Uint32x4.XYXY);
+  var m = new Int32x4(1, 2, 3, 4);
+  var n = new Int32x4(5, 6, 7, 8);
+  var c = m.shuffleMix(n, Int32x4.XYXY);
   Expect.equals(1, c.x);
   Expect.equals(2, c.y);
   Expect.equals(5, c.z);
@@ -48,8 +48,8 @@
 }
 
 main() {
-  var xxxx = Uint32x4.XXXX + 1;
-  var yyyy = Uint32x4.YYYY + 1;
+  var xxxx = Int32x4.XXXX + 1;
+  var yyyy = Int32x4.YYYY + 1;
   for (int i = 0; i < 20; i++) {
     testShuffle();
     testShuffleNonConstant(xxxx);
diff --git a/tests/lib/typed_data/uint32x4_sign_mask_test.dart b/tests/lib/typed_data/int32x4_sign_mask_test.dart
similarity index 65%
rename from tests/lib/typed_data/uint32x4_sign_mask_test.dart
rename to tests/lib/typed_data/int32x4_sign_mask_test.dart
index 052d0bf..b4e620e 100644
--- a/tests/lib/typed_data/uint32x4_sign_mask_test.dart
+++ b/tests/lib/typed_data/int32x4_sign_mask_test.dart
@@ -4,45 +4,45 @@
 // VMOptions=--optimization-counter-threshold=10
 
 // Library tag to be able to run in html test framework.
-library uint32x4_sign_mask;
+library int32x4_sign_mask;
 
 import 'dart:typed_data';
 import 'package:expect/expect.dart';
 
 void testImmediates() {
-  var f = new Uint32x4(1, 2, 3, 4);
+  var f = new Int32x4(1, 2, 3, 4);
   var m = f.signMask;
   Expect.equals(0x0, m);
-  f = new Uint32x4(-1, -2, -3, -4);
+  f = new Int32x4(-1, -2, -3, -4);
   m = f.signMask;
   Expect.equals(0xf, m);
-  f = new Uint32x4.bool(true, false, false, false);
+  f = new Int32x4.bool(true, false, false, false);
   m = f.signMask;
   Expect.equals(0x1, m);
-  f = new Uint32x4.bool(false, true, false, false);
+  f = new Int32x4.bool(false, true, false, false);
   m = f.signMask;
   Expect.equals(0x2, m);
-  f = new Uint32x4.bool(false, false, true, false);
+  f = new Int32x4.bool(false, false, true, false);
   m = f.signMask;
   Expect.equals(0x4, m);
-  f = new Uint32x4.bool(false, false, false, true);
+  f = new Int32x4.bool(false, false, false, true);
   m = f.signMask;
   Expect.equals(0x8, m);
 }
 
 void testZero() {
-  var f = new Uint32x4(0, 0, 0, 0);
+  var f = new Int32x4(0, 0, 0, 0);
   var m = f.signMask;
   Expect.equals(0x0, m);
-  f = new Uint32x4(-0, -0, -0, -0);
+  f = new Int32x4(-0, -0, -0, -0);
   m = f.signMask;
   Expect.equals(0x0, m);
 }
 
 void testLogic() {
-  var a = new Uint32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
-  var b = new Uint32x4(0x70000000, 0x70000000, 0x70000000, 0x70000000);
-  var c = new Uint32x4(0xf0000000, 0xf0000000, 0xf0000000, 0xf0000000);
+  var a = new Int32x4(0x80000000, 0x80000000, 0x80000000, 0x80000000);
+  var b = new Int32x4(0x70000000, 0x70000000, 0x70000000, 0x70000000);
+  var c = new Int32x4(0xf0000000, 0xf0000000, 0xf0000000, 0xf0000000);
   var m1 = (a & c).signMask;
   Expect.equals(0xf, m1);
   var m2 = (a & b).signMask;
diff --git a/tests/lib/typed_data/uint32x4_arithmetic_test.dart b/tests/lib/typed_data/uint32x4_arithmetic_test.dart
deleted file mode 100644
index a702082..0000000
--- a/tests/lib/typed_data/uint32x4_arithmetic_test.dart
+++ /dev/null
@@ -1,99 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-// VMOptions=--deoptimization_counter_threshold=1000 --optimization-counter-threshold=10
-
-// Library tag to be able to run in html test framework.
-library uint32x4_arithmetic_test;
-
-import "package:expect/expect.dart";
-import 'dart:typed_data';
-
-testAdd() {
-  var m = new Uint32x4(0, 0, 0, 0);
-  var n = new Uint32x4(-1, -1, -1, -1);
-  var o = m + n;
-  Expect.equals(4294967295, o.x);
-  Expect.equals(4294967295, o.y);
-  Expect.equals(4294967295, o.z);
-  Expect.equals(4294967295, o.w);
-
-  m = new Uint32x4(0, 0, 0, 0);
-  n = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
-  o = m + n;
-  Expect.equals(4294967295, o.x);
-  Expect.equals(4294967295, o.y);
-  Expect.equals(4294967295, o.z);
-  Expect.equals(4294967295, o.w);
-
-  n = new Uint32x4(1, 1, 1, 1);
-  m = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
-  o = m + n;
-  Expect.equals(0, o.x);
-  Expect.equals(0, o.y);
-  Expect.equals(0, o.z);
-  Expect.equals(0, o.w);
-
-  n = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
-  m = new Uint32x4(0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF);
-  o = m + n;
-  Expect.equals(4294967294, o.x);
-  Expect.equals(4294967294, o.y);
-  Expect.equals(4294967294, o.z);
-  Expect.equals(4294967294, o.w);
-
-  n = new Uint32x4(1, 0, 0, 0);
-  m = new Uint32x4(2, 0, 0, 0);
-  o = n + m;
-  Expect.equals(3, o.x);
-  Expect.equals(0, o.y);
-  Expect.equals(0, o.z);
-  Expect.equals(0, o.w);
-
-  n = new Uint32x4(1, 3, 0, 0);
-  m = new Uint32x4(2, 4, 0, 0);
-  o = n + m;
-  Expect.equals(3, o.x);
-  Expect.equals(7, o.y);
-  Expect.equals(0, o.z);
-  Expect.equals(0, o.w);
-
-  n = new Uint32x4(1, 3, 5, 0);
-  m = new Uint32x4(2, 4, 6, 0);
-  o = n + m;
-  Expect.equals(3, o.x);
-  Expect.equals(7, o.y);
-  Expect.equals(11, o.z);
-  Expect.equals(0, o.w);
-
-  n = new Uint32x4(1, 3, 5, 7);
-  m = new Uint32x4(2, 4, 6, 8);
-  o = n + m;
-  Expect.equals(3, o.x);
-  Expect.equals(7, o.y);
-  Expect.equals(11, o.z);
-  Expect.equals(15, o.w);
-}
-
-testSub() {
-  var m = new Uint32x4(0, 0, 0, 0);
-  var n = new Uint32x4(1, 1, 1, 1);
-  var o = m - n;
-  Expect.equals(4294967295, o.x);
-  Expect.equals(4294967295, o.y);
-  Expect.equals(4294967295, o.z);
-  Expect.equals(4294967295, o.w);
-
-  o = n - m;
-  Expect.equals(1, o.x);
-  Expect.equals(1, o.y);
-  Expect.equals(1, o.z);
-  Expect.equals(1, o.w);
-}
-
-main() {
-  for (int i = 0; i < 20; i++) {
-    testAdd();
-    testSub();
-  }
-}
diff --git a/tests/standalone/io/http_advanced_test.dart b/tests/standalone/io/http_advanced_test.dart
index 63a3be8..1c42e5e 100644
--- a/tests/standalone/io/http_advanced_test.dart
+++ b/tests/standalone/io/http_advanced_test.dart
@@ -219,16 +219,15 @@
         HttpServer.bind("127.0.0.1", 0).then((server) {
           _server = server;
           _server.listen(_requestReceivedHandler);
-          replyTo.send(new IsolatedHttpServerStatus.started(_server.port),
-                       null);
+          replyTo.send(new IsolatedHttpServerStatus.started(_server.port));
         });
       } catch (e) {
-        replyTo.send(new IsolatedHttpServerStatus.error(), null);
+        replyTo.send(new IsolatedHttpServerStatus.error());
       }
     } else if (command.isStop) {
       _server.close();
       _dispatchPort.close();
-      replyTo.send(new IsolatedHttpServerStatus.stopped(), null);
+      replyTo.send(new IsolatedHttpServerStatus.stopped());
     } else if (command.isChunkedEncoding) {
       _chunkedEncoding = true;
     }
diff --git a/tests/standalone/io/http_basic_test.dart b/tests/standalone/io/http_basic_test.dart
index 2d7eebd..f30a32b 100644
--- a/tests/standalone/io/http_basic_test.dart
+++ b/tests/standalone/io/http_basic_test.dart
@@ -170,15 +170,15 @@
         HttpServer.bind("127.0.0.1", 0).then((server) {
           _server = server;
           _server.listen(_requestReceivedHandler);
-          replyTo.send(new TestServerStatus.started(_server.port), null);
+          replyTo.send(new TestServerStatus.started(_server.port));
         });
       } catch (e) {
-        replyTo.send(new TestServerStatus.error(), null);
+        replyTo.send(new TestServerStatus.error());
       }
     } else if (command.isStop) {
       _server.close();
       _dispatchPort.close();
-      replyTo.send(new TestServerStatus.stopped(), null);
+      replyTo.send(new TestServerStatus.stopped());
     } else if (command.isChunkedEncoding) {
       _chunkedEncoding = true;
     }
diff --git a/tests/standalone/io/http_read_test.dart b/tests/standalone/io/http_read_test.dart
index 2a0ad52..23e40ab 100644
--- a/tests/standalone/io/http_read_test.dart
+++ b/tests/standalone/io/http_read_test.dart
@@ -138,16 +138,15 @@
         HttpServer.bind("127.0.0.1", 0).then((server) {
           _server = server;
           _server.listen(_requestReceivedHandler);
-          replyTo.send(
-              new IsolatedHttpServerStatus.started(_server.port), null);
+          replyTo.send(new IsolatedHttpServerStatus.started(_server.port));
         });
       } catch (e) {
-        replyTo.send(new IsolatedHttpServerStatus.error(), null);
+        replyTo.send(new IsolatedHttpServerStatus.error());
       }
     } else if (command.isStop) {
       _server.close();
       _dispatchPort.close();
-      replyTo.send(new IsolatedHttpServerStatus.stopped(), null);
+      replyTo.send(new IsolatedHttpServerStatus.stopped());
     } else if (command.isChunkedEncoding) {
       _chunkedEncoding = true;
     }
diff --git a/tests/standalone/io/socket_close_test.dart b/tests/standalone/io/socket_close_test.dart
index 475d97a..c00b89f 100644
--- a/tests/standalone/io/socket_close_test.dart
+++ b/tests/standalone/io/socket_close_test.dart
@@ -360,7 +360,7 @@
           },
           onError: errorHandlerServer
         );
-        replyTo.send(_server.port, null);
+        replyTo.send(_server.port);
       });
     } else {
       Timer.run(waitForResult);
diff --git a/tests/standalone/package/package1_test.dart b/tests/standalone/package/package1_test.dart
index 0640511..20afaa0 100644
--- a/tests/standalone/package/package1_test.dart
+++ b/tests/standalone/package/package1_test.dart
@@ -5,4 +5,8 @@
 // PackageRoot=none
 
 library package1_test;
-import 'package:package1.dart';
+import 'package:package1.dart' as p1;
+
+main() {
+  p1.main();
+}
diff --git a/tools/VERSION b/tools/VERSION
index ee5729d..48bb6d6 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -1,4 +1,4 @@
 MAJOR 0
 MINOR 8
 BUILD 10
-PATCH 3
+PATCH 4
diff --git a/tools/dom/docs/docs.json b/tools/dom/docs/docs.json
index 00cf4d1..905fdcb 100644
--- a/tools/dom/docs/docs.json
+++ b/tools/dom/docs/docs.json
@@ -1151,6 +1151,26 @@
           "   * See [EventStreamProvider] for usage information.",
           "   */"
         ],
+        "scrollByLines": [
+          "/**",
+          "   * Scrolls the element by a number of lines.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [scrollByLines]",
+          "   * (http://docs.webplatform.org/wiki/dom/methods/scrollByLines) from WebPlatform.org.",
+          "   */"
+        ],
+        "scrollByPages": [
+          "/**",
+          "   * Scrolls the element by a number of pages.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [scrollByPages]",
+          "   * (http://docs.webplatform.org/wiki/dom/methods/scrollByPages) from WebPlatform.org.",
+          "   */"
+        ],
         "scrollEvent": [
           "/**",
           "   * Static factory designed to expose `scroll` events to event",
@@ -1283,6 +1303,19 @@
           "   * See [EventStreamProvider] for usage information.",
           "   */"
         ],
+        "webkitGetRegionFlowRanges": [
+          "/**",
+          "   * Returns an array of ranges of fragments in the flow.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [CSS regions and exclusions tutorial]",
+          "   * (http://www.html5rocks.com/en/tutorials/regions/adobe/) from HTML5Rocks.",
+          "   * * [Regions](http://html.adobe.com/webplatform/layout/regions/) from Adobe.",
+          "   * * [CSS regions specification]",
+          "   * (http://www.w3.org/TR/css3-regions/) from W3C.",
+          "   */"
+        ],
         "webkitRegionOverset": [
           "/**",
           "   * The current state of this region.",
@@ -1300,6 +1333,33 @@
           "   * * [CSS regions specification]",
           "   * (http://www.w3.org/TR/css3-regions/) from W3C.",
           "   */"
+        ],
+        "webkitRequestFullscreen": [
+          "/**",
+          "   * Displays this element fullscreen.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Using the full-screen API]",
+          "   * (http://docs.webplatform.org/wiki/tutorials/using_the_full-screen_api)",
+          "   * tutorial from WebPlatform.org.",
+          "   * * [Fullscreen specification]",
+          "   * (http://www.w3.org/TR/fullscreen/) from W3C.",
+          "   */"
+        ],
+        "webkitRequestPointerLock": [
+          "/**",
+          "   * Locks the mouse pointer to this element.",
+          "   *",
+          "   * ## Other resources",
+          "   *",
+          "   * * [Pointer lock and first person shooter controls]",
+          "   * (http://www.html5rocks.com/en/tutorials/pointerlock/intro/) tutorial from",
+          "   * HTML5Rocks.",
+          "   *",
+          "   * * [Pointer lock specification]",
+          "   * (http://www.w3.org/TR/pointerlock/) from W3C.",
+          "   */"
         ]
       }
     },
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index 5c52b06..ded2ef0 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -796,6 +796,11 @@
   @DomName('Element.namespaceUri')
   String get namespaceUri => _namespaceUri;
 
+  /**
+   * The string representation of this element.
+   *
+   * This is equivalent to reading the [localName] property.
+   */
   String toString() => localName;
 
   /**